Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/apps.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Hülsmann <fh@cbix.de>2012-04-09 01:50:05 +0400
committerFlorian Hülsmann <fh@cbix.de>2012-04-09 01:50:05 +0400
commite057e949f94dc41607727ebaa665c83b682b7a7c (patch)
treed7620500996d7e0d5c59d5a14132ac9fa2c3bb51 /files_svgedit
parent54ce03b00a81e69323bb99741a54ed755f82f444 (diff)
branch 'appsroot' for cloning into owncloud apps repo
Diffstat (limited to 'files_svgedit')
-rw-r--r--files_svgedit/README34
-rw-r--r--files_svgedit/RELEASE32
-rw-r--r--files_svgedit/ROADMAP13
-rw-r--r--files_svgedit/ajax/save.php78
-rw-r--r--files_svgedit/appinfo/app.php30
-rw-r--r--files_svgedit/appinfo/info.xml10
-rw-r--r--files_svgedit/css/ocsvg.css12
-rw-r--r--files_svgedit/index.php34
-rw-r--r--files_svgedit/js/canvg/MIT-LICENSE.txt22
-rw-r--r--files_svgedit/js/canvg/canvg.js2682
-rw-r--r--files_svgedit/js/canvg/rgbcolor.js288
-rw-r--r--files_svgedit/js/ocsvg.js9
-rw-r--r--files_svgedit/js/ocsvgEditor.js196
-rw-r--r--files_svgedit/js/svg-edit/embedapi.js173
-rw-r--r--files_svgedit/svg-edit/.svn/all-wcprops125
-rw-r--r--files_svgedit/svg-edit/.svn/entries741
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/browser-not-supported.html.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/browser.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/draw.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/embedapi.html.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/embedapi.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/history.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/jquery.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/math.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/path.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/sanitize.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/select.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svg-editor.css.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svg-editor.html.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svg-editor.js.svn-base9
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svg-editor.manifest.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svgcanvas.js.svn-base9
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svgtransformlist.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/svgutils.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/prop-base/units.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/browser-not-supported.html.svn-base27
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/browser.js.svn-base178
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/contextmenu.js.svn-base67
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/draw.js.svn-base528
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/embedapi.html.svn-base56
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/embedapi.js.svn-base173
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/history.js.svn-base601
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/jquery.js.svn-base4
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/math.js.svn-base246
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/path.js.svn-base980
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/sanitize.js.svn-base273
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/select.js.svn-base529
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svg-editor.css.svn-base1419
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svg-editor.html.svn-base790
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svg-editor.js.svn-base4881
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svg-editor.manifest.svn-base121
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svgcanvas.js.svn-base8770
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svgtransformlist.js.svn-base291
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/svgutils.js.svn-base647
-rw-r--r--files_svgedit/svg-edit/.svn/text-base/units.js.svn-base281
-rw-r--r--files_svgedit/svg-edit/browser-not-supported.html27
-rw-r--r--files_svgedit/svg-edit/browser.js178
-rw-r--r--files_svgedit/svg-edit/canvg/.svn/all-wcprops17
-rw-r--r--files_svgedit/svg-edit/canvg/.svn/entries96
-rw-r--r--files_svgedit/svg-edit/canvg/.svn/text-base/canvg.js.svn-base2620
-rw-r--r--files_svgedit/svg-edit/canvg/.svn/text-base/rgbcolor.js.svn-base287
-rw-r--r--files_svgedit/svg-edit/canvg/canvg.js2620
-rw-r--r--files_svgedit/svg-edit/canvg/rgbcolor.js287
-rw-r--r--files_svgedit/svg-edit/contextmenu.js67
-rw-r--r--files_svgedit/svg-edit/contextmenu/.svn/all-wcprops11
-rw-r--r--files_svgedit/svg-edit/contextmenu/.svn/entries62
-rw-r--r--files_svgedit/svg-edit/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base9
-rw-r--r--files_svgedit/svg-edit/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base203
-rwxr-xr-xfiles_svgedit/svg-edit/contextmenu/jquery.contextMenu.js203
-rw-r--r--files_svgedit/svg-edit/draw.js528
-rw-r--r--files_svgedit/svg-edit/embedapi.html56
-rw-r--r--files_svgedit/svg-edit/embedapi.js173
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/all-wcprops143
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/entries816
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/closepath_icons.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/ext-imagelib.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/ext-shapes.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/grid-icon.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/helloworld-icon.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/prop-base/markers-icons.xml.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/closepath_icons.svg.svn-base41
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-arrows.js.svn-base298
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-closepath.js.svn-base92
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-connector.js.svn-base587
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-eyedropper.js.svn-base109
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-foreignobject.js.svn-base277
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-grid.js.svn-base184
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-helloworld.js.svn-base78
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.js.svn-base444
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.xml.svn-base14
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-markers.js.svn-base572
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_moinsave.js.svn-base56
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_opensave.js.svn-base180
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.js.svn-base387
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.xml.svn-base10
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper-icon.xml.svn-base34
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper.png.svn-basebin0 -> 718 bytes
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/fileopen.php.svn-base31
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/filesave.php.svn-base44
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/foreignobject-icons.xml.svn-base96
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/grid-icon.xml.svn-base30
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/helloworld-icon.xml.svn-base21
-rw-r--r--files_svgedit/svg-edit/extensions/.svn/text-base/markers-icons.xml.svn-base115
-rw-r--r--files_svgedit/svg-edit/extensions/closepath_icons.svg41
-rw-r--r--files_svgedit/svg-edit/extensions/ext-arrows.js298
-rw-r--r--files_svgedit/svg-edit/extensions/ext-closepath.js92
-rw-r--r--files_svgedit/svg-edit/extensions/ext-connector.js587
-rw-r--r--files_svgedit/svg-edit/extensions/ext-eyedropper.js109
-rw-r--r--files_svgedit/svg-edit/extensions/ext-foreignobject.js277
-rw-r--r--files_svgedit/svg-edit/extensions/ext-grid.js184
-rw-r--r--files_svgedit/svg-edit/extensions/ext-helloworld.js78
-rw-r--r--files_svgedit/svg-edit/extensions/ext-imagelib.js444
-rw-r--r--files_svgedit/svg-edit/extensions/ext-imagelib.xml14
-rw-r--r--files_svgedit/svg-edit/extensions/ext-markers.js572
-rw-r--r--files_svgedit/svg-edit/extensions/ext-server_moinsave.js56
-rw-r--r--files_svgedit/svg-edit/extensions/ext-server_opensave.js180
-rw-r--r--files_svgedit/svg-edit/extensions/ext-shapes.js387
-rw-r--r--files_svgedit/svg-edit/extensions/ext-shapes.xml10
-rw-r--r--files_svgedit/svg-edit/extensions/eyedropper-icon.xml34
-rw-r--r--files_svgedit/svg-edit/extensions/eyedropper.pngbin0 -> 718 bytes
-rw-r--r--files_svgedit/svg-edit/extensions/fileopen.php31
-rw-r--r--files_svgedit/svg-edit/extensions/filesave.php44
-rw-r--r--files_svgedit/svg-edit/extensions/foreignobject-icons.xml96
-rw-r--r--files_svgedit/svg-edit/extensions/grid-icon.xml30
-rw-r--r--files_svgedit/svg-edit/extensions/helloworld-icon.xml21
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/.svn/all-wcprops17
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/.svn/entries96
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/index.html.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/smiley.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/index.html.svn-base64
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/smiley.svg.svn-base12
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/index.html64
-rw-r--r--files_svgedit/svg-edit/extensions/imagelib/smiley.svg12
-rw-r--r--files_svgedit/svg-edit/extensions/markers-icons.xml115
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/all-wcprops89
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/entries504
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/animal.json.svn-base21
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/arrow.json.svn-base28
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/dialog_balloon.json.svn-base9
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/electronics.json.svn-base20
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/flowchart.json.svn-base25
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/game.json.svn-base13
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/math.json.svn-base9
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/misc.json.svn-base37
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/music.json.svn-base21
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/object.json.svn-base19
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael.txt.svn-base12
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_1.json.svn-base67
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_2.json.svn-base64
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/symbol.json.svn-base28
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/animal.json21
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/arrow.json28
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/dialog_balloon.json9
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/electronics.json20
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/flowchart.json25
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/game.json13
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/math.json9
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/misc.json37
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/music.json21
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/object.json19
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/raphael.txt12
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/raphael_1.json67
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/raphael_2.json64
-rw-r--r--files_svgedit/svg-edit/extensions/shapelib/symbol.json28
-rw-r--r--files_svgedit/svg-edit/history.js601
-rw-r--r--files_svgedit/svg-edit/images/.svn/all-wcprops437
-rw-r--r--files_svgedit/svg-edit/images/.svn/entries2476
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-center.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-center.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-left.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-left.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-middle.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-middle.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-right.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-right.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-top.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/align-top.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/bold.png.svn-base9
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/cancel.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/circle.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/clear.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/clone.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/conn.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/copy.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/cut.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/delete.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/document-properties.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/dropdown.gif.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/ellipse.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/eye.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/fhpath.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/flyouth.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/flyup.gif.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/freehand-circle.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/freehand-square.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/go-down.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/go-up.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/image.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/italic.png.svn-base9
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/line.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/link_controls.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/logo.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/logo.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/move_bottom.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/move_top.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/node_clone.png.svn-base9
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/node_delete.png.svn-base9
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/none.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/open.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/paste.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/path.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/polygon.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/polygon.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/rect.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/redo.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/reorient.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/rotate.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/save.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/select.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/select_node.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/sep.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/shape_group.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/shape_ungroup.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/source.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/spinbtn_updn_big.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/square.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svgz.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/text.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/text.svg.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/to_path.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/undo.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/view-refresh.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/wave.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/wireframe.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/prop-base/zoom.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/README.txt.svn-base61
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-bottom.png.svn-basebin0 -> 291 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-bottom.svg.svn-base277
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-center.png.svn-basebin0 -> 449 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-center.svg.svn-base252
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-left.png.svn-basebin0 -> 305 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-left.svg.svn-base235
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-middle.png.svn-basebin0 -> 459 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-middle.svg.svn-base250
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-right.png.svn-basebin0 -> 339 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-right.svg.svn-base233
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-top.png.svn-basebin0 -> 287 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/align-top.svg.svn-base233
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/bold.png.svn-basebin0 -> 2976 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/cancel.png.svn-basebin0 -> 1389 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/circle.png.svn-basebin0 -> 1040 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/clear.png.svn-basebin0 -> 812 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/clone.png.svn-basebin0 -> 715 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/conn.svg.svn-base29
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/copy.png.svn-basebin0 -> 852 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/cut.png.svn-basebin0 -> 1294 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/delete.png.svn-basebin0 -> 663 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/document-properties.png.svn-basebin0 -> 688 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/dropdown.gif.svn-basebin0 -> 49 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/ellipse.png.svn-basebin0 -> 811 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/eye.png.svn-basebin0 -> 750 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/fhpath.png.svn-basebin0 -> 1218 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/flyouth.png.svn-basebin0 -> 109 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/flyup.gif.svn-basebin0 -> 48 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/freehand-circle.png.svn-basebin0 -> 1257 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/freehand-square.png.svn-basebin0 -> 903 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/go-down.png.svn-basebin0 -> 683 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/go-up.png.svn-basebin0 -> 652 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/image.png.svn-basebin0 -> 900 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/italic.png.svn-basebin0 -> 2972 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/line.png.svn-basebin0 -> 1026 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/link_controls.png.svn-basebin0 -> 919 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/logo.png.svn-basebin0 -> 3983 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/logo.svg.svn-base32
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/move_bottom.png.svn-basebin0 -> 737 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/move_top.png.svn-basebin0 -> 663 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/node_clone.png.svn-basebin0 -> 571 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/node_delete.png.svn-basebin0 -> 589 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/none.png.svn-basebin0 -> 136 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/open.png.svn-basebin0 -> 919 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/paste.png.svn-basebin0 -> 906 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/path.png.svn-basebin0 -> 854 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/polygon.png.svn-basebin0 -> 881 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/polygon.svg.svn-base219
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/rect.png.svn-basebin0 -> 404 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/redo.png.svn-basebin0 -> 921 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/reorient.png.svn-basebin0 -> 980 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/rotate.png.svn-basebin0 -> 1500 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/save.png.svn-basebin0 -> 1272 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/select.png.svn-basebin0 -> 712 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/select_node.png.svn-basebin0 -> 828 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/sep.png.svn-basebin0 -> 93 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/shape_group.png.svn-basebin0 -> 553 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/shape_ungroup.png.svn-basebin0 -> 666 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/source.png.svn-basebin0 -> 1110 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/spinbtn_updn_big.png.svn-basebin0 -> 2049 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/square.png.svn-basebin0 -> 422 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svg.svn-base1034
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svgz.svn-basebin0 -> 5493 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/text.png.svn-basebin0 -> 1032 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/text.svg.svn-base157
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/to_path.png.svn-basebin0 -> 1153 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/undo.png.svn-basebin0 -> 1122 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/view-refresh.png.svn-basebin0 -> 912 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/wave.png.svn-basebin0 -> 2005 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/wireframe.png.svn-basebin0 -> 466 bytes
-rw-r--r--files_svgedit/svg-edit/images/.svn/text-base/zoom.png.svn-basebin0 -> 1197 bytes
-rw-r--r--files_svgedit/svg-edit/images/README.txt61
-rw-r--r--files_svgedit/svg-edit/images/align-bottom.pngbin0 -> 291 bytes
-rw-r--r--files_svgedit/svg-edit/images/align-bottom.svg277
-rw-r--r--files_svgedit/svg-edit/images/align-center.pngbin0 -> 449 bytes
-rw-r--r--files_svgedit/svg-edit/images/align-center.svg252
-rw-r--r--files_svgedit/svg-edit/images/align-left.pngbin0 -> 305 bytes
-rw-r--r--files_svgedit/svg-edit/images/align-left.svg235
-rw-r--r--files_svgedit/svg-edit/images/align-middle.pngbin0 -> 459 bytes
-rw-r--r--files_svgedit/svg-edit/images/align-middle.svg250
-rw-r--r--files_svgedit/svg-edit/images/align-right.pngbin0 -> 339 bytes
-rw-r--r--files_svgedit/svg-edit/images/align-right.svg233
-rw-r--r--files_svgedit/svg-edit/images/align-top.pngbin0 -> 287 bytes
-rw-r--r--files_svgedit/svg-edit/images/align-top.svg233
-rw-r--r--files_svgedit/svg-edit/images/bold.pngbin0 -> 2976 bytes
-rw-r--r--files_svgedit/svg-edit/images/cancel.pngbin0 -> 1389 bytes
-rw-r--r--files_svgedit/svg-edit/images/circle.pngbin0 -> 1040 bytes
-rw-r--r--files_svgedit/svg-edit/images/clear.pngbin0 -> 812 bytes
-rw-r--r--files_svgedit/svg-edit/images/clone.pngbin0 -> 715 bytes
-rw-r--r--files_svgedit/svg-edit/images/conn.svg29
-rw-r--r--files_svgedit/svg-edit/images/copy.pngbin0 -> 852 bytes
-rw-r--r--files_svgedit/svg-edit/images/cut.pngbin0 -> 1294 bytes
-rw-r--r--files_svgedit/svg-edit/images/delete.pngbin0 -> 663 bytes
-rw-r--r--files_svgedit/svg-edit/images/document-properties.pngbin0 -> 688 bytes
-rw-r--r--files_svgedit/svg-edit/images/dropdown.gifbin0 -> 49 bytes
-rw-r--r--files_svgedit/svg-edit/images/ellipse.pngbin0 -> 811 bytes
-rw-r--r--files_svgedit/svg-edit/images/eye.pngbin0 -> 750 bytes
-rw-r--r--files_svgedit/svg-edit/images/fhpath.pngbin0 -> 1218 bytes
-rw-r--r--files_svgedit/svg-edit/images/flyouth.pngbin0 -> 109 bytes
-rw-r--r--files_svgedit/svg-edit/images/flyup.gifbin0 -> 48 bytes
-rw-r--r--files_svgedit/svg-edit/images/freehand-circle.pngbin0 -> 1257 bytes
-rw-r--r--files_svgedit/svg-edit/images/freehand-square.pngbin0 -> 903 bytes
-rw-r--r--files_svgedit/svg-edit/images/go-down.pngbin0 -> 683 bytes
-rw-r--r--files_svgedit/svg-edit/images/go-up.pngbin0 -> 652 bytes
-rw-r--r--files_svgedit/svg-edit/images/image.pngbin0 -> 900 bytes
-rw-r--r--files_svgedit/svg-edit/images/italic.pngbin0 -> 2972 bytes
-rw-r--r--files_svgedit/svg-edit/images/line.pngbin0 -> 1026 bytes
-rw-r--r--files_svgedit/svg-edit/images/link_controls.pngbin0 -> 919 bytes
-rw-r--r--files_svgedit/svg-edit/images/logo.pngbin0 -> 3983 bytes
-rw-r--r--files_svgedit/svg-edit/images/logo.svg32
-rw-r--r--files_svgedit/svg-edit/images/move_bottom.pngbin0 -> 737 bytes
-rw-r--r--files_svgedit/svg-edit/images/move_top.pngbin0 -> 663 bytes
-rwxr-xr-xfiles_svgedit/svg-edit/images/node_clone.pngbin0 -> 571 bytes
-rwxr-xr-xfiles_svgedit/svg-edit/images/node_delete.pngbin0 -> 589 bytes
-rw-r--r--files_svgedit/svg-edit/images/none.pngbin0 -> 136 bytes
-rw-r--r--files_svgedit/svg-edit/images/open.pngbin0 -> 919 bytes
-rw-r--r--files_svgedit/svg-edit/images/paste.pngbin0 -> 906 bytes
-rw-r--r--files_svgedit/svg-edit/images/path.pngbin0 -> 854 bytes
-rw-r--r--files_svgedit/svg-edit/images/polygon.pngbin0 -> 881 bytes
-rw-r--r--files_svgedit/svg-edit/images/polygon.svg219
-rw-r--r--files_svgedit/svg-edit/images/rect.pngbin0 -> 404 bytes
-rw-r--r--files_svgedit/svg-edit/images/redo.pngbin0 -> 921 bytes
-rw-r--r--files_svgedit/svg-edit/images/reorient.pngbin0 -> 980 bytes
-rw-r--r--files_svgedit/svg-edit/images/rotate.pngbin0 -> 1500 bytes
-rw-r--r--files_svgedit/svg-edit/images/save.pngbin0 -> 1272 bytes
-rw-r--r--files_svgedit/svg-edit/images/select.pngbin0 -> 712 bytes
-rw-r--r--files_svgedit/svg-edit/images/select_node.pngbin0 -> 828 bytes
-rw-r--r--files_svgedit/svg-edit/images/sep.pngbin0 -> 93 bytes
-rw-r--r--files_svgedit/svg-edit/images/shape_group.pngbin0 -> 553 bytes
-rw-r--r--files_svgedit/svg-edit/images/shape_ungroup.pngbin0 -> 666 bytes
-rw-r--r--files_svgedit/svg-edit/images/source.pngbin0 -> 1110 bytes
-rw-r--r--files_svgedit/svg-edit/images/spinbtn_updn_big.pngbin0 -> 2049 bytes
-rw-r--r--files_svgedit/svg-edit/images/square.pngbin0 -> 422 bytes
-rw-r--r--files_svgedit/svg-edit/images/svg_edit_icons.svg1034
-rw-r--r--files_svgedit/svg-edit/images/svg_edit_icons.svgzbin0 -> 5493 bytes
-rw-r--r--files_svgedit/svg-edit/images/text.pngbin0 -> 1032 bytes
-rw-r--r--files_svgedit/svg-edit/images/text.svg157
-rw-r--r--files_svgedit/svg-edit/images/to_path.pngbin0 -> 1153 bytes
-rw-r--r--files_svgedit/svg-edit/images/undo.pngbin0 -> 1122 bytes
-rw-r--r--files_svgedit/svg-edit/images/view-refresh.pngbin0 -> 912 bytes
-rw-r--r--files_svgedit/svg-edit/images/wave.pngbin0 -> 2005 bytes
-rw-r--r--files_svgedit/svg-edit/images/wireframe.pngbin0 -> 466 bytes
-rw-r--r--files_svgedit/svg-edit/images/zoom.pngbin0 -> 1197 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/all-wcprops35
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/entries204
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/prop-base/jpicker.min.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.min.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/text-base/LICENSE.svn-base202
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/text-base/README.svn-base3
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/text-base/jpicker.min.js.svn-base1
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.js.svn-base1175
-rw-r--r--files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.min.js.svn-base37
-rw-r--r--files_svgedit/svg-edit/jgraduate/LICENSE202
-rw-r--r--files_svgedit/svg-edit/jgraduate/README3
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/.svn/all-wcprops17
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/.svn/entries96
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jPicker.css.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jgraduate.css.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jPicker.css.svn-base1
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jgraduate.css.svn-base351
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/jPicker.css1
-rw-r--r--files_svgedit/svg-edit/jgraduate/css/jgraduate.css351
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/all-wcprops83
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/entries470
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/AlphaBar.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Bars.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Maps.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/NoColor.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/bar-opacity.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/map-opacity.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint.gif.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_c.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_f.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/picker.gif.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/preview-opacity.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows.gif.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows2.gif.svn-base5
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/AlphaBar.png.svn-basebin0 -> 2195 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Bars.png.svn-basebin0 -> 382 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Maps.png.svn-basebin0 -> 78245 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/NoColor.png.svn-basebin0 -> 552 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/bar-opacity.png.svn-basebin0 -> 134 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/map-opacity.png.svn-basebin0 -> 139 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint.gif.svn-basebin0 -> 93 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_c.png.svn-basebin0 -> 252 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_f.png.svn-basebin0 -> 255 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/picker.gif.svn-basebin0 -> 146 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/preview-opacity.png.svn-basebin0 -> 135 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows.gif.svn-basebin0 -> 76 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows2.gif.svn-basebin0 -> 93 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/AlphaBar.pngbin0 -> 2195 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/Bars.pngbin0 -> 382 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/Maps.pngbin0 -> 78245 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/NoColor.pngbin0 -> 552 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/bar-opacity.pngbin0 -> 134 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/map-opacity.pngbin0 -> 139 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/mappoint.gifbin0 -> 93 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/mappoint_c.pngbin0 -> 252 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/mappoint_f.pngbin0 -> 255 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/picker.gifbin0 -> 146 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/preview-opacity.pngbin0 -> 135 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/rangearrows.gifbin0 -> 76 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/images/rangearrows2.gifbin0 -> 93 bytes
-rw-r--r--files_svgedit/svg-edit/jgraduate/jpicker.min.js1
-rw-r--r--files_svgedit/svg-edit/jgraduate/jquery.jgraduate.js1175
-rw-r--r--files_svgedit/svg-edit/jgraduate/jquery.jgraduate.min.js37
-rw-r--r--files_svgedit/svg-edit/jquery-ui/.svn/all-wcprops17
-rw-r--r--files_svgedit/svg-edit/jquery-ui/.svn/entries96
-rw-r--r--files_svgedit/svg-edit/jquery-ui/.svn/prop-base/jquery-ui-1.8.custom.min.js.svn-base9
-rw-r--r--files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.17.custom.min.js.svn-base54
-rw-r--r--files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.custom.min.js.svn-base84
-rw-r--r--files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.17.custom.min.js54
-rwxr-xr-xfiles_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.custom.min.js84
-rw-r--r--files_svgedit/svg-edit/jquery.js4
-rw-r--r--files_svgedit/svg-edit/jquerybbq/.svn/all-wcprops11
-rw-r--r--files_svgedit/svg-edit/jquerybbq/.svn/entries62
-rw-r--r--files_svgedit/svg-edit/jquerybbq/.svn/prop-base/jquery.bbq.min.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/jquerybbq/.svn/text-base/jquery.bbq.min.js.svn-base18
-rw-r--r--files_svgedit/svg-edit/jquerybbq/jquery.bbq.min.js18
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/.svn/all-wcprops17
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/.svn/entries96
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/.svn/prop-base/jquery.hotkeys.min.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/.svn/text-base/README.md.svn-base45
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/.svn/text-base/jquery.hotkeys.min.js.svn-base15
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/README.md45
-rw-r--r--files_svgedit/svg-edit/js-hotkeys/jquery.hotkeys.min.js15
-rw-r--r--files_svgedit/svg-edit/locale/.svn/all-wcprops365
-rw-r--r--files_svgedit/svg-edit/locale/.svn/dir-prop-base6
-rw-r--r--files_svgedit/svg-edit/locale/.svn/entries2068
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.af.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ar.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.az.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.be.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.bg.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ca.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.cs.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.cy.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.da.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.de.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.el.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.en.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.es.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.et.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.fa.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.fi.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.fr.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.fy.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ga.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.gl.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.he.js.svn-base9
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.hi.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.hr.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.hu.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.hy.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.id.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.is.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.it.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ja.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ko.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.lt.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.lv.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.mk.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ms.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.mt.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.nl.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.no.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.pl.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-BR.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-PT.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ro.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.ru.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.sk.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.sl.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.sq.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.sr.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.sv.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.sw.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.test.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.th.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.tl.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.tr.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.uk.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.vi.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.yi.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-CN.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-HK.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-TW.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/prop-base/locale.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/README.txt.svn-base17
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.af.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ar.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.az.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.be.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.bg.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ca.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.cs.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.cy.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.da.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.de.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.el.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.en.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.es.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.et.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.fa.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.fi.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.fr.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.fy.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ga.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.gl.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.he.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.hi.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.hr.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.hu.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.hy.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.id.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.is.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.it.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ja.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ko.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.lt.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.lv.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.mk.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ms.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.mt.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.nl.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.no.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.pl.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-BR.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-PT.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ro.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.ru.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.sk.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.sl.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.sq.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.sr.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.sv.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.sw.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.test.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.th.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.tl.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.tr.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.uk.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.vi.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.yi.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-CN.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-HK.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-TW.js.svn-base234
-rw-r--r--files_svgedit/svg-edit/locale/.svn/text-base/locale.js.svn-base320
-rw-r--r--files_svgedit/svg-edit/locale/README.txt17
-rw-r--r--files_svgedit/svg-edit/locale/lang.af.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ar.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.az.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.be.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.bg.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ca.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.cs.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.cy.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.da.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.de.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.el.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.en.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.es.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.et.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.fa.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.fi.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.fr.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.fy.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ga.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.gl.js234
-rwxr-xr-xfiles_svgedit/svg-edit/locale/lang.he.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.hi.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.hr.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.hu.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.hy.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.id.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.is.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.it.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ja.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ko.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.lt.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.lv.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.mk.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ms.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.mt.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.nl.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.no.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.pl.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.pt-BR.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.pt-PT.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ro.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.ru.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.sk.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.sl.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.sq.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.sr.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.sv.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.sw.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.test.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.th.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.tl.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.tr.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.uk.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.vi.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.yi.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.zh-CN.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.zh-HK.js234
-rw-r--r--files_svgedit/svg-edit/locale/lang.zh-TW.js234
-rw-r--r--files_svgedit/svg-edit/locale/locale.js320
-rw-r--r--files_svgedit/svg-edit/math.js246
-rw-r--r--files_svgedit/svg-edit/path.js980
-rw-r--r--files_svgedit/svg-edit/sanitize.js273
-rw-r--r--files_svgedit/svg-edit/select.js529
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/all-wcprops29
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/entries164
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.css.svn-base5
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.min.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/prop-base/spinbtn_updn.png.svn-base5
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.css.svn-base41
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.js.svn-base266
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.min.js.svn-base7
-rw-r--r--files_svgedit/svg-edit/spinbtn/.svn/text-base/spinbtn_updn.png.svn-basebin0 -> 666 bytes
-rw-r--r--files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.css41
-rw-r--r--files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.js266
-rw-r--r--files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.min.js7
-rw-r--r--files_svgedit/svg-edit/spinbtn/spinbtn_updn.pngbin0 -> 666 bytes
-rw-r--r--files_svgedit/svg-edit/svg-editor.css1419
-rw-r--r--files_svgedit/svg-edit/svg-editor.html790
-rw-r--r--files_svgedit/svg-edit/svg-editor.js4881
-rw-r--r--files_svgedit/svg-edit/svg-editor.manifest121
-rw-r--r--files_svgedit/svg-edit/svgcanvas.js8770
-rw-r--r--files_svgedit/svg-edit/svgicons/.svn/all-wcprops11
-rw-r--r--files_svgedit/svg-edit/svgicons/.svn/entries62
-rw-r--r--files_svgedit/svg-edit/svgicons/.svn/prop-base/jquery.svgicons.js.svn-base5
-rw-r--r--files_svgedit/svg-edit/svgicons/.svn/text-base/jquery.svgicons.js.svn-base486
-rw-r--r--files_svgedit/svg-edit/svgicons/jquery.svgicons.js486
-rw-r--r--files_svgedit/svg-edit/svgtransformlist.js291
-rw-r--r--files_svgedit/svg-edit/svgutils.js647
-rw-r--r--files_svgedit/svg-edit/units.js281
-rw-r--r--files_svgedit/templates/editor.php18
683 files changed, 109797 insertions, 0 deletions
diff --git a/files_svgedit/README b/files_svgedit/README
new file mode 100644
index 000000000..70dc324f4
--- /dev/null
+++ b/files_svgedit/README
@@ -0,0 +1,34 @@
+SVG editor for ownCloud
+
+Copyright by Florian Hülsmann, 2012
+
+http://ocsvg.cbix.de
+
+License:
+ LGPLv3 (plugin, php and javascript code)
+ MIT License/Apache License (svg-edit, http://code.google.com/p/svg-edit)
+ Creative Commons 3.0 by-sa (artwork, css stylesheets)
+
+Authors:
+ Florian Hülsmann <fh@cbix.de>
+
+Description:
+ This app enables you to view, create and modify SVG files inside
+ the ownCloud user interface.
+
+Installation:
+ Copy this folder to your ownCloud's /apps/ directory, rename it to
+ "files_svgedit" and enable the app in the admin interface.
+
+Usage:
+ To edit an SVG file, simply click on it in your directory listing.
+
+Updating svg-edit:
+ To get the latest trunk version of svg-edit, go to files_svgedit/svg-edit
+ and execute the following commands:
+
+ svn up
+ cp embedapi.js ../js/svg-edit/
+
+ But you should first check if there've been changes to the svg-edit
+ project that could make it incompatible to ocsvg!
diff --git a/files_svgedit/RELEASE b/files_svgedit/RELEASE
new file mode 100644
index 000000000..1d4eaa125
--- /dev/null
+++ b/files_svgedit/RELEASE
@@ -0,0 +1,32 @@
+ SVG Editor for ownCloud
+Copyright (c) 2012 Florian Hülsmann <fh@cbix.de>
+
+Here you find change log and release notes!
+
+2012/04/04 - beta2/0.2
+ * PNG export (depending on browser's canvas capabilities)
+ * got rid of quit confirmation dialog when nothing has changed
+ * major bug fixes
+
+ known issues:
+ * PNG export not working reliable
+
+2012/03/30 - beta1/0.2
+ Changing everything by using svgedit 2.6 (trunk version)
+ Release notes:
+ * using svgedit 2.6:
+ * many new features
+ * works in WebKit
+ * gradients working
+ * svg-edit dropdowns working
+ * using ownCloud control bar:
+ * saving works
+ * open preferences dialouge
+
+2012/03/25 - alpha (internal version 0.1)
+ This is the first release with most things working!
+ Release notes:
+ * open svg file
+ * save svg file in editor
+ * save under different names
+ * most of svg-edit features working
diff --git a/files_svgedit/ROADMAP b/files_svgedit/ROADMAP
new file mode 100644
index 000000000..d6072abe6
--- /dev/null
+++ b/files_svgedit/ROADMAP
@@ -0,0 +1,13 @@
+Roadmap for ocsvg (SVG editor for ownCloud) as of 0.2-beta2
+
+beta:
+ * l10n (set language to the current owncloud language)
+ * better usage of jQuery UI and OCdialogs (export options etc.)
+ * integration in "New File" drop down in file manager, create new svg file
+
+1.0:
+ * file picker dialogs for image/svg import and saving
+
+Ideas for the future:
+ * collaborative editing
+ * PDF export (possible?)
diff --git a/files_svgedit/ajax/save.php b/files_svgedit/ajax/save.php
new file mode 100644
index 000000000..36e4e24a8
--- /dev/null
+++ b/files_svgedit/ajax/save.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * based on files_texteditor/ajax/savefile.php by
+ * Tom Needham <contact@tomneedham.com> 2011
+ */
+// Init owncloud
+require_once('../../../lib/base.php');
+
+
+// Check if we are a user
+OC_JSON::checkLoggedIn();
+
+// Get paramteres
+$filecontents = htmlspecialchars_decode($_POST['file']['filecontents']);
+$path = isset($_POST['file']['path']) ? $_POST['file']['path'] : '';
+$mtime = isset($_POST['file']['mtime']) ? $_POST['file']['mtime'] : '';
+$force = isset($_POST['force']) ? ($_POST['force'] == 'true') : false;
+$b64encoded = isset($_POST['base64encoded']) ? ($_POST['base64encoded'] == 'true') : false;
+if($b64encoded) {
+ $b64type = isset($_POST['base64type']) ? $_POST['base64type'] : 'image/png';
+}
+
+$pathParts = pathinfo($path);
+$dir = $pathParts['dirname'];
+$file = $pathParts['basename'];
+
+if($path != '' && $mtime != '') {
+ if(OC_Filesystem::file_exists($path)) {
+ // Get file mtime
+ $filemtime = OC_Filesystem::filemtime($path);
+ if(!$force && $mtime != $filemtime) {
+ // Then the file has changed since opening
+ OC_JSON::error(array("data" => array("message" => "File has been modified since opening!")));
+ OC_Log::write('files_svgedit',"File: ".$path." modified since opening.",OC_Log::ERROR);
+ exit();
+ }
+ } else {
+ // file doesn't exist yet, so let's create it!
+ if($file == '') {
+ OC_JSON::error(array("data" => array( "message" => "Empty Filename") ));
+ exit();
+ }
+ OC_Files::newFile($dir, '', 'dir');
+ if(!OC_Files::newFile($dir, $file, 'file')) {
+ OC_JSON::error(array("data" => array("message" => "Error when creating new file!")));
+ OC_Log::write('files_svgedit', "Failed to create file: " . $path, OC_Log::ERROR);
+ exit();
+ }
+ }
+ // file should be existing now
+ if(method_exists('OC_Filesystem', 'is_writable')) {
+ $writable = OC_Filesystem::is_writable($path);
+ } else {
+ $writable = OC_Filesystem::is_writeable($path);
+ }
+ if($writable) {
+ if($b64encoded) {
+ $b64prefix = 'data:' . $b64type . ';base64,';
+ if(strpos($filecontents, $b64prefix) === 0) {
+ $filecontents = base64_decode(substr($filecontents, strlen($b64prefix)));
+ }
+ }
+ OC_Filesystem::file_put_contents($path, $filecontents);
+ // Clear statcache
+ clearstatcache();
+ // Get new mtime
+ $newmtime = OC_Filesystem::filemtime($path);
+ OC_JSON::success(array('data' => array('mtime' => $newmtime)));
+ } else {
+ // Not writable!
+ OC_JSON::error(array('data' => array( 'message' => 'Insufficient permissions')));
+ OC_Log::write('files_svgedit',"User does not have permission to write to file: ".$path,OC_Log::ERROR);
+ }
+} else {
+ OC_JSON::error(array('data' => array( 'message' => 'File path or mtime not supplied')));
+ OC_Log::write('files_svgedit',"Invalid path supplied:".$path,OC_Log::ERROR);
+}
+?>
diff --git a/files_svgedit/appinfo/app.php b/files_svgedit/appinfo/app.php
new file mode 100644
index 000000000..56ba8f94f
--- /dev/null
+++ b/files_svgedit/appinfo/app.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+* ownCloud - SVG editor application - http://ocsvg.cbix.de
+*
+* @author Florian Hülsmann
+* @copyright 2012 Florian Hülsmann <fh@cbix.de>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+OC_Util::addScript('files_svgedit', 'ocsvg');
+OC_App::register(array(
+ 'order' => 50,
+ 'id' => 'files_svgedit',
+ 'name' => 'SVG Editor'
+ ));
+
+?>
diff --git a/files_svgedit/appinfo/info.xml b/files_svgedit/appinfo/info.xml
new file mode 100644
index 000000000..1bf5574f1
--- /dev/null
+++ b/files_svgedit/appinfo/info.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<info>
+ <id>files_svgedit</id>
+ <name>SVG Editor</name>
+ <description>A complete javascript interface to view, modify and create vector graphics and export them to PNG file directly in ownCloud. Based on svg-edit 2.6 (http://svg-edit.googlecode.com).</description>
+ <version>0.2-beta2</version>
+ <licence>LGPLv3</licence>
+ <author>Florian Hülsmann</author>
+ <require>2</require>
+</info>
diff --git a/files_svgedit/css/ocsvg.css b/files_svgedit/css/ocsvg.css
new file mode 100644
index 000000000..0509b449f
--- /dev/null
+++ b/files_svgedit/css/ocsvg.css
@@ -0,0 +1,12 @@
+div#svgEditor{
+ position: fixed;
+ display: block;
+ top: 80px;
+ left: 160px;
+}
+
+iframe#svgedit {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
diff --git a/files_svgedit/index.php b/files_svgedit/index.php
new file mode 100644
index 000000000..2d70d568a
--- /dev/null
+++ b/files_svgedit/index.php
@@ -0,0 +1,34 @@
+<?php
+// Init owncloud
+require_once('../../lib/base.php');
+OC_Util::checkLoggedIn();
+OC_Util::checkAppEnabled('files_svgedit');
+// load required style sheets:
+OC_Util::addStyle('files_svgedit', 'ocsvg');
+// load required javascripts:
+OC_Util::addScript('files_svgedit', 'svg-edit/embedapi');
+OC_Util::addScript('files_svgedit', 'ocsvgEditor');
+OC_Util::addScript('files_svgedit', 'canvg/canvg');
+OC_Util::addScript('files_svgedit', 'canvg/rgbcolor');
+OC_App::setActiveNavigationEntry('files_index');
+$path = $_GET['file'];
+if(method_exists('OC_Filesystem', 'is_writable')) {
+ $writable = OC_Filesystem::is_writable($path);
+} else {
+ $writable = OC_Filesystem::is_writeable($path);
+}
+if(isset($_GET['file']) and $writable) {
+ $filecontents = OC_Filesystem::file_get_contents($path);
+ $filemtime = OC_Filesystem::filemtime($path);
+} else {
+ $filecontents = "";
+ $filemtime = 0;
+ $path = "";
+}
+
+$tmpl = new OC_TEMPLATE( "files_svgedit", "editor", "user" );
+$tmpl->assign('fileContents', json_encode($filecontents));
+$tmpl->assign('filemTime', $filemtime);
+$tmpl->assign('filePath', json_encode($path));
+$tmpl->printPage();
+?>
diff --git a/files_svgedit/js/canvg/MIT-LICENSE.txt b/files_svgedit/js/canvg/MIT-LICENSE.txt
new file mode 100644
index 000000000..dd9360791
--- /dev/null
+++ b/files_svgedit/js/canvg/MIT-LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2010-2011 Gabe Lerner (gabelerner@gmail.com) - http://code.google.com/p/canvg/
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/files_svgedit/js/canvg/canvg.js b/files_svgedit/js/canvg/canvg.js
new file mode 100644
index 000000000..38139d8a6
--- /dev/null
+++ b/files_svgedit/js/canvg/canvg.js
@@ -0,0 +1,2682 @@
+/*
+ * 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/
+ */
+(function(){
+ // canvg(target, s)
+ // empty parameters: replace all 'svg' elements on page with 'canvas' elements
+ // target: canvas element or the id of a canvas element
+ // s: svg string, url to svg file, or xml document
+ // opts: optional hash of options
+ // ignoreMouse: true => 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<svgTags.length; i++) {
+ var svgTag = svgTags[i];
+ var c = document.createElement('canvas');
+ c.width = svgTag.clientWidth;
+ c.height = svgTag.clientHeight;
+ svgTag.parentNode.insertBefore(c, svgTag);
+ svgTag.parentNode.removeChild(svgTag);
+ var div = document.createElement('div');
+ div.appendChild(svgTag);
+ canvg(c, div.innerHTML);
+ }
+ return;
+ }
+ opts = opts || {};
+
+ if (typeof target == 'string') {
+ target = document.getElementById(target);
+ }
+
+ // reuse class per canvas
+ var svg;
+ if (target.svg == null) {
+ svg = build();
+ target.svg = svg;
+ }
+ else {
+ svg = target.svg;
+ svg.stop();
+ }
+ svg.opts = opts;
+
+ var ctx = target.getContext('2d');
+ if (typeof(s.documentElement) != 'undefined') {
+ // load from xml doc
+ svg.loadXmlDoc(ctx, s);
+ }
+ else if (s.substr(0,1) == '<') {
+ // load from xml string
+ svg.loadXml(ctx, s);
+ }
+ else {
+ // load from url
+ svg.load(ctx, s);
+ }
+ }
+
+ function build() {
+ var svg = { };
+
+ svg.FRAMERATE = 30;
+ svg.MAX_VIRTUAL_PIXELS = 30000;
+
+ // globals
+ svg.init = function(ctx) {
+ svg.Definitions = {};
+ svg.Styles = {};
+ svg.Animations = [];
+ svg.Images = [];
+ svg.ctx = ctx;
+ svg.ViewPort = new (function () {
+ this.viewPorts = [];
+ this.Clear = function() { this.viewPorts = []; }
+ this.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); }
+ this.RemoveCurrent = function() { this.viewPorts.pop(); }
+ this.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; }
+ this.width = function() { return this.Current().width; }
+ this.height = function() { return this.Current().height; }
+ this.ComputeSize = function(d) {
+ if (d != null && typeof(d) == 'number') return d;
+ if (d == 'x') return this.width();
+ if (d == 'y') return this.height();
+ return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);
+ }
+ });
+ }
+ svg.init();
+
+ // images loaded
+ svg.ImagesLoaded = function() {
+ for (var i=0; i<svg.Images.length; i++) {
+ if (!svg.Images[i].loaded) return false;
+ }
+ return true;
+ }
+
+ // trim
+ svg.trim = function(s) { return s.replace(/^\s+|\s+$/g, ''); }
+
+ // compress spaces
+ svg.compressSpaces = function(s) { return s.replace(/[\s\r\t\n]+/gm,' '); }
+
+ // ajax
+ svg.ajax = function(url) {
+ var AJAX;
+ if(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}
+ else{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}
+ if(AJAX){
+ AJAX.open('GET',url,false);
+ AJAX.send(null);
+ return AJAX.responseText;
+ }
+ return null;
+ }
+
+ // parse xml
+ svg.parseXml = function(xml) {
+ if (window.DOMParser)
+ {
+ var parser = new DOMParser();
+ return parser.parseFromString(xml, 'text/xml');
+ }
+ else
+ {
+ xml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');
+ 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;
+ }
+ svg.Property.prototype.getValue = function() {
+ return this.value;
+ }
+
+ svg.Property.prototype.hasValue = function() {
+ return (this.value != null && this.value !== '');
+ }
+
+ // return the numerical value of the property
+ svg.Property.prototype.numValue = function() {
+ if (!this.hasValue()) return 0;
+
+ var n = parseFloat(this.value);
+ if ((this.value + '').match(/%$/)) {
+ n = n / 100.0;
+ }
+ return n;
+ }
+
+ svg.Property.prototype.valueOrDefault = function(def) {
+ if (this.hasValue()) return this.value;
+ return def;
+ }
+
+ svg.Property.prototype.numValueOrDefault = function(def) {
+ if (this.hasValue()) return this.numValue();
+ return def;
+ }
+
+ // color extensions
+ // augment the current color value with the opacity
+ svg.Property.prototype.addOpacity = function(opacity) {
+ var newValue = this.value;
+ if (opacity != null && opacity != '' && typeof(this.value)=='string') { // can only add opacity to colors, not patterns
+ var color = new RGBColor(this.value);
+ if (color.ok) {
+ newValue = 'rgba(' + color.r + ', ' + color.g + ', ' + color.b + ', ' + opacity + ')';
+ }
+ }
+ return new svg.Property(this.name, newValue);
+ }
+
+ // definition extensions
+ // get the definition from the definitions table
+ svg.Property.prototype.getDefinition = function() {
+ var name = this.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2');
+ return svg.Definitions[name];
+ }
+
+ svg.Property.prototype.isUrlDefinition = function() {
+ return this.value.indexOf('url(') == 0
+ }
+
+ svg.Property.prototype.getFillStyleDefinition = 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
+ svg.Property.prototype.getDPI = function(viewPort) {
+ return 96.0; // TODO: compute?
+ }
+
+ svg.Property.prototype.getEM = function(viewPort) {
+ var em = 12;
+
+ var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);
+ if (fontSize.hasValue()) em = fontSize.toPixels(viewPort);
+
+ return em;
+ }
+
+ svg.Property.prototype.getUnits = function() {
+ var s = this.value+'';
+ return s.replace(/[0-9\.\-]/g,'');
+ }
+
+ // get the length as pixels
+ svg.Property.prototype.toPixels = function(viewPort) {
+ if (!this.hasValue()) return 0;
+ var s = this.value+'';
+ if (s.match(/em$/)) return this.numValue() * this.getEM(viewPort);
+ if (s.match(/ex$/)) return this.numValue() * this.getEM(viewPort) / 2.0;
+ if (s.match(/px$/)) return this.numValue();
+ if (s.match(/pt$/)) return this.numValue() * 1.25;
+ if (s.match(/pc$/)) return this.numValue() * 15;
+ if (s.match(/cm$/)) return this.numValue() * this.getDPI(viewPort) / 2.54;
+ if (s.match(/mm$/)) return this.numValue() * this.getDPI(viewPort) / 25.4;
+ if (s.match(/in$/)) return this.numValue() * this.getDPI(viewPort);
+ if (s.match(/%$/)) return this.numValue() * svg.ViewPort.ComputeSize(viewPort);
+ return this.numValue();
+ }
+
+ // time extensions
+ // get the time as milliseconds
+ svg.Property.prototype.toMilliseconds = function() {
+ if (!this.hasValue()) return 0;
+ var s = this.value+'';
+ if (s.match(/s$/)) return this.numValue() * 1000;
+ if (s.match(/ms$/)) return this.numValue();
+ return this.numValue();
+ }
+
+ // angle extensions
+ // get the angle as radians
+ svg.Property.prototype.toRadians = function() {
+ if (!this.hasValue()) return 0;
+ var s = this.value+'';
+ if (s.match(/deg$/)) return this.numValue() * (Math.PI / 180.0);
+ if (s.match(/grad$/)) return this.numValue() * (Math.PI / 200.0);
+ if (s.match(/rad$/)) return this.numValue();
+ return this.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<d.length; i++) {
+ if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }
+ else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true; }
+ else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }
+ else if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }
+ else { if (d[i] != 'inherit') ff += d[i]; }
+ } if (ff != '') f.fontFamily = ff;
+ return f;
+ }
+ });
+
+ // points and paths
+ svg.ToNumberArray = function(s) {
+ var a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');
+ for (var i=0; i<a.length; i++) {
+ a[i] = parseFloat(a[i]);
+ }
+ return a;
+ }
+ svg.Point = function(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+ svg.Point.prototype.angleTo = function(p) {
+ return Math.atan2(p.y - this.y, p.x - this.x);
+ }
+
+ svg.Point.prototype.applyTransform = function(v) {
+ var xp = this.x * v[0] + this.y * v[2] + v[4];
+ var yp = this.x * v[1] + this.y * v[3] + v[5];
+ this.x = xp;
+ this.y = yp;
+ }
+
+ svg.CreatePoint = function(s) {
+ var a = svg.ToNumberArray(s);
+ return new svg.Point(a[0], a[1]);
+ }
+ svg.CreatePath = function(s) {
+ var a = svg.ToNumberArray(s);
+ var path = [];
+ for (var i=0; i<a.length; i+=2) {
+ path.push(new svg.Point(a[i], a[i+1]));
+ }
+ return path;
+ }
+
+ // bounding box
+ svg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want
+ this.x1 = Number.NaN;
+ this.y1 = Number.NaN;
+ this.x2 = Number.NaN;
+ this.y2 = Number.NaN;
+
+ this.x = function() { return this.x1; }
+ this.y = function() { return this.y1; }
+ this.width = function() { return this.x2 - this.x1; }
+ this.height = function() { return this.y2 - this.y1; }
+
+ this.addPoint = function(x, y) {
+ if (x != null) {
+ if (isNaN(this.x1) || isNaN(this.x2)) {
+ this.x1 = x;
+ this.x2 = x;
+ }
+ if (x < this.x1) this.x1 = x;
+ if (x > 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.toRadians());
+ ctx.translate(-this.cx, -this.cy);
+ }
+ this.applyToPoint = function(p) {
+ var a = this.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.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.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.transforms.length; i++) {
+ this.transforms[i].apply(ctx);
+ }
+ }
+
+ this.applyToPoint = function(p) {
+ for (var i=0; i<this.transforms.length; i++) {
+ this.transforms[i].applyToPoint(p);
+ }
+ }
+
+ var data = svg.trim(svg.compressSpaces(v)).split(/\s(?=[a-z])/);
+ for (var i=0; i<data.length; i++) {
+ var type = data[i].split('(')[0];
+ var s = data[i].split('(')[1].replace(')','');
+ var transform = new this.Type[type](s);
+ this.transforms.push(transform);
+ }
+ }
+
+ // aspect ratio
+ svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {
+ // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute
+ aspectRatio = svg.compressSpaces(aspectRatio);
+ aspectRatio = aspectRatio.replace(/^defer\s/,''); // ignore defer
+ var align = aspectRatio.split(' ')[0] || 'xMidYMid';
+ var meetOrSlice = aspectRatio.split(' ')[1] || 'meet';
+
+ // calculate scale
+ var scaleX = width / desiredWidth;
+ var scaleY = height / desiredHeight;
+ var scaleMin = Math.min(scaleX, scaleY);
+ var scaleMax = Math.max(scaleX, scaleY);
+ if (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }
+ if (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }
+
+ refX = new svg.Property('refX', refX);
+ refY = new svg.Property('refY', refY);
+ if (refX.hasValue() && refY.hasValue()) {
+ ctx.translate(-scaleMin * refX.toPixels('x'), -scaleMin * refY.toPixels('y'));
+ }
+ else {
+ // align
+ if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0);
+ if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0);
+ if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0);
+ if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight);
+ }
+
+ // scale
+ if (align == 'none') ctx.scale(scaleX, scaleY);
+ else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin);
+ else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax);
+
+ // translate
+ ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);
+ }
+
+ // elements
+ svg.Element = {}
+
+ svg.EmptyProperty = new svg.Property('EMPTY', '');
+
+ svg.Element.ElementBase = function(node) {
+ this.attributes = {};
+ this.styles = {};
+ this.children = [];
+
+ // get or create attribute
+ this.attribute = function(name, createIfNotExists) {
+ var a = this.attributes[name];
+ if (a != null) return a;
+
+ if (createIfNotExists == true) { a = new svg.Property(name, ''); this.attributes[name] = a; }
+ return a || svg.EmptyProperty;
+ }
+
+ // get or create style, crawls up node tree
+ this.style = function(name, createIfNotExists) {
+ var s = this.styles[name];
+ if (s != null) return s;
+
+ var a = this.attribute(name);
+ if (a != null && a.hasValue()) {
+ this.styles[name] = a; // move up to me to cache
+ return a;
+ }
+
+ var p = this.parent;
+ if (p != null) {
+ var ps = p.style(name);
+ if (ps != null && ps.hasValue()) {
+ return ps;
+ }
+ }
+
+ if (createIfNotExists == true) { s = new svg.Property(name, ''); this.styles[name] = s; }
+ return s || svg.EmptyProperty;
+ }
+
+ // base render
+ this.render = function(ctx) {
+ // don't render display=none
+ if (this.style('display').value == 'none') return;
+
+ // don't render visibility=hidden
+ if (this.attribute('visibility').value == 'hidden') return;
+
+ ctx.save();
+ this.setContext(ctx);
+ // mask
+ if (this.attribute('mask').hasValue()) {
+ var mask = this.attribute('mask').getDefinition();
+ if (mask != null) mask.apply(ctx, this);
+ }
+ else if (this.style('filter').hasValue()) {
+ var filter = this.style('filter').getDefinition();
+ if (filter != null) filter.apply(ctx, this);
+ }
+ else this.renderChildren(ctx);
+ this.clearContext(ctx);
+ ctx.restore();
+ }
+
+ // base set context
+ this.setContext = function(ctx) {
+ // OVERRIDE ME!
+ }
+
+ // base clear context
+ this.clearContext = function(ctx) {
+ // OVERRIDE ME!
+ }
+
+ // base render children
+ this.renderChildren = function(ctx) {
+ for (var i=0; i<this.children.length; i++) {
+ this.children[i].render(ctx);
+ }
+ }
+
+ this.addChild = function(childNode, create) {
+ var child = childNode;
+ if (create) child = svg.CreateElement(childNode);
+ child.parent = this;
+ this.children.push(child);
+ }
+
+ if (node != null && node.nodeType == 1) { //ELEMENT_NODE
+ // add children
+ for (var i=0; i<node.childNodes.length; i++) {
+ var childNode = node.childNodes[i];
+ if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE
+ }
+
+ // add attributes
+ for (var i=0; i<node.attributes.length; i++) {
+ var attribute = node.attributes[i];
+ this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue);
+ }
+
+ // add tag styles
+ var styles = svg.Styles[node.nodeName];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+
+ // add class styles
+ if (this.attribute('class').hasValue()) {
+ var classes = svg.compressSpaces(this.attribute('class').value).split(' ');
+ for (var j=0; j<classes.length; j++) {
+ styles = svg.Styles['.'+classes[j]];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+ styles = svg.Styles[node.nodeName+'.'+classes[j]];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+ }
+ }
+
+ // add inline styles
+ if (this.attribute('style').hasValue()) {
+ var styles = this.attribute('style').value.split(';');
+ for (var i=0; i<styles.length; i++) {
+ if (svg.trim(styles[i]) != '') {
+ var style = styles[i].split(':');
+ var name = svg.trim(style[0]);
+ var value = svg.trim(style[1]);
+ this.styles[name] = new svg.Property(name, value);
+ }
+ }
+ }
+
+ // add id
+ if (this.attribute('id').hasValue()) {
+ if (svg.Definitions[this.attribute('id').value] == null) {
+ svg.Definitions[this.attribute('id').value] = this;
+ }
+ }
+ }
+ }
+
+ svg.Element.RenderedElementBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.setContext = function(ctx) {
+ // fill
+ if (this.style('fill').isUrlDefinition()) {
+ var fs = this.style('fill').getFillStyleDefinition(this);
+ if (fs != null) ctx.fillStyle = fs;
+ }
+ else if (this.style('fill').hasValue()) {
+ var fillStyle = this.style('fill');
+ ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);
+ }
+ if (this.style('fill-opacity').hasValue()) {
+ var fillStyle = new svg.Property('fill', ctx.fillStyle);
+ fillStyle = fillStyle.addOpacity(this.style('fill-opacity').value);
+ ctx.fillStyle = fillStyle.value;
+ }
+
+ // stroke
+ if (this.style('stroke').isUrlDefinition()) {
+ var fs = this.style('stroke').getFillStyleDefinition(this);
+ if (fs != null) ctx.strokeStyle = fs;
+ }
+ else if (this.style('stroke').hasValue()) {
+ var strokeStyle = this.style('stroke');
+ ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);
+ }
+ if (this.style('stroke-opacity').hasValue()) {
+ var strokeStyle = new svg.Property('stroke', ctx.strokeStyle);
+ strokeStyle = strokeStyle.addOpacity(this.style('stroke-opacity').value);
+ ctx.strokeStyle = strokeStyle.value;
+ }
+ if (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').toPixels();
+ if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;
+ if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;
+ if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;
+
+ // font
+ if (typeof(ctx.font) != 'undefined') {
+ ctx.font = svg.Font.CreateFont(
+ this.style('font-style').value,
+ this.style('font-variant').value,
+ this.style('font-weight').value,
+ this.style('font-size').hasValue() ? this.style('font-size').toPixels() + 'px' : '',
+ this.style('font-family').value).toString();
+ }
+
+ // transform
+ if (this.attribute('transform').hasValue()) {
+ var transform = new svg.Transform(this.attribute('transform').value);
+ transform.apply(ctx);
+ }
+
+ // clip
+ if (this.attribute('clip-path').hasValue()) {
+ var clip = this.attribute('clip-path').getDefinition();
+ if (clip != null) clip.apply(ctx);
+ }
+
+ // opacity
+ if (this.style('opacity').hasValue()) {
+ ctx.globalAlpha = this.style('opacity').numValue();
+ }
+ }
+ }
+ svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;
+
+ svg.Element.PathElementBase = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ if (ctx != null) ctx.beginPath();
+ return new svg.BoundingBox();
+ }
+
+ this.renderChildren = function(ctx) {
+ this.path(ctx);
+ svg.Mouse.checkPath(this, ctx);
+ if (ctx.fillStyle != '') ctx.fill();
+ if (ctx.strokeStyle != '') ctx.stroke();
+
+ var markers = this.getMarkers();
+ if (markers != null) {
+ if (this.style('marker-start').isUrlDefinition()) {
+ var marker = this.style('marker-start').getDefinition();
+ marker.render(ctx, markers[0][0], markers[0][1]);
+ }
+ if (this.style('marker-mid').isUrlDefinition()) {
+ var marker = this.style('marker-mid').getDefinition();
+ for (var i=1;i<markers.length-1;i++) {
+ marker.render(ctx, markers[i][0], markers[i][1]);
+ }
+ }
+ if (this.style('marker-end').isUrlDefinition()) {
+ var marker = this.style('marker-end').getDefinition();
+ marker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);
+ }
+ }
+ }
+
+ this.getBoundingBox = function() {
+ return this.path();
+ }
+
+ this.getMarkers = function() {
+ return null;
+ }
+ }
+ svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;
+
+ // svg element
+ svg.Element.svg = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseClearContext = this.clearContext;
+ this.clearContext = function(ctx) {
+ this.baseClearContext(ctx);
+ svg.ViewPort.RemoveCurrent();
+ }
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ // initial values
+ ctx.strokeStyle = 'rgba(0,0,0,0)';
+ ctx.lineCap = 'butt';
+ ctx.lineJoin = 'miter';
+ ctx.miterLimit = 4;
+
+ this.baseSetContext(ctx);
+
+ // create new view port
+ if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {
+ ctx.translate(this.attribute('x').toPixels('x'), this.attribute('y').toPixels('y'));
+ }
+
+ var width = svg.ViewPort.width();
+ var height = svg.ViewPort.height();
+ if (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {
+ width = this.attribute('width').toPixels('x');
+ height = this.attribute('height').toPixels('y');
+
+ var x = 0;
+ var y = 0;
+ if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {
+ x = -this.attribute('refX').toPixels('x');
+ y = -this.attribute('refY').toPixels('y');
+ }
+
+ ctx.beginPath();
+ ctx.moveTo(x, y);
+ ctx.lineTo(width, y);
+ ctx.lineTo(width, height);
+ ctx.lineTo(x, height);
+ ctx.closePath();
+ ctx.clip();
+ }
+ svg.ViewPort.SetCurrent(width, height);
+
+ // viewbox
+ if (this.attribute('viewBox').hasValue()) {
+ var viewBox = svg.ToNumberArray(this.attribute('viewBox').value);
+ var minX = viewBox[0];
+ var minY = viewBox[1];
+ width = viewBox[2];
+ height = viewBox[3];
+
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ svg.ViewPort.width(),
+ width,
+ svg.ViewPort.height(),
+ height,
+ minX,
+ minY,
+ this.attribute('refX').value,
+ this.attribute('refY').value);
+
+ svg.ViewPort.RemoveCurrent();
+ svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);
+ }
+ }
+ }
+ svg.Element.svg.prototype = new svg.Element.RenderedElementBase;
+
+ // rect element
+ svg.Element.rect = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var x = this.attribute('x').toPixels('x');
+ var y = this.attribute('y').toPixels('y');
+ var width = this.attribute('width').toPixels('x');
+ var height = this.attribute('height').toPixels('y');
+ var rx = this.attribute('rx').toPixels('x');
+ var ry = this.attribute('ry').toPixels('y');
+ if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;
+ if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(x + rx, y);
+ ctx.lineTo(x + width - rx, y);
+ ctx.quadraticCurveTo(x + width, y, x + width, y + ry)
+ ctx.lineTo(x + width, y + height - ry);
+ ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)
+ ctx.lineTo(x + rx, y + height);
+ ctx.quadraticCurveTo(x, y + height, x, y + height - ry)
+ ctx.lineTo(x, y + ry);
+ ctx.quadraticCurveTo(x, y, x + rx, y)
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(x, y, x + width, y + height);
+ }
+ }
+ svg.Element.rect.prototype = new svg.Element.PathElementBase;
+
+ // circle element
+ svg.Element.circle = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var cx = this.attribute('cx').toPixels('x');
+ var cy = this.attribute('cy').toPixels('y');
+ var r = this.attribute('r').toPixels();
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.arc(cx, cy, r, 0, Math.PI * 2, true);
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);
+ }
+ }
+ svg.Element.circle.prototype = new svg.Element.PathElementBase;
+
+ // ellipse element
+ svg.Element.ellipse = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);
+ var rx = this.attribute('rx').toPixels('x');
+ var ry = this.attribute('ry').toPixels('y');
+ var cx = this.attribute('cx').toPixels('x');
+ var cy = this.attribute('cy').toPixels('y');
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(cx, cy - ry);
+ ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy);
+ ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);
+ ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);
+ ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);
+ }
+ }
+ svg.Element.ellipse.prototype = new svg.Element.PathElementBase;
+
+ // line element
+ svg.Element.line = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.getPoints = function() {
+ return [
+ new svg.Point(this.attribute('x1').toPixels('x'), this.attribute('y1').toPixels('y')),
+ new svg.Point(this.attribute('x2').toPixels('x'), this.attribute('y2').toPixels('y'))];
+ }
+
+ this.path = function(ctx) {
+ var points = this.getPoints();
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(points[0].x, points[0].y);
+ ctx.lineTo(points[1].x, points[1].y);
+ }
+
+ return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);
+ }
+
+ this.getMarkers = function() {
+ var points = this.getPoints();
+ var a = points[0].angleTo(points[1]);
+ return [[points[0], a], [points[1], a]];
+ }
+ }
+ svg.Element.line.prototype = new svg.Element.PathElementBase;
+
+ // polyline element
+ svg.Element.polyline = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.points = svg.CreatePath(this.attribute('points').value);
+ this.path = function(ctx) {
+ var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(this.points[0].x, this.points[0].y);
+ }
+ for (var i=1; i<this.points.length; i++) {
+ bb.addPoint(this.points[i].x, this.points[i].y);
+ if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);
+ }
+ return bb;
+ }
+
+ this.getMarkers = function() {
+ var markers = [];
+ for (var i=0; i<this.points.length - 1; i++) {
+ markers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);
+ }
+ markers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);
+ return markers;
+ }
+ }
+ svg.Element.polyline.prototype = new svg.Element.PathElementBase;
+
+ // polygon element
+ svg.Element.polygon = function(node) {
+ this.base = svg.Element.polyline;
+ this.base(node);
+
+ this.basePath = this.path;
+ this.path = function(ctx) {
+ var bb = this.basePath(ctx);
+ if (ctx != null) {
+ ctx.lineTo(this.points[0].x, this.points[0].y);
+ ctx.closePath();
+ }
+ return bb;
+ }
+ }
+ svg.Element.polygon.prototype = new svg.Element.polyline;
+
+ // path element
+ svg.Element.path = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ var d = this.attribute('d').value;
+ // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF
+ d = d.replace(/,/gm,' '); // get rid of all commas
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,'$1 $2'); // separate commands from points
+ d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points
+ d = d.replace(/([0-9])([+\-])/gm,'$1 $2'); // separate digits when no comma
+ d = d.replace(/(\.[0-9]*)(\.)/gm,'$1 $2'); // separate digits when no comma
+ d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax
+ d = svg.compressSpaces(d); // compress multiple spaces
+ d = svg.trim(d);
+ this.PathParser = new (function(d) {
+ this.tokens = d.split(' ');
+
+ this.reset = function() {
+ this.i = -1;
+ this.command = '';
+ this.previousCommand = '';
+ this.start = new svg.Point(0, 0);
+ this.control = new svg.Point(0, 0);
+ this.current = new svg.Point(0, 0);
+ this.points = [];
+ this.angles = [];
+ }
+
+ this.isEnd = function() {
+ return this.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() {
+ switch(this.command)
+ {
+ case 'm':
+ case 'l':
+ case 'h':
+ case 'v':
+ case 'c':
+ case 's':
+ case 'q':
+ case 't':
+ case 'a':
+ case 'z':
+ return true;
+ break;
+ }
+ return false;
+ }
+
+ this.getToken = function() {
+ this.i++;
+ 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.y += this.current.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<this.angles.length; i++) {
+ if (this.angles[i] == null) {
+ for (var j=i+1; j<this.angles.length; j++) {
+ if (this.angles[j] != null) {
+ this.angles[i] = this.angles[j];
+ break;
+ }
+ }
+ }
+ }
+ return this.angles;
+ }
+ })(d);
+
+ this.path = function(ctx) {
+ var pp = this.PathParser;
+ pp.reset();
+
+ var bb = new svg.BoundingBox();
+ if (ctx != null) ctx.beginPath();
+ while (!pp.isEnd()) {
+ pp.nextCommand();
+ switch (pp.command) {
+ case 'M':
+ case 'm':
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.moveTo(p.x, p.y);
+ pp.start = pp.current;
+ while (!pp.isCommandOrEnd()) {
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p, pp.start);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.lineTo(p.x, p.y);
+ }
+ break;
+ case 'L':
+ case 'l':
+ while (!pp.isCommandOrEnd()) {
+ var c = pp.current;
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p, c);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.lineTo(p.x, p.y);
+ }
+ break;
+ case 'H':
+ case 'h':
+ while (!pp.isCommandOrEnd()) {
+ var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);
+ pp.addMarker(newP, pp.current);
+ pp.current = newP;
+ bb.addPoint(pp.current.x, pp.current.y);
+ if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);
+ }
+ break;
+ case 'V':
+ case 'v':
+ while (!pp.isCommandOrEnd()) {
+ var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());
+ pp.addMarker(newP, pp.current);
+ pp.current = newP;
+ bb.addPoint(pp.current.x, pp.current.y);
+ if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);
+ }
+ break;
+ case 'C':
+ case 'c':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var p1 = pp.getPoint();
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, p1);
+ bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'S':
+ case 's':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var p1 = pp.getReflectedControlPoint();
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, p1);
+ bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'Q':
+ case 'q':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, cntrl);
+ bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'T':
+ case 't':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var cntrl = pp.getReflectedControlPoint();
+ pp.control = cntrl;
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, cntrl);
+ bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'A':
+ case 'a':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var rx = pp.getScalar();
+ var ry = pp.getScalar();
+ var xAxisRotation = pp.getScalar() * (Math.PI / 180.0);
+ var largeArcFlag = pp.getScalar();
+ var sweepFlag = pp.getScalar();
+ var cp = pp.getAsCurrentPoint();
+
+ // Conversion from endpoint to center parameterization
+ // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
+ // x1', y1'
+ var currp = new svg.Point(
+ Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,
+ -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0
+ );
+ // adjust radii
+ var l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);
+ if (l > 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':
+ 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<points.length; i++) {
+ markers.push([points[i], angles[i]]);
+ }
+ return markers;
+ }
+ }
+ svg.Element.path.prototype = new svg.Element.PathElementBase;
+
+ // pattern element
+ svg.Element.pattern = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.createPattern = function(ctx, element) {
+ // render me using a temporary svg element
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);
+ tempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value);
+ tempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value);
+ tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);
+ tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);
+ tempSvg.children = this.children;
+
+ var c = document.createElement('canvas');
+ c.width = this.attribute('width').toPixels('x');
+ c.height = this.attribute('height').toPixels('y');
+ tempSvg.render(c.getContext('2d'));
+ return ctx.createPattern(c, 'repeat');
+ }
+ }
+ svg.Element.pattern.prototype = new svg.Element.ElementBase;
+
+ // marker element
+ svg.Element.marker = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.baseRender = this.render;
+ this.render = function(ctx, point, angle) {
+ ctx.translate(point.x, point.y);
+ if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);
+ if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);
+ ctx.save();
+
+ // render me using a temporary svg element
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);
+ tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);
+ tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);
+ tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);
+ tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);
+ tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));
+ tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));
+ tempSvg.children = this.children;
+ tempSvg.render(ctx);
+
+ ctx.restore();
+ if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);
+ if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);
+ ctx.translate(-point.x, -point.y);
+ }
+ }
+ svg.Element.marker.prototype = new svg.Element.ElementBase;
+
+ // definitions element
+ svg.Element.defs = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.render = function(ctx) {
+ // NOOP
+ }
+ }
+ svg.Element.defs.prototype = new svg.Element.ElementBase;
+
+ // base for gradients
+ svg.Element.GradientBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');
+
+ this.stops = [];
+ for (var i=0; i<this.children.length; i++) {
+ var child = this.children[i];
+ this.stops.push(child);
+ }
+
+ this.getGradient = function() {
+ // OVERRIDE ME!
+ }
+
+ this.createGradient = function(ctx, element) {
+ var stopsContainer = this;
+ if (this.attribute('xlink:href').hasValue()) {
+ stopsContainer = this.attribute('xlink:href').getDefinition();
+ }
+
+ var g = this.getGradient(ctx, element);
+ for (var i=0; i<stopsContainer.stops.length; i++) {
+ g.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color);
+ }
+
+ if (this.attribute('gradientTransform').hasValue()) {
+ // render as transformed pattern on temporary canvas
+ var rootView = svg.ViewPort.viewPorts[0];
+
+ var rect = new svg.Element.rect();
+ rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);
+ rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);
+ rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);
+ rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);
+
+ var group = new svg.Element.g();
+ group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);
+ group.children = [ rect ];
+
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['x'] = new svg.Property('x', 0);
+ tempSvg.attributes['y'] = new svg.Property('y', 0);
+ tempSvg.attributes['width'] = new svg.Property('width', rootView.width);
+ tempSvg.attributes['height'] = new svg.Property('height', rootView.height);
+ tempSvg.children = [ group ];
+
+ var c = document.createElement('canvas');
+ c.width = rootView.width;
+ c.height = rootView.height;
+ var tempCtx = c.getContext('2d');
+ tempCtx.fillStyle = g;
+ tempSvg.render(tempCtx);
+ return tempCtx.createPattern(c, 'no-repeat');
+ }
+
+ return g;
+ }
+ }
+ svg.Element.GradientBase.prototype = new svg.Element.ElementBase;
+
+ // linear gradient element
+ svg.Element.linearGradient = function(node) {
+ this.base = svg.Element.GradientBase;
+ this.base(node);
+
+ this.getGradient = function(ctx, element) {
+ var bb = element.getBoundingBox();
+
+ var x1 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('x1').numValue()
+ : this.attribute('x1').toPixels('x'));
+ var y1 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('y1').numValue()
+ : this.attribute('y1').toPixels('y'));
+ var x2 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('x2').numValue()
+ : this.attribute('x2').toPixels('x'));
+ var y2 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('y2').numValue()
+ : this.attribute('y2').toPixels('y'));
+
+ return ctx.createLinearGradient(x1, y1, x2, y2);
+ }
+ }
+ svg.Element.linearGradient.prototype = new svg.Element.GradientBase;
+
+ // radial gradient element
+ svg.Element.radialGradient = function(node) {
+ this.base = svg.Element.GradientBase;
+ this.base(node);
+
+ this.getGradient = function(ctx, element) {
+ var bb = element.getBoundingBox();
+
+ if (!this.attribute('cx').hasValue()) this.attribute('cx', true).value = '50%';
+ if (!this.attribute('cy').hasValue()) this.attribute('cy', true).value = '50%';
+ if (!this.attribute('r').hasValue()) this.attribute('r', true).value = '50%';
+
+ var cx = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('cx').numValue()
+ : this.attribute('cx').toPixels('x'));
+ var cy = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('cy').numValue()
+ : this.attribute('cy').toPixels('y'));
+
+ var fx = cx;
+ var fy = cy;
+ if (this.attribute('fx').hasValue()) {
+ fx = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('fx').numValue()
+ : this.attribute('fx').toPixels('x'));
+ }
+ if (this.attribute('fy').hasValue()) {
+ fy = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('fy').numValue()
+ : this.attribute('fy').toPixels('y'));
+ }
+
+ var r = (this.gradientUnits == 'objectBoundingBox'
+ ? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()
+ : this.attribute('r').toPixels());
+
+ return ctx.createRadialGradient(fx, fy, 0, cx, cy, r);
+ }
+ }
+ svg.Element.radialGradient.prototype = new svg.Element.GradientBase;
+
+ // gradient stop element
+ svg.Element.stop = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.offset = this.attribute('offset').numValue();
+
+ var stopColor = this.style('stop-color');
+ if (this.style('stop-opacity').hasValue()) stopColor = stopColor.addOpacity(this.style('stop-opacity').value);
+ this.color = stopColor.value;
+ }
+ svg.Element.stop.prototype = new svg.Element.ElementBase;
+
+ // animation base element
+ svg.Element.AnimateBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ svg.Animations.push(this);
+
+ this.duration = 0.0;
+ this.begin = this.attribute('begin').toMilliseconds();
+ this.maxDuration = this.begin + this.attribute('dur').toMilliseconds();
+
+ this.getProperty = function() {
+ var attributeType = this.attribute('attributeType').value;
+ var attributeName = this.attribute('attributeName').value;
+
+ if (attributeType == 'CSS') {
+ return this.parent.style(attributeName, true);
+ }
+ return this.parent.attribute(attributeName, true);
+ };
+
+ this.initialValue = null;
+ this.initialUnits = '';
+ this.removed = false;
+
+ this.calcValue = function() {
+ // OVERRIDE ME!
+ return '';
+ }
+
+ this.update = function(delta) {
+ // set initial value
+ if (this.initialValue == null) {
+ this.initialValue = this.getProperty().value;
+ this.initialUnits = this.getProperty().getUnits();
+ }
+
+ // if we're past the end time
+ if (this.duration > 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;
+ }
+
+ this.from = this.attribute('from');
+ this.to = this.attribute('to');
+ this.values = this.attribute('values');
+ if (this.values.hasValue()) this.values.value = this.values.value.split(';');
+
+ // fraction of duration we've covered
+ this.progress = function() {
+ var ret = { progress: (this.duration - this.begin) / (this.maxDuration - this.begin) };
+ if (this.values.hasValue()) {
+ var p = ret.progress * (this.values.value.length - 1);
+ var lb = Math.floor(p), ub = Math.ceil(p);
+ ret.from = new svg.Property('from', parseFloat(this.values.value[lb]));
+ ret.to = new svg.Property('to', parseFloat(this.values.value[ub]));
+ ret.progress = (p - lb) / (ub - lb);
+ }
+ else {
+ ret.from = this.from;
+ ret.to = this.to;
+ }
+ return ret;
+ }
+ }
+ 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 p = this.progress();
+
+ // tween value linearly
+ var newValue = p.from.numValue() + (p.to.numValue() - p.from.numValue()) * p.progress;
+ return newValue + this.initialUnits;
+ };
+ }
+ 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 p = this.progress();
+ var from = new RGBColor(p.from.value);
+ var to = new RGBColor(p.to.value);
+
+ if (from.ok && to.ok) {
+ // tween color linearly
+ var r = from.r + (to.r - from.r) * p.progress;
+ var g = from.g + (to.g - from.g) * p.progress;
+ var b = from.b + (to.b - from.b) * p.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; i<this.children.length; i++) {
+ var child = this.children[i];
+ if (child.type == 'font-face') {
+ this.fontFace = child;
+ if (child.style('font-family').hasValue()) {
+ svg.Definitions[child.style('font-family').value] = this;
+ }
+ }
+ else if (child.type == 'missing-glyph') this.missingGlyph = child;
+ else if (child.type == 'glyph') {
+ if (child.arabicForm != '') {
+ this.isRTL = true;
+ this.isArabic = true;
+ if (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = [];
+ this.glyphs[child.unicode][child.arabicForm] = child;
+ }
+ else {
+ this.glyphs[child.unicode] = child;
+ }
+ }
+ }
+ }
+ svg.Element.font.prototype = new svg.Element.ElementBase;
+
+ // font-face element
+ svg.Element.fontface = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.ascent = this.attribute('ascent').value;
+ this.descent = this.attribute('descent').value;
+ this.unitsPerEm = this.attribute('units-per-em').numValue();
+ }
+ svg.Element.fontface.prototype = new svg.Element.ElementBase;
+
+ // missing-glyph element
+ svg.Element.missingglyph = function(node) {
+ this.base = svg.Element.path;
+ this.base(node);
+
+ this.horizAdvX = 0;
+ }
+ svg.Element.missingglyph.prototype = new svg.Element.path;
+
+ // glyph element
+ svg.Element.glyph = function(node) {
+ this.base = svg.Element.path;
+ this.base(node);
+
+ this.horizAdvX = this.attribute('horiz-adv-x').numValue();
+ this.unicode = this.attribute('unicode').value;
+ this.arabicForm = this.attribute('arabic-form').value;
+ }
+ svg.Element.glyph.prototype = new svg.Element.path;
+
+ // text element
+ svg.Element.text = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ if (node != null) {
+ // add children
+ this.children = [];
+ for (var i=0; i<node.childNodes.length; i++) {
+ var childNode = node.childNodes[i];
+ if (childNode.nodeType == 1) { // capture tspan and tref nodes
+ this.addChild(childNode, true);
+ }
+ else if (childNode.nodeType == 3) { // capture text
+ this.addChild(new svg.Element.tspan(childNode), false);
+ }
+ }
+ }
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+ if (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value;
+ if (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value;
+ }
+
+ this.renderChildren = function(ctx) {
+ var textAnchor = this.style('text-anchor').valueOrDefault('start');
+ var x = this.attribute('x').toPixels('x');
+ var y = this.attribute('y').toPixels('y');
+ for (var i=0; i<this.children.length; i++) {
+ var child = this.children[i];
+
+ if (child.attribute('x').hasValue()) {
+ child.x = child.attribute('x').toPixels('x');
+ }
+ else {
+ if (child.attribute('dx').hasValue()) x += child.attribute('dx').toPixels('x');
+ child.x = x;
+ }
+
+ var childLength = child.measureText(ctx);
+ if (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group?
+ // loop through rest of children
+ var groupLength = childLength;
+ for (var j=i+1; j<this.children.length; j++) {
+ var childInGroup = this.children[j];
+ if (childInGroup.attribute('x').hasValue()) break; // new group
+ groupLength += childInGroup.measureText(ctx);
+ }
+ child.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0);
+ }
+ x = child.x + childLength;
+
+ if (child.attribute('y').hasValue()) {
+ child.y = child.attribute('y').toPixels('y');
+ }
+ else {
+ if (child.attribute('dy').hasValue()) y += child.attribute('dy').toPixels('y');
+ child.y = y;
+ }
+ y = child.y;
+
+ child.render(ctx);
+ }
+ }
+ }
+ svg.Element.text.prototype = new svg.Element.RenderedElementBase;
+
+ // text base
+ svg.Element.TextElementBase = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.getGlyph = function(font, text, i) {
+ var c = text[i];
+ var glyph = null;
+ if (font.isArabic) {
+ var arabicForm = 'isolated';
+ if ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal';
+ if (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';
+ if (i>0 && 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').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<text.length; i++) {
+ var glyph = this.getGlyph(customFont, text, i);
+ var scale = fontSize / customFont.fontFace.unitsPerEm;
+ ctx.translate(this.x, this.y);
+ ctx.scale(scale, -scale);
+ var lw = ctx.lineWidth;
+ ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;
+ if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);
+ glyph.render(ctx);
+ if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);
+ ctx.lineWidth = lw;
+ ctx.scale(1/scale, -1/scale);
+ ctx.translate(-this.x, -this.y);
+
+ this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;
+ if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {
+ this.x += dx[i];
+ }
+ }
+ return;
+ }
+
+ if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);
+ if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);
+ }
+
+ this.getText = function() {
+ // OVERRIDE ME
+ }
+
+ this.measureText = function(ctx) {
+ var customFont = this.parent.style('font-family').getDefinition();
+ if (customFont != null) {
+ var fontSize = this.parent.style('font-size').numValueOrDefault(svg.Font.Parse(svg.ctx.font).fontSize);
+ var measure = 0;
+ 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<text.length; i++) {
+ var glyph = this.getGlyph(customFont, text, i);
+ measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;
+ if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {
+ measure += dx[i];
+ }
+ }
+ return measure;
+ }
+
+ var textToMeasure = svg.compressSpaces(this.getText());
+ if (!ctx.measureText) return textToMeasure.length * 10;
+
+ ctx.save();
+ this.setContext(ctx);
+ var width = ctx.measureText(textToMeasure).width;
+ ctx.restore();
+ return width;
+ }
+ }
+ svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;
+
+ // tspan
+ svg.Element.tspan = function(node) {
+ this.base = svg.Element.TextElementBase;
+ this.base(node);
+
+ this.text = node.nodeType == 3 ? node.nodeValue : // text
+ node.childNodes.length > 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').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<node.childNodes.length; i++) {
+ if (node.childNodes[i].nodeType != 3) this.hasText = false;
+ }
+
+ // this might contain text
+ this.text = this.hasText ? node.childNodes[0].nodeValue : '';
+ this.getText = function() {
+ return this.text;
+ }
+
+ this.baseRenderChildren = this.renderChildren;
+ this.renderChildren = function(ctx) {
+ if (this.hasText) {
+ // render as text element
+ this.baseRenderChildren(ctx);
+ var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);
+ svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.toPixels('y'), this.x + this.measureText(ctx), this.y));
+ }
+ else {
+ // render as temporary group
+ var g = new svg.Element.g();
+ g.children = this.children;
+ g.parent = this;
+ g.render(ctx);
+ }
+ }
+
+ this.onclick = function() {
+ window.open(this.attribute('xlink:href').value);
+ }
+
+ this.onmousemove = function() {
+ svg.ctx.canvas.style.cursor = 'pointer';
+ }
+ }
+ svg.Element.a.prototype = new svg.Element.TextElementBase;
+
+ // image element
+ svg.Element.image = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ var href = this.attribute('xlink:href').value;
+ var isSvg = href.match(/\.svg$/)
+
+ svg.Images.push(this);
+ this.loaded = false;
+ if (!isSvg) {
+ this.img = document.createElement('img');
+ var that = this;
+ this.img.onload = function() { that.loaded = true; }
+ this.img.src = href;
+ }
+ else {
+ this.img = svg.ajax(href);
+ this.loaded = true;
+ }
+
+ this.renderChildren = function(ctx) {
+ var x = this.attribute('x').toPixels('x');
+ var y = this.attribute('y').toPixels('y');
+
+ var width = this.attribute('width').toPixels('x');
+ var height = this.attribute('height').toPixels('y');
+ if (width == 0 || height == 0) return;
+
+ ctx.save();
+ if (isSvg) {
+ ctx.drawSvg(this.img, x, y, width, height);
+ }
+ else {
+ ctx.translate(x, y);
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ width,
+ this.img.width,
+ height,
+ this.img.height,
+ 0,
+ 0);
+ ctx.drawImage(this.img, 0, 0);
+ }
+ ctx.restore();
+ }
+ }
+ svg.Element.image.prototype = new svg.Element.RenderedElementBase;
+
+ // group element
+ svg.Element.g = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.getBoundingBox = function() {
+ var bb = new svg.BoundingBox();
+ for (var i=0; i<this.children.length; i++) {
+ bb.addBoundingBox(this.children[i].getBoundingBox());
+ }
+ return bb;
+ };
+ }
+ svg.Element.g.prototype = new svg.Element.RenderedElementBase;
+
+ // symbol element
+ svg.Element.symbol = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+
+ // viewbox
+ if (this.attribute('viewBox').hasValue()) {
+ var viewBox = svg.ToNumberArray(this.attribute('viewBox').value);
+ var minX = viewBox[0];
+ var minY = viewBox[1];
+ width = viewBox[2];
+ height = viewBox[3];
+
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ this.attribute('width').toPixels('x'),
+ width,
+ this.attribute('height').toPixels('y'),
+ height,
+ minX,
+ minY);
+
+ svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);
+ }
+ }
+ }
+ svg.Element.symbol.prototype = new svg.Element.RenderedElementBase;
+
+ // style element
+ svg.Element.style = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ // text, or spaces then CDATA
+ var css = node.childNodes[0].nodeValue + (node.childNodes.length > 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<cssDefs.length; i++) {
+ if (svg.trim(cssDefs[i]) != '') {
+ var cssDef = cssDefs[i].split('{');
+ var cssClasses = cssDef[0].split(',');
+ var cssProps = cssDef[1].split(';');
+ for (var j=0; j<cssClasses.length; j++) {
+ var cssClass = svg.trim(cssClasses[j]);
+ if (cssClass != '') {
+ var props = {};
+ for (var k=0; k<cssProps.length; k++) {
+ var prop = cssProps[k].indexOf(':');
+ var name = cssProps[k].substr(0, prop);
+ var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);
+ if (name != null && value != null) {
+ props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));
+ }
+ }
+ svg.Styles[cssClass] = props;
+ if (cssClass == '@font-face') {
+ var fontFamily = props['font-family'].value.replace(/"/g,'');
+ var srcs = props['src'].value.split(',');
+ for (var s=0; s<srcs.length; s++) {
+ if (srcs[s].indexOf('format("svg")') > 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<fonts.length; f++) {
+ var font = svg.CreateElement(fonts[f]);
+ svg.Definitions[fontFamily] = font;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ svg.Element.style.prototype = new svg.Element.ElementBase;
+
+ // use element
+ svg.Element.use = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+ if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').toPixels('x'), 0);
+ if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').toPixels('y'));
+ }
+
+ this.getDefinition = function() {
+ var element = this.attribute('xlink:href').getDefinition();
+ if (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value;
+ if (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value;
+ return element;
+ }
+
+ this.path = function(ctx) {
+ var element = this.getDefinition();
+ if (element != null) element.path(ctx);
+ }
+
+ this.renderChildren = function(ctx) {
+ var element = this.getDefinition();
+ if (element != null) {
+ // temporarily detach from parent and render
+ var oldParent = element.parent;
+ element.parent = null;
+ element.render(ctx);
+ element.parent = oldParent;
+ }
+ }
+ }
+ svg.Element.use.prototype = new svg.Element.RenderedElementBase;
+
+ // mask element
+ svg.Element.mask = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx, element) {
+ // render as temp svg
+ var x = this.attribute('x').toPixels('x');
+ var y = this.attribute('y').toPixels('y');
+ var width = this.attribute('width').toPixels('x');
+ var height = this.attribute('height').toPixels('y');
+
+ // temporarily remove mask to avoid recursion
+ var mask = element.attribute('mask').value;
+ element.attribute('mask').value = '';
+
+ var cMask = document.createElement('canvas');
+ cMask.width = x + width;
+ cMask.height = y + height;
+ var maskCtx = cMask.getContext('2d');
+ this.renderChildren(maskCtx);
+
+ var c = document.createElement('canvas');
+ c.width = x + width;
+ c.height = y + height;
+ var tempCtx = c.getContext('2d');
+ element.render(tempCtx);
+ tempCtx.globalCompositeOperation = 'destination-in';
+ tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');
+ tempCtx.fillRect(0, 0, x + width, y + height);
+
+ ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');
+ ctx.fillRect(0, 0, x + width, y + height);
+
+ // reassign mask
+ element.attribute('mask').value = mask;
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.mask.prototype = new svg.Element.ElementBase;
+
+ // clip element
+ svg.Element.clipPath = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx) {
+ for (var i=0; i<this.children.length; i++) {
+ if (this.children[i].path) {
+ this.children[i].path(ctx);
+ ctx.clip();
+ }
+ }
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.clipPath.prototype = new svg.Element.ElementBase;
+
+ // filters
+ svg.Element.filter = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx, element) {
+ // render as temp svg
+ var bb = element.getBoundingBox();
+ var x = this.attribute('x').toPixels('x');
+ var y = this.attribute('y').toPixels('y');
+ if (x == 0 || y == 0) {
+ x = bb.x1;
+ y = bb.y1;
+ }
+ var width = this.attribute('width').toPixels('x');
+ var height = this.attribute('height').toPixels('y');
+ if (width == 0 || height == 0) {
+ width = bb.width();
+ height = bb.height();
+ }
+
+ // temporarily remove filter to avoid recursion
+ var filter = element.style('filter').value;
+ element.style('filter').value = '';
+
+ // max filter distance
+ var extraPercent = .20;
+ var px = extraPercent * width;
+ var py = extraPercent * height;
+
+ var c = document.createElement('canvas');
+ c.width = width + 2*px;
+ c.height = height + 2*py;
+ var tempCtx = c.getContext('2d');
+ tempCtx.translate(-x + px, -y + py);
+ element.render(tempCtx);
+
+ // apply filters
+ for (var i=0; i<this.children.length; i++) {
+ this.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);
+ }
+
+ // render on me
+ ctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);
+
+ // reassign filter
+ element.style('filter', true).value = filter;
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.filter.prototype = new svg.Element.ElementBase;
+
+ svg.Element.feGaussianBlur = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ function make_fgauss(sigma) {
+ sigma = Math.max(sigma, 0.01);
+ var len = Math.ceil(sigma * 4.0) + 1;
+ mask = [];
+ for (var i = 0; i < len; i++) {
+ mask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma));
+ }
+ return mask;
+ }
+
+ function normalize(mask) {
+ var sum = 0;
+ for (var i = 1; i < mask.length; i++) {
+ sum += Math.abs(mask[i]);
+ }
+ sum = 2 * sum + Math.abs(mask[0]);
+ for (var i = 0; i < mask.length; i++) {
+ mask[i] /= sum;
+ }
+ return mask;
+ }
+
+ function convolve_even(src, dst, mask, width, height) {
+ for (var y = 0; y < height; y++) {
+ for (var x = 0; x < width; x++) {
+ var a = imGet(src, x, y, width, height, 3)/255;
+ for (var rgba = 0; rgba < 4; rgba++) {
+ var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a);
+ for (var i = 1; i < mask.length; i++) {
+ var a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255;
+ var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255;
+ sum += mask[i] *
+ ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) +
+ (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2));
+ }
+ imSet(dst, y, x, height, width, rgba, sum);
+ }
+ }
+ }
+ }
+
+ function imGet(img, x, y, width, height, rgba) {
+ return img[y*width*4 + x*4 + rgba];
+ }
+
+ function imSet(img, x, y, width, height, rgba, val) {
+ img[y*width*4 + x*4 + rgba] = val;
+ }
+
+ function blur(ctx, width, height, sigma)
+ {
+ var srcData = ctx.getImageData(0, 0, width, height);
+ var mask = make_fgauss(sigma);
+ mask = normalize(mask);
+ tmp = [];
+ convolve_even(srcData.data, tmp, mask, width, height);
+ convolve_even(tmp, srcData.data, mask, height, width);
+ ctx.clearRect(0, 0, width, height);
+ ctx.putImageData(srcData, 0, 0);
+ }
+
+ this.apply = function(ctx, x, y, width, height) {
+ // assuming x==0 && y==0 for now
+ blur(ctx, width, height, this.attribute('stdDeviation').numValue());
+ }
+ }
+ svg.Element.filter.prototype = new svg.Element.feGaussianBlur;
+
+ // title element, do nothing
+ svg.Element.title = function(node) {
+ }
+ svg.Element.title.prototype = new svg.Element.ElementBase;
+
+ // desc element, do nothing
+ svg.Element.desc = function(node) {
+ }
+ svg.Element.desc.prototype = new svg.Element.ElementBase;
+
+ svg.Element.MISSING = function(node) {
+ console.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.');
+ }
+ svg.Element.MISSING.prototype = new svg.Element.ElementBase;
+
+ // element factory
+ svg.CreateElement = function(node) {
+ var className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace
+ className = className.replace(/\-/g,''); // remove dashes
+ var e = null;
+ if (typeof(svg.Element[className]) != 'undefined') {
+ e = new svg.Element[className](node);
+ }
+ else {
+ e = new svg.Element.MISSING(node);
+ }
+
+ e.type = node.nodeName;
+ return e;
+ }
+
+ // load from url
+ svg.load = function(ctx, url) {
+ svg.loadXml(ctx, svg.ajax(url));
+ }
+
+ // load from xml
+ svg.loadXml = function(ctx, xml) {
+ svg.loadXmlDoc(ctx, svg.parseXml(xml));
+ }
+
+ svg.loadXmlDoc = function(ctx, dom) {
+ svg.init(ctx);
+
+ var mapXY = function(p) {
+ var e = ctx.canvas;
+ while (e) {
+ p.x -= e.offsetLeft;
+ p.y -= e.offsetTop;
+ e = e.offsetParent;
+ }
+ if (window.scrollX) p.x += window.scrollX;
+ if (window.scrollY) p.y += window.scrollY;
+ return p;
+ }
+
+ // bind mouse
+ if (svg.opts['ignoreMouse'] != true) {
+ ctx.canvas.onclick = function(e) {
+ var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));
+ svg.Mouse.onclick(p.x, p.y);
+ };
+ ctx.canvas.onmousemove = function(e) {
+ var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));
+ svg.Mouse.onmousemove(p.x, p.y);
+ };
+ }
+
+ var e = svg.CreateElement(dom.documentElement);
+ e.root = true;
+
+ // render loop
+ var isFirstRender = true;
+ var draw = function() {
+ svg.ViewPort.Clear();
+ if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);
+
+ if (svg.opts['ignoreDimensions'] != true) {
+ // set canvas size
+ if (e.style('width').hasValue()) {
+ ctx.canvas.width = e.style('width').toPixels('x');
+ ctx.canvas.style.width = ctx.canvas.width + 'px';
+ }
+ if (e.style('height').hasValue()) {
+ ctx.canvas.height = e.style('height').toPixels('y');
+ ctx.canvas.style.height = ctx.canvas.height + 'px';
+ }
+ }
+ var cWidth = ctx.canvas.clientWidth || ctx.canvas.width;
+ var cHeight = ctx.canvas.clientHeight || ctx.canvas.height;
+ if (svg.opts['ignoreDimensions'] == true && e.style('width').hasValue() && e.style('height').hasValue()) {
+ cWidth = e.style('width').toPixels('x');
+ cHeight = e.style('height').toPixels('y');
+ }
+ svg.ViewPort.SetCurrent(cWidth, cHeight);
+
+ if (svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];
+ if (svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];
+ if (svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) {
+ var xRatio = 1, yRatio = 1, viewBox = svg.ToNumberArray(e.attribute('viewBox').value);
+ if (e.attribute('width').hasValue()) xRatio = e.attribute('width').toPixels('x') / svg.opts['scaleWidth'];
+ else if (!isNaN(viewBox[2])) xRatio = viewBox[2] / svg.opts['scaleWidth'];
+ if (e.attribute('height').hasValue()) yRatio = e.attribute('height').toPixels('y') / svg.opts['scaleHeight'];
+ else if (!isNaN(viewBox[3])) yRatio = viewBox[3] / svg.opts['scaleHeight'];
+
+ e.attribute('width', true).value = svg.opts['scaleWidth'];
+ e.attribute('height', true).value = svg.opts['scaleHeight'];
+ e.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio);
+ e.attribute('preserveAspectRatio', true).value = 'none';
+ }
+
+ // clear and render
+ if (svg.opts['ignoreClear'] != true) {
+ ctx.clearRect(0, 0, cWidth, cHeight);
+ }
+ e.render(ctx);
+ if (isFirstRender) {
+ isFirstRender = false;
+ if (typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback']();
+ }
+ }
+
+ var waitingForImages = true;
+ if (svg.ImagesLoaded()) {
+ waitingForImages = false;
+ draw();
+ }
+ svg.intervalID = setInterval(function() {
+ var needUpdate = false;
+
+ if (waitingForImages && svg.ImagesLoaded()) {
+ waitingForImages = false;
+ needUpdate = true;
+ }
+
+ // need update from mouse events?
+ if (svg.opts['ignoreMouse'] != true) {
+ needUpdate = needUpdate | svg.Mouse.hasEvents();
+ }
+
+ // need update from animations?
+ if (svg.opts['ignoreAnimation'] != true) {
+ for (var i=0; i<svg.Animations.length; i++) {
+ needUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);
+ }
+ }
+
+ // need update from redraw?
+ if (typeof(svg.opts['forceRedraw']) == 'function') {
+ if (svg.opts['forceRedraw']() == true) needUpdate = true;
+ }
+
+ // render if needed
+ if (needUpdate) {
+ draw();
+ svg.Mouse.runEvents(); // run and clear our events
+ }
+ }, 1000 / svg.FRAMERATE);
+ }
+
+ svg.stop = function() {
+ if (svg.intervalID) {
+ clearInterval(svg.intervalID);
+ }
+ }
+
+ svg.Mouse = new (function() {
+ this.events = [];
+ this.hasEvents = function() { return this.events.length != 0; }
+
+ this.onclick = function(x, y) {
+ this.events.push({ type: 'onclick', x: x, y: y,
+ run: function(e) { if (e.onclick) e.onclick(); }
+ });
+ }
+
+ this.onmousemove = function(x, y) {
+ this.events.push({ type: 'onmousemove', x: x, y: y,
+ run: function(e) { if (e.onmousemove) e.onmousemove(); }
+ });
+ }
+
+ this.eventElements = [];
+
+ this.checkPath = function(element, ctx) {
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;
+ }
+ }
+
+ this.checkBoundingBox = function(element, bb) {
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;
+ }
+ }
+
+ this.runEvents = function() {
+ svg.ctx.canvas.style.cursor = '';
+
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ var element = this.eventElements[i];
+ while (element) {
+ e.run(element);
+ element = element.parent;
+ }
+ }
+
+ // done running, clear
+ this.events = [];
+ this.eventElements = [];
+ }
+ });
+
+ return svg;
+ }
+})();
+
+if (CanvasRenderingContext2D) {
+ CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) {
+ canvg(this.canvas, s, {
+ ignoreMouse: true,
+ ignoreAnimation: true,
+ ignoreDimensions: true,
+ ignoreClear: true,
+ offsetX: dx,
+ offsetY: dy,
+ scaleWidth: dw,
+ scaleHeight: dh
+ });
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/js/canvg/rgbcolor.js b/files_svgedit/js/canvg/rgbcolor.js
new file mode 100644
index 000000000..04423f29b
--- /dev/null
+++ b/files_svgedit/js/canvg/rgbcolor.js
@@ -0,0 +1,288 @@
+/**
+ * A class to parse color values
+ * @author Stoyan Stefanov <sstoo@gmail.com>
+ * @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/files_svgedit/js/ocsvg.js b/files_svgedit/js/ocsvg.js
new file mode 100644
index 000000000..d6e05754d
--- /dev/null
+++ b/files_svgedit/js/ocsvg.js
@@ -0,0 +1,9 @@
+$(document).ready(function() {
+ if(typeof FileActions!=='undefined'){
+ FileActions.register('image/svg+xml','Edit','',function(filename){
+ window.location = OC.filePath('files_svgedit', '', 'index.php')
+ + "?file=" + $('#dir').val() + "/" + filename;
+ });
+ FileActions.setDefault('image/svg+xml','Edit');
+ }
+});
diff --git a/files_svgedit/js/ocsvgEditor.js b/files_svgedit/js/ocsvgEditor.js
new file mode 100644
index 000000000..74b3dd55e
--- /dev/null
+++ b/files_svgedit/js/ocsvgEditor.js
@@ -0,0 +1,196 @@
+var svgCanvas = null;
+var ocsvg = {
+ frameDoc: null,
+ frameWin: null,
+ prefsShown: false,
+ currentFile: {
+ filecontents: '',
+ path: '',
+ mtime: 0
+ },
+ exportFile: {
+ filecontents: '',
+ path: '',
+ mtime: 0
+ },
+ changed: false,
+ setEditorSize: function() {
+ // Fits the size of editor area to the available space
+ fillWindow($('#svgEditor'));
+ },
+ setFilePath: function(newPath) {
+ // set a new path for saving the file
+ this.currentFile.path = newPath;
+ },
+ setFileContents: function(newContents) {
+ // set file contents
+ this.currentFile.filecontents = newContents;
+ },
+ setFileMTime: function(mtime) {
+ // set last modified time of the file
+ this.currentFile.mtime = mtime;
+ },
+ setFileContentsSvg: function(svgString, e) {
+ ocsvg.setFileContents('<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' + svgString);
+ },
+ init: function(file) {
+ ocsvg.setFileContents(file.contents);
+ ocsvg.setFilePath(file.path);
+ ocsvg.setFileMTime(file.mtime);
+ },
+ saveFile: function(data, callback) {
+ var savePath;
+ if(data.force) {
+ savePath = data.file.path;
+ } else {
+ savePath = prompt(t('files_svgedit', 'Save as'), data.file.path);
+ }
+ if(savePath === null || savePath == '') {
+ return;
+ } else {
+ data.file.path = savePath;
+ $.post(
+ OC.filePath('files_svgedit','ajax','save.php'),
+ data,
+ function(result) {
+ if(result.status!='success'){
+ // Save failed
+ data.force = confirm(
+ t('files_svgedit', 'Could not save:') + "\n"
+ + savePath + "\n"
+ + result.data.message + "\n"
+ + t('files_svgedit', 'Save anyway?')
+ );
+ if(callback && callback.error) {
+ callback.error(result);
+ }
+ ocsvg.saveFile(data);
+ } else {
+ // Save OK
+ // Update mtime:
+ data.file.mtime = result.data.mtime;
+ if(callback && callback.success) {
+ callback.success(result);
+ }
+ alert(t('files_svgedit', 'Successfully saved!'));
+ }
+ },
+ 'json'
+ );
+ }
+ },
+ save: function(svgString, error) {
+ if(error) {
+ alert("Couldn't get SVG contents:\n\n" + error);
+ return;
+ }
+ ocsvg.setFileContentsSvg(svgString);
+ //saveFile
+ ocsvg.saveFile(
+ {
+ file: ocsvg.currentFile,
+ },
+ {success: function(result) {ocsvg.changed = false;}}
+ );
+ },
+ pngExport: function(svgString, error) {
+ if(error) {
+ alert("Couldn't get SVG contents:\n\n" + error);
+ return;
+ }
+ // reimplementing png export is easier than trying to use svg-edit handlers...
+ if(!$('#exportCanvas').length) {
+ $('<canvas>', {id: 'exportCanvas'}).hide().appendTo('body');
+ }
+ var canvas = $('#exportCanvas')[0];
+
+ canvas.width = ocsvg.frameWin.svgCanvas.contentW;
+ canvas.height = ocsvg.frameWin.svgCanvas.contentH;
+ $('#ocsvgBtnExport').val(t('files_svgedit', 'Rendering...'));
+ canvg(canvas, svgString, {renderCallback: function() {
+ var datauri = canvas.toDataURL('image/png');
+ $('#ocsvgBtnExport').val(t('files_svgedit', 'Export PNG'));
+ if(!ocsvg.exportFile.path.length) {
+ var savePath = ocsvg.currentFile.path;
+ if(savePath.substr(-4) == '.svg') {
+ savePath = savePath.substr(0, savePath.length - 4);
+ }
+ ocsvg.exportFile.path = savePath + '.png';
+ }
+ ocsvg.exportFile.filecontents = datauri;
+ ocsvg.saveFile({
+ file: ocsvg.exportFile,
+ base64encoded: true,
+ base64type: 'image/png'
+ });
+ }});
+ },
+ changedHandler: function() {
+ if(!ocsvg.changed) {
+ ocsvg.changed = true;
+ }
+ },
+ confirmExit: function() {
+ if(ocsvg.changed) {
+ return t('files_svgedit', 'File has unsaved content. Really want to quit?');
+ } else {
+ return null;
+ }
+ }
+};
+
+$(document).ready(function() {
+ // set control buttons' onclick handlers:
+ $('#ocsvgBtnSave').click(function() {
+ svgCanvas.getSvgString()(ocsvg.save);
+ });
+ $('#ocsvgBtnExport').click(function() {
+ svgCanvas.getSvgString()(ocsvg.pngExport);
+ });
+ $('#ocsvgBtnClose').click(function() {
+ var dir = ocsvg.currentFile.path.replace(/\/[^\/]*$/, '');
+ window.location = OC.linkTo('files', 'index.php') + '?dir=' + dir;
+ });
+
+ // import file
+ ocsvg.init(ocsvgFile);
+
+ // set editor's size fit into the window when resizing it:
+ $(window).resize(function() {
+ ocsvg.setEditorSize();
+ }).resize();
+
+ // initialize editor frame:
+ var frame = document.getElementById('svgedit');
+ $(frame).load(function() {
+ ocsvg.frameDoc = $(frame).contents();
+ ocsvg.frameWin = frame.contentWindow;
+ svgCanvas = new embedded_svg_edit(frame);
+
+ // hide main menu button, then shift the tool bar to the left border:
+ ocsvg.frameDoc.find('#main_button').hide().next().css('left', 0).css('padding-left', 2).css('padding-top', 2);
+ // fix broken color select field
+ ocsvg.frameDoc.find('#fill_color,#stroke_color').find('svg').css('height', '100%');
+ // set handler for show preferences button:
+ //$('#ocsvgBtnPrefs').click(ocsvg.showPreferences);
+ $('#ocsvgBtnPrefs').click(function() {
+ ocsvg.frameDoc.find('#svg_prefs').toggle();
+ });
+ // set handler for preferences cancel button:
+ ocsvg.frameDoc.find('#tool_prefs_cancel').click(function() {
+ ocsvg.frameDoc.find('#svg_prefs').hide();
+ });
+
+ svgCanvas.setSvgString(ocsvg.currentFile.filecontents)(function(data, error) {
+ if(error) {
+ alert("Could not load file!\n\n" + error);
+ }
+ //svgCanvas.bind('changed', ocsvg.changedHandler)();
+ //TODO: svgCanvas.bind doesn't work here as I expect...
+ ocsvg.frameWin.svgCanvas.bind('changed', ocsvg.changedHandler);
+ });
+
+ // set confirmation on exit (only if content has changed);
+ ocsvg.frameWin.onbeforeunload = ocsvg.confirmExit;
+ });
+});
diff --git a/files_svgedit/js/svg-edit/embedapi.js b/files_svgedit/js/svg-edit/embedapi.js
new file mode 100644
index 000000000..8debfd6da
--- /dev/null
+++ b/files_svgedit/js/svg-edit/embedapi.js
@@ -0,0 +1,173 @@
+/*
+function embedded_svg_edit(frame){
+ //initialize communication
+ this.frame = frame;
+ this.stack = []; //callback stack
+
+ var editapi = this;
+
+ window.addEventListener("message", function(e){
+ if(e.data.substr(0,5) == "ERROR"){
+ editapi.stack.splice(0,1)[0](e.data,"error")
+ }else{
+ editapi.stack.splice(0,1)[0](e.data)
+ }
+ }, false)
+}
+
+embedded_svg_edit.prototype.call = function(code, callback){
+ this.stack.push(callback);
+ this.frame.contentWindow.postMessage(code,"*");
+}
+
+embedded_svg_edit.prototype.getSvgString = function(callback){
+ this.call("svgCanvas.getSvgString()",callback)
+}
+
+embedded_svg_edit.prototype.setSvgString = function(svg){
+ this.call("svgCanvas.setSvgString('"+svg.replace(/'/g, "\\'")+"')");
+}
+*/
+
+
+/*
+Embedded SVG-edit API
+
+General usage:
+- Have an iframe somewhere pointing to a version of svg-edit > r1000
+- Initialize the magic with:
+var svgCanvas = new embedded_svg_edit(window.frames['svgedit']);
+- Pass functions in this format:
+svgCanvas.setSvgString("string")
+- Or if a callback is needed:
+svgCanvas.setSvgString("string")(function(data, error){
+ if(error){
+ //there was an error
+ }else{
+ //handle data
+ }
+})
+
+Everything is done with the same API as the real svg-edit,
+and all documentation is unchanged. The only difference is
+when handling returns, the callback notation is used instead.
+
+var blah = new embedded_svg_edit(window.frames['svgedit']);
+blah.clearSelection("woot","blah",1337,[1,2,3,4,5,"moo"],-42,{a: "tree",b:6, c: 9})(function(){console.log("GET DATA",arguments)})
+*/
+
+function embedded_svg_edit(frame){
+ //initialize communication
+ this.frame = frame;
+ //this.stack = [] //callback stack
+ this.callbacks = {}; //successor to stack
+ this.encode = embedded_svg_edit.encode;
+ //List of functions extracted with this:
+ //Run in firebug on http://svg-edit.googlecode.com/svn/trunk/docs/files/svgcanvas-js.html
+
+ //for(var i=0,q=[],f = document.querySelectorAll("div.CFunction h3.CTitle a");i<f.length;i++){q.push(f[i].name)};q
+ //var functions = ["clearSelection", "addToSelection", "removeFromSelection", "open", "save", "getSvgString", "setSvgString",
+ //"createLayer", "deleteCurrentLayer", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition", "setLayerVisibility",
+ //"moveSelectedToLayer", "clear"];
+
+
+ //Newer, well, it extracts things that aren't documented as well. All functions accessible through the normal thingy can now be accessed though the API
+ //var l=[];for(var i in svgCanvas){if(typeof svgCanvas[i] == "function"){l.push(i)}};
+ //run in svgedit itself
+ var functions = ["updateElementFromJson", "embedImage", "fixOperaXML", "clearSelection", "addToSelection",
+ "removeFromSelection", "addNodeToSelection", "open", "save", "getSvgString", "setSvgString", "createLayer",
+ "deleteCurrentLayer", "getCurrentDrawing", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition",
+ "setLayerVisibility", "moveSelectedToLayer", "clear", "clearPath", "getNodePoint", "clonePathNode", "deletePathNode",
+ "getResolution", "getImageTitle", "setImageTitle", "setResolution", "setBBoxZoom", "setZoom", "getMode", "setMode",
+ "getStrokeColor", "setStrokeColor", "getFillColor", "setFillColor", "setStrokePaint", "setFillPaint", "getStrokeWidth",
+ "setStrokeWidth", "getStrokeStyle", "setStrokeStyle", "getOpacity", "setOpacity", "getFillOpacity", "setFillOpacity",
+ "getStrokeOpacity", "setStrokeOpacity", "getTransformList", "getBBox", "getRotationAngle", "setRotationAngle", "each",
+ "bind", "setIdPrefix", "getBold", "setBold", "getItalic", "setItalic", "getFontFamily", "setFontFamily", "getFontSize",
+ "setFontSize", "getText", "setTextContent", "setImageURL", "setRectRadius", "setSegType", "quickClone",
+ "changeSelectedAttributeNoUndo", "changeSelectedAttribute", "deleteSelectedElements", "groupSelectedElements",
+ "ungroupSelectedElement", "moveToTopSelectedElement", "moveToBottomSelectedElement", "moveSelectedElements",
+ "getStrokedBBox", "getVisibleElements", "cycleElement", "getUndoStackSize", "getRedoStackSize", "getNextUndoCommandText",
+ "getNextRedoCommandText", "undo", "redo", "cloneSelectedElements", "alignSelectedElements", "getZoom", "getVersion",
+ "setIconSize", "setLang", "setCustomHandlers"];
+
+ //TODO: rewrite the following, it's pretty scary.
+ for(var i = 0; i < functions.length; i++){
+ this[functions[i]] = (function(d){
+ return function(){
+ var t = this //new callback
+ for(var g = 0, args = []; g < arguments.length; g++){
+ args.push(arguments[g]);
+ }
+ var cbid = t.send(d,args, function(){}) //the callback (currently it's nothing, but will be set later
+
+ return function(newcallback){
+ t.callbacks[cbid] = newcallback; //set callback
+ }
+ }
+ })(functions[i])
+ }
+ //TODO: use AddEvent for Trident browsers, currently they dont support SVG, but they do support onmessage
+ var t = this;
+ window.addEventListener("message", function(e){
+ if(e.data.substr(0,4)=="SVGe"){ //because svg-edit is too longish
+ var data = e.data.substr(4);
+ var cbid = data.substr(0, data.indexOf(";"));
+ if(t.callbacks[cbid]){
+ if(data.substr(0,6) != "error:"){
+ t.callbacks[cbid](eval("("+data.substr(cbid.length+1)+")"))
+ }else{
+ t.callbacks[cbid](data, "error");
+ }
+ }
+ }
+ //this.stack.shift()[0](e.data,e.data.substr(0,5) == "ERROR"?'error':null) //replace with shift
+ }, false)
+}
+
+embedded_svg_edit.encode = function(obj){
+ //simple partial JSON encoder implementation
+ if(window.JSON && JSON.stringify) return JSON.stringify(obj);
+ var enc = arguments.callee; //for purposes of recursion
+
+ if(typeof obj == "boolean" || typeof obj == "number"){
+ return obj+'' //should work...
+ }else if(typeof obj == "string"){
+ //a large portion of this is stolen from Douglas Crockford's json2.js
+ return '"'+
+ obj.replace(
+ /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g
+ , function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ })
+ +'"'; //note that this isn't quite as purtyful as the usualness
+ }else if(obj.length){ //simple hackish test for arrayish-ness
+ for(var i = 0; i < obj.length; i++){
+ obj[i] = enc(obj[i]); //encode every sub-thingy on top
+ }
+ return "["+obj.join(",")+"]";
+ }else{
+ var pairs = []; //pairs will be stored here
+ for(var k in obj){ //loop through thingys
+ pairs.push(enc(k)+":"+enc(obj[k])); //key: value
+ }
+ return "{"+pairs.join(",")+"}" //wrap in the braces
+ }
+}
+
+embedded_svg_edit.prototype.send = function(name, args, callback){
+ var cbid = Math.floor(Math.random()*31776352877+993577).toString();
+ //this.stack.push(callback);
+ this.callbacks[cbid] = callback;
+ for(var argstr = [], i = 0; i < args.length; i++){
+ argstr.push(this.encode(args[i]))
+ }
+ var t = this;
+ setTimeout(function(){//delay for the callback to be set in case its synchronous
+ t.frame.contentWindow.postMessage(cbid+";svgCanvas['"+name+"']("+argstr.join(",")+")","*");
+ }, 0);
+ return cbid;
+ //this.stack.shift()("svgCanvas['"+name+"']("+argstr.join(",")+")")
+}
+
+
+
diff --git a/files_svgedit/svg-edit/.svn/all-wcprops b/files_svgedit/svg-edit/.svn/all-wcprops
new file mode 100644
index 000000000..db02e8a27
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/all-wcprops
@@ -0,0 +1,125 @@
+K 25
+svn:wc:ra_dav:version-url
+V 31
+/svn/!svn/ver/2067/trunk/editor
+END
+embedapi.js
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/1984/trunk/editor/embedapi.js
+END
+contextmenu.js
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/2055/trunk/editor/contextmenu.js
+END
+svg-editor.html
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/2060/trunk/editor/svg-editor.html
+END
+svg-editor.manifest
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1201/trunk/editor/svg-editor.manifest
+END
+jquery.js
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/2052/trunk/editor/jquery.js
+END
+select.js
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/1984/trunk/editor/select.js
+END
+svgutils.js
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/1996/trunk/editor/svgutils.js
+END
+browser.js
+K 25
+svn:wc:ra_dav:version-url
+V 42
+/svn/!svn/ver/2065/trunk/editor/browser.js
+END
+svg-editor.js
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/2067/trunk/editor/svg-editor.js
+END
+sanitize.js
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/2057/trunk/editor/sanitize.js
+END
+svgtransformlist.js
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1984/trunk/editor/svgtransformlist.js
+END
+math.js
+K 25
+svn:wc:ra_dav:version-url
+V 39
+/svn/!svn/ver/1984/trunk/editor/math.js
+END
+svgcanvas.js
+K 25
+svn:wc:ra_dav:version-url
+V 44
+/svn/!svn/ver/2066/trunk/editor/svgcanvas.js
+END
+browser-not-supported.html
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/1923/trunk/editor/browser-not-supported.html
+END
+path.js
+K 25
+svn:wc:ra_dav:version-url
+V 39
+/svn/!svn/ver/2025/trunk/editor/path.js
+END
+draw.js
+K 25
+svn:wc:ra_dav:version-url
+V 39
+/svn/!svn/ver/1993/trunk/editor/draw.js
+END
+embedapi.html
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/1734/trunk/editor/embedapi.html
+END
+svg-editor.css
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/2048/trunk/editor/svg-editor.css
+END
+history.js
+K 25
+svn:wc:ra_dav:version-url
+V 42
+/svn/!svn/ver/1993/trunk/editor/history.js
+END
+units.js
+K 25
+svn:wc:ra_dav:version-url
+V 40
+/svn/!svn/ver/1991/trunk/editor/units.js
+END
diff --git a/files_svgedit/svg-edit/.svn/entries b/files_svgedit/svg-edit/.svn/entries
new file mode 100644
index 000000000..7ac258990
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/entries
@@ -0,0 +1,741 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor
+http://svg-edit.googlecode.com/svn
+
+
+
+2012-03-22T10:31:25.963262Z
+2067
+asyazwan@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+embedapi.js
+file
+
+
+
+
+2012-03-25T18:41:47.472355Z
+5616d0cf42836b152bc7f8e6b6c4205f
+2011-02-09T06:14:47.166399Z
+1984
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7329
+
+contextmenu.js
+file
+
+
+
+
+2012-03-25T18:41:47.476355Z
+958c8c4ac1d6e460f2bb1c37b1e1260d
+2012-02-25T02:13:18.242841Z
+2055
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2587
+
+jquery.js
+file
+
+
+
+
+2012-03-25T18:41:47.476355Z
+ddb84c1587287b2df08966081ef063bf
+2012-02-23T02:48:21.539764Z
+2052
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+93868
+
+select.js
+file
+
+
+
+
+2012-03-25T18:41:47.476355Z
+eebadb50afe7a0f10f1d9a381742a083
+2011-02-09T06:14:47.166399Z
+1984
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15322
+
+svgicons
+dir
+
+browser.js
+file
+
+
+
+
+2012-03-25T18:41:47.480355Z
+430b41c722c1b76417d7fa2ce97599cd
+2012-03-20T08:58:24.542557Z
+2065
+asyazwan@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6189
+
+extensions
+dir
+
+locale
+dir
+
+js-hotkeys
+dir
+
+svgtransformlist.js
+file
+
+
+
+
+2012-03-25T18:41:47.480355Z
+aa0d3a29eb7e4f973705e8a5f3d1ffb8
+2011-02-09T06:14:47.166399Z
+1984
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7935
+
+math.js
+file
+
+
+
+
+2012-03-25T18:41:47.480355Z
+9c30d37ef11fc244809dbfbf995bc37e
+2011-02-09T06:14:47.166399Z
+1984
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7455
+
+images
+dir
+
+svgcanvas.js
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+8e1023876b7be6559fa5ef7af48c1e17
+2012-03-22T07:43:11.144419Z
+2066
+asyazwan@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+254421
+
+jgraduate
+dir
+
+browser-not-supported.html
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+6e008f38ba0ddb2442d32a7d0c9ce0b4
+2011-01-16T20:40:17.194658Z
+1923
+adrianbjones@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1543
+
+path.js
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+04e2bd9f48097a7599da80350e4d924b
+2011-03-07T18:26:12.602539Z
+2025
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+25391
+
+draw.js
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+9b61fc3cb8df9b2696bc9ceb561fe4df
+2011-02-10T19:09:35.759706Z
+1993
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+16020
+
+units.js
+file
+
+
+
+
+2012-03-25T18:41:47.488355Z
+9fb5d209da93f595775168a56426848b
+2011-02-10T04:11:19.905059Z
+1991
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7819
+
+svg-editor.html
+file
+
+
+
+
+2012-03-25T18:41:47.476355Z
+5981341ae4bb764270aebc941bf482be
+2012-03-17T17:45:28.575273Z
+2060
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+29017
+
+svg-editor.manifest
+file
+
+
+
+
+2012-03-25T18:41:47.476355Z
+79f3195254ea0c5660b429b22a222c61
+2010-01-12T20:39:03.457662Z
+1201
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2316
+
+jquery-ui
+dir
+
+svgutils.js
+file
+
+
+
+
+2012-03-25T18:41:47.476355Z
+ed92d76da03ff78496357757063bcaf5
+2011-02-23T15:56:14.859147Z
+1996
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+17497
+
+svg-editor.js
+file
+
+
+
+
+2012-03-25T18:41:47.480355Z
+33a25c26af44b6f060d5e8bdcc371577
+2012-03-22T10:31:25.963262Z
+2067
+asyazwan@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+149127
+
+canvg
+dir
+
+sanitize.js
+file
+
+
+
+
+2012-03-25T18:41:47.480355Z
+47af7f26c9338f5199edc30e2e36a878
+2012-02-26T18:08:34.679053Z
+2057
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+14407
+
+jquerybbq
+dir
+
+embedapi.html
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+e1814119a6d8e5c220c2bec48b2caba3
+2010-09-20T18:55:10.937330Z
+1734
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1875
+
+contextmenu
+dir
+
+svg-editor.css
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+f6b582f9b1e0d9f92a13ae04f929f1d2
+2011-10-14T15:07:24.500754Z
+2048
+adrianbjones@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+24142
+
+history.js
+file
+
+
+
+
+2012-03-25T18:41:47.484355Z
+921cd902514fbf0228660fb473ac201b
+2011-02-10T19:09:35.759706Z
+1993
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+20219
+
+spinbtn
+dir
+
diff --git a/files_svgedit/svg-edit/.svn/prop-base/browser-not-supported.html.svn-base b/files_svgedit/svg-edit/.svn/prop-base/browser-not-supported.html.svn-base
new file mode 100644
index 000000000..d35686831
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/browser-not-supported.html.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+text/html
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/browser.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/browser.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/browser.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/draw.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/draw.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/draw.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/embedapi.html.svn-base b/files_svgedit/svg-edit/.svn/prop-base/embedapi.html.svn-base
new file mode 100644
index 000000000..d35686831
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/embedapi.html.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+text/html
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/embedapi.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/embedapi.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/embedapi.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/history.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/history.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/history.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/jquery.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/jquery.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/jquery.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/math.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/math.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/math.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/path.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/path.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/path.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/sanitize.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/sanitize.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/sanitize.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/select.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/select.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/select.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svg-editor.css.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.css.svn-base
new file mode 100644
index 000000000..69cd89925
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.css.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 8
+text/css
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svg-editor.html.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.html.svn-base
new file mode 100644
index 000000000..d35686831
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.html.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+text/html
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svg-editor.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.js.svn-base
new file mode 100644
index 000000000..2f297d185
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.js.svn-base
@@ -0,0 +1,9 @@
+K 12
+svn:keywords
+V 3
+Rev
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svg-editor.manifest.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.manifest.svn-base
new file mode 100644
index 000000000..e5b87057c
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svg-editor.manifest.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 19
+text/cache-manifest
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svgcanvas.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svgcanvas.js.svn-base
new file mode 100644
index 000000000..2f297d185
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svgcanvas.js.svn-base
@@ -0,0 +1,9 @@
+K 12
+svn:keywords
+V 3
+Rev
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svgtransformlist.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svgtransformlist.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svgtransformlist.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/svgutils.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/svgutils.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/svgutils.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/prop-base/units.js.svn-base b/files_svgedit/svg-edit/.svn/prop-base/units.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/prop-base/units.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/.svn/text-base/browser-not-supported.html.svn-base b/files_svgedit/svg-edit/.svn/text-base/browser-not-supported.html.svn-base
new file mode 100644
index 000000000..3010fcf30
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/browser-not-supported.html.svn-base
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
+<link rel="icon" type="image/png" href="images/logo.png"/>
+<link rel="stylesheet" href="svg-editor.css" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<title>Browser does not support SVG | SVG-edit</title>
+</head>
+<body>
+
+<div id="browser-not-supported">
+<img style="float:left;padding:10px;" src="images/logo.png" width="48" height="48" alt="SVG-edit logo" /><br />
+<p>Sorry, but your browser does not support SVG. Below is a list of alternate browsers and versions that support SVG and SVG-edit (from <a href="http://caniuse.com/#cats=SVG">caniuse.com</a>).</p>
+<p>Try the latest version of <a href="http://www.getfirefox.com">Firefox</a>, <a href="http://www.google.com/chrome/">Google Chrome</a>, <a href="http://www.apple.com/safari/download/">Safari</a>, <a href="http://www.opera.com/download/">Opera</a> or <a href="http://windows.microsoft.com/ie9">Internet Explorer<a/>.</p>
+<p>If you are unable to install one of these and must use an old version of Internet Explorer, you can install the <a href="http://code.google.com/chrome/chromeframe/">Google Chrome Frame plugin</a>.</p>
+
+<script type="text/javascript">
+var viewportHeight =(window.innerHeight ? window.innerHeight : $(window).height()) - 140;
+document.write('<iframe width="100%" height="'+viewportHeight+'" src="http://caniuse.com/#cats=SVG"></iframe>');
+</script>
+
+</div>
+
+</body>
+</html>
diff --git a/files_svgedit/svg-edit/.svn/text-base/browser.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/browser.js.svn-base
new file mode 100644
index 000000000..ff9441ae3
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/browser.js.svn-base
@@ -0,0 +1,178 @@
+/**
+ * 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 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 <a href='http://opera.com'>latest version</a> 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.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/files_svgedit/svg-edit/.svn/text-base/contextmenu.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/contextmenu.js.svn-base
new file mode 100644
index 000000000..0d5dd3439
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/contextmenu.js.svn-base
@@ -0,0 +1,67 @@
+/**
+ * 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("<li class='separator'>");
+ }
+ var shortcut = menuItem.shortcut || "";
+ $("#cmenu_canvas").append("<li class='disabled'><a href='#" + menuItem.id + "'>"
+ + menuItem.label + "<span class='shortcut'>"
+ + shortcut + "</span></a></li>");
+ }
+
+ 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/files_svgedit/svg-edit/.svn/text-base/draw.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/draw.js.svn-base
new file mode 100644
index 000000000..8db3138b0
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/draw.js.svn-base
@@ -0,0 +1,528 @@
+/**
+ * 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 <svg> element";
+ }
+
+ /**
+ * The SVG DOM Element that represents this drawing.
+ * @type {SVGSVGElement}
+ */
+ this.svgElem_ = svgElem;
+
+ /**
+ * The latest object number used in this drawing.
+ * @type {number}
+ */
+ this.obj_num = 0;
+
+ /**
+ * The prefix to prepend to each element id in the drawing.
+ * @type {String}
+ */
+ this.idPrefix = opt_idPrefix || "svg_";
+
+ /**
+ * An array of released element ids to immediately reuse.
+ * @type {Array.<number>}
+ */
+ this.releasedNums = [];
+
+ /**
+ * The z-ordered array of tuples containing layer names and <g> elements.
+ * The first layer is the one at the bottom of the rendering.
+ * TODO: Turn this into an Array.<Layer>
+ * @type {Array.<Array.<String, SVGGElement>>}
+ */
+ this.all_layers = [];
+
+ /**
+ * The current layer being used.
+ * TODO: Make this a {Layer}.
+ * @type {SVGGElement}
+ */
+ this.current_layer = null;
+
+ /**
+ * The nonce to use to uniquely identify elements across drawings.
+ * @type {!String}
+ */
+ this.nonce_ = "";
+ var n = this.svgElem_.getAttributeNS(se_ns, 'nonce');
+ // If already set in the DOM, use the nonce throughout the document
+ // else, if randomizeIds(true) has been called, create and set the nonce.
+ if (!!n && randomize_ids != RandomizeModes.NEVER_RANDOMIZE) {
+ this.nonce_ = n;
+ } else if (randomize_ids == RandomizeModes.ALWAYS_RANDOMIZE) {
+ this.setNonce(Math.floor(Math.random() * 100001));
+ }
+};
+
+svgedit.draw.Drawing.prototype.getElem_ = function(id) {
+ if(this.svgElem_.querySelector) {
+ // querySelector lookup
+ return this.svgElem_.querySelector('#'+id);
+ } else {
+ // jQuery lookup: twice as slow as xpath in FF
+ return $(this.svgElem_).find('[id=' + id + ']')[0];
+ }
+};
+
+svgedit.draw.Drawing.prototype.getSvgElem = function() {
+ return this.svgElem_;
+};
+
+svgedit.draw.Drawing.prototype.getNonce = function() {
+ return this.nonce_;
+};
+
+svgedit.draw.Drawing.prototype.setNonce = function(n) {
+ this.svgElem_.setAttributeNS(xmlns_ns, 'xmlns:se', se_ns);
+ this.svgElem_.setAttributeNS(se_ns, 'se:nonce', n);
+ this.nonce_ = n;
+};
+
+svgedit.draw.Drawing.prototype.clearNonce = function() {
+ // We deliberately leave any se:nonce attributes alone,
+ // we just don't use it to randomize ids.
+ this.nonce_ = "";
+};
+
+/**
+ * Returns the latest object id as a string.
+ * @return {String} The latest object Id.
+ */
+svgedit.draw.Drawing.prototype.getId = function() {
+ return this.nonce_ ?
+ this.idPrefix + this.nonce_ +'_' + this.obj_num :
+ this.idPrefix + this.obj_num;
+};
+
+/**
+ * Returns the next object Id as a string.
+ * @return {String} The next object Id to use.
+ */
+svgedit.draw.Drawing.prototype.getNextId = function() {
+ var oldObjNum = this.obj_num;
+ var restoreOldObjNum = false;
+
+ // If there are any released numbers in the release stack,
+ // use the last one instead of the next obj_num.
+ // We need to temporarily use obj_num as that is what getId() depends on.
+ if (this.releasedNums.length > 0) {
+ this.obj_num = this.releasedNums.pop();
+ restoreOldObjNum = true;
+ } else {
+ // If we are not using a released id, then increment the obj_num.
+ this.obj_num++;
+ }
+
+ // Ensure the ID does not exist.
+ var id = this.getId();
+ while (this.getElem_(id)) {
+ if (restoreOldObjNum) {
+ this.obj_num = oldObjNum;
+ restoreOldObjNum = false;
+ }
+ this.obj_num++;
+ id = this.getId();
+ }
+ // Restore the old object number if required.
+ if (restoreOldObjNum) {
+ this.obj_num = oldObjNum;
+ }
+ return id;
+};
+
+// Function: svgedit.draw.Drawing.releaseId
+// Releases the object Id, letting it be used as the next id in getNextId().
+// This method DOES NOT remove any elements from the DOM, it is expected
+// that client code will do this.
+//
+// Parameters:
+// id - The id to release.
+//
+// Returns:
+// True if the id was valid to be released, false otherwise.
+svgedit.draw.Drawing.prototype.releaseId = function(id) {
+ // confirm if this is a valid id for this Document, else return false
+ var front = this.idPrefix + (this.nonce_ ? this.nonce_ +'_' : '');
+ if (typeof id != typeof '' || id.indexOf(front) != 0) {
+ return false;
+ }
+ // extract the obj_num of this id
+ var num = parseInt(id.substr(front.length));
+
+ // if we didn't get a positive number or we already released this number
+ // then return false.
+ if (typeof num != typeof 1 || num <= 0 || this.releasedNums.indexOf(num) != -1) {
+ return false;
+ }
+
+ // push the released number into the released queue
+ this.releasedNums.push(num);
+
+ return true;
+};
+
+// Function: svgedit.draw.Drawing.getNumLayers
+// Returns the number of layers in the current drawing.
+//
+// Returns:
+// The number of layers in the current drawing.
+svgedit.draw.Drawing.prototype.getNumLayers = function() {
+ return this.all_layers.length;
+};
+
+// Function: svgedit.draw.Drawing.hasLayer
+// Check if layer with given name already exists
+svgedit.draw.Drawing.prototype.hasLayer = function(name) {
+ for(var i = 0; i < this.getNumLayers(); i++) {
+ if(this.all_layers[i][0] == name) return true;
+ }
+ return false;
+};
+
+
+// Function: svgedit.draw.Drawing.getLayerName
+// Returns the name of the ith layer. If the index is out of range, an empty string is returned.
+//
+// Parameters:
+// i - the zero-based index of the layer you are querying.
+//
+// Returns:
+// The name of the ith layer
+svgedit.draw.Drawing.prototype.getLayerName = function(i) {
+ if (i >= 0 && i < this.getNumLayers()) {
+ return this.all_layers[i][0];
+ }
+ return "";
+};
+
+// Function: svgedit.draw.Drawing.getCurrentLayer
+// Returns:
+// The SVGGElement representing the current layer.
+svgedit.draw.Drawing.prototype.getCurrentLayer = function() {
+ return this.current_layer;
+};
+
+// Function: getCurrentLayerName
+// Returns the name of the currently selected layer. If an error occurs, an empty string
+// is returned.
+//
+// Returns:
+// The name of the currently active layer.
+svgedit.draw.Drawing.prototype.getCurrentLayerName = function() {
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.all_layers[i][1] == this.current_layer) {
+ return this.getLayerName(i);
+ }
+ }
+ return "";
+};
+
+// Function: setCurrentLayer
+// Sets the current layer. If the name is not a valid layer name, then this function returns
+// false. Otherwise it returns true. This is not an undo-able action.
+//
+// Parameters:
+// name - the name of the layer you want to switch to.
+//
+// Returns:
+// true if the current layer was switched, otherwise false
+svgedit.draw.Drawing.prototype.setCurrentLayer = function(name) {
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (name == this.getLayerName(i)) {
+ if (this.current_layer != this.all_layers[i][1]) {
+ this.current_layer.setAttribute("style", "pointer-events:none");
+ this.current_layer = this.all_layers[i][1];
+ this.current_layer.setAttribute("style", "pointer-events:all");
+ }
+ return true;
+ }
+ }
+ return false;
+};
+
+
+// Function: svgedit.draw.Drawing.deleteCurrentLayer
+// Deletes the current layer from the drawing and then clears the selection. This function
+// then calls the 'changed' handler. This is an undoable action.
+// Returns:
+// The SVGGElement of the layer removed or null.
+svgedit.draw.Drawing.prototype.deleteCurrentLayer = function() {
+ if (this.current_layer && this.getNumLayers() > 1) {
+ // actually delete from the DOM and return it
+ var parent = this.current_layer.parentNode;
+ var nextSibling = this.current_layer.nextSibling;
+ var oldLayerGroup = parent.removeChild(this.current_layer);
+ this.identifyLayers();
+ return oldLayerGroup;
+ }
+ return null;
+};
+
+// Function: svgedit.draw.Drawing.identifyLayers
+// Updates layer system and sets the current layer to the
+// top-most layer (last <g> child of this drawing).
+svgedit.draw.Drawing.prototype.identifyLayers = function() {
+ this.all_layers = [];
+ var numchildren = this.svgElem_.childNodes.length;
+ // loop through all children of SVG element
+ var orphans = [], layernames = [];
+ var a_layer = null;
+ var childgroups = false;
+ for (var i = 0; i < numchildren; ++i) {
+ var child = this.svgElem_.childNodes.item(i);
+ // for each g, find its layer name
+ if (child && child.nodeType == 1) {
+ if (child.tagName == "g") {
+ childgroups = true;
+ var name = $("title",child).text();
+
+ // Hack for Opera 10.60
+ if(!name && svgedit.browser.isOpera() && child.querySelectorAll) {
+ name = $(child.querySelectorAll('title')).text();
+ }
+
+ // store layer and name in global variable
+ if (name) {
+ layernames.push(name);
+ this.all_layers.push( [name,child] );
+ a_layer = child;
+ svgedit.utilities.walkTree(child, function(e){e.setAttribute("style", "pointer-events:inherit");});
+ a_layer.setAttribute("style", "pointer-events:none");
+ }
+ // if group did not have a name, it is an orphan
+ else {
+ orphans.push(child);
+ }
+ }
+ // if child has is "visible" (i.e. not a <title> or <defs> element), then it is an orphan
+ else if(~visElems_arr.indexOf(child.nodeName)) {
+ var bb = svgedit.utilities.getBBox(child);
+ orphans.push(child);
+ }
+ }
+ }
+
+ // create a new layer and add all the orphans to it
+ var svgdoc = this.svgElem_.ownerDocument;
+ if (orphans.length > 0 || !childgroups) {
+ var i = 1;
+ // TODO(codedread): What about internationalization of "Layer"?
+ while (layernames.indexOf(("Layer " + i)) >= 0) { i++; }
+ var newname = "Layer " + i;
+ a_layer = svgdoc.createElementNS(svg_ns, "g");
+ var layer_title = svgdoc.createElementNS(svg_ns, "title");
+ layer_title.textContent = newname;
+ a_layer.appendChild(layer_title);
+ for (var j = 0; j < orphans.length; ++j) {
+ a_layer.appendChild(orphans[j]);
+ }
+ this.svgElem_.appendChild(a_layer);
+ this.all_layers.push( [newname, a_layer] );
+ }
+ svgedit.utilities.walkTree(a_layer, function(e){e.setAttribute("style","pointer-events:inherit");});
+ this.current_layer = a_layer;
+ this.current_layer.setAttribute("style","pointer-events:all");
+};
+
+// Function: svgedit.draw.Drawing.createLayer
+// Creates a new top-level layer in the drawing with the given name and
+// sets the current layer to it.
+//
+// Parameters:
+// name - The given name
+//
+// Returns:
+// The SVGGElement of the new layer, which is also the current layer
+// of this drawing.
+svgedit.draw.Drawing.prototype.createLayer = function(name) {
+ var svgdoc = this.svgElem_.ownerDocument;
+ var new_layer = svgdoc.createElementNS(svg_ns, "g");
+ var layer_title = svgdoc.createElementNS(svg_ns, "title");
+ layer_title.textContent = name;
+ new_layer.appendChild(layer_title);
+ this.svgElem_.appendChild(new_layer);
+ this.identifyLayers();
+ return new_layer;
+};
+
+// Function: svgedit.draw.Drawing.getLayerVisibility
+// Returns whether the layer is visible. If the layer name is not valid, then this function
+// returns false.
+//
+// Parameters:
+// layername - the name of the layer which you want to query.
+//
+// Returns:
+// The visibility state of the layer, or false if the layer name was invalid.
+svgedit.draw.Drawing.prototype.getLayerVisibility = function(layername) {
+ // find the layer
+ var layer = null;
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ layer = this.all_layers[i][1];
+ break;
+ }
+ }
+ if (!layer) return false;
+ return (layer.getAttribute('display') != 'none');
+};
+
+// Function: svgedit.draw.Drawing.setLayerVisibility
+// Sets the visibility of the layer. If the layer name is not valid, this function return
+// false, otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// layername - the name of the layer to change the visibility
+// bVisible - true/false, whether the layer should be visible
+//
+// Returns:
+// The SVGGElement representing the layer if the layername was valid, otherwise null.
+svgedit.draw.Drawing.prototype.setLayerVisibility = function(layername, bVisible) {
+ if (typeof bVisible != typeof true) {
+ return null;
+ }
+ // find the layer
+ var layer = null;
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ layer = this.all_layers[i][1];
+ break;
+ }
+ }
+ if (!layer) return null;
+
+ var oldDisplay = layer.getAttribute("display");
+ if (!oldDisplay) oldDisplay = "inline";
+ layer.setAttribute("display", bVisible ? "inline" : "none");
+ return layer;
+};
+
+
+// Function: svgedit.draw.Drawing.getLayerOpacity
+// Returns the opacity of the given layer. If the input name is not a layer, null is returned.
+//
+// Parameters:
+// layername - name of the layer on which to get the opacity
+//
+// Returns:
+// The opacity value of the given layer. This will be a value between 0.0 and 1.0, or null
+// if layername is not a valid layer
+svgedit.draw.Drawing.prototype.getLayerOpacity = function(layername) {
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ var g = this.all_layers[i][1];
+ var opacity = g.getAttribute('opacity');
+ if (!opacity) {
+ opacity = '1.0';
+ }
+ return parseFloat(opacity);
+ }
+ }
+ return null;
+};
+
+// Function: svgedit.draw.Drawing.setLayerOpacity
+// Sets the opacity of the given layer. If the input name is not a layer, nothing happens.
+// If opacity is not a value between 0.0 and 1.0, then nothing happens.
+//
+// Parameters:
+// layername - name of the layer on which to set the opacity
+// opacity - a float value in the range 0.0-1.0
+svgedit.draw.Drawing.prototype.setLayerOpacity = function(layername, opacity) {
+ if (typeof opacity != typeof 1.0 || opacity < 0.0 || opacity > 1.0) {
+ return;
+ }
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ var g = this.all_layers[i][1];
+ g.setAttribute("opacity", opacity);
+ break;
+ }
+ }
+};
+
+})();
diff --git a/files_svgedit/svg-edit/.svn/text-base/embedapi.html.svn-base b/files_svgedit/svg-edit/.svn/text-base/embedapi.html.svn-base
new file mode 100644
index 000000000..3db036406
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/embedapi.html.svn-base
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<head>
+ <title></title>
+</head>
+<body>
+
+ <script type="text/javascript" src="embedapi.js"></script>
+ <script type="text/javascript">
+ var svgCanvas = null;
+
+ function init_embed() {
+ var frame = document.getElementById('svgedit');
+ svgCanvas = new embedded_svg_edit(frame);
+
+ // Hide main button, as we will be controlling new/load/save etc from the host document
+ var doc;
+ doc = frame.contentDocument;
+ if (!doc)
+ {
+ doc = frame.contentWindow.document;
+ }
+
+ var mainButton = doc.getElementById('main_button');
+ mainButton.style.display = 'none';
+ }
+
+ function handleSvgData(data, error) {
+ if (error)
+ {
+ alert('error ' + error);
+ }
+ else
+ {
+ alert('Congratulations. Your SVG string is back in the host page, do with it what you will\n\n' + data);
+ }
+ }
+
+ function loadSvg() {
+ var svgexample = '<svg width="640" height="480" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><g><title>Layer 1</title><rect stroke-width="5" stroke="#000000" fill="#FF0000" id="svg_1" height="35" width="51" y="35" x="32"/><ellipse ry="15" rx="24" stroke-width="5" stroke="#000000" fill="#0000ff" id="svg_2" cy="60" cx="66"/></g></svg>';
+ svgCanvas.setSvgString(svgexample);
+ }
+
+ function saveSvg() {
+ svgCanvas.getSvgString()(handleSvgData);
+ }
+ </script>
+
+
+ <button onclick="loadSvg();">Load example</button>
+ <button onclick="saveSvg();">Save data</button>
+ <br/>
+
+ <iframe src="svg-editor.html" width="900px" height="600px" id="svgedit" onload="init_embed()"></iframe>
+</body>
+</html>
diff --git a/files_svgedit/svg-edit/.svn/text-base/embedapi.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/embedapi.js.svn-base
new file mode 100644
index 000000000..8debfd6da
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/embedapi.js.svn-base
@@ -0,0 +1,173 @@
+/*
+function embedded_svg_edit(frame){
+ //initialize communication
+ this.frame = frame;
+ this.stack = []; //callback stack
+
+ var editapi = this;
+
+ window.addEventListener("message", function(e){
+ if(e.data.substr(0,5) == "ERROR"){
+ editapi.stack.splice(0,1)[0](e.data,"error")
+ }else{
+ editapi.stack.splice(0,1)[0](e.data)
+ }
+ }, false)
+}
+
+embedded_svg_edit.prototype.call = function(code, callback){
+ this.stack.push(callback);
+ this.frame.contentWindow.postMessage(code,"*");
+}
+
+embedded_svg_edit.prototype.getSvgString = function(callback){
+ this.call("svgCanvas.getSvgString()",callback)
+}
+
+embedded_svg_edit.prototype.setSvgString = function(svg){
+ this.call("svgCanvas.setSvgString('"+svg.replace(/'/g, "\\'")+"')");
+}
+*/
+
+
+/*
+Embedded SVG-edit API
+
+General usage:
+- Have an iframe somewhere pointing to a version of svg-edit > r1000
+- Initialize the magic with:
+var svgCanvas = new embedded_svg_edit(window.frames['svgedit']);
+- Pass functions in this format:
+svgCanvas.setSvgString("string")
+- Or if a callback is needed:
+svgCanvas.setSvgString("string")(function(data, error){
+ if(error){
+ //there was an error
+ }else{
+ //handle data
+ }
+})
+
+Everything is done with the same API as the real svg-edit,
+and all documentation is unchanged. The only difference is
+when handling returns, the callback notation is used instead.
+
+var blah = new embedded_svg_edit(window.frames['svgedit']);
+blah.clearSelection("woot","blah",1337,[1,2,3,4,5,"moo"],-42,{a: "tree",b:6, c: 9})(function(){console.log("GET DATA",arguments)})
+*/
+
+function embedded_svg_edit(frame){
+ //initialize communication
+ this.frame = frame;
+ //this.stack = [] //callback stack
+ this.callbacks = {}; //successor to stack
+ this.encode = embedded_svg_edit.encode;
+ //List of functions extracted with this:
+ //Run in firebug on http://svg-edit.googlecode.com/svn/trunk/docs/files/svgcanvas-js.html
+
+ //for(var i=0,q=[],f = document.querySelectorAll("div.CFunction h3.CTitle a");i<f.length;i++){q.push(f[i].name)};q
+ //var functions = ["clearSelection", "addToSelection", "removeFromSelection", "open", "save", "getSvgString", "setSvgString",
+ //"createLayer", "deleteCurrentLayer", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition", "setLayerVisibility",
+ //"moveSelectedToLayer", "clear"];
+
+
+ //Newer, well, it extracts things that aren't documented as well. All functions accessible through the normal thingy can now be accessed though the API
+ //var l=[];for(var i in svgCanvas){if(typeof svgCanvas[i] == "function"){l.push(i)}};
+ //run in svgedit itself
+ var functions = ["updateElementFromJson", "embedImage", "fixOperaXML", "clearSelection", "addToSelection",
+ "removeFromSelection", "addNodeToSelection", "open", "save", "getSvgString", "setSvgString", "createLayer",
+ "deleteCurrentLayer", "getCurrentDrawing", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition",
+ "setLayerVisibility", "moveSelectedToLayer", "clear", "clearPath", "getNodePoint", "clonePathNode", "deletePathNode",
+ "getResolution", "getImageTitle", "setImageTitle", "setResolution", "setBBoxZoom", "setZoom", "getMode", "setMode",
+ "getStrokeColor", "setStrokeColor", "getFillColor", "setFillColor", "setStrokePaint", "setFillPaint", "getStrokeWidth",
+ "setStrokeWidth", "getStrokeStyle", "setStrokeStyle", "getOpacity", "setOpacity", "getFillOpacity", "setFillOpacity",
+ "getStrokeOpacity", "setStrokeOpacity", "getTransformList", "getBBox", "getRotationAngle", "setRotationAngle", "each",
+ "bind", "setIdPrefix", "getBold", "setBold", "getItalic", "setItalic", "getFontFamily", "setFontFamily", "getFontSize",
+ "setFontSize", "getText", "setTextContent", "setImageURL", "setRectRadius", "setSegType", "quickClone",
+ "changeSelectedAttributeNoUndo", "changeSelectedAttribute", "deleteSelectedElements", "groupSelectedElements",
+ "ungroupSelectedElement", "moveToTopSelectedElement", "moveToBottomSelectedElement", "moveSelectedElements",
+ "getStrokedBBox", "getVisibleElements", "cycleElement", "getUndoStackSize", "getRedoStackSize", "getNextUndoCommandText",
+ "getNextRedoCommandText", "undo", "redo", "cloneSelectedElements", "alignSelectedElements", "getZoom", "getVersion",
+ "setIconSize", "setLang", "setCustomHandlers"];
+
+ //TODO: rewrite the following, it's pretty scary.
+ for(var i = 0; i < functions.length; i++){
+ this[functions[i]] = (function(d){
+ return function(){
+ var t = this //new callback
+ for(var g = 0, args = []; g < arguments.length; g++){
+ args.push(arguments[g]);
+ }
+ var cbid = t.send(d,args, function(){}) //the callback (currently it's nothing, but will be set later
+
+ return function(newcallback){
+ t.callbacks[cbid] = newcallback; //set callback
+ }
+ }
+ })(functions[i])
+ }
+ //TODO: use AddEvent for Trident browsers, currently they dont support SVG, but they do support onmessage
+ var t = this;
+ window.addEventListener("message", function(e){
+ if(e.data.substr(0,4)=="SVGe"){ //because svg-edit is too longish
+ var data = e.data.substr(4);
+ var cbid = data.substr(0, data.indexOf(";"));
+ if(t.callbacks[cbid]){
+ if(data.substr(0,6) != "error:"){
+ t.callbacks[cbid](eval("("+data.substr(cbid.length+1)+")"))
+ }else{
+ t.callbacks[cbid](data, "error");
+ }
+ }
+ }
+ //this.stack.shift()[0](e.data,e.data.substr(0,5) == "ERROR"?'error':null) //replace with shift
+ }, false)
+}
+
+embedded_svg_edit.encode = function(obj){
+ //simple partial JSON encoder implementation
+ if(window.JSON && JSON.stringify) return JSON.stringify(obj);
+ var enc = arguments.callee; //for purposes of recursion
+
+ if(typeof obj == "boolean" || typeof obj == "number"){
+ return obj+'' //should work...
+ }else if(typeof obj == "string"){
+ //a large portion of this is stolen from Douglas Crockford's json2.js
+ return '"'+
+ obj.replace(
+ /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g
+ , function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ })
+ +'"'; //note that this isn't quite as purtyful as the usualness
+ }else if(obj.length){ //simple hackish test for arrayish-ness
+ for(var i = 0; i < obj.length; i++){
+ obj[i] = enc(obj[i]); //encode every sub-thingy on top
+ }
+ return "["+obj.join(",")+"]";
+ }else{
+ var pairs = []; //pairs will be stored here
+ for(var k in obj){ //loop through thingys
+ pairs.push(enc(k)+":"+enc(obj[k])); //key: value
+ }
+ return "{"+pairs.join(",")+"}" //wrap in the braces
+ }
+}
+
+embedded_svg_edit.prototype.send = function(name, args, callback){
+ var cbid = Math.floor(Math.random()*31776352877+993577).toString();
+ //this.stack.push(callback);
+ this.callbacks[cbid] = callback;
+ for(var argstr = [], i = 0; i < args.length; i++){
+ argstr.push(this.encode(args[i]))
+ }
+ var t = this;
+ setTimeout(function(){//delay for the callback to be set in case its synchronous
+ t.frame.contentWindow.postMessage(cbid+";svgCanvas['"+name+"']("+argstr.join(",")+")","*");
+ }, 0);
+ return cbid;
+ //this.stack.shift()("svgCanvas['"+name+"']("+argstr.join(",")+")")
+}
+
+
+
diff --git a/files_svgedit/svg-edit/.svn/text-base/history.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/history.js.svn-base
new file mode 100644
index 000000000..476787682
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/history.js.svn-base
@@ -0,0 +1,601 @@
+/**
+ * Package: svedit.history
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) svgtransformlist.js
+// 3) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.history) {
+ svgedit.history = {};
+}
+
+// Group: Undo/Redo history management
+
+
+svgedit.history.HistoryEventTypes = {
+ BEFORE_APPLY: 'before_apply',
+ AFTER_APPLY: 'after_apply',
+ BEFORE_UNAPPLY: 'before_unapply',
+ AFTER_UNAPPLY: 'after_unapply'
+};
+
+var removedElements = {};
+
+/**
+ * Interface: svgedit.history.HistoryCommand
+ * An interface that all command objects must implement.
+ *
+ * interface svgedit.history.HistoryCommand {
+ * void apply(svgedit.history.HistoryEventHandler);
+ * void unapply(svgedit.history.HistoryEventHandler);
+ * Element[] elements();
+ * String getText();
+ *
+ * static String type();
+ * }
+ *
+ * Interface: svgedit.history.HistoryEventHandler
+ * An interface for objects that will handle history events.
+ *
+ * interface svgedit.history.HistoryEventHandler {
+ * void handleHistoryEvent(eventType, command);
+ * }
+ *
+ * eventType is a string conforming to one of the HistoryEvent types.
+ * command is an object fulfilling the HistoryCommand interface.
+ */
+
+// Class: svgedit.history.MoveElementCommand
+// implements svgedit.history.HistoryCommand
+// History command for an element that had its DOM position changed
+//
+// Parameters:
+// elem - The DOM element that was moved
+// oldNextSibling - The element's next sibling before it was moved
+// oldParent - The element's parent before it was moved
+// text - An optional string visible to user related to this change
+svgedit.history.MoveElementCommand = function(elem, oldNextSibling, oldParent, text) {
+ this.elem = elem;
+ this.text = text ? ("Move " + elem.tagName + " to " + text) : ("Move " + elem.tagName);
+ this.oldNextSibling = oldNextSibling;
+ this.oldParent = oldParent;
+ this.newNextSibling = elem.nextSibling;
+ this.newParent = elem.parentNode;
+};
+svgedit.history.MoveElementCommand.type = function() { return 'svgedit.history.MoveElementCommand'; }
+svgedit.history.MoveElementCommand.prototype.type = svgedit.history.MoveElementCommand.type;
+
+// Function: svgedit.history.MoveElementCommand.getText
+svgedit.history.MoveElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.MoveElementCommand.apply
+// Re-positions the element
+svgedit.history.MoveElementCommand.prototype.apply = function(handler) {
+ // TODO(codedread): Refactor this common event code into a base HistoryCommand class.
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ this.elem = this.newParent.insertBefore(this.elem, this.newNextSibling);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: svgedit.history.MoveElementCommand.unapply
+// Positions the element back to its original location
+svgedit.history.MoveElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ this.elem = this.oldParent.insertBefore(this.elem, this.oldNextSibling);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: svgedit.history.MoveElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.MoveElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// Class: svgedit.history.InsertElementCommand
+// implements svgedit.history.HistoryCommand
+// History command for an element that was added to the DOM
+//
+// Parameters:
+// elem - The newly added DOM element
+// text - An optional string visible to user related to this change
+svgedit.history.InsertElementCommand = function(elem, text) {
+ this.elem = elem;
+ this.text = text || ("Create " + elem.tagName);
+ this.parent = elem.parentNode;
+ this.nextSibling = this.elem.nextSibling;
+};
+svgedit.history.InsertElementCommand.type = function() { return 'svgedit.history.InsertElementCommand'; }
+svgedit.history.InsertElementCommand.prototype.type = svgedit.history.InsertElementCommand.type;
+
+// Function: svgedit.history.InsertElementCommand.getText
+svgedit.history.InsertElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.InsertElementCommand.apply
+// Re-Inserts the new element
+svgedit.history.InsertElementCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ this.elem = this.parent.insertBefore(this.elem, this.nextSibling);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: svgedit.history.InsertElementCommand.unapply
+// Removes the element
+svgedit.history.InsertElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ this.parent = this.elem.parentNode;
+ this.elem = this.elem.parentNode.removeChild(this.elem);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: svgedit.history.InsertElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.InsertElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// Class: svgedit.history.RemoveElementCommand
+// implements svgedit.history.HistoryCommand
+// History command for an element removed from the DOM
+//
+// Parameters:
+// elem - The removed DOM element
+// oldNextSibling - the DOM element's nextSibling when it was in the DOM
+// oldParent - The DOM element's parent
+// text - An optional string visible to user related to this change
+svgedit.history.RemoveElementCommand = function(elem, oldNextSibling, oldParent, text) {
+ this.elem = elem;
+ this.text = text || ("Delete " + elem.tagName);
+ this.nextSibling = oldNextSibling;
+ this.parent = oldParent;
+
+ // special hack for webkit: remove this element's entry in the svgTransformLists map
+ svgedit.transformlist.removeElementFromListMap(elem);
+};
+svgedit.history.RemoveElementCommand.type = function() { return 'svgedit.history.RemoveElementCommand'; }
+svgedit.history.RemoveElementCommand.prototype.type = svgedit.history.RemoveElementCommand.type;
+
+// Function: svgedit.history.RemoveElementCommand.getText
+svgedit.history.RemoveElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: RemoveElementCommand.apply
+// Re-removes the new element
+svgedit.history.RemoveElementCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ svgedit.transformlist.removeElementFromListMap(this.elem);
+ this.parent = this.elem.parentNode;
+ this.elem = this.parent.removeChild(this.elem);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: RemoveElementCommand.unapply
+// Re-adds the new element
+svgedit.history.RemoveElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ svgedit.transformlist.removeElementFromListMap(this.elem);
+ if(this.nextSibling == null) {
+ if(window.console) console.log('Error: reference element was lost');
+ }
+ this.parent.insertBefore(this.elem, this.nextSibling);
+
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: RemoveElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.RemoveElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// Class: svgedit.history.ChangeElementCommand
+// implements svgedit.history.HistoryCommand
+// History command to make a change to an element.
+// Usually an attribute change, but can also be textcontent.
+//
+// Parameters:
+// elem - The DOM element that was changed
+// attrs - An object with the attributes to be changed and the values they had *before* the change
+// text - An optional string visible to user related to this change
+svgedit.history.ChangeElementCommand = function(elem, attrs, text) {
+ this.elem = elem;
+ this.text = text ? ("Change " + elem.tagName + " " + text) : ("Change " + elem.tagName);
+ this.newValues = {};
+ this.oldValues = attrs;
+ for (var attr in attrs) {
+ if (attr == "#text") this.newValues[attr] = elem.textContent;
+ else if (attr == "#href") this.newValues[attr] = svgedit.utilities.getHref(elem);
+ else this.newValues[attr] = elem.getAttribute(attr);
+ }
+};
+svgedit.history.ChangeElementCommand.type = function() { return 'svgedit.history.ChangeElementCommand'; }
+svgedit.history.ChangeElementCommand.prototype.type = svgedit.history.ChangeElementCommand.type;
+
+// Function: svgedit.history.ChangeElementCommand.getText
+svgedit.history.ChangeElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.ChangeElementCommand.apply
+// Performs the stored change action
+svgedit.history.ChangeElementCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ var bChangedTransform = false;
+ for(var attr in this.newValues ) {
+ if (this.newValues[attr]) {
+ if (attr == "#text") this.elem.textContent = this.newValues[attr];
+ else if (attr == "#href") svgedit.utilities.setHref(this.elem, this.newValues[attr])
+ else this.elem.setAttribute(attr, this.newValues[attr]);
+ }
+ else {
+ if (attr == "#text") {
+ this.elem.textContent = "";
+ }
+ else {
+ this.elem.setAttribute(attr, "");
+ this.elem.removeAttribute(attr);
+ }
+ }
+
+ if (attr == "transform") { bChangedTransform = true; }
+ }
+
+ // relocate rotational transform, if necessary
+ if(!bChangedTransform) {
+ var angle = svgedit.utilities.getRotationAngle(this.elem);
+ if (angle) {
+ var bbox = elem.getBBox();
+ var cx = bbox.x + bbox.width/2,
+ cy = bbox.y + bbox.height/2;
+ var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join('');
+ if (rotate != elem.getAttribute("transform")) {
+ elem.setAttribute("transform", rotate);
+ }
+ }
+ }
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+
+ return true;
+};
+
+// Function: svgedit.history.ChangeElementCommand.unapply
+// Reverses the stored change action
+svgedit.history.ChangeElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ var bChangedTransform = false;
+ for(var attr in this.oldValues ) {
+ if (this.oldValues[attr]) {
+ if (attr == "#text") this.elem.textContent = this.oldValues[attr];
+ else if (attr == "#href") svgedit.utilities.setHref(this.elem, this.oldValues[attr]);
+ else this.elem.setAttribute(attr, this.oldValues[attr]);
+ }
+ else {
+ if (attr == "#text") {
+ this.elem.textContent = "";
+ }
+ else this.elem.removeAttribute(attr);
+ }
+ if (attr == "transform") { bChangedTransform = true; }
+ }
+ // relocate rotational transform, if necessary
+ if(!bChangedTransform) {
+ var angle = svgedit.utilities.getRotationAngle(this.elem);
+ if (angle) {
+ var bbox = elem.getBBox();
+ var cx = bbox.x + bbox.width/2,
+ cy = bbox.y + bbox.height/2;
+ var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join('');
+ if (rotate != elem.getAttribute("transform")) {
+ elem.setAttribute("transform", rotate);
+ }
+ }
+ }
+
+ // Remove transformlist to prevent confusion that causes bugs like 575.
+ svgedit.transformlist.removeElementFromListMap(this.elem);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+
+ return true;
+};
+
+// Function: ChangeElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.ChangeElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// TODO: create a 'typing' command object that tracks changes in text
+// if a new Typing command is created and the top command on the stack is also a Typing
+// and they both affect the same element, then collapse the two commands into one
+
+
+// Class: svgedit.history.BatchCommand
+// implements svgedit.history.HistoryCommand
+// History command that can contain/execute multiple other commands
+//
+// Parameters:
+// text - An optional string visible to user related to this change
+svgedit.history.BatchCommand = function(text) {
+ this.text = text || "Batch Command";
+ this.stack = [];
+};
+svgedit.history.BatchCommand.type = function() { return 'svgedit.history.BatchCommand'; }
+svgedit.history.BatchCommand.prototype.type = svgedit.history.BatchCommand.type;
+
+// Function: svgedit.history.BatchCommand.getText
+svgedit.history.BatchCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.BatchCommand.apply
+// Runs "apply" on all subcommands
+svgedit.history.BatchCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ var len = this.stack.length;
+ for (var i = 0; i < len; ++i) {
+ this.stack[i].apply(handler);
+ }
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: svgedit.history.BatchCommand.unapply
+// Runs "unapply" on all subcommands
+svgedit.history.BatchCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ for (var i = this.stack.length-1; i >= 0; i--) {
+ this.stack[i].unapply(handler);
+ }
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: svgedit.history.BatchCommand.elements
+// Iterate through all our subcommands and returns all the elements we are changing
+svgedit.history.BatchCommand.prototype.elements = function() {
+ var elems = [];
+ var cmd = this.stack.length;
+ while (cmd--) {
+ var thisElems = this.stack[cmd].elements();
+ var elem = thisElems.length;
+ while (elem--) {
+ if (elems.indexOf(thisElems[elem]) == -1) elems.push(thisElems[elem]);
+ }
+ }
+ return elems;
+};
+
+// Function: svgedit.history.BatchCommand.addSubCommand
+// Adds a given command to the history stack
+//
+// Parameters:
+// cmd - The undo command object to add
+svgedit.history.BatchCommand.prototype.addSubCommand = function(cmd) {
+ this.stack.push(cmd);
+};
+
+// Function: svgedit.history.BatchCommand.isEmpty
+// Returns a boolean indicating whether or not the batch command is empty
+svgedit.history.BatchCommand.prototype.isEmpty = function() {
+ return this.stack.length == 0;
+};
+
+
+// Class: svgedit.history.UndoManager
+// Parameters:
+// historyEventHandler - an object that conforms to the HistoryEventHandler interface
+// (see above)
+svgedit.history.UndoManager = function(historyEventHandler) {
+ this.handler_ = historyEventHandler || null;
+ this.undoStackPointer = 0;
+ this.undoStack = [];
+
+ // this is the stack that stores the original values, the elements and
+ // the attribute name for begin/finish
+ this.undoChangeStackPointer = -1;
+ this.undoableChangeStack = [];
+};
+
+// Function: svgedit.history.UndoManager.resetUndoStack
+// Resets the undo stack, effectively clearing the undo/redo history
+svgedit.history.UndoManager.prototype.resetUndoStack = function() {
+ this.undoStack = [];
+ this.undoStackPointer = 0;
+};
+
+// Function: svgedit.history.UndoManager.getUndoStackSize
+// Returns:
+// Integer with the current size of the undo history stack
+svgedit.history.UndoManager.prototype.getUndoStackSize = function() {
+ return this.undoStackPointer;
+};
+
+// Function: svgedit.history.UndoManager.getRedoStackSize
+// Returns:
+// Integer with the current size of the redo history stack
+svgedit.history.UndoManager.prototype.getRedoStackSize = function() {
+ return this.undoStack.length - this.undoStackPointer;
+};
+
+// Function: svgedit.history.UndoManager.getNextUndoCommandText
+// Returns:
+// String associated with the next undo command
+svgedit.history.UndoManager.prototype.getNextUndoCommandText = function() {
+ return this.undoStackPointer > 0 ? this.undoStack[this.undoStackPointer-1].getText() : "";
+};
+
+// Function: svgedit.history.UndoManager.getNextRedoCommandText
+// Returns:
+// String associated with the next redo command
+svgedit.history.UndoManager.prototype.getNextRedoCommandText = function() {
+ return this.undoStackPointer < this.undoStack.length ? this.undoStack[this.undoStackPointer].getText() : "";
+};
+
+// Function: svgedit.history.UndoManager.undo
+// Performs an undo step
+svgedit.history.UndoManager.prototype.undo = function() {
+ if (this.undoStackPointer > 0) {
+ var cmd = this.undoStack[--this.undoStackPointer];
+ cmd.unapply(this.handler_);
+ }
+};
+
+// Function: svgedit.history.UndoManager.redo
+// Performs a redo step
+svgedit.history.UndoManager.prototype.redo = function() {
+ if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) {
+ var cmd = this.undoStack[this.undoStackPointer++];
+ cmd.apply(this.handler_);
+ }
+};
+
+// Function: svgedit.history.UndoManager.addCommandToHistory
+// Adds a command object to the undo history stack
+//
+// Parameters:
+// cmd - The command object to add
+svgedit.history.UndoManager.prototype.addCommandToHistory = function(cmd) {
+ // FIXME: we MUST compress consecutive text changes to the same element
+ // (right now each keystroke is saved as a separate command that includes the
+ // entire text contents of the text element)
+ // TODO: consider limiting the history that we store here (need to do some slicing)
+
+ // if our stack pointer is not at the end, then we have to remove
+ // all commands after the pointer and insert the new command
+ if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) {
+ this.undoStack = this.undoStack.splice(0, this.undoStackPointer);
+ }
+ this.undoStack.push(cmd);
+ this.undoStackPointer = this.undoStack.length;
+};
+
+
+// Function: svgedit.history.UndoManager.beginUndoableChange
+// This function tells the canvas to remember the old values of the
+// attrName attribute for each element sent in. The elements and values
+// are stored on a stack, so the next call to finishUndoableChange() will
+// pop the elements and old values off the stack, gets the current values
+// from the DOM and uses all of these to construct the undo-able command.
+//
+// Parameters:
+// attrName - The name of the attribute being changed
+// elems - Array of DOM elements being changed
+svgedit.history.UndoManager.prototype.beginUndoableChange = function(attrName, elems) {
+ var p = ++this.undoChangeStackPointer;
+ var i = elems.length;
+ var oldValues = new Array(i), elements = new Array(i);
+ while (i--) {
+ var elem = elems[i];
+ if (elem == null) continue;
+ elements[i] = elem;
+ oldValues[i] = elem.getAttribute(attrName);
+ }
+ this.undoableChangeStack[p] = {'attrName': attrName,
+ 'oldValues': oldValues,
+ 'elements': elements};
+};
+
+// Function: svgedit.history.UndoManager.finishUndoableChange
+// This function returns a BatchCommand object which summarizes the
+// change since beginUndoableChange was called. The command can then
+// be added to the command history
+//
+// Returns:
+// Batch command object with resulting changes
+svgedit.history.UndoManager.prototype.finishUndoableChange = function() {
+ var p = this.undoChangeStackPointer--;
+ var changeset = this.undoableChangeStack[p];
+ var i = changeset['elements'].length;
+ var attrName = changeset['attrName'];
+ var batchCmd = new svgedit.history.BatchCommand("Change " + attrName);
+ while (i--) {
+ var elem = changeset['elements'][i];
+ if (elem == null) continue;
+ var changes = {};
+ changes[attrName] = changeset['oldValues'][i];
+ if (changes[attrName] != elem.getAttribute(attrName)) {
+ batchCmd.addSubCommand(new svgedit.history.ChangeElementCommand(elem, changes, attrName));
+ }
+ }
+ this.undoableChangeStack[p] = null;
+ return batchCmd;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/.svn/text-base/jquery.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/jquery.js.svn-base
new file mode 100644
index 000000000..198b3ff07
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/jquery.js.svn-base
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/.svn/text-base/math.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/math.js.svn-base
new file mode 100644
index 000000000..86ee4cf56
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/math.js.svn-base
@@ -0,0 +1,246 @@
+/**
+ * Package: svedit.math
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// None.
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.math) {
+ svgedit.math = {};
+}
+
+// Constants
+var NEAR_ZERO = 1e-14;
+
+// Throw away SVGSVGElement used for creating matrices/transforms.
+var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+
+// Function: svgedit.math.transformPoint
+// A (hopefully) quicker function to transform a point by a matrix
+// (this function avoids any DOM calls and just does the math)
+//
+// Parameters:
+// x - Float representing the x coordinate
+// y - Float representing the y coordinate
+// m - Matrix object to transform the point with
+// Returns a x,y object representing the transformed point
+svgedit.math.transformPoint = function(x, y, m) {
+ return { x: m.a * x + m.c * y + m.e, y: m.b * x + m.d * y + m.f};
+};
+
+
+// Function: svgedit.math.isIdentity
+// Helper function to check if the matrix performs no actual transform
+// (i.e. exists for identity purposes)
+//
+// Parameters:
+// m - The matrix object to check
+//
+// Returns:
+// Boolean indicating whether or not the matrix is 1,0,0,1,0,0
+svgedit.math.isIdentity = function(m) {
+ return (m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0);
+};
+
+
+// Function: svgedit.math.matrixMultiply
+// This function tries to return a SVGMatrix that is the multiplication m1*m2.
+// We also round to zero when it's near zero
+//
+// Parameters:
+// >= 2 Matrix objects to multiply
+//
+// Returns:
+// The matrix object resulting from the calculation
+svgedit.math.matrixMultiply = function() {
+ var args = arguments, i = args.length, m = args[i-1];
+
+ while(i-- > 1) {
+ var m1 = args[i-1];
+ m = m1.multiply(m);
+ }
+ if (Math.abs(m.a) < NEAR_ZERO) m.a = 0;
+ if (Math.abs(m.b) < NEAR_ZERO) m.b = 0;
+ if (Math.abs(m.c) < NEAR_ZERO) m.c = 0;
+ if (Math.abs(m.d) < NEAR_ZERO) m.d = 0;
+ if (Math.abs(m.e) < NEAR_ZERO) m.e = 0;
+ if (Math.abs(m.f) < NEAR_ZERO) m.f = 0;
+
+ return m;
+};
+
+// Function: svgedit.math.hasMatrixTransform
+// See if the given transformlist includes a non-indentity matrix transform
+//
+// Parameters:
+// tlist - The transformlist to check
+//
+// Returns:
+// Boolean on whether or not a matrix transform was found
+svgedit.math.hasMatrixTransform = function(tlist) {
+ if(!tlist) return false;
+ var num = tlist.numberOfItems;
+ while (num--) {
+ var xform = tlist.getItem(num);
+ if (xform.type == 1 && !svgedit.math.isIdentity(xform.matrix)) return true;
+ }
+ return false;
+};
+
+// Function: svgedit.math.transformBox
+// Transforms a rectangle based on the given matrix
+//
+// Parameters:
+// l - Float with the box's left coordinate
+// t - Float with the box's top coordinate
+// w - Float with the box width
+// h - Float with the box height
+// m - Matrix object to transform the box by
+//
+// Returns:
+// An object with the following values:
+// * tl - The top left coordinate (x,y object)
+// * tr - The top right coordinate (x,y object)
+// * bl - The bottom left coordinate (x,y object)
+// * br - The bottom right coordinate (x,y object)
+// * aabox - Object with the following values:
+// * Float with the axis-aligned x coordinate
+// * Float with the axis-aligned y coordinate
+// * Float with the axis-aligned width coordinate
+// * Float with the axis-aligned height coordinate
+svgedit.math.transformBox = function(l, t, w, h, m) {
+ var topleft = {x:l,y:t},
+ topright = {x:(l+w),y:t},
+ botright = {x:(l+w),y:(t+h)},
+ botleft = {x:l,y:(t+h)};
+ var transformPoint = svgedit.math.transformPoint;
+ topleft = transformPoint( topleft.x, topleft.y, m );
+ var minx = topleft.x,
+ maxx = topleft.x,
+ miny = topleft.y,
+ maxy = topleft.y;
+ topright = transformPoint( topright.x, topright.y, m );
+ minx = Math.min(minx, topright.x);
+ maxx = Math.max(maxx, topright.x);
+ miny = Math.min(miny, topright.y);
+ maxy = Math.max(maxy, topright.y);
+ botleft = transformPoint( botleft.x, botleft.y, m);
+ minx = Math.min(minx, botleft.x);
+ maxx = Math.max(maxx, botleft.x);
+ miny = Math.min(miny, botleft.y);
+ maxy = Math.max(maxy, botleft.y);
+ botright = transformPoint( botright.x, botright.y, m );
+ minx = Math.min(minx, botright.x);
+ maxx = Math.max(maxx, botright.x);
+ miny = Math.min(miny, botright.y);
+ maxy = Math.max(maxy, botright.y);
+
+ return {tl:topleft, tr:topright, bl:botleft, br:botright,
+ aabox: {x:minx, y:miny, width:(maxx-minx), height:(maxy-miny)} };
+};
+
+// Function: svgedit.math.transformListToTransform
+// This returns a single matrix Transform for a given Transform List
+// (this is the equivalent of SVGTransformList.consolidate() but unlike
+// that method, this one does not modify the actual SVGTransformList)
+// This function is very liberal with its min,max arguments
+//
+// Parameters:
+// tlist - The transformlist object
+// min - Optional integer indicating start transform position
+// max - Optional integer indicating end transform position
+//
+// Returns:
+// A single matrix transform object
+svgedit.math.transformListToTransform = function(tlist, min, max) {
+ if(tlist == null) {
+ // Or should tlist = null have been prevented before this?
+ return svg.createSVGTransformFromMatrix(svg.createSVGMatrix());
+ }
+ var min = min == undefined ? 0 : min;
+ var max = max == undefined ? (tlist.numberOfItems-1) : max;
+ min = parseInt(min);
+ max = parseInt(max);
+ if (min > max) { var temp = max; max = min; min = temp; }
+ var m = svg.createSVGMatrix();
+ for (var i = min; i <= max; ++i) {
+ // if our indices are out of range, just use a harmless identity matrix
+ var mtom = (i >= 0 && i < tlist.numberOfItems ?
+ tlist.getItem(i).matrix :
+ svg.createSVGMatrix());
+ m = svgedit.math.matrixMultiply(m, mtom);
+ }
+ return svg.createSVGTransformFromMatrix(m);
+};
+
+
+// Function: svgedit.math.getMatrix
+// Get the matrix object for a given element
+//
+// Parameters:
+// elem - The DOM element to check
+//
+// Returns:
+// The matrix object associated with the element's transformlist
+svgedit.math.getMatrix = function(elem) {
+ var tlist = svgedit.transformlist.getTransformList(elem);
+ return svgedit.math.transformListToTransform(tlist).matrix;
+};
+
+
+// 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};
+};
+
+
+// Function: rectsIntersect
+// Check if two rectangles (BBoxes objects) intersect each other
+//
+// Paramaters:
+// r1 - The first BBox-like object
+// r2 - The second BBox-like object
+//
+// Returns:
+// Boolean that's true if rectangles intersect
+svgedit.math.rectsIntersect = function(r1, r2) {
+ return r2.x < (r1.x+r1.width) &&
+ (r2.x+r2.width) > r1.x &&
+ r2.y < (r1.y+r1.height) &&
+ (r2.y+r2.height) > r1.y;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/.svn/text-base/path.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/path.js.svn-base
new file mode 100644
index 000000000..e4901826a
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/path.js.svn-base
@@ -0,0 +1,980 @@
+/**
+ * Package: svgedit.path
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2011 Alexis Deveria
+ * Copyright(c) 2011 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) math.js
+// 4) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.path) {
+ svgedit.path = {};
+}
+
+var svgns = "http://www.w3.org/2000/svg";
+
+var uiStrings = {
+ "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
+ "pathCtrlPtTooltip": "Drag control point to adjust curve properties"
+};
+
+var segData = {
+ 2: ['x','y'],
+ 4: ['x','y'],
+ 6: ['x','y','x1','y1','x2','y2'],
+ 8: ['x','y','x1','y1'],
+ 10: ['x','y','r1','r2','angle','largeArcFlag','sweepFlag'],
+ 12: ['x'],
+ 14: ['y'],
+ 16: ['x','y','x2','y2'],
+ 18: ['x','y']
+};
+
+var pathFuncs = [];
+
+var link_control_pts = true;
+
+// Stores references to paths via IDs.
+// TODO: Make this cross-document happy.
+var pathData = {};
+
+svgedit.path.setLinkControlPoints = function(lcp) {
+ link_control_pts = lcp;
+};
+
+svgedit.path.path = null;
+
+var editorContext_ = null;
+
+svgedit.path.init = function(editorContext) {
+ editorContext_ = editorContext;
+
+ pathFuncs = [0,'ClosePath'];
+ var pathFuncsStrs = ['Moveto', 'Lineto', 'CurvetoCubic', 'CurvetoQuadratic', 'Arc',
+ 'LinetoHorizontal', 'LinetoVertical','CurvetoCubicSmooth','CurvetoQuadraticSmooth'];
+ $.each(pathFuncsStrs, function(i,s) {
+ pathFuncs.push(s+'Abs');
+ pathFuncs.push(s+'Rel');
+ });
+};
+
+svgedit.path.insertItemBefore = function(elem, newseg, index) {
+ // Support insertItemBefore on paths for FF2
+ var list = elem.pathSegList;
+
+ if(svgedit.browser.supportsPathInsertItemBefore()) {
+ list.insertItemBefore(newseg, index);
+ return;
+ }
+ var len = list.numberOfItems;
+ var arr = [];
+ for(var i=0; i<len; i++) {
+ var cur_seg = list.getItem(i);
+ arr.push(cur_seg)
+ }
+ list.clear();
+ for(var i=0; i<len; i++) {
+ if(i == index) { //index+1
+ list.appendItem(newseg);
+ }
+ list.appendItem(arr[i]);
+ }
+};
+
+// TODO: See if this should just live in replacePathSeg
+svgedit.path.ptObjToArr = function(type, seg_item) {
+ var arr = segData[type], len = arr.length;
+ var out = Array(len);
+ for(var i=0; i<len; i++) {
+ out[i] = seg_item[arr[i]];
+ }
+ return out;
+};
+
+svgedit.path.getGripPt = function(seg, alt_pt) {
+ var out = {
+ x: alt_pt? alt_pt.x : seg.item.x,
+ y: alt_pt? alt_pt.y : seg.item.y
+ }, path = seg.path;
+
+ if(path.matrix) {
+ var pt = svgedit.math.transformPoint(out.x, out.y, path.matrix);
+ out = pt;
+ }
+
+ out.x *= editorContext_.getCurrentZoom();
+ out.y *= editorContext_.getCurrentZoom();
+
+ return out;
+};
+
+svgedit.path.getPointFromGrip = function(pt, path) {
+ var out = {
+ x: pt.x,
+ y: pt.y
+ }
+
+ if(path.matrix) {
+ var pt = svgedit.math.transformPoint(out.x, out.y, path.imatrix);
+ out.x = pt.x;
+ out.y = pt.y;
+ }
+
+ out.x /= editorContext_.getCurrentZoom();
+ out.y /= editorContext_.getCurrentZoom();
+
+ return out;
+};
+
+svgedit.path.addPointGrip = function(index, x, y) {
+ // create the container of all the point grips
+ var pointGripContainer = svgedit.path.getGripContainer();
+
+ var pointGrip = svgedit.utilities.getElem("pathpointgrip_"+index);
+ // create it
+ if (!pointGrip) {
+ pointGrip = document.createElementNS(svgns, "circle");
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'id': "pathpointgrip_" + index,
+ 'display': "none",
+ 'r': 4,
+ 'fill': "#0FF",
+ 'stroke': "#00F",
+ 'stroke-width': 2,
+ 'cursor': 'move',
+ 'style': 'pointer-events:all',
+ 'xlink:title': uiStrings.pathNodeTooltip
+ });
+ pointGrip = pointGripContainer.appendChild(pointGrip);
+
+ var grip = $('#pathpointgrip_'+index);
+ grip.dblclick(function() {
+ if(svgedit.path.path) svgedit.path.path.setSegType();
+ });
+ }
+ if(x && y) {
+ // set up the point grip element and display it
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'cx': x,
+ 'cy': y,
+ 'display': "inline"
+ });
+ }
+ return pointGrip;
+};
+
+svgedit.path.getGripContainer = function() {
+ var c = svgedit.utilities.getElem("pathpointgrip_container");
+ if (!c) {
+ var parent = svgedit.utilities.getElem("selectorParentGroup");
+ c = parent.appendChild(document.createElementNS(svgns, "g"));
+ c.id = "pathpointgrip_container";
+ }
+ return c;
+};
+
+svgedit.path.addCtrlGrip = function(id) {
+ var pointGrip = svgedit.utilities.getElem("ctrlpointgrip_"+id);
+ if(pointGrip) return pointGrip;
+
+ pointGrip = document.createElementNS(svgns, "circle");
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'id': "ctrlpointgrip_" + id,
+ 'display': "none",
+ 'r': 4,
+ 'fill': "#0FF",
+ 'stroke': "#55F",
+ 'stroke-width': 1,
+ 'cursor': 'move',
+ 'style': 'pointer-events:all',
+ 'xlink:title': uiStrings.pathCtrlPtTooltip
+ });
+ svgedit.path.getGripContainer().appendChild(pointGrip);
+ return pointGrip;
+};
+
+svgedit.path.getCtrlLine = function(id) {
+ var ctrlLine = svgedit.utilities.getElem("ctrlLine_"+id);
+ if(ctrlLine) return ctrlLine;
+
+ ctrlLine = document.createElementNS(svgns, "line");
+ svgedit.utilities.assignAttributes(ctrlLine, {
+ 'id': "ctrlLine_"+id,
+ 'stroke': "#555",
+ 'stroke-width': 1,
+ "style": "pointer-events:none"
+ });
+ svgedit.path.getGripContainer().appendChild(ctrlLine);
+ return ctrlLine;
+};
+
+svgedit.path.getPointGrip = function(seg, update) {
+ var index = seg.index;
+ var pointGrip = svgedit.path.addPointGrip(index);
+
+ if(update) {
+ var pt = svgedit.path.getGripPt(seg);
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'cx': pt.x,
+ 'cy': pt.y,
+ 'display': "inline"
+ });
+ }
+
+ return pointGrip;
+};
+
+svgedit.path.getControlPoints = function(seg) {
+ var item = seg.item;
+ var index = seg.index;
+ if(!("x1" in item) || !("x2" in item)) return null;
+ var cpt = {};
+ var pointGripContainer = svgedit.path.getGripContainer();
+
+ // Note that this is intentionally not seg.prev.item
+ var prev = svgedit.path.path.segs[index-1].item;
+
+ var seg_items = [prev, item];
+
+ for(var i=1; i<3; i++) {
+ var id = index + 'c' + i;
+
+ var ctrlLine = cpt['c' + i + '_line'] = svgedit.path.getCtrlLine(id);
+
+ var pt = svgedit.path.getGripPt(seg, {x:item['x' + i], y:item['y' + i]});
+ var gpt = svgedit.path.getGripPt(seg, {x:seg_items[i-1].x, y:seg_items[i-1].y});
+
+ svgedit.utilities.assignAttributes(ctrlLine, {
+ 'x1': pt.x,
+ 'y1': pt.y,
+ 'x2': gpt.x,
+ 'y2': gpt.y,
+ 'display': "inline"
+ });
+
+ cpt['c' + i + '_line'] = ctrlLine;
+
+ // create it
+ pointGrip = cpt['c' + i] = svgedit.path.addCtrlGrip(id);
+
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'cx': pt.x,
+ 'cy': pt.y,
+ 'display': "inline"
+ });
+ cpt['c' + i] = pointGrip;
+ }
+ return cpt;
+};
+
+// This replaces the segment at the given index. Type is given as number.
+svgedit.path.replacePathSeg = function(type, index, pts, elem) {
+ var path = elem || svgedit.path.path.elem;
+ var func = 'createSVGPathSeg' + pathFuncs[type];
+ var seg = path[func].apply(path, pts);
+
+ if(svgedit.browser.supportsPathReplaceItem()) {
+ path.pathSegList.replaceItem(seg, index);
+ } else {
+ var segList = path.pathSegList;
+ var len = segList.numberOfItems;
+ var arr = [];
+ for(var i=0; i<len; i++) {
+ var cur_seg = segList.getItem(i);
+ arr.push(cur_seg)
+ }
+ segList.clear();
+ for(var i=0; i<len; i++) {
+ if(i == index) {
+ segList.appendItem(seg);
+ } else {
+ segList.appendItem(arr[i]);
+ }
+ }
+ }
+};
+
+svgedit.path.getSegSelector = function(seg, update) {
+ var index = seg.index;
+ var segLine = svgedit.utilities.getElem("segline_" + index);
+ if(!segLine) {
+ var pointGripContainer = svgedit.path.getGripContainer();
+ // create segline
+ segLine = document.createElementNS(svgns, "path");
+ svgedit.utilities.assignAttributes(segLine, {
+ 'id': "segline_" + index,
+ 'display': 'none',
+ 'fill': "none",
+ 'stroke': "#0FF",
+ 'stroke-width': 2,
+ 'style':'pointer-events:none',
+ 'd': 'M0,0 0,0'
+ });
+ pointGripContainer.appendChild(segLine);
+ }
+
+ if(update) {
+ var prev = seg.prev;
+ if(!prev) {
+ segLine.setAttribute("display", "none");
+ return segLine;
+ }
+
+ var pt = svgedit.path.getGripPt(prev);
+ // Set start point
+ svgedit.path.replacePathSeg(2, 0, [pt.x, pt.y], segLine);
+
+ var pts = svgedit.path.ptObjToArr(seg.type, seg.item, true);
+ for(var i=0; i < pts.length; i+=2) {
+ var pt = svgedit.path.getGripPt(seg, {x:pts[i], y:pts[i+1]});
+ pts[i] = pt.x;
+ pts[i+1] = pt.y;
+ }
+
+ svgedit.path.replacePathSeg(seg.type, 1, pts, segLine);
+ }
+ return segLine;
+};
+
+// Function: smoothControlPoints
+// Takes three points and creates a smoother line based on them
+//
+// Parameters:
+// ct1 - Object with x and y values (first control point)
+// ct2 - Object with x and y values (second control point)
+// pt - Object with x and y values (third point)
+//
+// Returns:
+// Array of two "smoothed" point objects
+svgedit.path.smoothControlPoints = this.smoothControlPoints = function(ct1, ct2, pt) {
+ // each point must not be the origin
+ var x1 = ct1.x - pt.x,
+ y1 = ct1.y - pt.y,
+ x2 = ct2.x - pt.x,
+ y2 = ct2.y - pt.y;
+
+ if ( (x1 != 0 || y1 != 0) && (x2 != 0 || y2 != 0) ) {
+ var anglea = Math.atan2(y1,x1),
+ angleb = Math.atan2(y2,x2),
+ r1 = Math.sqrt(x1*x1+y1*y1),
+ r2 = Math.sqrt(x2*x2+y2*y2),
+ nct1 = editorContext_.getSVGRoot().createSVGPoint(),
+ nct2 = editorContext_.getSVGRoot().createSVGPoint();
+ if (anglea < 0) { anglea += 2*Math.PI; }
+ if (angleb < 0) { angleb += 2*Math.PI; }
+
+ var angleBetween = Math.abs(anglea - angleb),
+ angleDiff = Math.abs(Math.PI - angleBetween)/2;
+
+ var new_anglea, new_angleb;
+ if (anglea - angleb > 0) {
+ new_anglea = angleBetween < Math.PI ? (anglea + angleDiff) : (anglea - angleDiff);
+ new_angleb = angleBetween < Math.PI ? (angleb - angleDiff) : (angleb + angleDiff);
+ }
+ else {
+ new_anglea = angleBetween < Math.PI ? (anglea - angleDiff) : (anglea + angleDiff);
+ new_angleb = angleBetween < Math.PI ? (angleb + angleDiff) : (angleb - angleDiff);
+ }
+
+ // rotate the points
+ nct1.x = r1 * Math.cos(new_anglea) + pt.x;
+ nct1.y = r1 * Math.sin(new_anglea) + pt.y;
+ nct2.x = r2 * Math.cos(new_angleb) + pt.x;
+ nct2.y = r2 * Math.sin(new_angleb) + pt.y;
+
+ return [nct1, nct2];
+ }
+ return undefined;
+};
+
+svgedit.path.Segment = function(index, item) {
+ this.selected = false;
+ this.index = index;
+ this.item = item;
+ this.type = item.pathSegType;
+
+ this.ctrlpts = [];
+ this.ptgrip = null;
+ this.segsel = null;
+};
+
+svgedit.path.Segment.prototype.showCtrlPts = function(y) {
+ for (var i in this.ctrlpts) {
+ this.ctrlpts[i].setAttribute("display", y ? "inline" : "none");
+ }
+};
+
+svgedit.path.Segment.prototype.selectCtrls = function(y) {
+ $('#ctrlpointgrip_' + this.index + 'c1, #ctrlpointgrip_' + this.index + 'c2').
+ attr('fill', y ? '#0FF' : '#EEE');
+};
+
+svgedit.path.Segment.prototype.show = function(y) {
+ if(this.ptgrip) {
+ this.ptgrip.setAttribute("display", y ? "inline" : "none");
+ this.segsel.setAttribute("display", y ? "inline" : "none");
+ // Show/hide all control points if available
+ this.showCtrlPts(y);
+ }
+};
+
+svgedit.path.Segment.prototype.select = function(y) {
+ if(this.ptgrip) {
+ this.ptgrip.setAttribute("stroke", y ? "#0FF" : "#00F");
+ this.segsel.setAttribute("display", y ? "inline" : "none");
+ if(this.ctrlpts) {
+ this.selectCtrls(y);
+ }
+ this.selected = y;
+ }
+};
+
+svgedit.path.Segment.prototype.addGrip = function() {
+ this.ptgrip = svgedit.path.getPointGrip(this, true);
+ this.ctrlpts = svgedit.path.getControlPoints(this, true);
+ this.segsel = svgedit.path.getSegSelector(this, true);
+};
+
+svgedit.path.Segment.prototype.update = function(full) {
+ if(this.ptgrip) {
+ var pt = svgedit.path.getGripPt(this);
+ svgedit.utilities.assignAttributes(this.ptgrip, {
+ 'cx': pt.x,
+ 'cy': pt.y
+ });
+
+ svgedit.path.getSegSelector(this, true);
+
+ if(this.ctrlpts) {
+ if(full) {
+ this.item = svgedit.path.path.elem.pathSegList.getItem(this.index);
+ this.type = this.item.pathSegType;
+ }
+ svgedit.path.getControlPoints(this);
+ }
+ // this.segsel.setAttribute("display", y?"inline":"none");
+ }
+};
+
+svgedit.path.Segment.prototype.move = function(dx, dy) {
+ var item = this.item;
+
+ if(this.ctrlpts) {
+ var cur_pts = [item.x += dx, item.y += dy,
+ item.x1, item.y1, item.x2 += dx, item.y2 += dy];
+ } else {
+ var cur_pts = [item.x += dx, item.y += dy];
+ }
+ svgedit.path.replacePathSeg(this.type, this.index, cur_pts);
+
+ if(this.next && this.next.ctrlpts) {
+ var next = this.next.item;
+ var next_pts = [next.x, next.y,
+ next.x1 += dx, next.y1 += dy, next.x2, next.y2];
+ svgedit.path.replacePathSeg(this.next.type, this.next.index, next_pts);
+ }
+
+ if(this.mate) {
+ // The last point of a closed subpath has a "mate",
+ // which is the "M" segment of the subpath
+ var item = this.mate.item;
+ var pts = [item.x += dx, item.y += dy];
+ svgedit.path.replacePathSeg(this.mate.type, this.mate.index, pts);
+ // Has no grip, so does not need "updating"?
+ }
+
+ this.update(true);
+ if(this.next) this.next.update(true);
+};
+
+svgedit.path.Segment.prototype.setLinked = function(num) {
+ var seg, anum, pt;
+ if (num == 2) {
+ anum = 1;
+ seg = this.next;
+ if(!seg) return;
+ pt = this.item;
+ } else {
+ anum = 2;
+ seg = this.prev;
+ if(!seg) return;
+ pt = seg.item;
+ }
+
+ var item = seg.item;
+
+ item['x' + anum] = pt.x + (pt.x - this.item['x' + num]);
+ item['y' + anum] = pt.y + (pt.y - this.item['y' + num]);
+
+ var pts = [item.x, item.y,
+ item.x1, item.y1,
+ item.x2, item.y2];
+
+ svgedit.path.replacePathSeg(seg.type, seg.index, pts);
+ seg.update(true);
+};
+
+svgedit.path.Segment.prototype.moveCtrl = function(num, dx, dy) {
+ var item = this.item;
+
+ item['x' + num] += dx;
+ item['y' + num] += dy;
+
+ var pts = [item.x,item.y,
+ item.x1,item.y1, item.x2,item.y2];
+
+ svgedit.path.replacePathSeg(this.type, this.index, pts);
+ this.update(true);
+};
+
+svgedit.path.Segment.prototype.setType = function(new_type, pts) {
+ svgedit.path.replacePathSeg(new_type, this.index, pts);
+ this.type = new_type;
+ this.item = svgedit.path.path.elem.pathSegList.getItem(this.index);
+ this.showCtrlPts(new_type === 6);
+ this.ctrlpts = svgedit.path.getControlPoints(this);
+ this.update(true);
+};
+
+svgedit.path.Path = function(elem) {
+ if(!elem || elem.tagName !== "path") {
+ throw "svgedit.path.Path constructed without a <path> element";
+ }
+
+ this.elem = elem;
+ this.segs = [];
+ this.selected_pts = [];
+ svgedit.path.path = this;
+
+ this.init();
+};
+
+// Reset path data
+svgedit.path.Path.prototype.init = function() {
+ // Hide all grips, etc
+ $(svgedit.path.getGripContainer()).find("*").attr("display", "none");
+ var segList = this.elem.pathSegList;
+ var len = segList.numberOfItems;
+ this.segs = [];
+ this.selected_pts = [];
+ this.first_seg = null;
+
+ // Set up segs array
+ for(var i=0; i < len; i++) {
+ var item = segList.getItem(i);
+ var segment = new svgedit.path.Segment(i, item);
+ segment.path = this;
+ this.segs.push(segment);
+ }
+
+ var segs = this.segs;
+ var start_i = null;
+
+ for(var i=0; i < len; i++) {
+ var seg = segs[i];
+ var next_seg = (i+1) >= len ? null : segs[i+1];
+ var prev_seg = (i-1) < 0 ? null : segs[i-1];
+
+ if(seg.type === 2) {
+ if(prev_seg && prev_seg.type !== 1) {
+ // New sub-path, last one is open,
+ // so add a grip to last sub-path's first point
+ var start_seg = segs[start_i];
+ start_seg.next = segs[start_i+1];
+ start_seg.next.prev = start_seg;
+ start_seg.addGrip();
+ }
+ // Remember that this is a starter seg
+ start_i = i;
+ } else if(next_seg && next_seg.type === 1) {
+ // This is the last real segment of a closed sub-path
+ // Next is first seg after "M"
+ seg.next = segs[start_i+1];
+
+ // First seg after "M"'s prev is this
+ seg.next.prev = seg;
+ seg.mate = segs[start_i];
+ seg.addGrip();
+ if(this.first_seg == null) {
+ this.first_seg = seg;
+ }
+ } else if(!next_seg) {
+ if(seg.type !== 1) {
+ // Last seg, doesn't close so add a grip
+ // to last sub-path's first point
+ var start_seg = segs[start_i];
+ start_seg.next = segs[start_i+1];
+ start_seg.next.prev = start_seg;
+ start_seg.addGrip();
+ seg.addGrip();
+
+ if(!this.first_seg) {
+ // Open path, so set first as real first and add grip
+ this.first_seg = segs[start_i];
+ }
+ }
+ } else if(seg.type !== 1){
+ // Regular segment, so add grip and its "next"
+ seg.addGrip();
+
+ // Don't set its "next" if it's an "M"
+ if(next_seg && next_seg.type !== 2) {
+ seg.next = next_seg;
+ seg.next.prev = seg;
+ }
+ }
+ }
+ return this;
+};
+
+svgedit.path.Path.prototype.eachSeg = function(fn) {
+ var len = this.segs.length
+ for(var i=0; i < len; i++) {
+ var ret = fn.call(this.segs[i], i);
+ if(ret === false) break;
+ }
+};
+
+svgedit.path.Path.prototype.addSeg = function(index) {
+ // Adds a new segment
+ var seg = this.segs[index];
+ if(!seg.prev) return;
+
+ var prev = seg.prev;
+ var newseg;
+ switch(seg.item.pathSegType) {
+ case 4:
+ var new_x = (seg.item.x + prev.item.x) / 2;
+ var new_y = (seg.item.y + prev.item.y) / 2;
+ newseg = this.elem.createSVGPathSegLinetoAbs(new_x, new_y);
+ break;
+ case 6: //make it a curved segment to preserve the shape (WRS)
+ // http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm#Geometric_interpretation
+ var p0_x = (prev.item.x + seg.item.x1)/2;
+ var p1_x = (seg.item.x1 + seg.item.x2)/2;
+ var p2_x = (seg.item.x2 + seg.item.x)/2;
+ var p01_x = (p0_x + p1_x)/2;
+ var p12_x = (p1_x + p2_x)/2;
+ var new_x = (p01_x + p12_x)/2;
+ var p0_y = (prev.item.y + seg.item.y1)/2;
+ var p1_y = (seg.item.y1 + seg.item.y2)/2;
+ var p2_y = (seg.item.y2 + seg.item.y)/2;
+ var p01_y = (p0_y + p1_y)/2;
+ var p12_y = (p1_y + p2_y)/2;
+ var new_y = (p01_y + p12_y)/2;
+ newseg = this.elem.createSVGPathSegCurvetoCubicAbs(new_x,new_y, p0_x,p0_y, p01_x,p01_y);
+ var pts = [seg.item.x,seg.item.y,p12_x,p12_y,p2_x,p2_y];
+ svgedit.path.replacePathSeg(seg.type,index,pts);
+ break;
+ }
+
+ svgedit.path.insertItemBefore(this.elem, newseg, index);
+};
+
+svgedit.path.Path.prototype.deleteSeg = function(index) {
+ var seg = this.segs[index];
+ var list = this.elem.pathSegList;
+
+ seg.show(false);
+ var next = seg.next;
+ if(seg.mate) {
+ // Make the next point be the "M" point
+ var pt = [next.item.x, next.item.y];
+ svgedit.path.replacePathSeg(2, next.index, pt);
+
+ // Reposition last node
+ svgedit.path.replacePathSeg(4, seg.index, pt);
+
+ list.removeItem(seg.mate.index);
+ } else if(!seg.prev) {
+ // First node of open path, make next point the M
+ var item = seg.item;
+ var pt = [next.item.x, next.item.y];
+ svgedit.path.replacePathSeg(2, seg.next.index, pt);
+ list.removeItem(index);
+
+ } else {
+ list.removeItem(index);
+ }
+};
+
+svgedit.path.Path.prototype.subpathIsClosed = function(index) {
+ var closed = false;
+ // Check if subpath is already open
+ svgedit.path.path.eachSeg(function(i) {
+ if(i <= index) return true;
+ if(this.type === 2) {
+ // Found M first, so open
+ return false;
+ } else if(this.type === 1) {
+ // Found Z first, so closed
+ closed = true;
+ return false;
+ }
+ });
+
+ return closed;
+};
+
+svgedit.path.Path.prototype.removePtFromSelection = function(index) {
+ var pos = this.selected_pts.indexOf(index);
+ if(pos == -1) {
+ return;
+ }
+ this.segs[index].select(false);
+ this.selected_pts.splice(pos, 1);
+};
+
+svgedit.path.Path.prototype.clearSelection = function() {
+ this.eachSeg(function(i) {
+ // 'this' is the segment here
+ this.select(false);
+ });
+ this.selected_pts = [];
+};
+
+svgedit.path.Path.prototype.storeD = function() {
+ this.last_d = this.elem.getAttribute('d');
+};
+
+svgedit.path.Path.prototype.show = function(y) {
+ // Shows this path's segment grips
+ this.eachSeg(function() {
+ // 'this' is the segment here
+ this.show(y);
+ });
+ if(y) {
+ this.selectPt(this.first_seg.index);
+ }
+ return this;
+};
+
+// Move selected points
+svgedit.path.Path.prototype.movePts = function(d_x, d_y) {
+ var i = this.selected_pts.length;
+ while(i--) {
+ var seg = this.segs[this.selected_pts[i]];
+ seg.move(d_x, d_y);
+ }
+};
+
+svgedit.path.Path.prototype.moveCtrl = function(d_x, d_y) {
+ var seg = this.segs[this.selected_pts[0]];
+ seg.moveCtrl(this.dragctrl, d_x, d_y);
+ if(link_control_pts) {
+ seg.setLinked(this.dragctrl);
+ }
+};
+
+svgedit.path.Path.prototype.setSegType = function(new_type) {
+ this.storeD();
+ var i = this.selected_pts.length;
+ var text;
+ while(i--) {
+ var sel_pt = this.selected_pts[i];
+
+ // Selected seg
+ var cur = this.segs[sel_pt];
+ var prev = cur.prev;
+ if(!prev) continue;
+
+ if(!new_type) { // double-click, so just toggle
+ text = "Toggle Path Segment Type";
+
+ // Toggle segment to curve/straight line
+ var old_type = cur.type;
+
+ new_type = (old_type == 6) ? 4 : 6;
+ }
+
+ new_type = new_type-0;
+
+ var cur_x = cur.item.x;
+ var cur_y = cur.item.y;
+ var prev_x = prev.item.x;
+ var prev_y = prev.item.y;
+ var points;
+ switch ( new_type ) {
+ case 6:
+ if(cur.olditem) {
+ var old = cur.olditem;
+ points = [cur_x,cur_y, old.x1,old.y1, old.x2,old.y2];
+ } else {
+ var diff_x = cur_x - prev_x;
+ var diff_y = cur_y - prev_y;
+ // get control points from straight line segment
+ /*
+ var ct1_x = (prev_x + (diff_y/2));
+ var ct1_y = (prev_y - (diff_x/2));
+ var ct2_x = (cur_x + (diff_y/2));
+ var ct2_y = (cur_y - (diff_x/2));
+ */
+ //create control points on the line to preserve the shape (WRS)
+ var ct1_x = (prev_x + (diff_x/3));
+ var ct1_y = (prev_y + (diff_y/3));
+ var ct2_x = (cur_x - (diff_x/3));
+ var ct2_y = (cur_y - (diff_y/3));
+ points = [cur_x,cur_y, ct1_x,ct1_y, ct2_x,ct2_y];
+ }
+ break;
+ case 4:
+ points = [cur_x,cur_y];
+
+ // Store original prevve segment nums
+ cur.olditem = cur.item;
+ break;
+ }
+
+ cur.setType(new_type, points);
+ }
+ svgedit.path.path.endChanges(text);
+};
+
+svgedit.path.Path.prototype.selectPt = function(pt, ctrl_num) {
+ this.clearSelection();
+ if(pt == null) {
+ this.eachSeg(function(i) {
+ // 'this' is the segment here.
+ if(this.prev) {
+ pt = i;
+ }
+ });
+ }
+ this.addPtsToSelection(pt);
+ if(ctrl_num) {
+ this.dragctrl = ctrl_num;
+
+ if(link_control_pts) {
+ this.segs[pt].setLinked(ctrl_num);
+ }
+ }
+};
+
+// Update position of all points
+svgedit.path.Path.prototype.update = function() {
+ var elem = this.elem;
+ if(svgedit.utilities.getRotationAngle(elem)) {
+ this.matrix = svgedit.math.getMatrix(elem);
+ this.imatrix = this.matrix.inverse();
+ } else {
+ this.matrix = null;
+ this.imatrix = null;
+ }
+
+ this.eachSeg(function(i) {
+ this.item = elem.pathSegList.getItem(i);
+ this.update();
+ });
+
+ return this;
+};
+
+svgedit.path.getPath_ = function(elem) {
+ var p = pathData[elem.id];
+ if(!p) p = pathData[elem.id] = new svgedit.path.Path(elem);
+ return p;
+};
+
+svgedit.path.removePath_ = function(id) {
+ if(id in pathData) delete pathData[id];
+};
+
+var getRotVals = function(x, y) {
+ dx = x - oldcx;
+ dy = y - oldcy;
+
+ // rotate the point around the old center
+ r = Math.sqrt(dx*dx + dy*dy);
+ theta = Math.atan2(dy,dx) + angle;
+ dx = r * Math.cos(theta) + oldcx;
+ dy = r * Math.sin(theta) + oldcy;
+
+ // dx,dy should now hold the actual coordinates of each
+ // point after being rotated
+
+ // now we want to rotate them around the new center in the reverse direction
+ dx -= newcx;
+ dy -= newcy;
+
+ r = Math.sqrt(dx*dx + dy*dy);
+ theta = Math.atan2(dy,dx) - angle;
+
+ return {'x':(r * Math.cos(theta) + newcx)/1,
+ 'y':(r * Math.sin(theta) + newcy)/1};
+};
+
+// If the path was rotated, we must now pay the piper:
+// Every path point must be rotated into the rotated coordinate system of
+// its old center, then determine the new center, then rotate it back
+// This is because we want the path to remember its rotation
+
+// TODO: This is still using ye olde transform methods, can probably
+// be optimized or even taken care of by recalculateDimensions
+svgedit.path.recalcRotatedPath = function() {
+ var current_path = svgedit.path.path.elem;
+ var angle = svgedit.utilities.getRotationAngle(current_path, true);
+ if(!angle) return;
+// selectedBBoxes[0] = svgedit.path.path.oldbbox;
+ var box = svgedit.utilities.getBBox(current_path),
+ oldbox = svgedit.path.path.oldbbox,//selectedBBoxes[0],
+ oldcx = oldbox.x + oldbox.width/2,
+ oldcy = oldbox.y + oldbox.height/2,
+ newcx = box.x + box.width/2,
+ newcy = box.y + box.height/2,
+
+ // un-rotate the new center to the proper position
+ dx = newcx - oldcx,
+ dy = newcy - oldcy,
+ r = Math.sqrt(dx*dx + dy*dy),
+ theta = Math.atan2(dy,dx) + angle;
+
+ newcx = r * Math.cos(theta) + oldcx;
+ newcy = r * Math.sin(theta) + oldcy;
+
+ var list = current_path.pathSegList,
+ i = list.numberOfItems;
+ while (i) {
+ i -= 1;
+ var seg = list.getItem(i),
+ type = seg.pathSegType;
+ if(type == 1) continue;
+
+ var rvals = getRotVals(seg.x,seg.y),
+ points = [rvals.x, rvals.y];
+ if(seg.x1 != null && seg.x2 != null) {
+ c_vals1 = getRotVals(seg.x1, seg.y1);
+ c_vals2 = getRotVals(seg.x2, seg.y2);
+ points.splice(points.length, 0, c_vals1.x , c_vals1.y, c_vals2.x, c_vals2.y);
+ }
+ svgedit.path.replacePathSeg(type, i, points);
+ } // loop for each point
+
+ box = svgedit.utilities.getBBox(current_path);
+// selectedBBoxes[0].x = box.x; selectedBBoxes[0].y = box.y;
+// selectedBBoxes[0].width = box.width; selectedBBoxes[0].height = box.height;
+
+ // now we must set the new transform to be rotated around the new center
+ var R_nc = svgroot.createSVGTransform(),
+ tlist = svgedit.transformlist.getTransformList(current_path);
+ R_nc.setRotate((angle * 180.0 / Math.PI), newcx, newcy);
+ tlist.replaceItem(R_nc,0);
+};
+
+// ====================================
+// Public API starts here
+
+svgedit.path.clearData = function() {
+ pathData = {};
+};
+
+})();
diff --git a/files_svgedit/svg-edit/.svn/text-base/sanitize.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/sanitize.js.svn-base
new file mode 100644
index 000000000..5924a598d
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/sanitize.js.svn-base
@@ -0,0 +1,273 @@
+/**
+ * Package: svgedit.sanitize
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) browser.js
+// 2) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.sanitize) {
+ svgedit.sanitize = {};
+}
+
+// Namespace constants
+var svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ xmlns = "http://www.w3.org/XML/1998/namespace",
+ xmlnsns = "http://www.w3.org/2000/xmlns/", // see http://www.w3.org/TR/REC-xml-names/#xmlReserved
+ se_ns = "http://svg-edit.googlecode.com",
+ htmlns = "http://www.w3.org/1999/xhtml",
+ mathns = "http://www.w3.org/1998/Math/MathML";
+
+// map namespace URIs to prefixes
+var nsMap_ = {};
+nsMap_[xlinkns] = 'xlink';
+nsMap_[xmlns] = 'xml';
+nsMap_[xmlnsns] = 'xmlns';
+nsMap_[se_ns] = 'se';
+nsMap_[htmlns] = 'xhtml';
+nsMap_[mathns] = 'mathml';
+
+// map prefixes to namespace URIs
+var nsRevMap_ = {};
+$.each(nsMap_, function(key,value){
+ nsRevMap_[value] = key;
+});
+
+// this defines which elements and attributes that we support
+var svgWhiteList_ = {
+ // SVG Elements
+ "a": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "id", "mask", "opacity", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "xlink:href", "xlink:title"],
+ "circle": ["class", "clip-path", "clip-rule", "cx", "cy", "fill", "fill-opacity", "fill-rule", "filter", "id", "mask", "opacity", "r", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "clipPath": ["class", "clipPathUnits", "id"],
+ "defs": [],
+ "style" : ["type"],
+ "desc": [],
+ "ellipse": ["class", "clip-path", "clip-rule", "cx", "cy", "fill", "fill-opacity", "fill-rule", "filter", "id", "mask", "opacity", "requiredFeatures", "rx", "ry", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "feGaussianBlur": ["class", "color-interpolation-filters", "id", "requiredFeatures", "stdDeviation"],
+ "filter": ["class", "color-interpolation-filters", "filterRes", "filterUnits", "height", "id", "primitiveUnits", "requiredFeatures", "width", "x", "xlink:href", "y"],
+ "foreignObject": ["class", "font-size", "height", "id", "opacity", "requiredFeatures", "style", "transform", "width", "x", "y"],
+ "g": ["class", "clip-path", "clip-rule", "id", "display", "fill", "fill-opacity", "fill-rule", "filter", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "font-family", "font-size", "font-style", "font-weight", "text-anchor"],
+ "image": ["class", "clip-path", "clip-rule", "filter", "height", "id", "mask", "opacity", "requiredFeatures", "style", "systemLanguage", "transform", "width", "x", "xlink:href", "xlink:title", "y"],
+ "line": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "id", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "x1", "x2", "y1", "y2"],
+ "linearGradient": ["class", "id", "gradientTransform", "gradientUnits", "requiredFeatures", "spreadMethod", "systemLanguage", "x1", "x2", "xlink:href", "y1", "y2"],
+ "marker": ["id", "class", "markerHeight", "markerUnits", "markerWidth", "orient", "preserveAspectRatio", "refX", "refY", "systemLanguage", "viewBox"],
+ "mask": ["class", "height", "id", "maskContentUnits", "maskUnits", "width", "x", "y"],
+ "metadata": ["class", "id"],
+ "path": ["class", "clip-path", "clip-rule", "d", "fill", "fill-opacity", "fill-rule", "filter", "id", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "pattern": ["class", "height", "id", "patternContentUnits", "patternTransform", "patternUnits", "requiredFeatures", "style", "systemLanguage", "viewBox", "width", "x", "xlink:href", "y"],
+ "polygon": ["class", "clip-path", "clip-rule", "id", "fill", "fill-opacity", "fill-rule", "filter", "id", "class", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "points", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "polyline": ["class", "clip-path", "clip-rule", "id", "fill", "fill-opacity", "fill-rule", "filter", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "points", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "radialGradient": ["class", "cx", "cy", "fx", "fy", "gradientTransform", "gradientUnits", "id", "r", "requiredFeatures", "spreadMethod", "systemLanguage", "xlink:href"],
+ "rect": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "height", "id", "mask", "opacity", "requiredFeatures", "rx", "ry", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "width", "x", "y"],
+ "stop": ["class", "id", "offset", "requiredFeatures", "stop-color", "stop-opacity", "style", "systemLanguage"],
+ "svg": ["class", "clip-path", "clip-rule", "filter", "id", "height", "mask", "preserveAspectRatio", "requiredFeatures", "style", "systemLanguage", "viewBox", "width", "x", "xmlns", "xmlns:se", "xmlns:xlink", "y"],
+ "switch": ["class", "id", "requiredFeatures", "systemLanguage"],
+ "symbol": ["class", "fill", "fill-opacity", "fill-rule", "filter", "font-family", "font-size", "font-style", "font-weight", "id", "opacity", "preserveAspectRatio", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "viewBox"],
+ "text": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "font-family", "font-size", "font-style", "font-weight", "id", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "text-anchor", "transform", "x", "xml:space", "y"],
+ "textPath": ["class", "id", "method", "requiredFeatures", "spacing", "startOffset", "style", "systemLanguage", "transform", "xlink:href"],
+ "title": [],
+ "tspan": ["class", "clip-path", "clip-rule", "dx", "dy", "fill", "fill-opacity", "fill-rule", "filter", "font-family", "font-size", "font-style", "font-weight", "id", "mask", "opacity", "requiredFeatures", "rotate", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "text-anchor", "textLength", "transform", "x", "xml:space", "y"],
+ "use": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "height", "id", "mask", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "transform", "width", "x", "xlink:href", "y"],
+
+ // MathML Elements
+ "annotation": ["encoding"],
+ "annotation-xml": ["encoding"],
+ "maction": ["actiontype", "other", "selection"],
+ "math": ["class", "id", "display", "xmlns"],
+ "menclose": ["notation"],
+ "merror": [],
+ "mfrac": ["linethickness"],
+ "mi": ["mathvariant"],
+ "mmultiscripts": [],
+ "mn": [],
+ "mo": ["fence", "lspace", "maxsize", "minsize", "rspace", "stretchy"],
+ "mover": [],
+ "mpadded": ["lspace", "width", "height", "depth", "voffset"],
+ "mphantom": [],
+ "mprescripts": [],
+ "mroot": [],
+ "mrow": ["xlink:href", "xlink:type", "xmlns:xlink"],
+ "mspace": ["depth", "height", "width"],
+ "msqrt": [],
+ "mstyle": ["displaystyle", "mathbackground", "mathcolor", "mathvariant", "scriptlevel"],
+ "msub": [],
+ "msubsup": [],
+ "msup": [],
+ "mtable": ["align", "columnalign", "columnlines", "columnspacing", "displaystyle", "equalcolumns", "equalrows", "frame", "rowalign", "rowlines", "rowspacing", "width"],
+ "mtd": ["columnalign", "columnspan", "rowalign", "rowspan"],
+ "mtext": [],
+ "mtr": ["columnalign", "rowalign"],
+ "munder": [],
+ "munderover": [],
+ "none": [],
+ "semantics": []
+};
+
+// Produce a Namespace-aware version of svgWhitelist
+var svgWhiteListNS_ = {};
+$.each(svgWhiteList_, function(elt,atts){
+ var attNS = {};
+ $.each(atts, function(i, att){
+ if (att.indexOf(':') >= 0) {
+ var v = att.split(':');
+ attNS[v[1]] = nsRevMap_[v[0]];
+ } else {
+ attNS[att] = att == 'xmlns' ? xmlnsns : null;
+ }
+ });
+ svgWhiteListNS_[elt] = attNS;
+});
+
+// temporarily expose these
+svgedit.sanitize.getNSMap = function() { return nsMap_; }
+
+// Function: svgedit.sanitize.sanitizeSvg
+// Sanitizes the input node and its children
+// It only keeps what is allowed from our whitelist defined above
+//
+// Parameters:
+// node - The DOM element to be checked, will also check its children
+svgedit.sanitize.sanitizeSvg = function(node) {
+ // we only care about element nodes
+ // automatically return for all comment, etc nodes
+ // for text, we do a whitespace trim
+ if (node.nodeType == 3) {
+ node.nodeValue = node.nodeValue.replace(/^\s+|\s+$/g, "");
+ // Remove empty text nodes
+ if(!node.nodeValue.length) node.parentNode.removeChild(node);
+ }
+ 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...
+ if (!doc || !parent) return;
+
+ var allowedAttrs = svgWhiteList_[node.nodeName];
+ var allowedAttrsNS = svgWhiteListNS_[node.nodeName];
+
+ // if this element is allowed
+ if (allowedAttrs != undefined) {
+
+ var se_attrs = [];
+
+ var i = node.attributes.length;
+ while (i--) {
+ // if the attribute is not in our whitelist, then remove it
+ // could use jQuery's inArray(), but I don't know if that's any better
+ var attr = node.attributes.item(i);
+ var attrName = attr.nodeName;
+ var attrLocalName = attr.localName;
+ var attrNsURI = attr.namespaceURI;
+ // Check that an attribute with the correct localName in the correct namespace is on
+ // our whitelist or is a namespace declaration for one of our allowed namespaces
+ if (!(allowedAttrsNS.hasOwnProperty(attrLocalName) && attrNsURI == allowedAttrsNS[attrLocalName] && attrNsURI != xmlnsns) &&
+ !(attrNsURI == xmlnsns && nsMap_[attr.nodeValue]) )
+ {
+ // TODO(codedread): Programmatically add the se: attributes to the NS-aware whitelist.
+ // Bypassing the whitelist to allow se: prefixes. Is there
+ // a more appropriate way to do this?
+ if(attrName.indexOf('se:') == 0) {
+ se_attrs.push([attrName, attr.nodeValue]);
+ }
+ node.removeAttributeNS(attrNsURI, attrLocalName);
+ }
+
+ // Add spaces before negative signs where necessary
+ if(svgedit.browser.isGecko()) {
+ switch ( attrName ) {
+ case "transform":
+ case "gradientTransform":
+ case "patternTransform":
+ var val = attr.nodeValue.replace(/(\d)-/g, "$1 -");
+ node.setAttribute(attrName, val);
+ }
+ }
+
+ // for the style attribute, rewrite it in terms of XML presentational attributes
+ if (attrName == "style") {
+ var props = attr.nodeValue.split(";"),
+ p = props.length;
+ while(p--) {
+ var nv = props[p].split(":");
+ // now check that this attribute is supported
+ if (allowedAttrs.indexOf(nv[0]) >= 0) {
+ node.setAttribute(nv[0],nv[1]);
+ }
+ }
+ node.removeAttribute('style');
+ }
+ }
+
+ $.each(se_attrs, function(i, attr) {
+ node.setAttributeNS(se_ns, attr[0], attr[1]);
+ });
+
+ // for some elements that have a xlink:href, ensure the URI refers to a local element
+ // (but not for links)
+ var href = svgedit.utilities.getHref(node);
+ if(href &&
+ ["filter", "linearGradient", "pattern",
+ "radialGradient", "textPath", "use"].indexOf(node.nodeName) >= 0)
+ {
+ // TODO: we simply check if the first character is a #, is this bullet-proof?
+ if (href[0] != "#") {
+ // remove the attribute (but keep the element)
+ svgedit.utilities.setHref(node, "");
+ node.removeAttributeNS(xlinkns, "href");
+ }
+ }
+
+ // Safari crashes on a <use> without a xlink:href, so we just remove the node here
+ if (node.nodeName == "use" && !svgedit.utilities.getHref(node)) {
+ parent.removeChild(node);
+ return;
+ }
+ // if the element has attributes pointing to a non-local reference,
+ // need to remove the attribute
+ $.each(["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"],function(i,attr) {
+ var val = node.getAttribute(attr);
+ if (val) {
+ val = svgedit.utilities.getUrlFromAttr(val);
+ // simply check for first character being a '#'
+ if (val && val[0] !== "#") {
+ node.setAttribute(attr, "");
+ node.removeAttribute(attr);
+ }
+ }
+ });
+
+ // recurse to children
+ i = node.childNodes.length;
+ while (i--) { svgedit.sanitize.sanitizeSvg(node.childNodes.item(i)); }
+ }
+ // else, remove this element
+ else {
+ // remove all children from this node and insert them before this node
+ // FIXME: in the case of animation elements this will hardly ever be correct
+ var children = [];
+ while (node.hasChildNodes()) {
+ children.push(parent.insertBefore(node.firstChild, node));
+ }
+
+ // remove this node from the document altogether
+ parent.removeChild(node);
+
+ // call sanitizeSvg on each of those children
+ var i = children.length;
+ while (i--) { svgedit.sanitize.sanitizeSvg(children[i]); }
+
+ }
+};
+
+})();
+
diff --git a/files_svgedit/svg-edit/.svn/text-base/select.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/select.js.svn-base
new file mode 100644
index 000000000..c13f29184
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/select.js.svn-base
@@ -0,0 +1,529 @@
+/**
+ * Package: svedit.select
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) math.js
+// 4) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.select) {
+ svgedit.select = {};
+}
+
+var svgFactory_;
+var config_;
+var selectorManager_; // A Singleton
+
+// Class: svgedit.select.Selector
+// Private class for DOM element selection boxes
+//
+// Parameters:
+// id - integer to internally indentify the selector
+// elem - DOM element associated with this selector
+svgedit.select.Selector = function(id, elem) {
+ // this is the selector's unique number
+ this.id = id;
+
+ // this holds a reference to the element for which this selector is being used
+ this.selectedElement = elem;
+
+ // this is a flag used internally to track whether the selector is being used or not
+ this.locked = true;
+
+ // this holds a reference to the <g> element that holds all visual elements of the selector
+ this.selectorGroup = svgFactory_.createSVGElement({
+ 'element': 'g',
+ 'attr': {'id': ('selectorGroup' + this.id)}
+ });
+
+ // this holds a reference to the path rect
+ this.selectorRect = this.selectorGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'path',
+ 'attr': {
+ 'id': ('selectedBox' + this.id),
+ 'fill': 'none',
+ 'stroke': '#22C',
+ 'stroke-width': '1',
+ 'stroke-dasharray': '5,5',
+ // need to specify this so that the rect is not selectable
+ 'style': 'pointer-events:none'
+ }
+ })
+ );
+
+ // this holds a reference to the grip coordinates for this selector
+ this.gripCoords = {
+ 'nw': null,
+ 'n' : null,
+ 'ne': null,
+ 'e' : null,
+ 'se': null,
+ 's' : null,
+ 'sw': null,
+ 'w' : null
+ };
+
+ this.reset(this.selectedElement);
+};
+
+
+// Function: svgedit.select.Selector.reset
+// Used to reset the id and element that the selector is attached to
+//
+// Parameters:
+// e - DOM element associated with this selector
+svgedit.select.Selector.prototype.reset = function(e) {
+ this.locked = true;
+ this.selectedElement = e;
+ this.resize();
+ this.selectorGroup.setAttribute('display', 'inline');
+};
+
+// Function: svgedit.select.Selector.updateGripCursors
+// Updates cursors for corner grips on rotation so arrows point the right way
+//
+// Parameters:
+// angle - Float indicating current rotation angle in degrees
+svgedit.select.Selector.prototype.updateGripCursors = function(angle) {
+ var dir_arr = [];
+ var steps = Math.round(angle / 45);
+ if(steps < 0) steps += 8;
+ for (var dir in selectorManager_.selectorGrips) {
+ dir_arr.push(dir);
+ }
+ while(steps > 0) {
+ dir_arr.push(dir_arr.shift());
+ steps--;
+ }
+ var i = 0;
+ for (var dir in selectorManager_.selectorGrips) {
+ selectorManager_.selectorGrips[dir].setAttribute('style', ('cursor:' + dir_arr[i] + '-resize'));
+ i++;
+ };
+};
+
+// Function: svgedit.select.Selector.showGrips
+// Show the resize grips of this selector
+//
+// Parameters:
+// show - boolean indicating whether grips should be shown or not
+svgedit.select.Selector.prototype.showGrips = function(show) {
+ // TODO: use suspendRedraw() here
+ var bShow = show ? 'inline' : 'none';
+ selectorManager_.selectorGripsGroup.setAttribute('display', bShow);
+ var elem = this.selectedElement;
+ this.hasGrips = show;
+ if(elem && show) {
+ this.selectorGroup.appendChild(selectorManager_.selectorGripsGroup);
+ this.updateGripCursors(svgedit.utilities.getRotationAngle(elem));
+ }
+};
+
+// Function: svgedit.select.Selector.resize
+// Updates the selector to match the element's size
+svgedit.select.Selector.prototype.resize = function() {
+ var selectedBox = this.selectorRect,
+ mgr = selectorManager_,
+ selectedGrips = mgr.selectorGrips,
+ selected = this.selectedElement,
+ sw = selected.getAttribute('stroke-width'),
+ current_zoom = svgFactory_.currentZoom();
+ var offset = 1/current_zoom;
+ if (selected.getAttribute('stroke') !== 'none' && !isNaN(sw)) {
+ offset += (sw/2);
+ }
+
+ var tagName = selected.tagName;
+ if (tagName === 'text') {
+ offset += 2/current_zoom;
+ }
+
+ // loop and transform our bounding box until we reach our first rotation
+ var tlist = svgedit.transformlist.getTransformList(selected);
+ var m = svgedit.math.transformListToTransform(tlist).matrix;
+
+ // This should probably be handled somewhere else, but for now
+ // it keeps the selection box correctly positioned when zoomed
+ m.e *= current_zoom;
+ m.f *= current_zoom;
+
+ var bbox = svgedit.utilities.getBBox(selected);
+ if(tagName === 'g' && !$.data(selected, 'gsvg')) {
+ // The bbox for a group does not include stroke vals, so we
+ // get the bbox based on its children.
+ var stroked_bbox = svgFactory_.getStrokedBBox(selected.childNodes);
+ if(stroked_bbox) {
+ bbox = stroked_bbox;
+ }
+ }
+
+ // apply the transforms
+ var l=bbox.x, t=bbox.y, w=bbox.width, h=bbox.height,
+ bbox = {x:l, y:t, width:w, height:h};
+
+ // we need to handle temporary transforms too
+ // if skewed, get its transformed box, then find its axis-aligned bbox
+
+ //*
+ offset *= current_zoom;
+
+ var nbox = svgedit.math.transformBox(l*current_zoom, t*current_zoom, w*current_zoom, h*current_zoom, m),
+ aabox = nbox.aabox,
+ nbax = aabox.x - offset,
+ nbay = aabox.y - offset,
+ nbaw = aabox.width + (offset * 2),
+ nbah = aabox.height + (offset * 2);
+
+ // now if the shape is rotated, un-rotate it
+ var cx = nbax + nbaw/2,
+ cy = nbay + nbah/2;
+
+ var angle = svgedit.utilities.getRotationAngle(selected);
+ if (angle) {
+ var rot = svgFactory_.svgRoot().createSVGTransform();
+ rot.setRotate(-angle,cx,cy);
+ var rotm = rot.matrix;
+ nbox.tl = svgedit.math.transformPoint(nbox.tl.x,nbox.tl.y,rotm);
+ nbox.tr = svgedit.math.transformPoint(nbox.tr.x,nbox.tr.y,rotm);
+ nbox.bl = svgedit.math.transformPoint(nbox.bl.x,nbox.bl.y,rotm);
+ nbox.br = svgedit.math.transformPoint(nbox.br.x,nbox.br.y,rotm);
+
+ // calculate the axis-aligned bbox
+ var tl = nbox.tl;
+ var minx = tl.x,
+ miny = tl.y,
+ maxx = tl.x,
+ maxy = tl.y;
+
+ var Min = Math.min, Max = Math.max;
+
+ minx = Min(minx, Min(nbox.tr.x, Min(nbox.bl.x, nbox.br.x) ) ) - offset;
+ miny = Min(miny, Min(nbox.tr.y, Min(nbox.bl.y, nbox.br.y) ) ) - offset;
+ maxx = Max(maxx, Max(nbox.tr.x, Max(nbox.bl.x, nbox.br.x) ) ) + offset;
+ maxy = Max(maxy, Max(nbox.tr.y, Max(nbox.bl.y, nbox.br.y) ) ) + offset;
+
+ nbax = minx;
+ nbay = miny;
+ nbaw = (maxx-minx);
+ nbah = (maxy-miny);
+ }
+ var sr_handle = svgFactory_.svgRoot().suspendRedraw(100);
+
+ var dstr = 'M' + nbax + ',' + nbay
+ + ' L' + (nbax+nbaw) + ',' + nbay
+ + ' ' + (nbax+nbaw) + ',' + (nbay+nbah)
+ + ' ' + nbax + ',' + (nbay+nbah) + 'z';
+ selectedBox.setAttribute('d', dstr);
+
+ var xform = angle ? 'rotate(' + [angle,cx,cy].join(',') + ')' : '';
+ this.selectorGroup.setAttribute('transform', xform);
+
+ // TODO(codedread): Is this if needed?
+// if(selected === selectedElements[0]) {
+ this.gripCoords = {
+ 'nw': [nbax, nbay],
+ 'ne': [nbax+nbaw, nbay],
+ 'sw': [nbax, nbay+nbah],
+ 'se': [nbax+nbaw, nbay+nbah],
+ 'n': [nbax + (nbaw)/2, nbay],
+ 'w': [nbax, nbay + (nbah)/2],
+ 'e': [nbax + nbaw, nbay + (nbah)/2],
+ 's': [nbax + (nbaw)/2, nbay + nbah]
+ };
+
+ for(var dir in this.gripCoords) {
+ var coords = this.gripCoords[dir];
+ selectedGrips[dir].setAttribute('cx', coords[0]);
+ selectedGrips[dir].setAttribute('cy', coords[1]);
+ };
+
+ // we want to go 20 pixels in the negative transformed y direction, ignoring scale
+ mgr.rotateGripConnector.setAttribute('x1', nbax + (nbaw)/2);
+ mgr.rotateGripConnector.setAttribute('y1', nbay);
+ mgr.rotateGripConnector.setAttribute('x2', nbax + (nbaw)/2);
+ mgr.rotateGripConnector.setAttribute('y2', nbay - 20);
+
+ mgr.rotateGrip.setAttribute('cx', nbax + (nbaw)/2);
+ mgr.rotateGrip.setAttribute('cy', nbay - 20);
+// }
+
+ svgFactory_.svgRoot().unsuspendRedraw(sr_handle);
+};
+
+
+// Class: svgedit.select.SelectorManager
+svgedit.select.SelectorManager = function() {
+ // this will hold the <g> element that contains all selector rects/grips
+ this.selectorParentGroup = null;
+
+ // this is a special rect that is used for multi-select
+ this.rubberBandBox = null;
+
+ // this will hold objects of type svgedit.select.Selector (see above)
+ this.selectors = [];
+
+ // this holds a map of SVG elements to their Selector object
+ this.selectorMap = {};
+
+ // this holds a reference to the grip elements
+ this.selectorGrips = {
+ 'nw': null,
+ 'n' : null,
+ 'ne': null,
+ 'e' : null,
+ 'se': null,
+ 's' : null,
+ 'sw': null,
+ 'w' : null
+ };
+
+ this.selectorGripsGroup = null;
+ this.rotateGripConnector = null;
+ this.rotateGrip = null;
+
+ this.initGroup();
+};
+
+// Function: svgedit.select.SelectorManager.initGroup
+// Resets the parent selector group element
+svgedit.select.SelectorManager.prototype.initGroup = function() {
+ // remove old selector parent group if it existed
+ if (this.selectorParentGroup && this.selectorParentGroup.parentNode) {
+ this.selectorParentGroup.parentNode.removeChild(this.selectorParentGroup);
+ }
+
+ // create parent selector group and add it to svgroot
+ this.selectorParentGroup = svgFactory_.createSVGElement({
+ 'element': 'g',
+ 'attr': {'id': 'selectorParentGroup'}
+ });
+ this.selectorGripsGroup = svgFactory_.createSVGElement({
+ 'element': 'g',
+ 'attr': {'display': 'none'}
+ });
+ this.selectorParentGroup.appendChild(this.selectorGripsGroup);
+ svgFactory_.svgRoot().appendChild(this.selectorParentGroup);
+
+ this.selectorMap = {};
+ this.selectors = [];
+ this.rubberBandBox = null;
+
+ // add the corner grips
+ for (var dir in this.selectorGrips) {
+ var grip = svgFactory_.createSVGElement({
+ 'element': 'circle',
+ 'attr': {
+ 'id': ('selectorGrip_resize_' + dir),
+ 'fill': '#22C',
+ 'r': 4,
+ 'style': ('cursor:' + dir + '-resize'),
+ // This expands the mouse-able area of the grips making them
+ // easier to grab with the mouse.
+ // This works in Opera and WebKit, but does not work in Firefox
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=500174
+ 'stroke-width': 2,
+ 'pointer-events': 'all'
+ }
+ });
+
+ $.data(grip, 'dir', dir);
+ $.data(grip, 'type', 'resize');
+ this.selectorGrips[dir] = this.selectorGripsGroup.appendChild(grip);
+ }
+
+ // add rotator elems
+ this.rotateGripConnector = this.selectorGripsGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'line',
+ 'attr': {
+ 'id': ('selectorGrip_rotateconnector'),
+ 'stroke': '#22C',
+ 'stroke-width': '1'
+ }
+ })
+ );
+
+ this.rotateGrip = this.selectorGripsGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'circle',
+ 'attr': {
+ 'id': 'selectorGrip_rotate',
+ 'fill': 'lime',
+ 'r': 4,
+ 'stroke': '#22C',
+ 'stroke-width': 2,
+ 'style': 'cursor:url(' + config_.imgPath + 'rotate.png) 12 12, auto;'
+ }
+ })
+ );
+ $.data(this.rotateGrip, 'type', 'rotate');
+
+ if($('#canvasBackground').length) return;
+
+ var dims = config_.dimensions;
+ var canvasbg = svgFactory_.createSVGElement({
+ 'element': 'svg',
+ 'attr': {
+ 'id': 'canvasBackground',
+ 'width': dims[0],
+ 'height': dims[1],
+ 'x': 0,
+ 'y': 0,
+ 'overflow': (svgedit.browser.isWebkit() ? 'none' : 'visible'), // Chrome 7 has a problem with this when zooming out
+ 'style': 'pointer-events:none'
+ }
+ });
+
+ var rect = svgFactory_.createSVGElement({
+ 'element': 'rect',
+ 'attr': {
+ 'width': '100%',
+ 'height': '100%',
+ 'x': 0,
+ 'y': 0,
+ 'stroke-width': 1,
+ 'stroke': '#000',
+ 'fill': '#FFF',
+ 'style': 'pointer-events:none'
+ }
+ });
+
+ // Both Firefox and WebKit are too slow with this filter region (especially at higher
+ // zoom levels) and Opera has at least one bug
+// if (!svgedit.browser.isOpera()) rect.setAttribute('filter', 'url(#canvashadow)');
+ canvasbg.appendChild(rect);
+ svgFactory_.svgRoot().insertBefore(canvasbg, svgFactory_.svgContent());
+};
+
+// Function: svgedit.select.SelectorManager.requestSelector
+// Returns the selector based on the given element
+//
+// Parameters:
+// elem - DOM element to get the selector for
+svgedit.select.SelectorManager.prototype.requestSelector = function(elem) {
+ if (elem == null) return null;
+ var N = this.selectors.length;
+ // If we've already acquired one for this element, return it.
+ if (typeof(this.selectorMap[elem.id]) == 'object') {
+ this.selectorMap[elem.id].locked = true;
+ return this.selectorMap[elem.id];
+ }
+ for (var i = 0; i < N; ++i) {
+ if (this.selectors[i] && !this.selectors[i].locked) {
+ this.selectors[i].locked = true;
+ this.selectors[i].reset(elem);
+ this.selectorMap[elem.id] = this.selectors[i];
+ return this.selectors[i];
+ }
+ }
+ // if we reached here, no available selectors were found, we create one
+ this.selectors[N] = new svgedit.select.Selector(N, elem);
+ this.selectorParentGroup.appendChild(this.selectors[N].selectorGroup);
+ this.selectorMap[elem.id] = this.selectors[N];
+ return this.selectors[N];
+};
+
+// Function: svgedit.select.SelectorManager.releaseSelector
+// Removes the selector of the given element (hides selection box)
+//
+// Parameters:
+// elem - DOM element to remove the selector for
+svgedit.select.SelectorManager.prototype.releaseSelector = function(elem) {
+ if (elem == null) return;
+ var N = this.selectors.length,
+ sel = this.selectorMap[elem.id];
+ for (var i = 0; i < N; ++i) {
+ if (this.selectors[i] && this.selectors[i] == sel) {
+ if (sel.locked == false) {
+ // TODO(codedread): Ensure this exists in this module.
+ console.log('WARNING! selector was released but was already unlocked');
+ }
+ delete this.selectorMap[elem.id];
+ sel.locked = false;
+ sel.selectedElement = null;
+ sel.showGrips(false);
+
+ // remove from DOM and store reference in JS but only if it exists in the DOM
+ try {
+ sel.selectorGroup.setAttribute('display', 'none');
+ } catch(e) { }
+
+ break;
+ }
+ }
+};
+
+// Function: svgedit.select.SelectorManager.getRubberBandBox
+// Returns the rubberBandBox DOM element. This is the rectangle drawn by the user for selecting/zooming
+svgedit.select.SelectorManager.prototype.getRubberBandBox = function() {
+ if (!this.rubberBandBox) {
+ this.rubberBandBox = this.selectorParentGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'rect',
+ 'attr': {
+ 'id': 'selectorRubberBand',
+ 'fill': '#22C',
+ 'fill-opacity': 0.15,
+ 'stroke': '#22C',
+ 'stroke-width': 0.5,
+ 'display': 'none',
+ 'style': 'pointer-events:none'
+ }
+ })
+ );
+ }
+ return this.rubberBandBox;
+};
+
+
+/**
+ * Interface: svgedit.select.SVGFactory
+ * An object that creates SVG elements for the canvas.
+ *
+ * interface svgedit.select.SVGFactory {
+ * SVGElement createSVGElement(jsonMap);
+ * SVGSVGElement svgRoot();
+ * SVGSVGElement svgContent();
+ *
+ * Number currentZoom();
+ * Object getStrokedBBox(Element[]); // TODO(codedread): Remove when getStrokedBBox() has been put into svgutils.js
+ * }
+ */
+
+/**
+ * Function: svgedit.select.init()
+ * Initializes this module.
+ *
+ * Parameters:
+ * config - an object containing configurable parameters (imgPath)
+ * svgFactory - an object implementing the SVGFactory interface (see above).
+ */
+svgedit.select.init = function(config, svgFactory) {
+ config_ = config;
+ svgFactory_ = svgFactory;
+ selectorManager_ = new svgedit.select.SelectorManager();
+};
+
+/**
+ * Function: svgedit.select.getSelectorManager
+ *
+ * Returns:
+ * The SelectorManager instance.
+ */
+svgedit.select.getSelectorManager = function() {
+ return selectorManager_;
+};
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/.svn/text-base/svg-editor.css.svn-base b/files_svgedit/svg-edit/.svn/text-base/svg-editor.css.svn-base
new file mode 100644
index 000000000..a56e60350
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svg-editor.css.svn-base
@@ -0,0 +1,1419 @@
+body {
+ background: #D0D0D0;
+}
+
+html, body, div{
+ -webkit-user-select: text;
+ -khtml-user-select: text;
+ -moz-user-select: text;
+ -o-user-select: text;
+ user-select: text;
+ /* this will work for QtWebKit in future */
+ -webkit-user-drag: text;
+}
+
+#browser-not-supported {
+ font-size: 0.8em;
+ font-family: Verdana, Helvetica, Arial;
+ color: #000000;
+}
+
+
+#svg_editor * {
+ transform-origin: 0 0;
+ -moz-transform-origin: 0 0;
+ -o-transform-origin: 0 0;
+ -webkit-transform-origin: 0 0;
+}
+
+#svg_editor {
+ font-size: 8pt;
+ font-family: Verdana, Helvetica, Arial;
+ color: #000000;
+}
+
+#svg_editor a {
+ color: #0000FF;
+}
+
+#svg_editor hr {
+ border: none;
+ border-bottom: 1px solid #808080;
+}
+
+#svg_editor select {
+ margin-top: 4px;
+}
+
+#svg_editor #svgroot {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+#svg_editor #svgcanvas {
+ line-height: normal;
+ display: inline-block;
+ background-color: #A0A0A0;
+ text-align: center;
+ vertical-align: middle;
+ width: 640px;
+ height: 480px;
+ -apple-dashboard-region:dashboard-region(control rectangle 0px 0px 0px 0px); /* for widget regions that shouldn't react to dragging */
+ position: relative;
+ /*
+ A subtle gradient effect in the canvas.
+ Just experimenting - not sure if this is worth it.
+ */
+ background: -moz-radial-gradient(45deg,#bbb,#222);
+ background: -webkit-gradient(radial, center center, 3, center center, 1000, from(#bbb), to(#222));
+}
+
+#rulers > div {
+ position: absolute;
+ background: #DDD;
+ z-index: 1;
+ overflow: hidden;
+}
+
+#ruler_corner {
+ top: 76px;
+ left: 41px;
+ width: 15px;
+ height: 15px;
+}
+
+#ruler_x {
+ height: 15px;
+ top: 76px;
+ left: 56px;
+ right: 30px;
+ border-bottom: 1px solid;
+ border-left: 1px solid #777;
+}
+
+#rulers.moved #ruler_corner,
+#rulers.moved #ruler_x {
+ top: 101px;
+}
+
+#ruler_y {
+ width: 15px;
+ top: 91px;
+ left: 41px;
+ bottom: 78px;
+ border-right: 1px solid;
+ border-top: 1px solid #777;
+}
+
+#rulers.moved #ruler_y {
+ top: 116px;
+}
+
+
+#ruler_x canvas:first-child {
+ margin-left: -16px;
+}
+
+#ruler_x canvas {
+ float: left;
+}
+
+#ruler_y canvas {
+ margin-top: -16px;
+}
+
+#ruler_x > div,
+#ruler_y > div {
+ overflow: hidden;
+}
+
+
+
+
+#svg_editor div#palette_holder {
+ overflow-x: scroll;
+ overflow-y: hidden;
+ height: 31px;
+ border: 1px solid #808080;
+ border-top: none;
+ margin-top: 2px;
+ margin-left: 4px;
+ position: relative;
+ z-index: 2;
+}
+
+#svg_editor #stroke_bg,
+#svg_editor #fill_bg {
+ height: 16px;
+ width: 16px;
+ margin: 1px;
+}
+
+#svg_editor #fill_color, #svg_editor #stroke_color {
+ height: 16px;
+ width: 16px;
+ border: 1px solid #808080;
+ cursor: pointer;
+ margin-top: -18px;
+ margin-left: 1px;
+}
+
+#tool_stroke select {
+ margin-top: 0;
+}
+
+#svg_editor #color_tools .icon_label {
+ padding: 3px 19%;
+ width: 28px;
+ height: 100%;
+ cursor: pointer;
+
+}
+
+#svg_editor #group_opacityLabel,
+#svg_editor #zoomLabel {
+ cursor: pointer;
+ margin-right: 5px;
+ padding-top: 4px
+}
+
+#svg_editor #linkLabel > svg {
+ height: 20px;
+ padding-top: 4px;
+}
+
+#color_tools .icon_label > * {
+ position: relative;
+ top: 1px;
+}
+
+#svg_editor div#palette {
+ float: left;
+ width: 672px;
+ height: 16px;
+}
+
+#svg_editor div#workarea {
+ display: inline-table-cell;
+ position:absolute;
+ top: 75px;
+ left: 40px;
+ bottom: 62px;
+ right: 14px;
+ background-color: #A0A0A0;
+ border: 1px solid #808080;
+ overflow: auto;
+ text-align: center;
+}
+
+#svg_editor #sidepanels {
+ display: inline-block;
+ position:absolute;
+ top: 75px;
+ bottom: 60px;
+ right: 0px;
+ width: 2px;
+ padding: 10px;
+ border-color: #808080;
+ border-style: solid;
+ border-width: 1px;
+ border-left: none;
+}
+
+#svg_editor #layerpanel {
+ display: inline-block;
+ position:absolute;
+ top: 1px;
+ bottom: 0px;
+ right: 0px;
+ width: 0px;
+ overflow: auto;
+ margin: 0px;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+
+}
+
+/*
+ border-style: solid;
+ border-color: #666;
+ border-width: 0px 0px 0px 1px;
+*/
+#svg_editor #sidepanel_handle {
+ display: inline-block;
+ position: absolute;
+ background-color: #D0D0D0;
+ font-weight: bold;
+ left: 0px;
+ top: 40%;
+ width: 1em;
+ padding: 5px 1px 5px 5px;
+ margin-left: 3px;
+ cursor: pointer;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
+
+#svg_editor #sidepanel_handle:hover {
+ font-weight: bold;
+}
+
+#svg_editor #sidepanel_handle * {
+ cursor: pointer;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
+#svg_editor #layerbuttons {
+ margin: 0px;
+ padding: 0px;
+ padding-left: 2px;
+ padding-right: 2px;
+ width: 125px;
+ height: 20px;
+ border-right: 1px solid #FFFFFF;
+ border-bottom: 1px solid #FFFFFF;
+ border-left: 1px solid #808080;
+ border-top: 1px solid #808080;
+ overflow: hidden;
+}
+
+#svg_editor .layer_button {
+ width: 14px;
+ height: 14px;
+ padding: 1px;
+ border-left: 1px solid #FFFFFF;
+ border-top: 1px solid #FFFFFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ cursor: pointer;
+ float: left;
+ margin-right: 3px;
+}
+
+#svg_editor .layer_button:last-child {
+ margin-right: 0;
+}
+
+#svg_editor .layer_buttonpressed {
+ width: 14px;
+ height: 14px;
+ padding: 1px;
+ border-right: 1px solid #FFFFFF;
+ border-bottom: 1px solid #FFFFFF;
+ border-left: 1px solid #808080;
+ border-top: 1px solid #808080;
+ cursor: pointer;
+}
+
+#svg_editor #layerlist {
+ margin: 1px;
+ padding: 0px;
+ width: 127px;
+ border-collapse: collapse;
+ border: 1px solid #808080;
+ background-color: #FFFFFF;
+}
+
+#svg_editor #layerlist tr.layer {
+ background-color: #FFFFFF;
+ margin: 0px;
+ padding: 0px;
+}
+#svg_editor #layerlist tr.layersel {
+ border: 1px solid #808080;
+ background-color: #CCCCCC;
+}
+
+#svg_editor #layerlist td.layervis {
+ width: 22px;
+ cursor:pointer;
+}
+#svg_editor #layerlist td.layerinvis {
+ background-image: none;
+ cursor:pointer;
+}
+
+#svg_editor #layerlist td.layervis * {
+ display: block;
+}
+
+#svg_editor #layerlist td.layerinvis * {
+ display: none;
+}
+
+#svg_editor #layerlist td.layername {
+ cursor: pointer;
+}
+
+#svg_editor #layerlist tr.layersel td.layername {
+ font-weight: bold;
+}
+
+#svg_editor #selLayerLabel {
+ white-space: nowrap;
+}
+
+#svg_editor #selLayerNames {
+ display: block;
+}
+
+#svg_editor div.palette_item {
+ height: 16px;
+ width: 16px;
+ float: left;
+}
+
+#svg_editor #main_button {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ z-index: 5;
+}
+
+
+#svg_editor #main_icon {
+ background: #E8E8E8;
+ position: relative;
+ top: -2px;
+ left: -2px;
+ padding: 1px 0 2px 1px;
+ width: 44px;
+ height: 30px;
+ border-left: 1px solid #FFF;
+ border-top: 1px solid #FFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ border-radius: 8px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+}
+
+#svg_editor .tool_button:hover,
+#svg_editor .push_button:hover,
+#svg_editor .buttonup:hover,
+#svg_editor .buttondown,
+#svg_editor .tool_button_current,
+#svg_editor .push_button_pressed
+{
+ border-left: 1px #fcd9ba solid !important;
+ border-top: 1px #fcd9ba solid !important;
+ border-right: 1px #e0a874 solid !important;
+ border-bottom: 1px #e0a874 solid !important;
+ background-color: #FFC !important;
+}
+
+#svg_editor .tool_button_current,
+#svg_editor .push_button_pressed,
+#svg_editor .buttondown {
+ background-color: #f4e284 !important;
+ border-top: 1px solid #630 !important;
+ border-left: 1px solid #630 !important;
+}
+
+#svg_editor #main_icon span {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ display: block;
+ z-index: 2;
+}
+
+#svg_editor #main_menu {
+ z-index: 12;
+ background: #E8E8E8;
+ position: relative;
+ width: 230px;
+ padding: 5px;
+ -moz-box-shadow: #555 1px 1px 4px;
+ -webkit-box-shadow: #555 1px 1px 4px;
+ font-size: 1.1em;
+ display: none;
+ overflow: hidden;
+ border: 1px outset gray;
+ clear: both;
+}
+
+#svg_editor #main_menu ul,
+#svg_editor #main_menu li {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#svg_editor #main_menu li {
+/* height: 35px;*/
+ line-height: 22px;
+ padding-top: 7px;
+ padding-left: 7px;
+ margin: -5px;
+ overflow: auto;
+ cursor: default;
+}
+
+#svg_editor #main_menu li:hover {
+ background: #FFC;
+}
+
+#svg_editor #main_menu li > div {
+ float: left;
+ padding-right: 5px;
+}
+
+#svg_editor #main_menu p {
+ margin-top: 5px;
+}
+
+#svg_editor #logo img {
+ border: 0;
+ width: 32px;
+ height: 32px;
+}
+
+
+
+#main_icon > div {
+ float: left;
+}
+
+#svg_editor #main_button .dropdown {
+ padding-top: 28%;
+ margin-left: -1px;
+}
+
+
+
+#svg_editor #tools_top {
+ position: absolute;
+ left: 50px;
+ right: 2px;
+ top: 2px;
+ height: 72px;
+ border-bottom: none;
+ overflow: auto;
+}
+
+#svg_editor #tools_left {
+ position: absolute;
+ border-right: none;
+ width: 32px;
+ top: 75px;
+ left: 0;
+ padding-left: 2px;
+ background: #D0D0D0; /* Needed so flyout icons don't appear on the left */
+ z-index: 4;
+}
+
+#workarea.wireframe #svgcontent * {
+ fill: none;
+ stroke: #000;
+ stroke-width: 1px;
+ stroke-opacity: 1.0;
+ stroke-dasharray: 0;
+ opacity: 1;
+ pointer-events: stroke;
+ vector-effect: non-scaling-stroke;
+ filter: none;
+}
+
+#workarea.wireframe #svgcontent text {
+ fill: #000;
+ stroke: none;
+}
+
+#workarea.wireframe #canvasBackground > rect {
+ fill: #FFF !important;
+}
+
+#tools_top div[id$="_panel"]:not(#editor_panel):not(#history_panel) {
+ display: none;
+}
+
+#svg_editor #multiselected_panel .selected_tool {
+ vertical-align: 12px;
+}
+
+#cur_context_panel {
+ position: absolute;
+ top: 77px;
+ left: 40px;
+ right: 0;
+ line-height: 22px;
+ overflow: auto;
+ border: 1px solid #777;
+ border-bottom: none;
+ border-right: none;
+ padding-left: 5px;
+ font-size: 12px;
+}
+
+#svg_editor #cur_context_panel a {
+ float: none;
+ text-decoration: none;
+}
+
+#svg_editor #cur_context_panel a:hover {
+ text-decoration: underline;
+}
+
+#svg_editor #tools_top > div, #tools_top {
+ line-height: 26px;
+}
+
+#svg_editor div.toolset,
+#svg_editor div.toolset > * {
+ float: left;
+}
+
+#svg_editor div.toolset {
+ height: 34px;
+}
+
+#svg_editor div.toolset label span {
+/* outline: 1px solid red;*/
+ padding-top: 3px;
+ display: inline-block;
+}
+
+#tools_top > div > * {
+ float: left;
+ margin-right: 2px;
+}
+
+#tools_top label {
+ margin-top: 0;
+ margin-left: 5px;
+}
+
+#tools_top input {
+ margin-top: 5px;
+ height: 15px;
+}
+
+#svg_editor #tools_left .tool_button,
+#svg_editor #tools_left .tool_button_current {
+ position: relative;
+ z-index: 11;
+}
+
+#svg_editor .flyout_arrow_horiz {
+ position: absolute;
+ bottom: -1px;
+ right: 0;
+ z-index: 10;
+}
+
+
+span.zoom_tool {
+ line-height: 26px;
+ padding: 3px;
+}
+
+#zoom_panel {
+ margin-top: 5px;
+}
+
+.dropdown {
+ position: relative;
+}
+
+#svg_editor .dropdown button {
+ width: 15px;
+ height: 21px;
+ margin: 6px 0 0 1px;
+ padding: 0;
+ border-left: 1px solid #FFFFFF;
+ border-top: 1px solid #FFFFFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ background-color: #E8E8E8;
+}
+
+.dropdown button.down {
+ border-left: 1px solid #808080;
+ border-top: 1px solid #808080;
+ border-right: 1px solid #FFFFFF;
+ border-bottom: 1px solid #FFFFFF;
+ background-color: #B0B0B0;
+}
+
+.dropdown ul {
+ list-style: none;
+ position: absolute;
+ margin: 0;
+ padding: 0;
+ left: -80px;
+ top: 26px;
+ z-index: 4;
+ display: none;
+}
+
+.dropup ul {
+ top: auto;
+ bottom: 26px;
+}
+
+.dropdown li {
+ display: block;
+ width: 120px;
+ padding: 4px;
+ background: #E8E8E8;
+ border: 1px solid #B0B0B0;
+ margin: 0 0 -1px 0;
+ line-height: 16px;
+}
+
+.dropdown li:hover {
+ background-color: #FFC;
+}
+
+.dropdown li.special {
+ padding: 10px 4px;
+}
+
+.dropdown li.special:hover {
+ background: #FFC;
+}
+
+#font_family_dropdown-list li {
+ font-size: 1.4em;
+}
+
+#font_family {
+ margin-left: 5px;
+ margin-right: 0;
+}
+
+
+#svg_editor .tool_button,
+#svg_editor .push_button,
+#svg_editor .tool_button_current,
+#svg_editor .push_button_pressed
+{
+ height: 24px;
+ width: 24px;
+ margin: 2px;
+ padding: 2px;
+ border-left: 1px solid #FFF;
+ border-top: 1px solid #FFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ background-color: #E8E8E8;
+ cursor: pointer;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+#svg_editor #main_menu li#tool_open, #svg_editor #main_menu li#tool_import {
+ position: relative;
+ overflow: hidden;
+}
+
+#tool_image {
+ overflow: hidden;
+}
+
+#tool_open input,
+#tool_import input,
+#tool_image input {
+ position: absolute;
+ opacity: 0;
+ font-size: 10em;
+ top: -5px;
+ right: -5px;
+ margin: 0;
+ cursor: pointer; /* Sadly doesn't appear to have an effect */
+}
+
+#svg_editor .disabled {
+ opacity: 0.5;
+ cursor: default;
+}
+
+#svg_editor .tool_sep {
+ width: 1px;
+ background: #888;
+ border-left: 1px outset #EEE;
+ margin: 2px 3px;
+ padding: 0;
+ height: 24px;
+
+}
+
+#svg_editor .icon_label {
+ float: left;
+ padding-top: 3px;
+ padding-right: 3px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ height: 0;
+}
+
+#svg_editor .width_label {
+ padding-right: 5px;
+}
+
+#tool_bold, #tool_italic {
+ font: bold 2.1em/1.1em serif;
+ text-align: center;
+ padding-left: 2px;
+ position: relative;
+}
+
+#text {
+ position: absolute;
+ left: -9999px;
+}
+
+#tool_bold span, #tool_italic span {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0; left: 0;
+ background: #000;
+ opacity: 0;
+}
+
+#tool_italic {
+ font-weight: normal;
+ font-style: italic;
+}
+
+#url_notice {
+ padding-top: 4px;
+ display: none;
+}
+
+#svg_editor #color_picker {
+ position: absolute;
+ display: none;
+ background: #E8E8E8;
+ height: 350px;
+ z-index: 5;
+}
+
+#svg_editor .tools_flyout {
+ position: absolute;
+ display: none;
+ cursor: pointer;
+ width: 400px;
+ z-index: 1;
+}
+
+#svg_editor .tools_flyout_v {
+ position: absolute;
+ display: none;
+ cursor: pointer;
+ width: 30px;
+}
+
+#svg_editor .tools_flyout .tool_button {
+ float: left;
+ background-color: #E8E8E8;
+ border-left: 1px solid #FFFFFF;
+ border-top: 1px solid #FFFFFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ height: 28px;
+ width: 28px;
+}
+
+#svg_editor #tools_bottom {
+ position: absolute;
+ left: 40px;
+ right: 0;
+ bottom: 0;
+ height: 64px;
+ overflow: visible;
+}
+
+#svg_editor #tools_bottom_1 {
+ width: 115px;
+ float: left;
+}
+
+#svg_editor #tools_bottom_2 {
+ width: 165px;
+ position: relative;
+ float: left;
+}
+
+#tools_bottom input[type=text] {
+ width: 2.2em;
+}
+
+#svg_editor #color_tools {
+ display: table;
+ margin-top: 1px;
+ border-spacing: 0 3px;
+ clip: rect(0,0,10px,0);
+}
+
+.color_tool {
+ display: table-row;
+ overflow: hidden;
+ height: 26px;
+ padding: 0 4px;
+}
+
+.color_tool > * {
+ display: table-cell;
+ background: #f0f0f0;
+ padding: 0 5px 0 0;
+ vertical-align: middle;
+/* height: 25px;*/
+}
+
+#toggle_stroke_tools {
+ letter-spacing: -.2em;
+ padding-right: 8px;
+}
+
+#toggle_stroke_tools:hover {
+ cursor: pointer;
+ background: #FFC;
+}
+
+.stroke_tool {
+ display: none;
+ white-space: nowrap;
+}
+
+#svg_editor .stroke_tool button {
+ margin-top: 3px;
+ background: #F0F0F0;
+}
+
+#svg_editor .stroke_tool div div {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ width: 20px;
+ height: 20px;
+ margin: 1px 0;
+ padding: 1px;
+ border: 1px solid #DDD;
+}
+
+#svg_editor .stroke_tool:hover div > * {
+ background-color: #FFC;
+}
+
+#svg_editor .stroke_tool.down div div,
+#svg_editor .stroke_tool.down button,
+#tools_top .dropdown.down > * {
+ border: 1px inset gray;
+ background: #F4E284;
+}
+
+.stroke_tool > div {
+ width: 42px;
+}
+
+.stroke_tool > div > * {
+ float: left;
+}
+
+
+#tools_top .dropdown .icon_label {
+ border: 1px solid transparent;
+/* margin-top: 3px;*/
+ height: auto;
+}
+
+#option_lists ul {
+ display: none;
+ position: absolute;
+ height: auto;
+ z-index: 3;
+ margin: 0;
+ list-style: none;
+ padding-left: 0;
+}
+
+#option_lists .optcols2 {
+ width: 70px;
+ margin-left: -15px;
+}
+
+#option_lists .optcols3 {
+ width: 90px;
+ margin-left: -31px;
+}
+
+#option_lists .optcols4 {
+ width: 130px;
+ margin-left: -44px;
+}
+
+#option_lists ul[class^=optcols] li {
+ float: left;
+}
+
+#svg_editor ul li.current {
+ background-color: #F4E284;
+}
+
+#svg_editor #option_lists ul li {
+ margin: 0;
+ border-radius: 0;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+}
+
+.color_tool > *:first-child {
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ padding-right: 0;
+}
+
+.color_tool > *:last-child {
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
+
+#svg_editor #tool_opacity {
+ position: absolute;
+ top: 4px;
+ right: 2px;
+ background: #f0f0f0;
+ height: 26px;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ padding: 0 3px;
+}
+
+#tools_bottom .dropdown button {
+ margin-top: 2px;
+}
+
+#opacity_dropdown li {
+ width: 140px;
+}
+
+#svg_editor #copyright {
+ text-align: right;
+ padding-right: .3em;
+}
+
+#svg_source_editor {
+ display: none;
+}
+
+#svg_source_editor #svg_source_overlay {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ background-color: black;
+ opacity: 0.6;
+ z-index: 5;
+}
+
+#svg_source_editor #svg_source_container {
+ position: absolute;
+ top: 30px;
+ left: 30px;
+ right: 30px;
+ bottom: 30px;
+ background-color: #B0B0B0;
+ opacity: 1.0;
+ text-align: center;
+ border: 1px outset #777;
+ z-index: 6;
+}
+
+#save_output_btns {
+ display: none;
+ text-align: left;
+}
+
+#save_output_btns p {
+ margin: .5em 1.5em;
+ display: inline-block;
+}
+
+#bg_blocks {
+ overflow: auto;
+ margin-left: 30px;
+}
+
+#svg_docprops #svg_docprops_container,
+#svg_prefs #svg_prefs_container {
+ position: absolute;
+ top: 50px;
+ padding: 10px;
+ background-color: #B0B0B0;
+ border: 1px outset #777;
+ opacity: 1.0;
+/* width: 450px;*/
+ font-family: Verdana, Helvetica, sans-serif;
+ font-size: .8em;
+ z-index: 20001;
+}
+
+#svg_docprops .error {
+ border: 1px solid red;
+ padding: 3px;
+}
+
+#svg_docprops #resolution {
+ max-width: 14em;
+}
+
+#tool_docprops_back,
+#tool_prefs_back {
+ margin-left: 1em;
+ overflow: auto;
+}
+
+#svg_docprops_container #svg_docprops_docprops,
+#svg_prefs #svg_docprops_prefs {
+ float: left;
+ width: 221px;
+ margin: 5px .7em;
+ overflow: hidden;
+}
+
+#svg_prefs_container fieldset + fieldset {
+ float: right;
+}
+
+#svg_docprops legend,
+#svg_prefs legend {
+ max-width: 195px;
+}
+
+#svg_docprops_docprops > legend,
+#svg_prefs_container > fieldset > legend {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+
+#svg_docprops_container fieldset,
+#svg_prefs fieldset {
+ padding: 5px;
+ margin: 5px;
+ border: 1px solid #DDD;
+}
+
+#svg_docprops_container label,
+#svg_prefs_container label {
+ display: block;
+ margin: .5em;
+}
+
+#svginfo_bg_note {
+ font-size: .9em;
+ font-style: italic;
+ color: #444;
+}
+
+#canvas_title, #canvas_bg_url {
+ display: block;
+ width: 96%;
+}
+
+#svg_source_editor #svg_source_textarea {
+ position: relative;
+ width: 95%;
+ top: 5px;
+ height: 250px;
+ padding: 5px;
+ font-size: 12px;
+}
+
+#svg_source_editor #tool_source_back {
+ text-align: left;
+ padding-left: 20px;
+}
+
+#svg_prefs_container div.color_block {
+ float: left;
+ margin: 2px;
+ padding: 20px;
+}
+
+#change_background div.cur_background {
+ border: 2px solid blue;
+ padding: 18px;
+}
+
+#background_img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ text-align: left;
+}
+
+#svg_docprops button,
+#svg_prefs button {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+#svg_docprops,
+#svg_prefs {
+ display: none;
+}
+
+#image_save_opts label {
+ font-size: .9em;
+}
+
+#image_save_opts input {
+ margin-left: 0;
+}
+
+#svg_docprops #svg_docprops_overlay,
+#svg_prefs #svg_prefs_overlay {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ background-color: black;
+ opacity: 0.6;
+ z-index: 20000;
+}
+
+#tool_prefs_option {
+ float: right;
+}
+
+.toolbar_button button {
+ border:1px solid #dedede;
+ line-height:130%;
+ float: left;
+ background: #E8E8E8 none;
+ padding:5px 10px 5px 7px; /* Firefox */
+ line-height:17px; /* Safari */
+ margin: 5px 20px 0 0;
+
+ border: 1px #808080 solid;
+ border-top-color: #FFF;
+ border-left-color: #FFF;
+
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+.toolbar_button button:hover {
+ border: 1px #e0a874 solid;
+ border-top-color: #fcd9ba;
+ border-left-color: #fcd9ba;
+ background-color: #FFC;
+}
+.toolbar_button button:active {
+ background-color: #F4E284;
+ border-left: 1px solid #663300;
+ border-top: 1px solid #663300;
+}
+
+.toolbar_button button .svg_icon {
+ margin:0 3px -3px 0 !important;
+ padding:0;
+ border:none;
+ width:16px;
+ height:16px;
+}
+
+#dialog_box {
+ display: none;
+}
+
+#dialog_box_overlay {
+ background: black;
+ opacity: .5;
+ height:100%;
+ left:0;
+ position:absolute;
+ top:0;
+ width:100%;
+ z-index: 6;
+}
+
+#dialog_content {
+ height: 95px;
+ margin: 10px 10px 5px 10px;
+ background: #DDD;
+ overflow: auto;
+ text-align: left;
+ border: 1px solid #B0B0B0;
+}
+
+#dialog_content.prompt {
+ height: 75px;
+}
+
+#dialog_content p {
+ margin: 10px;
+ line-height: 1.3em;
+}
+
+#dialog_container {
+ position: absolute;
+ font-family: Verdana;
+ text-align: center;
+ left: 50%;
+ top: 50%;
+ width: 300px;
+ margin-left: -150px;
+ height: 150px;
+ margin-top: -80px;
+ position:fixed;
+ z-index:50001;
+ background: #CCC;
+ border: 1px outset #777;
+ font-family:Verdana,Helvetica,sans-serif;
+ font-size:0.8em;
+}
+
+#dialog_container, #dialog_content {
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+#dialog_buttons input[type=text] {
+ width: 90%;
+ display: block;
+ margin: 0 0 5px 11px;
+}
+
+#dialog_buttons input[type=button] {
+ margin: 0 1em;
+}
+
+
+/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }
+
+.ui-slider {
+ border: 1px solid #B0B0B0;
+}
+
+.ui-slider-handle {
+ background: #B0B0B0;
+ border: 1px solid #000;
+}
+
+/* Necessary to keep the flyouts sized properly */
+#svg_editor .tools_flyout .tool_button,
+#svg_editor .tools_flyout .tool_flyout {
+ padding: 2px;
+ width: 24px;
+ height: 24px;
+ margin: 0;
+ border-radius: 0px;
+ -moz-border-radius: 0px;
+ -webkit-border-radius: 0px;
+}
+
+/* Generic context menu styles */
+.contextMenu {
+ position: absolute;
+ z-index: 99999;
+ border: solid 1px rgba(0,0,0,.33);
+ background: rgba(255,255,255,.95);
+ padding: 5px 0;
+ margin: 0px;
+ display: none;
+ font: 12px/15px Lucida Sans, Helvetica, Verdana, sans-serif;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -moz-box-shadow: 2px 5px 10px rgba(0,0,0,.3);
+ -webkit-box-shadow: 2px 5px 10px rgba(0,0,0,.3);
+ box-shadow: 2px 5px 10px rgba(0,0,0,.3);
+}
+
+.contextMenu LI {
+ list-style: none;
+ padding: 0px;
+ margin: 0px;
+}
+
+.contextMenu .shortcut {
+ width: 115px;
+ text-align:right;
+ float:right;
+}
+
+.contextMenu A {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ color: #222;
+ text-decoration: none;
+ display: block;
+ line-height: 20px;
+ height: 20px;
+ background-position: 6px center;
+ background-repeat: no-repeat;
+ outline: none;
+ padding: 0px 15px 1px 20px;
+}
+
+.contextMenu LI.hover A {
+ background-color: #2e5dea;
+ color: white;
+ cursor: default;
+}
+
+.contextMenu LI.disabled A {
+ color: #999;
+}
+
+.contextMenu LI.hover.disabled A {
+ background-color: transparent;
+}
+
+.contextMenu LI.separator {
+ border-top: solid 1px #E3E3E3;
+ padding-top: 5px;
+ margin-top: 5px;
+}
+
+/*
+ Adding Icons
+
+ You can add icons to the context menu by adding
+ classes to the respective LI element(s)
+*/
+/*
+
+.contextMenu LI.edit A { background-image: url(images/page_white_edit.png); }
+.contextMenu LI.cut A { background-image: url(images/cut.png); }
+.contextMenu LI.copy A { background-image: url(images/page_white_copy.png); }
+.contextMenu LI.paste A { background-image: url(images/page_white_paste.png); }
+.contextMenu LI.delete A { background-image: url(images/page_white_delete.png); }
+.contextMenu LI.quit A { background-image: url(images/door.png); }
+*/
diff --git a/files_svgedit/svg-edit/.svn/text-base/svg-editor.html.svn-base b/files_svgedit/svg-edit/.svn/text-base/svg-editor.html.svn-base
new file mode 100644
index 000000000..8dce445ae
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svg-editor.html.svn-base
@@ -0,0 +1,790 @@
+<!DOCTYPE html>
+<html>
+<!-- removed for now, causes problems in Firefox: manifest="svg-editor.manifest" -->
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
+<link rel="icon" type="image/png" href="images/logo.png"/>
+<link rel="stylesheet" href="jgraduate/css/jPicker.css" type="text/css"/>
+<link rel="stylesheet" href="jgraduate/css/jgraduate.css" type="text/css"/>
+<link rel="stylesheet" href="svg-editor.css" type="text/css"/>
+<link rel="stylesheet" href="spinbtn/JQuerySpinBtn.css" type="text/css"/>
+
+<!--{if jquery_release}>
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
+<!{else}-->
+ <script type="text/javascript" src="jquery.js"></script>
+<!--{endif}-->
+
+<script type="text/javascript" src="js-hotkeys/jquery.hotkeys.min.js"></script>
+<script type="text/javascript" src="jquerybbq/jquery.bbq.min.js"></script>
+<script type="text/javascript" src="svgicons/jquery.svgicons.js"></script>
+<script type="text/javascript" src="jgraduate/jquery.jgraduate.min.js"></script>
+<script type="text/javascript" src="spinbtn/JQuerySpinBtn.min.js"></script>
+
+<!--{if svg_edit_release}>
+ <script type="text/javascript" src="svgedit.compiled.js"></script>
+<!{else}-->
+ <script type="text/javascript" src="contextmenu/jquery.contextMenu.js"></script>
+ <script type="text/javascript" src="browser.js"></script>
+ <script type="text/javascript" src="svgtransformlist.js"></script>
+ <script type="text/javascript" src="math.js"></script>
+ <script type="text/javascript" src="units.js"></script>
+ <script type="text/javascript" src="svgutils.js"></script>
+ <script type="text/javascript" src="sanitize.js"></script>
+ <script type="text/javascript" src="history.js"></script>
+ <script type="text/javascript" src="select.js"></script>
+ <script type="text/javascript" src="draw.js"></script>
+ <script type="text/javascript" src="path.js"></script>
+ <script type="text/javascript" src="svgcanvas.js"></script>
+ <script type="text/javascript" src="svg-editor.js"></script>
+ <script type="text/javascript" src="locale/locale.js"></script>
+ <script type="text/javascript" src="contextmenu.js"></script>
+<!--{endif}-->
+
+<!-- you can load extensions here -->
+<!-- <script type="text/javascript" src="extensions/ext-helloworld.js"></script> -->
+
+<!-- always minified scripts -->
+<script type="text/javascript" src="jquery-ui/jquery-ui-1.8.17.custom.min.js"></script>
+<script type="text/javascript" src="jgraduate/jpicker.min.js"></script>
+
+<!-- feeds -->
+<link rel="alternate" type="application/atom+xml" title="SVG-edit General Discussion" href="http://groups.google.com/group/svg-edit/feed/atom_v1_0_msgs.xml" />
+<link rel="alternate" type="application/atom+xml" title="SVG-edit Updates (Issues/Fixes/Commits)" href="http://code.google.com/feeds/p/svg-edit/updates/basic" />
+
+<!-- Add script with custom handlers here -->
+<title>SVG-edit</title>
+</head>
+<body>
+<div id="svg_editor">
+
+<div id="rulers">
+ <div id="ruler_corner"></div>
+ <div id="ruler_x">
+ <div>
+ <canvas height="15"></canvas>
+ </div>
+ </div>
+ <div id="ruler_y">
+ <div>
+ <canvas width="15"></canvas>
+ </div>
+ </div>
+</div>
+
+<div id="workarea">
+<style id="styleoverrides" type="text/css" media="screen" scoped="scoped"></style>
+<div id="svgcanvas" style="position:relative">
+
+</div>
+</div>
+
+<div id="sidepanels">
+ <div id="layerpanel">
+ <h3 id="layersLabel">Layers</h3>
+ <fieldset id="layerbuttons">
+ <div id="layer_new" class="layer_button" title="New Layer"></div>
+ <div id="layer_delete" class="layer_button" title="Delete Layer"></div>
+ <div id="layer_rename" class="layer_button" title="Rename Layer"></div>
+ <div id="layer_up" class="layer_button" title="Move Layer Up"></div>
+ <div id="layer_down" class="layer_button" title="Move Layer Down"></div>
+ <div id="layer_moreopts" class="layer_button" title="More Options"></div>
+ </fieldset>
+
+ <table id="layerlist">
+ <tr class="layer">
+ <td class="layervis"></td>
+ <td class="layername">Layer 1</td>
+ </tr>
+ </table>
+ <span id="selLayerLabel">Move elements to:</span>
+ <select id="selLayerNames" title="Move selected elements to a different layer" disabled="disabled">
+ <option selected="selected" value="layer1">Layer 1</option>
+ </select>
+ </div>
+ <div id="sidepanel_handle" title="Drag left/right to resize side panel [X]">L a y e r s</div>
+</div>
+
+<div id="main_button">
+ <div id="main_icon" class="buttonup" title="Main Menu">
+ <span></span>
+ <div id="logo"></div>
+ <div class="dropdown"></div>
+ </div>
+
+ <div id="main_menu">
+
+ <!-- File-like buttons: New, Save, Source -->
+ <ul>
+ <li id="tool_clear">
+ <div></div>
+ New Image (N)
+ </li>
+
+ <li id="tool_open" style="display:none;">
+ <div id="fileinputs">
+ <div></div>
+ </div>
+ Open Image
+ </li>
+
+ <li id="tool_import" style="display:none;">
+ <div id="fileinputs_import">
+ <div></div>
+ </div>
+ Import SVG
+ </li>
+
+ <li id="tool_save">
+ <div></div>
+ Save Image (S)
+ </li>
+
+ <li id="tool_export">
+ <div></div>
+ Export as PNG
+ </li>
+
+ <li id="tool_docprops">
+ <div></div>
+ Document Properties (D)
+ </li>
+ </ul>
+
+ <p>
+ <a href="http://svg-edit.googlecode.com/" target="_blank">
+ SVG-edit Home Page
+ </a>
+ </p>
+
+ <button id="tool_prefs_option">
+ Editor Options
+ </button>
+
+
+ </div>
+</div>
+
+
+
+<div id="tools_top" class="tools_panel">
+
+ <div id="editor_panel">
+ <div class="push_button" id="tool_source" title="Edit Source [U]"></div>
+ <div class="tool_button" id="tool_wireframe" title="Wireframe Mode [F]"></div>
+ </div>
+
+ <!-- History buttons -->
+ <div id="history_panel">
+ <div class="tool_sep"></div>
+ <div class="push_button tool_button_disabled" id="tool_undo" title="Undo [Z]"></div>
+ <div class="push_button tool_button_disabled" id="tool_redo" title="Redo [Y]"></div>
+ </div>
+
+ <!-- Buttons when a single element is selected -->
+ <div id="selected_panel">
+ <div class="toolset">
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_clone" title="Duplicate Element [D]"></div>
+ <div class="push_button" id="tool_delete" title="Delete Element [Delete/Backspace]"></div>
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_move_top" title="Bring to Front [ Ctrl+Shift+] ]"></div>
+ <div class="push_button" id="tool_move_bottom" title="Send to Back [ Ctrl+Shift+[ ]"></div>
+ <div class="push_button" id="tool_topath" title="Convert to Path"></div>
+ <div class="push_button" id="tool_reorient" title="Reorient path"></div>
+ <div class="push_button" id="tool_make_link" title="Make (hyper)link"></div>
+ <div class="tool_sep"></div>
+ <label id="idLabel" title="Identify the element">
+ <span>id:</span>
+ <input id="elem_id" class="attr_changer" data-attr="id" size="10" type="text"/>
+ </label>
+ </div>
+
+ <label id="tool_angle" title="Change rotation angle" class="toolset">
+ <span id="angleLabel" class="icon_label"></span>
+ <input id="angle" size="2" value="0" type="text"/>
+ </label>
+
+ <div class="toolset" id="tool_blur" title="Change gaussian blur value">
+ <label>
+ <span id="blurLabel" class="icon_label"></span>
+ <input id="blur" size="2" value="0" type="text"/>
+ </label>
+ <div id="blur_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li class="special"><div id="blur_slider"></div></li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="dropdown toolset" id="tool_position" title="Align Element to Page">
+ <div id="cur_position" class="icon_label"></div>
+ <button></button>
+ </div>
+
+ <div id="xy_panel" class="toolset">
+ <label>
+ x: <input id="selected_x" class="attr_changer" title="Change X coordinate" size="3" data-attr="x"/>
+ </label>
+ <label>
+ y: <input id="selected_y" class="attr_changer" title="Change Y coordinate" size="3" data-attr="y"/>
+ </label>
+ </div>
+ </div>
+
+ <!-- Buttons when multiple elements are selected -->
+ <div id="multiselected_panel">
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_clone_multi" title="Clone Elements [C]"></div>
+ <div class="push_button" id="tool_delete_multi" title="Delete Selected Elements [Delete/Backspace]"></div>
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_group" title="Group Elements [G]"></div>
+ <div class="push_button" id="tool_make_link_multi" title="Make (hyper)link"></div>
+ <div class="push_button" id="tool_alignleft" title="Align Left"></div>
+ <div class="push_button" id="tool_aligncenter" title="Align Center"></div>
+ <div class="push_button" id="tool_alignright" title="Align Right"></div>
+ <div class="push_button" id="tool_aligntop" title="Align Top"></div>
+ <div class="push_button" id="tool_alignmiddle" title="Align Middle"></div>
+ <div class="push_button" id="tool_alignbottom" title="Align Bottom"></div>
+ <label id="tool_align_relative">
+ <span id="relativeToLabel">relative to:</span>
+ <select id="align_relative_to" title="Align relative to ...">
+ <option id="selected_objects" value="selected">selected objects</option>
+ <option id="largest_object" value="largest">largest object</option>
+ <option id="smallest_object" value="smallest">smallest object</option>
+ <option id="page" value="page">page</option>
+ </select>
+ </label>
+ <div class="tool_sep"></div>
+
+ </div>
+
+ <div id="rect_panel">
+ <div class="toolset">
+ <label id="rect_width_tool" title="Change rectangle width">
+ <span id="rwidthLabel" class="icon_label"></span>
+ <input id="rect_width" class="attr_changer" size="3" data-attr="width"/>
+ </label>
+ <label id="rect_height_tool" title="Change rectangle height">
+ <span id="rheightLabel" class="icon_label"></span>
+ <input id="rect_height" class="attr_changer" size="3" data-attr="height"/>
+ </label>
+ </div>
+ <label id="cornerRadiusLabel" title="Change Rectangle Corner Radius" class="toolset">
+ <span class="icon_label"></span>
+ <input id="rect_rx" size="3" value="0" type="text" data-attr="Corner Radius"/>
+ </label>
+ </div>
+
+ <div id="image_panel">
+ <div class="toolset">
+ <label><span id="iwidthLabel" class="icon_label"></span>
+ <input id="image_width" class="attr_changer" title="Change image width" size="3" data-attr="width"/>
+ </label>
+ <label><span id="iheightLabel" class="icon_label"></span>
+ <input id="image_height" class="attr_changer" title="Change image height" size="3" data-attr="height"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_image_url">url:
+ <input id="image_url" type="text" title="Change URL" size="35"/>
+ </label>
+ <label id="tool_change_image">
+ <button id="change_image_url" style="display:none;">Change Image</button>
+ <span id="url_notice" title="NOTE: This image cannot be embedded. It will depend on this path to be displayed"></span>
+ </label>
+ </div>
+ </div>
+
+ <div id="circle_panel">
+ <div class="toolset">
+ <label id="tool_circle_cx">cx:
+ <input id="circle_cx" class="attr_changer" title="Change circle's cx coordinate" size="3" data-attr="cx"/>
+ </label>
+ <label id="tool_circle_cy">cy:
+ <input id="circle_cy" class="attr_changer" title="Change circle's cy coordinate" size="3" data-attr="cy"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_circle_r">r:
+ <input id="circle_r" class="attr_changer" title="Change circle's radius" size="3" data-attr="r"/>
+ </label>
+ </div>
+ </div>
+
+ <div id="ellipse_panel">
+ <div class="toolset">
+ <label id="tool_ellipse_cx">cx:
+ <input id="ellipse_cx" class="attr_changer" title="Change ellipse's cx coordinate" size="3" data-attr="cx"/>
+ </label>
+ <label id="tool_ellipse_cy">cy:
+ <input id="ellipse_cy" class="attr_changer" title="Change ellipse's cy coordinate" size="3" data-attr="cy"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_ellipse_rx">rx:
+ <input id="ellipse_rx" class="attr_changer" title="Change ellipse's x radius" size="3" data-attr="rx"/>
+ </label>
+ <label id="tool_ellipse_ry">ry:
+ <input id="ellipse_ry" class="attr_changer" title="Change ellipse's y radius" size="3" data-attr="ry"/>
+ </label>
+ </div>
+ </div>
+
+ <div id="line_panel">
+ <div class="toolset">
+ <label id="tool_line_x1">x1:
+ <input id="line_x1" class="attr_changer" title="Change line's starting x coordinate" size="3" data-attr="x1"/>
+ </label>
+ <label id="tool_line_y1">y1:
+ <input id="line_y1" class="attr_changer" title="Change line's starting y coordinate" size="3" data-attr="y1"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_line_x2">x2:
+ <input id="line_x2" class="attr_changer" title="Change line's ending x coordinate" size="3" data-attr="x2"/>
+ </label>
+ <label id="tool_line_y2">y2:
+ <input id="line_y2" class="attr_changer" title="Change line's ending y coordinate" size="3" data-attr="y2"/>
+ </label>
+ </div>
+ </div>
+
+ <div id="text_panel">
+ <div class="toolset">
+ <div class="tool_button" id="tool_bold" title="Bold Text [B]"><span></span>B</div>
+ <div class="tool_button" id="tool_italic" title="Italic Text [I]"><span></span>i</div>
+ </div>
+
+ <div class="toolset" id="tool_font_family">
+ <label>
+ <!-- Font family -->
+ <input id="font_family" type="text" title="Change Font Family" size="12"/>
+ </label>
+ <div id="font_family_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li style="font-family:serif">Serif</li>
+ <li style="font-family:sans-serif">Sans-serif</li>
+ <li style="font-family:cursive">Cursive</li>
+ <li style="font-family:fantasy">Fantasy</li>
+ <li style="font-family:monospace">Monospace</li>
+ </ul>
+ </div>
+ </div>
+
+ <label id="tool_font_size" title="Change Font Size">
+ <span id="font_sizeLabel" class="icon_label"></span>
+ <input id="font_size" size="3" value="0" type="text"/>
+ </label>
+
+ <!-- Not visible, but still used -->
+ <input id="text" type="text" size="35"/>
+ </div>
+
+ <!-- formerly gsvg_panel -->
+ <div id="container_panel">
+ <div class="tool_sep"></div>
+
+ <!-- Add viewBox field here? -->
+
+ <label id="group_title" title="Group identification label">
+ <span>label:</span>
+ <input id="g_title" data-attr="title" size="10" type="text"/>
+ </label>
+ </div>
+
+ <div id="use_panel">
+ <div class="push_button" id="tool_unlink_use" title="Break link to reference element (make unique)"></div>
+ </div>
+
+ <div id="g_panel">
+ <div class="push_button" id="tool_ungroup" title="Ungroup Elements [G]"></div>
+ </div>
+
+ <!-- For anchor elements -->
+ <div id="a_panel">
+ <label id="tool_link_url" title="Set link URL (leave empty to remove)">
+ <span id="linkLabel" class="icon_label"></span>
+ <input id="link_url" type="text" size="35"/>
+ </label>
+ </div>
+
+ <div id="path_node_panel">
+ <div class="tool_sep"></div>
+ <div class="tool_button push_button_pressed" id="tool_node_link" title="Link Control Points"></div>
+ <div class="tool_sep"></div>
+ <label id="tool_node_x">x:
+ <input id="path_node_x" class="attr_changer" title="Change node's x coordinate" size="3" data-attr="x"/>
+ </label>
+ <label id="tool_node_y">y:
+ <input id="path_node_y" class="attr_changer" title="Change node's y coordinate" size="3" data-attr="y"/>
+ </label>
+
+ <select id="seg_type" title="Change Segment type">
+ <option id="straight_segments" selected="selected" value="4">Straight</option>
+ <option id="curve_segments" value="6">Curve</option>
+ </select>
+ <div class="tool_button" id="tool_node_clone" title="Clone Node"></div>
+ <div class="tool_button" id="tool_node_delete" title="Delete Node"></div>
+ <div class="tool_button" id="tool_openclose_path" title="Open/close sub-path"></div>
+ <div class="tool_button" id="tool_add_subpath" title="Add sub-path"></div>
+ </div>
+</div> <!-- tools_top -->
+ <div id="cur_context_panel">
+
+ </div>
+
+
+<div id="tools_left" class="tools_panel">
+ <div class="tool_button" id="tool_select" title="Select Tool"></div>
+ <div class="tool_button" id="tool_fhpath" title="Pencil Tool"></div>
+ <div class="tool_button" id="tool_line" title="Line Tool"></div>
+ <div class="tool_button flyout_current" id="tools_rect_show" title="Square/Rect Tool">
+ <div class="flyout_arrow_horiz"></div>
+ </div>
+ <div class="tool_button flyout_current" id="tools_ellipse_show" title="Ellipse/Circle Tool">
+ <div class="flyout_arrow_horiz"></div>
+ </div>
+ <div class="tool_button" id="tool_path" title="Path Tool"></div>
+ <div class="tool_button" id="tool_text" title="Text Tool"></div>
+ <div class="tool_button" id="tool_image" title="Image Tool"></div>
+ <div class="tool_button" id="tool_zoom" title="Zoom Tool [Ctrl+Up/Down]"></div>
+
+ <div style="display: none">
+ <div id="tool_rect" title="Rectangle"></div>
+ <div id="tool_square" title="Square"></div>
+ <div id="tool_fhrect" title="Free-Hand Rectangle"></div>
+ <div id="tool_ellipse" title="Ellipse"></div>
+ <div id="tool_circle" title="Circle"></div>
+ <div id="tool_fhellipse" title="Free-Hand Ellipse"></div>
+ </div>
+</div> <!-- tools_left -->
+
+<div id="tools_bottom" class="tools_panel">
+
+ <!-- Zoom buttons -->
+ <div id="zoom_panel" class="toolset" title="Change zoom level">
+ <label>
+ <span id="zoomLabel" class="zoom_tool icon_label"></span>
+ <input id="zoom" size="3" value="100" type="text" />
+ </label>
+ <div id="zoom_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li>1000%</li>
+ <li>400%</li>
+ <li>200%</li>
+ <li>100%</li>
+ <li>50%</li>
+ <li>25%</li>
+ <li id="fit_to_canvas" data-val="canvas">Fit to canvas</li>
+ <li id="fit_to_sel" data-val="selection">Fit to selection</li>
+ <li id="fit_to_layer_content" data-val="layer">Fit to layer content</li>
+ <li id="fit_to_all" data-val="content">Fit to all content</li>
+ <li>100%</li>
+ </ul>
+ </div>
+ <div class="tool_sep"></div>
+ </div>
+
+ <div id="tools_bottom_2">
+ <div id="color_tools">
+ <div class="color_tool" id="tool_fill">
+ <label class="icon_label" for="fill_color" title="Change fill color"></label>
+ <div class="color_block">
+ <div id="fill_bg"></div>
+ <div id="fill_color" class="color_block"></div>
+ </div>
+ </div>
+
+ <div class="color_tool" id="tool_stroke">
+ <div class="color_block">
+ <label class="icon_label" title="Change stroke color"></label>
+ </div>
+ <div class="color_block">
+ <div id="stroke_bg"></div>
+ <div id="stroke_color" class="color_block" title="Change stroke color"></div>
+ </div>
+
+ <label>
+ <input id="stroke_width" title="Change stroke width by 1, shift-click to change by 0.1" size="2" value="5" type="text" data-attr="Stroke Width"/>
+ </label>
+
+ <label class="stroke_tool">
+ <select id="stroke_style" title="Change stroke dash style">
+ <option selected="selected" value="none">&mdash;</option>
+ <option value="2,2">...</option>
+ <option value="5,5">- -</option>
+ <option value="5,2,2,2">- .</option>
+ <option value="5,2,2,2,2,2">- ..</option>
+ </select>
+ </label>
+
+ <div class="stroke_tool dropdown" id="stroke_linejoin">
+ <div>
+ <div id="cur_linejoin" title="Linejoin: Miter"></div>
+ <button></button>
+ </div>
+ </div>
+
+ <div class="stroke_tool dropdown" id="stroke_linecap">
+ <div>
+ <div id="cur_linecap" title="Linecap: Butt"></div>
+ <button></button>
+ </div>
+ </div>
+
+ <div id="toggle_stroke_tools" title="Show/hide more stroke tools">
+ &gt;&gt;
+ </div>
+
+ </div>
+ </div>
+
+ <div class="toolset" id="tool_opacity" title="Change selected item opacity">
+ <label>
+ <span id="group_opacityLabel" class="icon_label"></span>
+ <input id="group_opacity" size="3" value="100" type="text"/>
+ </label>
+ <div id="opacity_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li>0%</li>
+ <li>25%</li>
+ <li>50%</li>
+ <li>75%</li>
+ <li>100%</li>
+ <li class="special"><div id="opac_slider"></div></li>
+ </ul>
+ </div>
+ </div>
+
+ </div>
+
+ <div id="tools_bottom_3">
+ <div id="palette_holder"><div id="palette" title="Click to change fill color, shift-click to change stroke color"></div></div>
+ </div>
+ <div id="copyright"><span id="copyrightLabel">Powered by</span> <a href="http://svg-edit.googlecode.com/" target="_blank">SVG-edit v2.6-alpha</a></div>
+</div>
+
+<div id="option_lists" class="dropdown">
+ <ul id="linejoin_opts">
+ <li class="tool_button current" id="linejoin_miter" title="Linejoin: Miter"></li>
+ <li class="tool_button" id="linejoin_round" title="Linejoin: Round"></li>
+ <li class="tool_button" id="linejoin_bevel" title="Linejoin: Bevel"></li>
+ </ul>
+
+ <ul id="linecap_opts">
+ <li class="tool_button current" id="linecap_butt" title="Linecap: Butt"></li>
+ <li class="tool_button" id="linecap_square" title="Linecap: Square"></li>
+ <li class="tool_button" id="linecap_round" title="Linecap: Round"></li>
+ </ul>
+
+ <ul id="position_opts" class="optcols3">
+ <li class="push_button" id="tool_posleft" title="Align Left"></li>
+ <li class="push_button" id="tool_poscenter" title="Align Center"></li>
+ <li class="push_button" id="tool_posright" title="Align Right"></li>
+ <li class="push_button" id="tool_postop" title="Align Top"></li>
+ <li class="push_button" id="tool_posmiddle" title="Align Middle"></li>
+ <li class="push_button" id="tool_posbottom" title="Align Bottom"></li>
+ </ul>
+</div>
+
+
+<!-- hidden divs -->
+<div id="color_picker"></div>
+
+</div> <!-- svg_editor -->
+
+<div id="svg_source_editor">
+ <div id="svg_source_overlay"></div>
+ <div id="svg_source_container">
+ <div id="tool_source_back" class="toolbar_button">
+ <button id="tool_source_save">Apply Changes</button>
+ <button id="tool_source_cancel">Cancel</button>
+ </div>
+ <div id="save_output_btns">
+ <p id="copy_save_note">Copy the contents of this box into a text editor, then save the file with a .svg extension.</p>
+ <button id="copy_save_done">Done</button>
+ </div>
+ <form>
+ <textarea id="svg_source_textarea" spellcheck="false"></textarea>
+ </form>
+ </div>
+</div>
+
+
+<div id="svg_docprops">
+ <div id="svg_docprops_overlay"></div>
+ <div id="svg_docprops_container">
+ <div id="tool_docprops_back" class="toolbar_button">
+ <button id="tool_docprops_save">OK</button>
+ <button id="tool_docprops_cancel">Cancel</button>
+ </div>
+
+
+ <fieldset id="svg_docprops_docprops">
+ <legend id="svginfo_image_props">Image Properties</legend>
+ <label>
+ <span id="svginfo_title">Title:</span>
+ <input type="text" id="canvas_title"/>
+ </label>
+
+ <fieldset id="change_resolution">
+ <legend id="svginfo_dim">Canvas Dimensions</legend>
+
+ <label><span id="svginfo_width">width:</span> <input type="text" id="canvas_width" size="6"/></label>
+
+ <label><span id="svginfo_height">height:</span> <input type="text" id="canvas_height" size="6"/></label>
+
+ <label>
+ <select id="resolution">
+ <option id="selectedPredefined" selected="selected">Select predefined:</option>
+ <option>640x480</option>
+ <option>800x600</option>
+ <option>1024x768</option>
+ <option>1280x960</option>
+ <option>1600x1200</option>
+ <option id="fitToContent" value="content">Fit to Content</option>
+ </select>
+ </label>
+ </fieldset>
+
+ <fieldset id="image_save_opts">
+ <legend id="includedImages">Included Images</legend>
+ <label><input type="radio" name="image_opt" value="embed" checked="checked"/> <span id="image_opt_embed">Embed data (local files)</span> </label>
+ <label><input type="radio" name="image_opt" value="ref"/> <span id="image_opt_ref">Use file reference</span> </label>
+ </fieldset>
+ </fieldset>
+
+ </div>
+</div>
+
+<div id="svg_prefs">
+ <div id="svg_prefs_overlay"></div>
+ <div id="svg_prefs_container">
+ <div id="tool_prefs_back" class="toolbar_button">
+ <button id="tool_prefs_save">OK</button>
+ <button id="tool_prefs_cancel">Cancel</button>
+ </div>
+
+ <fieldset>
+ <legend id="svginfo_editor_prefs">Editor Preferences</legend>
+
+ <label><span id="svginfo_lang">Language:</span>
+ <!-- Source: http://en.wikipedia.org/wiki/Language_names -->
+ <select id="lang_select">
+ <option id="lang_ar" value="ar">العربية</option>
+ <option id="lang_cs" value="cs">Čeština</option>
+ <option id="lang_de" value="de">Deutsch</option>
+ <option id="lang_en" value="en" selected="selected">English</option>
+ <option id="lang_es" value="es">Español</option>
+ <option id="lang_fa" value="fa">فارسی</option>
+ <option id="lang_fr" value="fr">Français</option>
+ <option id="lang_fy" value="fy">Frysk</option>
+ <option id="lang_hi" value="hi">&#2361;&#2367;&#2344;&#2381;&#2342;&#2368;, &#2361;&#2367;&#2306;&#2342;&#2368;</option>
+ <option id="lang_it" value="it">Italiano</option>
+ <option id="lang_ja" value="ja">日本語</option>
+ <option id="lang_nl" value="nl">Nederlands</option>
+ <option id="lang_pt-BR" value="pt-BR">Português (BR)</option>
+ <option id="lang_ro" value="ro">Româneşte</option>
+ <option id="lang_ru" value="ru">Русский</option>
+ <option id="lang_sk" value="sk">Slovenčina</option>
+ <option id="lang_zh-TW" value="zh-TW">繁體中文</option>
+ </select>
+ </label>
+
+ <label><span id="svginfo_icons">Icon size:</span>
+ <select id="iconsize">
+ <option id="icon_small" value="s">Small</option>
+ <option id="icon_medium" value="m" selected="selected">Medium</option>
+ <option id="icon_large" value="l">Large</option>
+ <option id="icon_xlarge" value="xl">Extra Large</option>
+ </select>
+ </label>
+
+ <fieldset id="change_background">
+ <legend id="svginfo_change_background">Editor Background</legend>
+ <div id="bg_blocks"></div>
+ <label><span id="svginfo_bg_url">URL:</span> <input type="text" id="canvas_bg_url"/></label>
+ <p id="svginfo_bg_note">Note: Background will not be saved with image.</p>
+ </fieldset>
+
+ <fieldset id="change_grid">
+ <legend id="svginfo_grid_settings">Grid</legend>
+ <label><span id="svginfo_snap_onoff">Snapping on/off</span><input type="checkbox" value="snapping_on" id="grid_snapping_on"></label>
+ <label><span id="svginfo_snap_step">Snapping Step-Size:</span> <input type="text" id="grid_snapping_step" size="3" value="10"/></label>
+ </fieldset>
+
+ <fieldset id="units_rulers">
+ <legend id="svginfo_units_rulers">Units & Rulers</legend>
+ <label><span id="svginfo_rulers_onoff">Show rulers</span><input type="checkbox" value="show_rulers" id="show_rulers" checked></label>
+ <label>
+ <span id="svginfo_unit">Base Unit:</span>
+ <select id="base_unit">
+ <option value="px">Pixels</option>
+ <option value="cm">Centimeters</option>
+ <option value="mm">Millimeters</option>
+ <option value="in">Inches</option>
+ <option value="pt">Points</option>
+ <option value="pc">Picas</option>
+ <option value="em">Ems</option>
+ <option value="ex">Exs</option>
+ </select>
+ </label>
+ <!-- Should this be an export option instead? -->
+<!--
+ <span id="svginfo_unit_system">Unit System:</span>
+ <label>
+ <input type="radio" name="unit_system" value="single" checked="checked"/>
+ <span id="svginfo_single_type_unit">Single type unit</span>
+ <small id="svginfo_single_type_unit_sub">CSS unit type is set on root element. If a different unit type is entered in a text field, it is converted back to user units on export.</small>
+ </label>
+ <label>
+ <input type="radio" name="unit_system" value="multi"/>
+ <span id="svginfo_multi_units">Multiple CSS units</span>
+ <small id="svginfo_single_type_unit_sub">Attributes can be given different CSS units, which may lead to inconsistant results among viewers.</small>
+ </label>
+ -->
+ </fieldset>
+
+ </fieldset>
+
+ </div>
+</div>
+
+<div id="dialog_box">
+ <div id="dialog_box_overlay"></div>
+ <div id="dialog_container">
+ <div id="dialog_content"></div>
+ <div id="dialog_buttons"></div>
+ </div>
+</div>
+
+<ul id="cmenu_canvas" class="contextMenu">
+ <li><a href="#cut">Cut</a></li>
+ <li><a href="#copy">Copy</a></li>
+ <li><a href="#paste">Paste</a></li>
+ <li><a href="#paste_in_place">Paste in Place</a></li>
+ <li class="separator"><a href="#delete">Delete</a></li>
+ <li class="separator"><a href="#group">Group<span class="shortcut">G</span></a></li>
+ <li><a href="#ungroup">Ungroup<span class="shortcut">G</span></a></li>
+ <li class="separator"><a href="#move_front">Bring to Front<span class="shortcut">SHFT+CTRL+]</span></a></li>
+ <li><a href="#move_up">Bring Forward<span class="shortcut">CTRL+]</span></a></li>
+ <li><a href="#move_down">Send Backward<span class="shortcut">CTRL+[</span></a></li>
+ <li><a href="#move_back">Send to Back<span class="shortcut">SHFT+CTRL+[</span></a></li>
+</ul>
+
+
+<ul id="cmenu_layers" class="contextMenu">
+ <li><a href="#dupe">Duplicate Layer...</a></li>
+ <li><a href="#delete">Delete Layer</a></li>
+ <li><a href="#merge_down">Merge Down</a></li>
+ <li><a href="#merge_all">Merge All</a></li>
+</ul>
+
+</body>
+</html>
diff --git a/files_svgedit/svg-edit/.svn/text-base/svg-editor.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/svg-editor.js.svn-base
new file mode 100644
index 000000000..d720af3db
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svg-editor.js.svn-base
@@ -0,0 +1,4881 @@
+/*
+ * svg-editor.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Pavol Rusnak
+ * Copyright(c) 2010 Jeff Schiller
+ * Copyright(c) 2010 Narendra Sisodiya
+ *
+ */
+
+// Dependencies:
+// 1) units.js
+// 2) browser.js
+// 3) svgcanvas.js
+
+(function() {
+
+ if(!window.svgEditor) window.svgEditor = function($) {
+ var svgCanvas;
+ var Editor = {};
+ var is_ready = false;
+
+ var defaultPrefs = {
+ lang:'en',
+ iconsize:'m',
+ bkgd_color:'#FFF',
+ bkgd_url:'',
+ img_save:'embed'
+ },
+ curPrefs = {},
+
+ // Note: Difference between Prefs and Config is that Prefs can be
+ // changed in the UI and are stored in the browser, config can not
+
+ curConfig = {
+ canvas_expansion: 3,
+ dimensions: [640,480],
+ initFill: {
+ color: 'FF0000', // solid red
+ opacity: 1
+ },
+ initStroke: {
+ width: 5,
+ color: '000000', // solid black
+ opacity: 1
+ },
+ initOpacity: 1,
+ imgPath: 'images/',
+ langPath: 'locale/',
+ extPath: 'extensions/',
+ jGraduatePath: 'jgraduate/images/',
+ extensions: ['ext-markers.js','ext-connector.js', 'ext-eyedropper.js', 'ext-shapes.js', 'ext-imagelib.js','ext-grid.js'],
+ initTool: 'select',
+ wireframe: false,
+ colorPickerCSS: null,
+ gridSnapping: false,
+ gridColor: "#000",
+ baseUnit: 'px',
+ snappingStep: 10,
+ showRulers: true
+ },
+ uiStrings = Editor.uiStrings = {
+ common: {
+ "ok":"OK",
+ "cancel":"Cancel",
+ "key_up":"Up",
+ "key_down":"Down",
+ "key_backspace":"Backspace",
+ "key_del":"Del"
+
+ },
+ // This is needed if the locale is English, since the locale strings are not read in that instance.
+ layers: {
+ "layer":"Layer"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": 'Retrieving "%s" ...'
+ }
+ };
+
+ var curPrefs = {}; //$.extend({}, defaultPrefs);
+
+ var customHandlers = {};
+
+ Editor.curConfig = curConfig;
+
+ Editor.tool_scale = 1;
+
+ // Store and retrieve preferences
+ $.pref = function(key, val) {
+ if(val) curPrefs[key] = val;
+ key = 'svg-edit-'+key;
+ var host = location.hostname,
+ onweb = host && host.indexOf('.') >= 0,
+ store = (val != undefined),
+ storage = false;
+ // Some FF versions throw security errors here
+ try {
+ if(window.localStorage) { // && onweb removed so Webkit works locally
+ storage = localStorage;
+ }
+ } catch(e) {}
+ try {
+ if(window.globalStorage && onweb) {
+ storage = globalStorage[host];
+ }
+ } catch(e) {}
+
+ if(storage) {
+ if(store) storage.setItem(key, val);
+ else if (storage.getItem(key)) return storage.getItem(key) + ''; // Convert to string for FF (.value fails in Webkit)
+ } else if(window.widget) {
+ if(store) widget.setPreferenceForKey(val, key);
+ else return widget.preferenceForKey(key);
+ } else {
+ if(store) {
+ var d = new Date();
+ d.setTime(d.getTime() + 31536000000);
+ val = encodeURIComponent(val);
+ document.cookie = key+'='+val+'; expires='+d.toUTCString();
+ } else {
+ var result = document.cookie.match(new RegExp(key + "=([^;]+)"));
+ return result?decodeURIComponent(result[1]):'';
+ }
+ }
+ }
+
+ Editor.setConfig = function(opts) {
+ $.each(opts, function(key, val) {
+ // Only allow prefs defined in defaultPrefs
+ if(key in defaultPrefs) {
+ $.pref(key, val);
+ }
+ });
+ $.extend(true, curConfig, opts);
+ if(opts.extensions) {
+ curConfig.extensions = opts.extensions;
+ }
+
+ }
+
+ // Extension mechanisms must call setCustomHandlers with two functions: opts.open and opts.save
+ // opts.open's responsibilities are:
+ // - invoke a file chooser dialog in 'open' mode
+ // - let user pick a SVG file
+ // - calls setCanvas.setSvgString() with the string contents of that file
+ // opts.save's responsibilities are:
+ // - accept the string contents of the current document
+ // - invoke a file chooser dialog in 'save' mode
+ // - save the file to location chosen by the user
+ Editor.setCustomHandlers = function(opts) {
+ Editor.ready(function() {
+ if(opts.open) {
+ $('#tool_open > input[type="file"]').remove();
+ $('#tool_open').show();
+ svgCanvas.open = opts.open;
+ }
+ if(opts.save) {
+ Editor.show_save_warning = false;
+ svgCanvas.bind("saved", opts.save);
+ }
+ if(opts.pngsave) {
+ svgCanvas.bind("exported", opts.pngsave);
+ }
+ customHandlers = opts;
+ });
+ }
+
+ Editor.randomizeIds = function() {
+ svgCanvas.randomizeIds(arguments)
+ }
+
+ Editor.init = function() {
+ // For external openers
+ (function() {
+ // let the opener know SVG Edit is ready
+ var w = window.opener;
+ if (w) {
+ try {
+ var svgEditorReadyEvent = w.document.createEvent("Event");
+ svgEditorReadyEvent.initEvent("svgEditorReady", true, true);
+ w.document.documentElement.dispatchEvent(svgEditorReadyEvent);
+ }
+ catch(e) {}
+ }
+ })();
+
+ (function() {
+ // Load config/data from URL if given
+ var urldata = $.deparam.querystring(true);
+ if(!$.isEmptyObject(urldata)) {
+ if(urldata.dimensions) {
+ urldata.dimensions = urldata.dimensions.split(',');
+ }
+
+ if(urldata.extensions) {
+ urldata.extensions = urldata.extensions.split(',');
+ }
+
+ if(urldata.bkgd_color) {
+ urldata.bkgd_color = '#' + urldata.bkgd_color;
+ }
+
+ svgEditor.setConfig(urldata);
+
+ var src = urldata.source;
+ var qstr = $.param.querystring();
+
+ if(!src) { // urldata.source may have been null if it ended with '='
+ if(qstr.indexOf('source=data:') >= 0) {
+ src = qstr.match(/source=(data:[^&]*)/)[1];
+ }
+ }
+
+ if(src) {
+ if(src.indexOf("data:") === 0) {
+ // plusses get replaced by spaces, so re-insert
+ src = src.replace(/ /g, "+");
+ Editor.loadFromDataURI(src);
+ } else {
+ Editor.loadFromString(src);
+ }
+ } else if(qstr.indexOf('paramurl=') !== -1) {
+ // Get paramater URL (use full length of remaining location.href)
+ svgEditor.loadFromURL(qstr.substr(9));
+ } else if(urldata.url) {
+ svgEditor.loadFromURL(urldata.url);
+ }
+ }
+ })();
+
+ var extFunc = function() {
+ $.each(curConfig.extensions, function() {
+ var extname = this;
+ $.getScript(curConfig.extPath + extname, function(d) {
+ // Fails locally in Chrome 5
+ if(!d) {
+ var s = document.createElement('script');
+ s.src = curConfig.extPath + extname;
+ document.querySelector('head').appendChild(s);
+ }
+ });
+ });
+
+ var good_langs = [];
+
+ $('#lang_select option').each(function() {
+ good_langs.push(this.value);
+ });
+
+ // var lang = ('lang' in curPrefs) ? curPrefs.lang : null;
+ Editor.putLocale(null, good_langs);
+ }
+
+ // Load extensions
+ // Bit of a hack to run extensions in local Opera/IE9
+ if(document.location.protocol === 'file:') {
+ setTimeout(extFunc, 100);
+ } else {
+ extFunc();
+ }
+ $.svgIcons(curConfig.imgPath + 'svg_edit_icons.svg', {
+ w:24, h:24,
+ id_match: false,
+ no_img: !svgedit.browser.isWebkit(), // Opera & Firefox 4 gives odd behavior w/images
+ fallback_path: curConfig.imgPath,
+ fallback:{
+ 'new_image':'clear.png',
+ 'save':'save.png',
+ 'open':'open.png',
+ 'source':'source.png',
+ 'docprops':'document-properties.png',
+ 'wireframe':'wireframe.png',
+
+ 'undo':'undo.png',
+ 'redo':'redo.png',
+
+ 'select':'select.png',
+ 'select_node':'select_node.png',
+ 'pencil':'fhpath.png',
+ 'pen':'line.png',
+ 'square':'square.png',
+ 'rect':'rect.png',
+ 'fh_rect':'freehand-square.png',
+ 'circle':'circle.png',
+ 'ellipse':'ellipse.png',
+ 'fh_ellipse':'freehand-circle.png',
+ 'path':'path.png',
+ 'text':'text.png',
+ 'image':'image.png',
+ 'zoom':'zoom.png',
+
+ 'clone':'clone.png',
+ 'node_clone':'node_clone.png',
+ 'delete':'delete.png',
+ 'node_delete':'node_delete.png',
+ 'group':'shape_group.png',
+ 'ungroup':'shape_ungroup.png',
+ 'move_top':'move_top.png',
+ 'move_bottom':'move_bottom.png',
+ 'to_path':'to_path.png',
+ 'link_controls':'link_controls.png',
+ 'reorient':'reorient.png',
+
+ 'align_left':'align-left.png',
+ 'align_center':'align-center',
+ 'align_right':'align-right',
+ 'align_top':'align-top',
+ 'align_middle':'align-middle',
+ 'align_bottom':'align-bottom',
+
+ 'go_up':'go-up.png',
+ 'go_down':'go-down.png',
+
+ 'ok':'save.png',
+ 'cancel':'cancel.png',
+
+ 'arrow_right':'flyouth.png',
+ 'arrow_down':'dropdown.gif'
+ },
+ placement: {
+ '#logo':'logo',
+
+ '#tool_clear div,#layer_new':'new_image',
+ '#tool_save div':'save',
+ '#tool_export div':'export',
+ '#tool_open div div':'open',
+ '#tool_import div div':'import',
+ '#tool_source':'source',
+ '#tool_docprops > div':'docprops',
+ '#tool_wireframe':'wireframe',
+
+ '#tool_undo':'undo',
+ '#tool_redo':'redo',
+
+ '#tool_select':'select',
+ '#tool_fhpath':'pencil',
+ '#tool_line':'pen',
+ '#tool_rect,#tools_rect_show':'rect',
+ '#tool_square':'square',
+ '#tool_fhrect':'fh_rect',
+ '#tool_ellipse,#tools_ellipse_show':'ellipse',
+ '#tool_circle':'circle',
+ '#tool_fhellipse':'fh_ellipse',
+ '#tool_path':'path',
+ '#tool_text,#layer_rename':'text',
+ '#tool_image':'image',
+ '#tool_zoom':'zoom',
+
+ '#tool_clone,#tool_clone_multi':'clone',
+ '#tool_node_clone':'node_clone',
+ '#layer_delete,#tool_delete,#tool_delete_multi':'delete',
+ '#tool_node_delete':'node_delete',
+ '#tool_add_subpath':'add_subpath',
+ '#tool_openclose_path':'open_path',
+ '#tool_move_top':'move_top',
+ '#tool_move_bottom':'move_bottom',
+ '#tool_topath':'to_path',
+ '#tool_node_link':'link_controls',
+ '#tool_reorient':'reorient',
+ '#tool_group':'group',
+ '#tool_ungroup':'ungroup',
+ '#tool_unlink_use':'unlink_use',
+
+ '#tool_alignleft, #tool_posleft':'align_left',
+ '#tool_aligncenter, #tool_poscenter':'align_center',
+ '#tool_alignright, #tool_posright':'align_right',
+ '#tool_aligntop, #tool_postop':'align_top',
+ '#tool_alignmiddle, #tool_posmiddle':'align_middle',
+ '#tool_alignbottom, #tool_posbottom':'align_bottom',
+ '#cur_position':'align',
+
+ '#linecap_butt,#cur_linecap':'linecap_butt',
+ '#linecap_round':'linecap_round',
+ '#linecap_square':'linecap_square',
+
+ '#linejoin_miter,#cur_linejoin':'linejoin_miter',
+ '#linejoin_round':'linejoin_round',
+ '#linejoin_bevel':'linejoin_bevel',
+
+ '#url_notice':'warning',
+
+ '#layer_up':'go_up',
+ '#layer_down':'go_down',
+ '#layer_moreopts':'context_menu',
+ '#layerlist td.layervis':'eye',
+
+ '#tool_source_save,#tool_docprops_save,#tool_prefs_save':'ok',
+ '#tool_source_cancel,#tool_docprops_cancel,#tool_prefs_cancel':'cancel',
+
+ '#rwidthLabel, #iwidthLabel':'width',
+ '#rheightLabel, #iheightLabel':'height',
+ '#cornerRadiusLabel span':'c_radius',
+ '#angleLabel':'angle',
+ '#linkLabel,#tool_make_link,#tool_make_link_multi':'globe_link',
+ '#zoomLabel':'zoom',
+ '#tool_fill label': 'fill',
+ '#tool_stroke .icon_label': 'stroke',
+ '#group_opacityLabel': 'opacity',
+ '#blurLabel': 'blur',
+ '#font_sizeLabel': 'fontsize',
+
+ '.flyout_arrow_horiz':'arrow_right',
+ '.dropdown button, #main_button .dropdown':'arrow_down',
+ '#palette .palette_item:first, #fill_bg, #stroke_bg':'no_color'
+ },
+ resize: {
+ '#logo .svg_icon': 32,
+ '.flyout_arrow_horiz .svg_icon': 5,
+ '.layer_button .svg_icon, #layerlist td.layervis .svg_icon': 14,
+ '.dropdown button .svg_icon': 7,
+ '#main_button .dropdown .svg_icon': 9,
+ '.palette_item:first .svg_icon, #fill_bg .svg_icon, #stroke_bg .svg_icon': 16,
+ '.toolbar_button button .svg_icon':16,
+ '.stroke_tool div div .svg_icon': 20,
+ '#tools_bottom label .svg_icon': 18
+ },
+ callback: function(icons) {
+ $('.toolbar_button button > svg, .toolbar_button button > img').each(function() {
+ $(this).parent().prepend(this);
+ });
+
+ var tleft = $('#tools_left');
+ if (tleft.length != 0) {
+ var min_height = tleft.offset().top + tleft.outerHeight();
+ }
+// var size = $.pref('iconsize');
+// if(size && size != 'm') {
+// svgEditor.setIconSize(size);
+// } else if($(window).height() < min_height) {
+// // Make smaller
+// svgEditor.setIconSize('s');
+// }
+
+ // Look for any missing flyout icons from plugins
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ var sel = shower.attr('data-curopt');
+ // Check if there's an icon here
+ if(!shower.children('svg, img').length) {
+ var clone = $(sel).children().clone();
+ if(clone.length) {
+ clone[0].removeAttribute('style'); //Needed for Opera
+ shower.append(clone);
+ }
+ }
+ });
+
+ svgEditor.runCallbacks();
+
+ setTimeout(function() {
+ $('.flyout_arrow_horiz:empty').each(function() {
+ $(this).append($.getSvgIcon('arrow_right').width(5).height(5));
+ });
+ }, 1);
+ }
+ });
+
+ Editor.canvas = svgCanvas = new $.SvgCanvas(document.getElementById("svgcanvas"), curConfig);
+ Editor.show_save_warning = false;
+ var palette = ["#000000", "#3f3f3f", "#7f7f7f", "#bfbfbf", "#ffffff",
+ "#ff0000", "#ff7f00", "#ffff00", "#7fff00",
+ "#00ff00", "#00ff7f", "#00ffff", "#007fff",
+ "#0000ff", "#7f00ff", "#ff00ff", "#ff007f",
+ "#7f0000", "#7f3f00", "#7f7f00", "#3f7f00",
+ "#007f00", "#007f3f", "#007f7f", "#003f7f",
+ "#00007f", "#3f007f", "#7f007f", "#7f003f",
+ "#ffaaaa", "#ffd4aa", "#ffffaa", "#d4ffaa",
+ "#aaffaa", "#aaffd4", "#aaffff", "#aad4ff",
+ "#aaaaff", "#d4aaff", "#ffaaff", "#ffaad4"
+ ],
+ isMac = (navigator.platform.indexOf("Mac") >= 0),
+ isWebkit = (navigator.userAgent.indexOf("AppleWebKit") >= 0),
+ modKey = (isMac ? "meta+" : "ctrl+"), // ⌘
+ path = svgCanvas.pathActions,
+ undoMgr = svgCanvas.undoMgr,
+ Utils = svgedit.utilities,
+ default_img_url = curConfig.imgPath + "logo.png",
+ workarea = $("#workarea"),
+ canv_menu = $("#cmenu_canvas"),
+ layer_menu = $("#cmenu_layers"),
+ exportWindow = null,
+ tool_scale = 1,
+ zoomInIcon = 'crosshair',
+ zoomOutIcon = 'crosshair',
+ ui_context = 'toolbars',
+ orig_source = '',
+ paintBox = {fill: null, stroke:null};
+
+ // This sets up alternative dialog boxes. They mostly work the same way as
+ // their UI counterparts, expect instead of returning the result, a callback
+ // needs to be included that returns the result as its first parameter.
+ // In the future we may want to add additional types of dialog boxes, since
+ // they should be easy to handle this way.
+ (function() {
+ $('#dialog_container').draggable({cancel:'#dialog_content, #dialog_buttons *', containment: 'window'});
+ var box = $('#dialog_box'), btn_holder = $('#dialog_buttons');
+
+ var dbox = function(type, msg, callback, defText) {
+ $('#dialog_content').html('<p>'+msg.replace(/\n/g,'</p><p>')+'</p>')
+ .toggleClass('prompt',(type=='prompt'));
+ btn_holder.empty();
+
+ var ok = $('<input type="button" value="' + uiStrings.common.ok + '">').appendTo(btn_holder);
+
+ if(type != 'alert') {
+ $('<input type="button" value="' + uiStrings.common.cancel + '">')
+ .appendTo(btn_holder)
+ .click(function() { box.hide();callback(false)});
+ }
+
+ if(type == 'prompt') {
+ var input = $('<input type="text">').prependTo(btn_holder);
+ input.val(defText || '');
+ input.bind('keydown', 'return', function() {ok.click();});
+ }
+
+ if(type == 'process') {
+ ok.hide();
+ }
+
+ box.show();
+
+ ok.click(function() {
+ box.hide();
+ var resp = (type == 'prompt')?input.val():true;
+ if(callback) callback(resp);
+ }).focus();
+
+ if(type == 'prompt') input.focus();
+ }
+
+ $.alert = function(msg, cb) { dbox('alert', msg, cb);};
+ $.confirm = function(msg, cb) { dbox('confirm', msg, cb);};
+ $.process_cancel = function(msg, cb) { dbox('process', msg, cb);};
+ $.prompt = function(msg, txt, cb) { dbox('prompt', msg, cb, txt);};
+ }());
+
+ var setSelectMode = function() {
+ var curr = $('.tool_button_current');
+ if(curr.length && curr[0].id !== 'tool_select') {
+ curr.removeClass('tool_button_current').addClass('tool_button');
+ $('#tool_select').addClass('tool_button_current').removeClass('tool_button');
+ $('#styleoverrides').text('#svgcanvas svg *{cursor:move;pointer-events:all} #svgcanvas svg{cursor:default}');
+ }
+ svgCanvas.setMode('select');
+ workarea.css('cursor','auto');
+ };
+
+ var togglePathEditMode = function(editmode, elems) {
+ $('#path_node_panel').toggle(editmode);
+ $('#tools_bottom_2,#tools_bottom_3').toggle(!editmode);
+ if(editmode) {
+ // Change select icon
+ $('.tool_button_current').removeClass('tool_button_current').addClass('tool_button');
+ $('#tool_select').addClass('tool_button_current').removeClass('tool_button');
+ setIcon('#tool_select', 'select_node');
+ multiselected = false;
+ if(elems.length) {
+ selectedElement = elems[0];
+ }
+ } else {
+ setIcon('#tool_select', 'select');
+ }
+ }
+
+ // used to make the flyouts stay on the screen longer the very first time
+ var flyoutspeed = 1250;
+ var textBeingEntered = false;
+ var selectedElement = null;
+ var multiselected = false;
+ var editingsource = false;
+ var docprops = false;
+ var preferences = false;
+ var cur_context = '';
+ var orig_title = $('title:first').text();
+
+ var saveHandler = function(window,svg) {
+ Editor.show_save_warning = false;
+
+ // by default, we add the XML prolog back, systems integrating SVG-edit (wikis, CMSs)
+ // can just provide their own custom save handler and might not want the XML prolog
+ svg = '<?xml version="1.0"?>\n' + svg;
+
+ // Opens the SVG in new window, with warning about Mozilla bug #308590 when applicable
+
+ var ua = navigator.userAgent;
+
+ // Chrome 5 (and 6?) don't allow saving, show source instead ( http://code.google.com/p/chromium/issues/detail?id=46735 )
+ // IE9 doesn't allow standalone Data URLs ( https://connect.microsoft.com/IE/feedback/details/542600/data-uri-images-fail-when-loaded-by-themselves )
+ if((~ua.indexOf('Chrome') && $.browser.version >= 533) || ~ua.indexOf('MSIE')) {
+ showSourceEditor(0,true);
+ return;
+ }
+ var win = window.open("data:image/svg+xml;base64," + Utils.encode64(svg));
+
+ // Alert will only appear the first time saved OR the first time the bug is encountered
+ var done = $.pref('save_notice_done');
+ if(done !== "all") {
+
+ var note = uiStrings.notification.saveFromBrowser.replace('%s', 'SVG');
+
+ // Check if FF and has <defs/>
+ if(ua.indexOf('Gecko/') !== -1) {
+ if(svg.indexOf('<defs') !== -1) {
+ note += "\n\n" + uiStrings.notification.defsFailOnSave;
+ $.pref('save_notice_done', 'all');
+ done = "all";
+ } else {
+ $.pref('save_notice_done', 'part');
+ }
+ } else {
+ $.pref('save_notice_done', 'all');
+ }
+
+ if(done !== 'part') {
+ win.alert(note);
+ }
+ }
+ };
+
+ var exportHandler = function(window, data) {
+ var issues = data.issues;
+
+ if(!$('#export_canvas').length) {
+ $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
+ }
+ var c = $('#export_canvas')[0];
+
+ c.width = svgCanvas.contentW;
+ c.height = svgCanvas.contentH;
+ canvg(c, data.svg, {renderCallback: function() {
+ var datauri = c.toDataURL('image/png');
+ exportWindow.location.href = datauri;
+ var done = $.pref('export_notice_done');
+ if(done !== "all") {
+ var note = uiStrings.notification.saveFromBrowser.replace('%s', 'PNG');
+
+ // Check if there's issues
+ if(issues.length) {
+ var pre = "\n \u2022 ";
+ note += ("\n\n" + uiStrings.notification.noteTheseIssues + pre + issues.join(pre));
+ }
+
+ // Note that this will also prevent the notice even though new issues may appear later.
+ // May want to find a way to deal with that without annoying the user
+ $.pref('export_notice_done', 'all');
+ exportWindow.alert(note);
+ }
+ }});
+ };
+
+ // called when we've selected a different element
+ var selectedChanged = function(window,elems) {
+ var mode = svgCanvas.getMode();
+ if(mode === "select") setSelectMode();
+ var is_node = (mode == "pathedit");
+ // if elems[1] is present, then we have more than one element
+ selectedElement = (elems.length == 1 || elems[1] == null ? elems[0] : null);
+ multiselected = (elems.length >= 2 && elems[1] != null);
+ if (selectedElement != null) {
+ // unless we're already in always set the mode of the editor to select because
+ // upon creation of a text element the editor is switched into
+ // select mode and this event fires - we need our UI to be in sync
+
+ if (!is_node) {
+ updateToolbar();
+ }
+
+ } // if (elem != null)
+
+ // Deal with pathedit mode
+ togglePathEditMode(is_node, elems);
+ updateContextPanel();
+ svgCanvas.runExtensions("selectedChanged", {
+ elems: elems,
+ selectedElement: selectedElement,
+ multiselected: multiselected
+ });
+ };
+
+ // Call when part of element is in process of changing, generally
+ // on mousemove actions like rotate, move, etc.
+ var elementTransition = function(window,elems) {
+ var mode = svgCanvas.getMode();
+ var elem = elems[0];
+
+ if(!elem) return;
+
+ multiselected = (elems.length >= 2 && elems[1] != null);
+ // Only updating fields for single elements for now
+ if(!multiselected) {
+ switch ( mode ) {
+ case "rotate":
+ var ang = svgCanvas.getRotationAngle(elem);
+ $('#angle').val(ang);
+ $('#tool_reorient').toggleClass('disabled', ang == 0);
+ break;
+
+ // TODO: Update values that change on move/resize, etc
+// case "select":
+// case "resize":
+// break;
+ }
+ }
+ svgCanvas.runExtensions("elementTransition", {
+ elems: elems
+ });
+ };
+
+ // called when any element has changed
+ var elementChanged = function(window,elems) {
+ var mode = svgCanvas.getMode();
+ if(mode === "select") {
+ setSelectMode();
+ }
+
+ for (var i = 0; i < elems.length; ++i) {
+ var elem = elems[i];
+
+ // if the element changed was the svg, then it could be a resolution change
+ if (elem && elem.tagName === "svg") {
+ populateLayers();
+ updateCanvas();
+ }
+ // Update selectedElement if element is no longer part of the image.
+ // This occurs for the text elements in Firefox
+ else if(elem && selectedElement && selectedElement.parentNode == null) {
+// || elem && elem.tagName == "path" && !multiselected) { // This was added in r1430, but not sure why
+ selectedElement = elem;
+ }
+ }
+
+ Editor.show_save_warning = true;
+
+ // we update the contextual panel with potentially new
+ // positional/sizing information (we DON'T want to update the
+ // toolbar here as that creates an infinite loop)
+ // also this updates the history buttons
+
+ // we tell it to skip focusing the text control if the
+ // text element was previously in focus
+ updateContextPanel();
+
+ // In the event a gradient was flipped:
+ if(selectedElement && mode === "select") {
+ paintBox.fill.update();
+ paintBox.stroke.update();
+ }
+
+ svgCanvas.runExtensions("elementChanged", {
+ elems: elems
+ });
+ };
+
+ var zoomChanged = function(window, bbox, autoCenter) {
+ var scrbar = 15,
+ res = svgCanvas.getResolution(),
+ w_area = workarea,
+ canvas_pos = $('#svgcanvas').position();
+ var z_info = svgCanvas.setBBoxZoom(bbox, w_area.width()-scrbar, w_area.height()-scrbar);
+ if(!z_info) return;
+ var zoomlevel = z_info.zoom,
+ bb = z_info.bbox;
+
+ if(zoomlevel < .001) {
+ changeZoom({value: .1});
+ return;
+ }
+
+// $('#zoom').val(Math.round(zoomlevel*100));
+ $('#zoom').val(zoomlevel*100);
+
+ if(autoCenter) {
+ updateCanvas();
+ } else {
+ updateCanvas(false, {x: bb.x * zoomlevel + (bb.width * zoomlevel)/2, y: bb.y * zoomlevel + (bb.height * zoomlevel)/2});
+ }
+
+ if(svgCanvas.getMode() == 'zoom' && bb.width) {
+ // Go to select if a zoom box was drawn
+ setSelectMode();
+ }
+
+ zoomDone();
+ }
+
+ $('#cur_context_panel').delegate('a', 'click', function() {
+ var link = $(this);
+ if(link.attr('data-root')) {
+ svgCanvas.leaveContext();
+ } else {
+ svgCanvas.setContext(link.text());
+ }
+ return false;
+ });
+
+ var contextChanged = function(win, context) {
+ $('#workarea,#sidepanels').css('top', context?100:75);
+ $('#rulers').toggleClass('moved', context);
+ if(cur_context && !context) {
+ // Back to normal
+ workarea[0].scrollTop -= 25;
+ } else if(!cur_context && context) {
+ workarea[0].scrollTop += 25;
+ }
+
+ var link_str = '';
+ if(context) {
+ var str = '';
+ link_str = '<a href="#" data-root="y">' + svgCanvas.getCurrentDrawing().getCurrentLayerName() + '</a>';
+
+ $(context).parentsUntil('#svgcontent > g').andSelf().each(function() {
+ if(this.id) {
+ str += ' > ' + this.id;
+ if(this !== context) {
+ link_str += ' > <a href="#">' + this.id + '</a>';
+ } else {
+ link_str += ' > ' + this.id;
+ }
+ }
+ });
+
+ cur_context = str;
+ } else {
+ cur_context = null;
+ }
+ $('#cur_context_panel').toggle(!!context).html(link_str);
+
+
+ updateTitle();
+ }
+
+ // Makes sure the current selected paint is available to work with
+ var prepPaints = function() {
+ paintBox.fill.prep();
+ paintBox.stroke.prep();
+ }
+
+ var flyout_funcs = {};
+
+ var setupFlyouts = function(holders) {
+ $.each(holders, function(hold_sel, btn_opts) {
+ var buttons = $(hold_sel).children();
+ var show_sel = hold_sel + '_show';
+ var shower = $(show_sel);
+ var def = false;
+ buttons.addClass('tool_button')
+ .unbind('click mousedown mouseup') // may not be necessary
+ .each(function(i) {
+ // Get this buttons options
+ var opts = btn_opts[i];
+
+ // Remember the function that goes with this ID
+ flyout_funcs[opts.sel] = opts.fn;
+
+ if(opts.isDefault) def = i;
+
+ // Clicking the icon in flyout should set this set's icon
+ var func = function(event) {
+ var options = opts;
+ //find the currently selected tool if comes from keystroke
+ if (event.type === "keydown") {
+ var flyoutIsSelected = $(options.parent + "_show").hasClass('tool_button_current');
+ var currentOperation = $(options.parent + "_show").attr("data-curopt");
+ $.each(holders[opts.parent], function(i, tool){
+ if (tool.sel == currentOperation) {
+ if(!event.shiftKey || !flyoutIsSelected) {
+ options = tool;
+ }
+ else {
+ options = holders[opts.parent][i+1] || holders[opts.parent][0];
+ }
+ }
+ });
+ }
+ if($(this).hasClass('disabled')) return false;
+ if (toolButtonClick(show_sel)) {
+ options.fn();
+ }
+ if(options.icon) {
+ var icon = $.getSvgIcon(options.icon, true);
+ } else {
+ var icon = $(options.sel).children().eq(0).clone();
+ }
+
+ icon[0].setAttribute('width',shower.width());
+ icon[0].setAttribute('height',shower.height());
+ shower.children(':not(.flyout_arrow_horiz)').remove();
+ shower.append(icon).attr('data-curopt', options.sel); // This sets the current mode
+ }
+
+ $(this).mouseup(func);
+
+ if(opts.key) {
+ $(document).bind('keydown', opts.key[0] + " shift+" + opts.key[0], func);
+ }
+ });
+
+ if(def) {
+ shower.attr('data-curopt', btn_opts[def].sel);
+ } else if(!shower.attr('data-curopt')) {
+ // Set first as default
+ shower.attr('data-curopt', btn_opts[0].sel);
+ }
+
+ var timer;
+
+ var pos = $(show_sel).position();
+ $(hold_sel).css({'left': pos.left+34, 'top': pos.top+77});
+
+ // Clicking the "show" icon should set the current mode
+ shower.mousedown(function(evt) {
+ if(shower.hasClass('disabled')) return false;
+ var holder = $(hold_sel);
+ var l = pos.left+34;
+ var w = holder.width()*-1;
+ var time = holder.data('shown_popop')?200:0;
+ timer = setTimeout(function() {
+ // Show corresponding menu
+ if(!shower.data('isLibrary')) {
+ holder.css('left', w).show().animate({
+ left: l
+ },150);
+ } else {
+ holder.css('left', l).show();
+ }
+ holder.data('shown_popop',true);
+ },time);
+ evt.preventDefault();
+ }).mouseup(function(evt) {
+ clearTimeout(timer);
+ var opt = $(this).attr('data-curopt');
+ // Is library and popped up, so do nothing
+ if(shower.data('isLibrary') && $(show_sel.replace('_show','')).is(':visible')) {
+ toolButtonClick(show_sel, true);
+ return;
+ }
+ if (toolButtonClick(show_sel) && (opt in flyout_funcs)) {
+ flyout_funcs[opt]();
+ }
+ });
+
+ // $('#tools_rect').mouseleave(function(){$('#tools_rect').fadeOut();});
+ });
+
+ setFlyoutTitles();
+ }
+
+ var makeFlyoutHolder = function(id, child) {
+ var div = $('<div>',{
+ 'class': 'tools_flyout',
+ id: id
+ }).appendTo('#svg_editor').append(child);
+
+ return div;
+ }
+
+ var setFlyoutPositions = function() {
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ var pos = shower.offset();
+ var w = shower.outerWidth();
+ $(this).css({left: (pos.left + w)*tool_scale, top: pos.top});
+ });
+ }
+
+ var setFlyoutTitles = function() {
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ if(shower.data('isLibrary')) return;
+
+ var tooltips = [];
+ $(this).children().each(function() {
+ tooltips.push(this.title);
+ });
+ shower[0].title = tooltips.join(' / ');
+ });
+ }
+
+ var resize_timer;
+
+ var extAdded = function(window, ext) {
+
+ var cb_called = false;
+ var resize_done = false;
+ var cb_ready = true; // Set to false to delay callback (e.g. wait for $.svgIcons)
+
+ function prepResize() {
+ if(resize_timer) {
+ clearTimeout(resize_timer);
+ resize_timer = null;
+ }
+ if(!resize_done) {
+ resize_timer = setTimeout(function() {
+ resize_done = true;
+ setIconSize(curPrefs.iconsize);
+ }, 50);
+ }
+ }
+
+
+ var runCallback = function() {
+ if(ext.callback && !cb_called && cb_ready) {
+ cb_called = true;
+ ext.callback();
+ }
+ }
+
+ var btn_selects = [];
+
+ if(ext.context_tools) {
+ $.each(ext.context_tools, function(i, tool) {
+ // Add select tool
+ var cont_id = tool.container_id?(' id="' + tool.container_id + '"'):"";
+
+ var panel = $('#' + tool.panel);
+
+ // create the panel if it doesn't exist
+ if(!panel.length)
+ panel = $('<div>', {id: tool.panel}).appendTo("#tools_top");
+
+ // TODO: Allow support for other types, or adding to existing tool
+ switch (tool.type) {
+ case 'tool_button':
+ var html = '<div class="tool_button">' + tool.id + '</div>';
+ var div = $(html).appendTo(panel);
+ if (tool.events) {
+ $.each(tool.events, function(evt, func) {
+ $(div).bind(evt, func);
+ });
+ }
+ break;
+ case 'select':
+ var html = '<label' + cont_id + '>'
+ + '<select id="' + tool.id + '">';
+ $.each(tool.options, function(val, text) {
+ var sel = (val == tool.defval) ? " selected":"";
+ html += '<option value="'+val+'"' + sel + '>' + text + '</option>';
+ });
+ html += "</select></label>";
+ // Creates the tool, hides & adds it, returns the select element
+ var sel = $(html).appendTo(panel).find('select');
+
+ $.each(tool.events, function(evt, func) {
+ $(sel).bind(evt, func);
+ });
+ break;
+ case 'button-select':
+ var html = '<div id="' + tool.id + '" class="dropdown toolset" title="' + tool.title + '">'
+ + '<div id="cur_' + tool.id + '" class="icon_label"></div><button></button></div>';
+
+ var list = $('<ul id="' + tool.id + '_opts"></ul>').appendTo('#option_lists');
+
+ if(tool.colnum) {
+ list.addClass('optcols' + tool.colnum);
+ }
+
+ // Creates the tool, hides & adds it, returns the select element
+ var dropdown = $(html).appendTo(panel).children();
+
+ btn_selects.push({
+ elem: ('#' + tool.id),
+ list: ('#' + tool.id + '_opts'),
+ title: tool.title,
+ callback: tool.events.change,
+ cur: ('#cur_' + tool.id)
+ });
+
+ break;
+ case 'input':
+ var html = '<label' + cont_id + '>'
+ + '<span id="' + tool.id + '_label">'
+ + tool.label + ':</span>'
+ + '<input id="' + tool.id + '" title="' + tool.title
+ + '" size="' + (tool.size || "4") + '" value="' + (tool.defval || "") + '" type="text"/></label>'
+
+ // Creates the tool, hides & adds it, returns the select element
+
+ // Add to given tool.panel
+ var inp = $(html).appendTo(panel).find('input');
+
+ if(tool.spindata) {
+ inp.SpinButton(tool.spindata);
+ }
+
+ if(tool.events) {
+ $.each(tool.events, function(evt, func) {
+ inp.bind(evt, func);
+ });
+ }
+ break;
+
+ default:
+ break;
+ }
+ });
+ }
+
+ if(ext.buttons) {
+ var fallback_obj = {},
+ placement_obj = {},
+ svgicons = ext.svgicons;
+ var holders = {};
+
+
+ // Add buttons given by extension
+ $.each(ext.buttons, function(i, btn) {
+ var icon;
+ var id = btn.id;
+ var num = i;
+
+ // Give button a unique ID
+ while($('#'+id).length) {
+ id = btn.id + '_' + (++num);
+ }
+
+ if(!svgicons) {
+ icon = $('<img src="' + btn.icon + '">');
+ } else {
+ fallback_obj[id] = btn.icon;
+ var svgicon = btn.svgicon?btn.svgicon:btn.id;
+ if(btn.type == 'app_menu') {
+ placement_obj['#' + id + ' > div'] = svgicon;
+ } else {
+ placement_obj['#' + id] = svgicon;
+ }
+ }
+
+ var cls, parent;
+
+ // Set button up according to its type
+ switch ( btn.type ) {
+ case 'mode_flyout':
+ case 'mode':
+ cls = 'tool_button';
+ parent = "#tools_left";
+ break;
+ case 'context':
+ cls = 'tool_button';
+ parent = "#" + btn.panel;
+ // create the panel if it doesn't exist
+ if(!$(parent).length)
+ $('<div>', {id: btn.panel}).appendTo("#tools_top");
+ break;
+ case 'app_menu':
+ cls = '';
+ parent = '#main_menu ul';
+ break;
+ }
+
+ var button = $((btn.list || btn.type == 'app_menu')?'<li/>':'<div/>')
+ .attr("id", id)
+ .attr("title", btn.title)
+ .addClass(cls);
+ if(!btn.includeWith && !btn.list) {
+ if("position" in btn) {
+ $(parent).children().eq(btn.position).before(button);
+ } else {
+ button.appendTo(parent);
+ }
+
+ if(btn.type =='mode_flyout') {
+ // Add to flyout menu / make flyout menu
+ // var opts = btn.includeWith;
+ // // opts.button, default, position
+ var ref_btn = $(button);
+
+ var flyout_holder = ref_btn.parent();
+ // Create a flyout menu if there isn't one already
+ if(!ref_btn.parent().hasClass('tools_flyout')) {
+ // Create flyout placeholder
+ var tls_id = ref_btn[0].id.replace('tool_','tools_')
+ var show_btn = ref_btn.clone()
+ .attr('id',tls_id + '_show')
+ .append($('<div>',{'class':'flyout_arrow_horiz'}));
+
+ ref_btn.before(show_btn);
+
+ // Create a flyout div
+ flyout_holder = makeFlyoutHolder(tls_id, ref_btn);
+ flyout_holder.data('isLibrary', true);
+ show_btn.data('isLibrary', true);
+ }
+
+
+
+ // var ref_data = Actions.getButtonData(opts.button);
+
+ placement_obj['#' + tls_id + '_show'] = btn.id;
+ // TODO: Find way to set the current icon using the iconloader if this is not default
+
+ // Include data for extension button as well as ref button
+ var cur_h = holders['#'+flyout_holder[0].id] = [{
+ sel: '#'+id,
+ fn: btn.events.click,
+ icon: btn.id,
+// key: btn.key,
+ isDefault: true
+ }, ref_data];
+ //
+ // // {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}
+ //
+ // var pos = ("position" in opts)?opts.position:'last';
+ // var len = flyout_holder.children().length;
+ //
+ // // Add at given position or end
+ // if(!isNaN(pos) && pos >= 0 && pos < len) {
+ // flyout_holder.children().eq(pos).before(button);
+ // } else {
+ // flyout_holder.append(button);
+ // cur_h.reverse();
+ // }
+ } else if(btn.type == 'app_menu') {
+ button.append('<div>').append(btn.title);
+ }
+
+ } else if(btn.list) {
+ // Add button to list
+ button.addClass('push_button');
+ $('#' + btn.list + '_opts').append(button);
+ if(btn.isDefault) {
+ $('#cur_' + btn.list).append(button.children().clone());
+ var svgicon = btn.svgicon?btn.svgicon:btn.id;
+ placement_obj['#cur_' + btn.list] = svgicon;
+ }
+ } else if(btn.includeWith) {
+ // Add to flyout menu / make flyout menu
+ var opts = btn.includeWith;
+ // opts.button, default, position
+ var ref_btn = $(opts.button);
+
+ var flyout_holder = ref_btn.parent();
+ // Create a flyout menu if there isn't one already
+ if(!ref_btn.parent().hasClass('tools_flyout')) {
+ // Create flyout placeholder
+ var tls_id = ref_btn[0].id.replace('tool_','tools_')
+ var show_btn = ref_btn.clone()
+ .attr('id',tls_id + '_show')
+ .append($('<div>',{'class':'flyout_arrow_horiz'}));
+
+ ref_btn.before(show_btn);
+
+ // Create a flyout div
+ flyout_holder = makeFlyoutHolder(tls_id, ref_btn);
+ }
+
+ var ref_data = Actions.getButtonData(opts.button);
+
+ if(opts.isDefault) {
+ placement_obj['#' + tls_id + '_show'] = btn.id;
+ }
+ // TODO: Find way to set the current icon using the iconloader if this is not default
+
+ // Include data for extension button as well as ref button
+ var cur_h = holders['#'+flyout_holder[0].id] = [{
+ sel: '#'+id,
+ fn: btn.events.click,
+ icon: btn.id,
+ key: btn.key,
+ isDefault: btn.includeWith?btn.includeWith.isDefault:0
+ }, ref_data];
+
+ // {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}
+
+ var pos = ("position" in opts)?opts.position:'last';
+ var len = flyout_holder.children().length;
+
+ // Add at given position or end
+ if(!isNaN(pos) && pos >= 0 && pos < len) {
+ flyout_holder.children().eq(pos).before(button);
+ } else {
+ flyout_holder.append(button);
+ cur_h.reverse();
+ }
+ }
+
+ if(!svgicons) {
+ button.append(icon);
+ }
+
+ if(!btn.list) {
+ // Add given events to button
+ $.each(btn.events, function(name, func) {
+ if(name == "click") {
+ if(btn.type == 'mode') {
+ if(btn.includeWith) {
+ button.bind(name, func);
+ } else {
+ button.bind(name, function() {
+ if(toolButtonClick(button)) {
+ func();
+ }
+ });
+ }
+ if(btn.key) {
+ $(document).bind('keydown', btn.key, func);
+ if(btn.title) button.attr("title", btn.title + ' ['+btn.key+']');
+ }
+ } else {
+ button.bind(name, func);
+ }
+ } else {
+ button.bind(name, func);
+ }
+ });
+ }
+
+ setupFlyouts(holders);
+ });
+
+ $.each(btn_selects, function() {
+ addAltDropDown(this.elem, this.list, this.callback, {seticon: true});
+ });
+
+ if (svgicons)
+ cb_ready = false; // Delay callback
+
+ $.svgIcons(svgicons, {
+ w:24, h:24,
+ id_match: false,
+ no_img: (!isWebkit),
+ fallback: fallback_obj,
+ placement: placement_obj,
+ callback: function(icons) {
+ // Non-ideal hack to make the icon match the current size
+ if(curPrefs.iconsize && curPrefs.iconsize != 'm') {
+ prepResize();
+ }
+ cb_ready = true; // Ready for callback
+ runCallback();
+ }
+
+ });
+ }
+
+ runCallback();
+ };
+
+ var getPaint = function(color, opac, type) {
+ // update the editor's fill paint
+ var opts = null;
+ if (color.indexOf("url(#") === 0) {
+ var refElem = svgCanvas.getRefElem(color);
+ if(refElem) {
+ refElem = refElem.cloneNode(true);
+ } else {
+ refElem = $("#" + type + "_color defs *")[0];
+ }
+
+ opts = { alpha: opac };
+ opts[refElem.tagName] = refElem;
+ }
+ else if (color.indexOf("#") === 0) {
+ opts = {
+ alpha: opac,
+ solidColor: color.substr(1)
+ };
+ }
+ else {
+ opts = {
+ alpha: opac,
+ solidColor: 'none'
+ };
+ }
+ return new $.jGraduate.Paint(opts);
+ };
+
+
+ // updates the toolbar (colors, opacity, etc) based on the selected element
+ // This function also updates the opacity and id elements that are in the context panel
+ var updateToolbar = function() {
+ if (selectedElement != null) {
+
+ switch ( selectedElement.tagName ) {
+ case 'use':
+ case 'image':
+ case 'foreignObject':
+ break;
+ case 'g':
+ case 'a':
+ // Look for common styles
+
+ var gWidth = null;
+
+ var childs = selectedElement.getElementsByTagName('*');
+ for(var i = 0, len = childs.length; i < len; i++) {
+ var swidth = childs[i].getAttribute("stroke-width");
+
+ if(i === 0) {
+ gWidth = swidth;
+ } else if(gWidth !== swidth) {
+ gWidth = null;
+ }
+ }
+
+ $('#stroke_width').val(gWidth === null ? "" : gWidth);
+
+ paintBox.fill.update(true);
+ paintBox.stroke.update(true);
+
+
+ break;
+ default:
+ paintBox.fill.update(true);
+ paintBox.stroke.update(true);
+
+ $('#stroke_width').val(selectedElement.getAttribute("stroke-width") || 1);
+ $('#stroke_style').val(selectedElement.getAttribute("stroke-dasharray")||"none");
+
+ var attr = selectedElement.getAttribute("stroke-linejoin") || 'miter';
+
+ if ($('#linejoin_' + attr).length != 0)
+ setStrokeOpt($('#linejoin_' + attr)[0]);
+
+ attr = selectedElement.getAttribute("stroke-linecap") || 'butt';
+
+ if ($('#linecap_' + attr).length != 0)
+ setStrokeOpt($('#linecap_' + attr)[0]);
+ }
+
+ }
+
+ // All elements including image and group have opacity
+ if(selectedElement != null) {
+ var opac_perc = ((selectedElement.getAttribute("opacity")||1.0)*100);
+ $('#group_opacity').val(opac_perc);
+ $('#opac_slider').slider('option', 'value', opac_perc);
+ $('#elem_id').val(selectedElement.id);
+ }
+
+ updateToolButtonState();
+ };
+
+ var setImageURL = Editor.setImageURL = function(url) {
+ if(!url) url = default_img_url;
+
+ svgCanvas.setImageURL(url);
+ $('#image_url').val(url);
+
+ if(url.indexOf('data:') === 0) {
+ // data URI found
+ $('#image_url').hide();
+ $('#change_image_url').show();
+ } else {
+ // regular URL
+
+ svgCanvas.embedImage(url, function(datauri) {
+ if(!datauri) {
+ // Couldn't embed, so show warning
+ $('#url_notice').show();
+ } else {
+ $('#url_notice').hide();
+ }
+ default_img_url = url;
+ });
+ $('#image_url').show();
+ $('#change_image_url').hide();
+ }
+ }
+
+ var setInputWidth = function(elem) {
+ var w = Math.min(Math.max(12 + elem.value.length * 6, 50), 300);
+ $(elem).width(w);
+ }
+
+ // updates the context panel tools based on the selected element
+ var updateContextPanel = function() {
+ var elem = selectedElement;
+ // If element has just been deleted, consider it null
+ if(elem != null && !elem.parentNode) elem = null;
+ var currentLayerName = svgCanvas.getCurrentDrawing().getCurrentLayerName();
+ var currentMode = svgCanvas.getMode();
+ var unit = curConfig.baseUnit !== 'px' ? curConfig.baseUnit : null;
+
+ var is_node = currentMode == 'pathedit'; //elem ? (elem.id && elem.id.indexOf('pathpointgrip') == 0) : false;
+ var menu_items = $('#cmenu_canvas li');
+ $('#selected_panel, #multiselected_panel, #g_panel, #rect_panel, #circle_panel,\
+ #ellipse_panel, #line_panel, #text_panel, #image_panel, #container_panel, #use_panel, #a_panel').hide();
+ if (elem != null) {
+ var elname = elem.nodeName;
+
+ // If this is a link with no transform and one child, pretend
+ // its child is selected
+// console.log('go', elem)
+// if(elname === 'a') { // && !$(elem).attr('transform')) {
+// elem = elem.firstChild;
+// }
+
+ var angle = svgCanvas.getRotationAngle(elem);
+ $('#angle').val(angle);
+
+ var blurval = svgCanvas.getBlur(elem);
+ $('#blur').val(blurval);
+ $('#blur_slider').slider('option', 'value', blurval);
+
+ if(svgCanvas.addedNew) {
+ if(elname === 'image') {
+ // Prompt for URL if not a data URL
+ if(svgCanvas.getHref(elem).indexOf('data:') !== 0) {
+ promptImgURL();
+ }
+ } /*else if(elname == 'text') {
+ // TODO: Do something here for new text
+ }*/
+ }
+
+ if(!is_node && currentMode != 'pathedit') {
+ $('#selected_panel').show();
+ // Elements in this array already have coord fields
+ if(['line', 'circle', 'ellipse'].indexOf(elname) >= 0) {
+ $('#xy_panel').hide();
+ } else {
+ var x,y;
+
+ // Get BBox vals for g, polyline and path
+ if(['g', 'polyline', 'path'].indexOf(elname) >= 0) {
+ var bb = svgCanvas.getStrokedBBox([elem]);
+ if(bb) {
+ x = bb.x;
+ y = bb.y;
+ }
+ } else {
+ x = elem.getAttribute('x');
+ y = elem.getAttribute('y');
+ }
+
+ if(unit) {
+ x = svgedit.units.convertUnit(x);
+ y = svgedit.units.convertUnit(y);
+ }
+
+ $('#selected_x').val(x || 0);
+ $('#selected_y').val(y || 0);
+ $('#xy_panel').show();
+ }
+
+ // Elements in this array cannot be converted to a path
+ var no_path = ['image', 'text', 'path', 'g', 'use'].indexOf(elname) == -1;
+ $('#tool_topath').toggle(no_path);
+ $('#tool_reorient').toggle(elname == 'path');
+ $('#tool_reorient').toggleClass('disabled', angle == 0);
+ } else {
+ var point = path.getNodePoint();
+ $('#tool_add_subpath').removeClass('push_button_pressed').addClass('tool_button');
+ $('#tool_node_delete').toggleClass('disabled', !path.canDeleteNodes);
+
+ // Show open/close button based on selected point
+ setIcon('#tool_openclose_path', path.closed_subpath ? 'open_path' : 'close_path');
+
+ if(point) {
+ var seg_type = $('#seg_type');
+ if(unit) {
+ point.x = svgedit.units.convertUnit(point.x);
+ point.y = svgedit.units.convertUnit(point.y);
+ }
+ $('#path_node_x').val(point.x);
+ $('#path_node_y').val(point.y);
+ if(point.type) {
+ seg_type.val(point.type).removeAttr('disabled');
+ } else {
+ seg_type.val(4).attr('disabled','disabled');
+ }
+ }
+ return;
+ }
+
+ // update contextual tools here
+ var panels = {
+ g: [],
+ a: [],
+ rect: ['rx','width','height'],
+ image: ['width','height'],
+ circle: ['cx','cy','r'],
+ ellipse: ['cx','cy','rx','ry'],
+ line: ['x1','y1','x2','y2'],
+ text: [],
+ 'use': []
+ };
+
+ var el_name = elem.tagName;
+
+// if($(elem).data('gsvg')) {
+// $('#g_panel').show();
+// }
+
+ var link_href = null;
+ if (el_name === 'a') {
+ link_href = svgCanvas.getHref(elem);
+ $('#g_panel').show();
+ }
+
+ if(elem.parentNode.tagName === 'a') {
+ if(!$(elem).siblings().length) {
+ $('#a_panel').show();
+ link_href = svgCanvas.getHref(elem.parentNode);
+ }
+ }
+
+ // Hide/show the make_link buttons
+ $('#tool_make_link, #tool_make_link').toggle(!link_href);
+
+ if(link_href) {
+ $('#link_url').val(link_href);
+ }
+
+ if(panels[el_name]) {
+ var cur_panel = panels[el_name];
+
+ $('#' + el_name + '_panel').show();
+
+ $.each(cur_panel, function(i, item) {
+ var attrVal = elem.getAttribute(item);
+ if(curConfig.baseUnit !== 'px' && elem[item]) {
+ var bv = elem[item].baseVal.value;
+ attrVal = svgedit.units.convertUnit(bv);
+ }
+
+ $('#' + el_name + '_' + item).val(attrVal || 0);
+ });
+
+ if(el_name == 'text') {
+ $('#text_panel').css("display", "inline");
+ if (svgCanvas.getItalic()) {
+ $('#tool_italic').addClass('push_button_pressed').removeClass('tool_button');
+ }
+ else {
+ $('#tool_italic').removeClass('push_button_pressed').addClass('tool_button');
+ }
+ if (svgCanvas.getBold()) {
+ $('#tool_bold').addClass('push_button_pressed').removeClass('tool_button');
+ }
+ else {
+ $('#tool_bold').removeClass('push_button_pressed').addClass('tool_button');
+ }
+ $('#font_family').val(elem.getAttribute("font-family"));
+ $('#font_size').val(elem.getAttribute("font-size"));
+ $('#text').val(elem.textContent);
+ if (svgCanvas.addedNew) {
+ // Timeout needed for IE9
+ setTimeout(function() {
+ $('#text').focus().select();
+ },100);
+ }
+ } // text
+ else if(el_name == 'image') {
+ setImageURL(svgCanvas.getHref(elem));
+ } // image
+ else if(el_name === 'g' || el_name === 'use') {
+ $('#container_panel').show();
+ var title = svgCanvas.getTitle();
+ var label = $('#g_title')[0];
+ label.value = title;
+ setInputWidth(label);
+ var d = 'disabled';
+ if(el_name == 'use') {
+ label.setAttribute(d, d);
+ } else {
+ label.removeAttribute(d);
+ }
+ }
+ }
+ menu_items[(el_name === 'g' ? 'en':'dis') + 'ableContextMenuItems']('#ungroup');
+ menu_items[((el_name === 'g' || !multiselected) ? 'dis':'en') + 'ableContextMenuItems']('#group');
+ } // if (elem != null)
+ else if (multiselected) {
+ $('#multiselected_panel').show();
+ menu_items
+ .enableContextMenuItems('#group')
+ .disableContextMenuItems('#ungroup');
+ } else {
+ menu_items.disableContextMenuItems('#delete,#cut,#copy,#group,#ungroup,#move_front,#move_up,#move_down,#move_back');
+ }
+
+ // update history buttons
+ if (undoMgr.getUndoStackSize() > 0) {
+ $('#tool_undo').removeClass( 'disabled');
+ }
+ else {
+ $('#tool_undo').addClass( 'disabled');
+ }
+ if (undoMgr.getRedoStackSize() > 0) {
+ $('#tool_redo').removeClass( 'disabled');
+ }
+ else {
+ $('#tool_redo').addClass( 'disabled');
+ }
+
+ svgCanvas.addedNew = false;
+
+ if ( (elem && !is_node) || multiselected) {
+ // update the selected elements' layer
+ $('#selLayerNames').removeAttr('disabled').val(currentLayerName);
+
+ // Enable regular menu options
+ canv_menu.enableContextMenuItems('#delete,#cut,#copy,#move_front,#move_up,#move_down,#move_back');
+ }
+ else {
+ $('#selLayerNames').attr('disabled', 'disabled');
+ }
+ };
+
+ $('#text').focus( function(){ textBeingEntered = true; } );
+ $('#text').blur( function(){ textBeingEntered = false; } );
+
+ // bind the selected event to our function that handles updates to the UI
+ svgCanvas.bind("selected", selectedChanged);
+ svgCanvas.bind("transition", elementTransition);
+ svgCanvas.bind("changed", elementChanged);
+ svgCanvas.bind("saved", saveHandler);
+ svgCanvas.bind("exported", exportHandler);
+ svgCanvas.bind("zoomed", zoomChanged);
+ svgCanvas.bind("contextset", contextChanged);
+ svgCanvas.bind("extension_added", extAdded);
+ svgCanvas.textActions.setInputElem($("#text")[0]);
+
+ var str = '<div class="palette_item" data-rgb="none"></div>'
+ $.each(palette, function(i,item){
+ str += '<div class="palette_item" style="background-color: ' + item + ';" data-rgb="' + item + '"></div>';
+ });
+ $('#palette').append(str);
+
+ // Set up editor background functionality
+ // TODO add checkerboard as "pattern"
+ var color_blocks = ['#FFF','#888','#000']; // ,'url(data:image/gif;base64,R0lGODlhEAAQAIAAAP%2F%2F%2F9bW1iH5BAAAAAAALAAAAAAQABAAAAIfjG%2Bgq4jM3IFLJgpswNly%2FXkcBpIiVaInlLJr9FZWAQA7)'];
+ var str = '';
+ $.each(color_blocks, function() {
+ str += '<div class="color_block" style="background-color:' + this + ';"></div>';
+ });
+ $('#bg_blocks').append(str);
+ var blocks = $('#bg_blocks div');
+ var cur_bg = 'cur_background';
+ blocks.each(function() {
+ var blk = $(this);
+ blk.click(function() {
+ blocks.removeClass(cur_bg);
+ $(this).addClass(cur_bg);
+ });
+ });
+
+ if($.pref('bkgd_color')) {
+ setBackground($.pref('bkgd_color'), $.pref('bkgd_url'));
+ } else if($.pref('bkgd_url')) {
+ // No color set, only URL
+ setBackground(defaultPrefs.bkgd_color, $.pref('bkgd_url'));
+ }
+
+ if($.pref('img_save')) {
+ curPrefs.img_save = $.pref('img_save');
+ $('#image_save_opts input').val([curPrefs.img_save]);
+ }
+
+ var changeRectRadius = function(ctl) {
+ svgCanvas.setRectRadius(ctl.value);
+ }
+
+ var changeFontSize = function(ctl) {
+ svgCanvas.setFontSize(ctl.value);
+ }
+
+ var changeStrokeWidth = function(ctl) {
+ var val = ctl.value;
+ if(val == 0 && selectedElement && ['line', 'polyline'].indexOf(selectedElement.nodeName) >= 0) {
+ val = ctl.value = 1;
+ }
+ svgCanvas.setStrokeWidth(val);
+ }
+
+ var changeRotationAngle = function(ctl) {
+ svgCanvas.setRotationAngle(ctl.value);
+ $('#tool_reorient').toggleClass('disabled', ctl.value == 0);
+ }
+ var changeZoom = function(ctl) {
+ var zoomlevel = ctl.value / 100;
+ if(zoomlevel < .001) {
+ ctl.value = .1;
+ return;
+ }
+ var zoom = svgCanvas.getZoom();
+ var w_area = workarea;
+
+ zoomChanged(window, {
+ width: 0,
+ height: 0,
+ // center pt of scroll position
+ x: (w_area[0].scrollLeft + w_area.width()/2)/zoom,
+ y: (w_area[0].scrollTop + w_area.height()/2)/zoom,
+ zoom: zoomlevel
+ }, true);
+ }
+
+ var changeOpacity = function(ctl, val) {
+ if(val == null) val = ctl.value;
+ $('#group_opacity').val(val);
+ if(!ctl || !ctl.handle) {
+ $('#opac_slider').slider('option', 'value', val);
+ }
+ svgCanvas.setOpacity(val/100);
+ }
+
+ var changeBlur = function(ctl, val, noUndo) {
+ if(val == null) val = ctl.value;
+ $('#blur').val(val);
+ var complete = false;
+ if(!ctl || !ctl.handle) {
+ $('#blur_slider').slider('option', 'value', val);
+ complete = true;
+ }
+ if(noUndo) {
+ svgCanvas.setBlurNoUndo(val);
+ } else {
+ svgCanvas.setBlur(val, complete);
+ }
+ }
+
+ var operaRepaint = function() {
+ // Repaints canvas in Opera. Needed for stroke-dasharray change as well as fill change
+ if(!window.opera) return;
+ $('<p/>').hide().appendTo('body').remove();
+ }
+
+ $('#stroke_style').change(function(){
+ svgCanvas.setStrokeAttr('stroke-dasharray', $(this).val());
+ operaRepaint();
+ });
+
+ $('#stroke_linejoin').change(function(){
+ svgCanvas.setStrokeAttr('stroke-linejoin', $(this).val());
+ operaRepaint();
+ });
+
+
+ // Lose focus for select elements when changed (Allows keyboard shortcuts to work better)
+ $('select').change(function(){$(this).blur();});
+
+ // fired when user wants to move elements to another layer
+ var promptMoveLayerOnce = false;
+ $('#selLayerNames').change(function(){
+ var destLayer = this.options[this.selectedIndex].value;
+ var confirm_str = uiStrings.notification.QmoveElemsToLayer.replace('%s',destLayer);
+ var moveToLayer = function(ok) {
+ if(!ok) return;
+ promptMoveLayerOnce = true;
+ svgCanvas.moveSelectedToLayer(destLayer);
+ svgCanvas.clearSelection();
+ populateLayers();
+ }
+ if (destLayer) {
+ if(promptMoveLayerOnce) {
+ moveToLayer(true);
+ } else {
+ $.confirm(confirm_str, moveToLayer);
+ }
+ }
+ });
+
+ $('#font_family').change(function() {
+ svgCanvas.setFontFamily(this.value);
+ });
+
+ $('#seg_type').change(function() {
+ svgCanvas.setSegType($(this).val());
+ });
+
+ $('#text').keyup(function(){
+ svgCanvas.setTextContent(this.value);
+ });
+
+ $('#image_url').change(function(){
+ setImageURL(this.value);
+ });
+
+ $('#link_url').change(function() {
+ if(this.value.length) {
+ svgCanvas.setLinkURL(this.value);
+ } else {
+ svgCanvas.removeHyperlink();
+ }
+ });
+
+ $('#g_title').change(function() {
+ svgCanvas.setGroupTitle(this.value);
+ });
+
+ $('.attr_changer').change(function() {
+ var attr = this.getAttribute("data-attr");
+ var val = this.value;
+ var valid = svgedit.units.isValidUnit(attr, val);
+
+ if(!valid) {
+ $.alert(uiStrings.notification.invalidAttrValGiven);
+ this.value = selectedElement.getAttribute(attr);
+ return false;
+ }
+
+ if (attr !== "id") {
+ if (isNaN(val)) {
+ val = svgCanvas.convertToNum(attr, val);
+ } else if(curConfig.baseUnit !== 'px') {
+ // Convert unitless value to one with given unit
+
+ var unitData = svgedit.units.getTypeMap();
+
+ if(selectedElement[attr] || svgCanvas.getMode() === "pathedit" || attr === "x" || attr === "y") {
+ val *= unitData[curConfig.baseUnit];
+ }
+ }
+ }
+
+ // if the user is changing the id, then de-select the element first
+ // change the ID, then re-select it with the new ID
+ if (attr === "id") {
+ var elem = selectedElement;
+ svgCanvas.clearSelection();
+ elem.id = val;
+ svgCanvas.addToSelection([elem],true);
+ }
+ else {
+ svgCanvas.changeSelectedAttribute(attr, val);
+ }
+ });
+
+ // Prevent selection of elements when shift-clicking
+ $('#palette').mouseover(function() {
+ var inp = $('<input type="hidden">');
+ $(this).append(inp);
+ inp.focus().remove();
+ })
+
+ $('.palette_item').mousedown(function(evt){
+ var right_click = evt.button === 2;
+ var isStroke = evt.shiftKey || right_click;
+ var picker = isStroke ? "stroke" : "fill";
+ var color = $(this).attr('data-rgb');
+ var paint = null;
+
+ // Webkit-based browsers returned 'initial' here for no stroke
+ if (color === 'transparent' || color === 'initial') {
+ color = 'none';
+ paint = new $.jGraduate.Paint();
+ }
+ else {
+ paint = new $.jGraduate.Paint({alpha: 100, solidColor: color.substr(1)});
+ }
+
+ paintBox[picker].setPaint(paint);
+
+ if (isStroke) {
+ svgCanvas.setColor('stroke', color);
+ if (color != 'none' && svgCanvas.getStrokeOpacity() != 1) {
+ svgCanvas.setPaintOpacity('stroke', 1.0);
+ }
+ } else {
+ svgCanvas.setColor('fill', color);
+ if (color != 'none' && svgCanvas.getFillOpacity() != 1) {
+ svgCanvas.setPaintOpacity('fill', 1.0);
+ }
+ }
+ updateToolButtonState();
+ }).bind('contextmenu', function(e) {e.preventDefault()});
+
+ $("#toggle_stroke_tools").toggle(function() {
+ $(".stroke_tool").css('display','table-cell');
+ $(this).text('<<');
+ resetScrollPos();
+ }, function() {
+ $(".stroke_tool").css('display','none');
+ $(this).text('>>');
+ resetScrollPos();
+ });
+
+ // This is a common function used when a tool has been clicked (chosen)
+ // It does several common things:
+ // - removes the tool_button_current class from whatever tool currently has it
+ // - hides any flyouts
+ // - adds the tool_button_current class to the button passed in
+ var toolButtonClick = function(button, noHiding) {
+ if ($(button).hasClass('disabled')) return false;
+ if($(button).parent().hasClass('tools_flyout')) return true;
+ var fadeFlyouts = fadeFlyouts || 'normal';
+ if(!noHiding) {
+ $('.tools_flyout').fadeOut(fadeFlyouts);
+ }
+ $('#styleoverrides').text('');
+ workarea.css('cursor','auto');
+ $('.tool_button_current').removeClass('tool_button_current').addClass('tool_button');
+ $(button).addClass('tool_button_current').removeClass('tool_button');
+ return true;
+ };
+
+ (function() {
+ var last_x = null, last_y = null, w_area = workarea[0],
+ panning = false, keypan = false;
+
+ $('#svgcanvas').bind('mousemove mouseup', function(evt) {
+ if(panning === false) return;
+
+ w_area.scrollLeft -= (evt.clientX - last_x);
+ w_area.scrollTop -= (evt.clientY - last_y);
+
+ last_x = evt.clientX;
+ last_y = evt.clientY;
+
+ if(evt.type === 'mouseup') panning = false;
+ return false;
+ }).mousedown(function(evt) {
+ if(evt.button === 1 || keypan === true) {
+ panning = true;
+ last_x = evt.clientX;
+ last_y = evt.clientY;
+ return false;
+ }
+ });
+
+ $(window).mouseup(function() {
+ panning = false;
+ });
+
+ $(document).bind('keydown', 'space', function(evt) {
+ svgCanvas.spaceKey = keypan = true;
+ evt.preventDefault();
+ }).bind('keyup', 'space', function(evt) {
+ evt.preventDefault();
+ svgCanvas.spaceKey = keypan = false;
+ }).bind('keydown', 'shift', function(evt) {
+ if(svgCanvas.getMode() === 'zoom') {
+ workarea.css('cursor', zoomOutIcon);
+ }
+ }).bind('keyup', 'shift', function(evt) {
+ if(svgCanvas.getMode() === 'zoom') {
+ workarea.css('cursor', zoomInIcon);
+ }
+ })
+ }());
+
+
+ function setStrokeOpt(opt, changeElem) {
+ var id = opt.id;
+ var bits = id.split('_');
+ var pre = bits[0];
+ var val = bits[1];
+
+ if(changeElem) {
+ svgCanvas.setStrokeAttr('stroke-' + pre, val);
+ }
+ operaRepaint();
+ setIcon('#cur_' + pre , id, 20);
+ $(opt).addClass('current').siblings().removeClass('current');
+ }
+
+ (function() {
+ var button = $('#main_icon');
+ var overlay = $('#main_icon span');
+ var list = $('#main_menu');
+ var on_button = false;
+ var height = 0;
+ var js_hover = true;
+ var set_click = false;
+
+ var hideMenu = function() {
+ list.fadeOut(200);
+ };
+
+ $(window).mouseup(function(evt) {
+ if(!on_button) {
+ button.removeClass('buttondown');
+ // do not hide if it was the file input as that input needs to be visible
+ // for its change event to fire
+ if (evt.target.tagName != "INPUT") {
+ list.fadeOut(200);
+ } else if(!set_click) {
+ set_click = true;
+ $(evt.target).click(function() {
+ list.css('margin-left','-9999px').show();
+ });
+ }
+ }
+ on_button = false;
+ }).mousedown(function(evt) {
+// $(".contextMenu").hide();
+// console.log('cm', $(evt.target).closest('.contextMenu'));
+
+ var islib = $(evt.target).closest('div.tools_flyout, .contextMenu').length;
+ if(!islib) $('.tools_flyout:visible,.contextMenu').fadeOut(250);
+ });
+
+ overlay.bind('mousedown',function() {
+ if (!button.hasClass('buttondown')) {
+ button.addClass('buttondown').removeClass('buttonup')
+ // Margin must be reset in case it was changed before;
+ list.css('margin-left',0).show();
+ if(!height) {
+ height = list.height();
+ }
+ // Using custom animation as slideDown has annoying "bounce effect"
+ list.css('height',0).animate({
+ 'height': height
+ },200);
+ on_button = true;
+ return false;
+ } else {
+ button.removeClass('buttondown').addClass('buttonup');
+ list.fadeOut(200);
+ }
+ }).hover(function() {
+ on_button = true;
+ }).mouseout(function() {
+ on_button = false;
+ });
+
+ var list_items = $('#main_menu li');
+
+ // Check if JS method of hovering needs to be used (Webkit bug)
+ list_items.mouseover(function() {
+ js_hover = ($(this).css('background-color') == 'rgba(0, 0, 0, 0)');
+
+ list_items.unbind('mouseover');
+ if(js_hover) {
+ list_items.mouseover(function() {
+ this.style.backgroundColor = '#FFC';
+ }).mouseout(function() {
+ this.style.backgroundColor = 'transparent';
+ return true;
+ });
+ }
+ });
+ }());
+ // Made public for UI customization.
+ // TODO: Group UI functions into a public svgEditor.ui interface.
+ Editor.addDropDown = function(elem, callback, dropUp) {
+ if ($(elem).length == 0) return; // Quit if called on non-existant element
+ var button = $(elem).find('button');
+
+ var list = $(elem).find('ul').attr('id', $(elem)[0].id + '-list');
+
+ if(!dropUp) {
+ // Move list to place where it can overflow container
+ $('#option_lists').append(list);
+ }
+
+ var on_button = false;
+ if(dropUp) {
+ $(elem).addClass('dropup');
+ }
+
+ list.find('li').bind('mouseup', callback);
+
+ $(window).mouseup(function(evt) {
+ if(!on_button) {
+ button.removeClass('down');
+ list.hide();
+ }
+ on_button = false;
+ });
+
+ button.bind('mousedown',function() {
+ if (!button.hasClass('down')) {
+ button.addClass('down');
+
+ if(!dropUp) {
+ var pos = $(elem).position();
+ list.css({
+ top: pos.top + 24,
+ left: pos.left - 10
+ });
+ }
+ list.show();
+
+ on_button = true;
+ } else {
+ button.removeClass('down');
+ list.hide();
+ }
+ }).hover(function() {
+ on_button = true;
+ }).mouseout(function() {
+ on_button = false;
+ });
+ }
+
+ // TODO: Combine this with addDropDown or find other way to optimize
+ var addAltDropDown = function(elem, list, callback, opts) {
+ var button = $(elem);
+ var list = $(list);
+ var on_button = false;
+ var dropUp = opts.dropUp;
+ if(dropUp) {
+ $(elem).addClass('dropup');
+ }
+ list.find('li').bind('mouseup', function() {
+ if(opts.seticon) {
+ setIcon('#cur_' + button[0].id , $(this).children());
+ $(this).addClass('current').siblings().removeClass('current');
+ }
+ callback.apply(this, arguments);
+
+ });
+
+ $(window).mouseup(function(evt) {
+ if(!on_button) {
+ button.removeClass('down');
+ list.hide();
+ list.css({top:0, left:0});
+ }
+ on_button = false;
+ });
+
+ var height = list.height();
+ $(elem).bind('mousedown',function() {
+ var off = $(elem).offset();
+ if(dropUp) {
+ off.top -= list.height();
+ off.left += 8;
+ } else {
+ off.top += $(elem).height();
+ }
+ $(list).offset(off);
+
+ if (!button.hasClass('down')) {
+ button.addClass('down');
+ list.show();
+ on_button = true;
+ return false;
+ } else {
+ button.removeClass('down');
+ // CSS position must be reset for Webkit
+ list.hide();
+ list.css({top:0, left:0});
+ }
+ }).hover(function() {
+ on_button = true;
+ }).mouseout(function() {
+ on_button = false;
+ });
+
+ if(opts.multiclick) {
+ list.mousedown(function() {
+ on_button = true;
+ });
+ }
+ }
+
+ Editor.addDropDown('#font_family_dropdown', function() {
+ var fam = $(this).text();
+ $('#font_family').val($(this).text()).change();
+ });
+
+ Editor.addDropDown('#opacity_dropdown', function() {
+ if($(this).find('div').length) return;
+ var perc = parseInt($(this).text().split('%')[0]);
+ changeOpacity(false, perc);
+ }, true);
+
+ // For slider usage, see: http://jqueryui.com/demos/slider/
+ $("#opac_slider").slider({
+ start: function() {
+ $('#opacity_dropdown li:not(.special)').hide();
+ },
+ stop: function() {
+ $('#opacity_dropdown li').show();
+ $(window).mouseup();
+ },
+ slide: function(evt, ui){
+ changeOpacity(ui);
+ }
+ });
+
+ Editor.addDropDown('#blur_dropdown', $.noop);
+
+ var slideStart = false;
+
+ $("#blur_slider").slider({
+ max: 10,
+ step: .1,
+ stop: function(evt, ui) {
+ slideStart = false;
+ changeBlur(ui);
+ $('#blur_dropdown li').show();
+ $(window).mouseup();
+ },
+ start: function() {
+ slideStart = true;
+ },
+ slide: function(evt, ui){
+ changeBlur(ui, null, slideStart);
+ }
+ });
+
+
+ Editor.addDropDown('#zoom_dropdown', function() {
+ var item = $(this);
+ var val = item.attr('data-val');
+ if(val) {
+ zoomChanged(window, val);
+ } else {
+ changeZoom({value:parseInt(item.text())});
+ }
+ }, true);
+
+ addAltDropDown('#stroke_linecap', '#linecap_opts', function() {
+ setStrokeOpt(this, true);
+ }, {dropUp: true});
+
+ addAltDropDown('#stroke_linejoin', '#linejoin_opts', function() {
+ setStrokeOpt(this, true);
+ }, {dropUp: true});
+
+ addAltDropDown('#tool_position', '#position_opts', function() {
+ var letter = this.id.replace('tool_pos','').charAt(0);
+ svgCanvas.alignSelectedElements(letter, 'page');
+ }, {multiclick: true});
+
+ /*
+
+ When a flyout icon is selected
+ (if flyout) {
+ - Change the icon
+ - Make pressing the button run its stuff
+ }
+ - Run its stuff
+
+ When its shortcut key is pressed
+ - If not current in list, do as above
+ , else:
+ - Just run its stuff
+
+ */
+
+ // Unfocus text input when workarea is mousedowned.
+ (function() {
+ var inp;
+
+ var unfocus = function() {
+ $(inp).blur();
+ }
+
+ $('#svg_editor').find('button, select, input:not(#text)').focus(function() {
+ inp = this;
+ ui_context = 'toolbars';
+ workarea.mousedown(unfocus);
+ }).blur(function() {
+ ui_context = 'canvas';
+ workarea.unbind('mousedown', unfocus);
+ // Go back to selecting text if in textedit mode
+ if(svgCanvas.getMode() == 'textedit') {
+ $('#text').focus();
+ }
+ });
+
+ }());
+
+ var clickSelect = function() {
+ if (toolButtonClick('#tool_select')) {
+ svgCanvas.setMode('select');
+ $('#styleoverrides').text('#svgcanvas svg *{cursor:move;pointer-events:all}, #svgcanvas svg{cursor:default}');
+ }
+ };
+
+ var clickFHPath = function() {
+ if (toolButtonClick('#tool_fhpath')) {
+ svgCanvas.setMode('fhpath');
+ }
+ };
+
+ var clickLine = function() {
+ if (toolButtonClick('#tool_line')) {
+ svgCanvas.setMode('line');
+ }
+ };
+
+ var clickSquare = function(){
+ if (toolButtonClick('#tool_square')) {
+ svgCanvas.setMode('square');
+ }
+ };
+
+ var clickRect = function(){
+ if (toolButtonClick('#tool_rect')) {
+ svgCanvas.setMode('rect');
+ }
+ };
+
+ var clickFHRect = function(){
+ if (toolButtonClick('#tool_fhrect')) {
+ svgCanvas.setMode('fhrect');
+ }
+ };
+
+ var clickCircle = function(){
+ if (toolButtonClick('#tool_circle')) {
+ svgCanvas.setMode('circle');
+ }
+ };
+
+ var clickEllipse = function(){
+ if (toolButtonClick('#tool_ellipse')) {
+ svgCanvas.setMode('ellipse');
+ }
+ };
+
+ var clickFHEllipse = function(){
+ if (toolButtonClick('#tool_fhellipse')) {
+ svgCanvas.setMode('fhellipse');
+ }
+ };
+
+ var clickImage = function(){
+ if (toolButtonClick('#tool_image')) {
+ svgCanvas.setMode('image');
+ }
+ };
+
+ var clickZoom = function(){
+ if (toolButtonClick('#tool_zoom')) {
+ svgCanvas.setMode('zoom');
+ workarea.css('cursor', zoomInIcon);
+ }
+ };
+
+ var dblclickZoom = function(){
+ if (toolButtonClick('#tool_zoom')) {
+ zoomImage();
+ setSelectMode();
+ }
+ };
+
+ var clickText = function(){
+ if (toolButtonClick('#tool_text')) {
+ svgCanvas.setMode('text');
+ }
+ };
+
+ var clickPath = function(){
+ if (toolButtonClick('#tool_path')) {
+ svgCanvas.setMode('path');
+ }
+ };
+
+ // Delete is a contextual tool that only appears in the ribbon if
+ // an element has been selected
+ var deleteSelected = function() {
+ if (selectedElement != null || multiselected) {
+ svgCanvas.deleteSelectedElements();
+ }
+ };
+
+ var cutSelected = function() {
+ if (selectedElement != null || multiselected) {
+ svgCanvas.cutSelectedElements();
+ }
+ };
+
+ var copySelected = function() {
+ if (selectedElement != null || multiselected) {
+ svgCanvas.copySelectedElements();
+ }
+ };
+
+ var pasteInCenter = function() {
+ var zoom = svgCanvas.getZoom();
+
+ var x = (workarea[0].scrollLeft + workarea.width()/2)/zoom - svgCanvas.contentW;
+ var y = (workarea[0].scrollTop + workarea.height()/2)/zoom - svgCanvas.contentH;
+ svgCanvas.pasteElements('point', x, y);
+ }
+
+ var moveToTopSelected = function() {
+ if (selectedElement != null) {
+ svgCanvas.moveToTopSelectedElement();
+ }
+ };
+
+ var moveToBottomSelected = function() {
+ if (selectedElement != null) {
+ svgCanvas.moveToBottomSelectedElement();
+ }
+ };
+
+ var moveUpDownSelected = function(dir) {
+ if (selectedElement != null) {
+ svgCanvas.moveUpDownSelected(dir);
+ }
+ };
+
+ var convertToPath = function() {
+ if (selectedElement != null) {
+ svgCanvas.convertToPath();
+ }
+ }
+
+ var reorientPath = function() {
+ if (selectedElement != null) {
+ path.reorient();
+ }
+ }
+
+ var makeHyperlink = function() {
+ if (selectedElement != null || multiselected) {
+ $.prompt(uiStrings.notification.enterNewLinkURL, "http://", function(url) {
+ if(url) svgCanvas.makeHyperlink(url);
+ });
+ }
+ }
+
+ var moveSelected = function(dx,dy) {
+ if (selectedElement != null || multiselected) {
+ if(curConfig.gridSnapping) {
+ // Use grid snap value regardless of zoom level
+ var multi = svgCanvas.getZoom() * curConfig.snappingStep;
+ dx *= multi;
+ dy *= multi;
+ }
+ svgCanvas.moveSelectedElements(dx,dy);
+ }
+ };
+
+ var linkControlPoints = function() {
+ var linked = !$('#tool_node_link').hasClass('push_button_pressed');
+ if (linked)
+ $('#tool_node_link').addClass('push_button_pressed').removeClass('tool_button');
+ else
+ $('#tool_node_link').removeClass('push_button_pressed').addClass('tool_button');
+
+ path.linkControlPoints(linked);
+ }
+
+ var clonePathNode = function() {
+ if (path.getNodePoint()) {
+ path.clonePathNode();
+ }
+ };
+
+ var deletePathNode = function() {
+ if (path.getNodePoint()) {
+ path.deletePathNode();
+ }
+ };
+
+ var addSubPath = function() {
+ var button = $('#tool_add_subpath');
+ var sp = !button.hasClass('push_button_pressed');
+ if (sp) {
+ button.addClass('push_button_pressed').removeClass('tool_button');
+ } else {
+ button.removeClass('push_button_pressed').addClass('tool_button');
+ }
+
+ path.addSubPath(sp);
+
+ };
+
+ var opencloseSubPath = function() {
+ path.opencloseSubPath();
+ }
+
+ var selectNext = function() {
+ svgCanvas.cycleElement(1);
+ };
+
+ var selectPrev = function() {
+ svgCanvas.cycleElement(0);
+ };
+
+ var rotateSelected = function(cw,step) {
+ if (selectedElement == null || multiselected) return;
+ if(!cw) step *= -1;
+ var new_angle = $('#angle').val()*1 + step;
+ svgCanvas.setRotationAngle(new_angle);
+ updateContextPanel();
+ };
+
+ var clickClear = function(){
+ var dims = curConfig.dimensions;
+ $.confirm(uiStrings.notification.QwantToClear, function(ok) {
+ if(!ok) return;
+ setSelectMode();
+ svgCanvas.clear();
+ svgCanvas.setResolution(dims[0], dims[1]);
+ updateCanvas(true);
+ zoomImage();
+ populateLayers();
+ updateContextPanel();
+ prepPaints();
+ svgCanvas.runExtensions('onNewDocument');
+ });
+ };
+
+ var clickBold = function(){
+ svgCanvas.setBold( !svgCanvas.getBold() );
+ updateContextPanel();
+ return false;
+ };
+
+ var clickItalic = function(){
+ svgCanvas.setItalic( !svgCanvas.getItalic() );
+ updateContextPanel();
+ return false;
+ };
+
+ var clickSave = function(){
+ // In the future, more options can be provided here
+ var saveOpts = {
+ 'images': curPrefs.img_save,
+ 'round_digits': 6
+ }
+ svgCanvas.save(saveOpts);
+ };
+
+ var clickExport = function() {
+ // Open placeholder window (prevents popup)
+ if(!customHandlers.pngsave) {
+ var str = uiStrings.notification.loadingImage;
+ exportWindow = window.open("data:text/html;charset=utf-8,<title>" + str + "<\/title><h1>" + str + "<\/h1>");
+ }
+
+ if(window.canvg) {
+ svgCanvas.rasterExport();
+ } else {
+ $.getScript('canvg/rgbcolor.js', function() {
+ $.getScript('canvg/canvg.js', function() {
+ svgCanvas.rasterExport();
+ });
+ });
+ }
+ }
+
+ // by default, svgCanvas.open() is a no-op.
+ // it is up to an extension mechanism (opera widget, etc)
+ // to call setCustomHandlers() which will make it do something
+ var clickOpen = function(){
+ svgCanvas.open();
+ };
+ var clickImport = function(){
+ };
+
+ var clickUndo = function(){
+ if (undoMgr.getUndoStackSize() > 0) {
+ undoMgr.undo();
+ populateLayers();
+ }
+ };
+
+ var clickRedo = function(){
+ if (undoMgr.getRedoStackSize() > 0) {
+ undoMgr.redo();
+ populateLayers();
+ }
+ };
+
+ var clickGroup = function(){
+ // group
+ if (multiselected) {
+ svgCanvas.groupSelectedElements();
+ }
+ // ungroup
+ else if(selectedElement){
+ svgCanvas.ungroupSelectedElement();
+ }
+ };
+
+ var clickClone = function(){
+ svgCanvas.cloneSelectedElements(20,20);
+ };
+
+ var clickAlign = function() {
+ var letter = this.id.replace('tool_align','').charAt(0);
+ svgCanvas.alignSelectedElements(letter, $('#align_relative_to').val());
+ };
+
+ var zoomImage = function(multiplier) {
+ var res = svgCanvas.getResolution();
+ multiplier = multiplier?res.zoom * multiplier:1;
+ // setResolution(res.w * multiplier, res.h * multiplier, true);
+ $('#zoom').val(multiplier * 100);
+ svgCanvas.setZoom(multiplier);
+ zoomDone();
+ updateCanvas(true);
+ };
+
+ var zoomDone = function() {
+ // updateBgImage();
+ updateWireFrame();
+ //updateCanvas(); // necessary?
+ }
+
+ var clickWireframe = function() {
+ var wf = !$('#tool_wireframe').hasClass('push_button_pressed');
+ if (wf)
+ $('#tool_wireframe').addClass('push_button_pressed').removeClass('tool_button');
+ else
+ $('#tool_wireframe').removeClass('push_button_pressed').addClass('tool_button');
+ workarea.toggleClass('wireframe');
+
+ if(supportsNonSS) return;
+ var wf_rules = $('#wireframe_rules');
+ if(!wf_rules.length) {
+ wf_rules = $('<style id="wireframe_rules"><\/style>').appendTo('head');
+ } else {
+ wf_rules.empty();
+ }
+
+ updateWireFrame();
+ }
+
+ var updateWireFrame = function() {
+ // Test support
+ if(supportsNonSS) return;
+
+ var rule = "#workarea.wireframe #svgcontent * { stroke-width: " + 1/svgCanvas.getZoom() + "px; }";
+ $('#wireframe_rules').text(workarea.hasClass('wireframe') ? rule : "");
+ }
+
+ var showSourceEditor = function(e, forSaving){
+ if (editingsource) return;
+ editingsource = true;
+
+ $('#save_output_btns').toggle(!!forSaving);
+ $('#tool_source_back').toggle(!forSaving);
+
+ var str = orig_source = svgCanvas.getSvgString();
+ $('#svg_source_textarea').val(str);
+ $('#svg_source_editor').fadeIn();
+ properlySourceSizeTextArea();
+ $('#svg_source_textarea').focus();
+ };
+
+ $('#svg_docprops_container, #svg_prefs_container').draggable({cancel:'button,fieldset', containment: 'window'});
+
+ var showDocProperties = function(){
+ if (docprops) return;
+ docprops = true;
+
+ // This selects the correct radio button by using the array notation
+ $('#image_save_opts input').val([curPrefs.img_save]);
+
+ // update resolution option with actual resolution
+ var res = svgCanvas.getResolution();
+ if(curConfig.baseUnit !== "px") {
+ res.w = svgedit.units.convertUnit(res.w) + curConfig.baseUnit;
+ res.h = svgedit.units.convertUnit(res.h) + curConfig.baseUnit;
+ }
+
+ $('#canvas_width').val(res.w);
+ $('#canvas_height').val(res.h);
+ $('#canvas_title').val(svgCanvas.getDocumentTitle());
+
+ $('#svg_docprops').show();
+ };
+
+
+ var showPreferences = function(){
+ if (preferences) return;
+ preferences = true;
+ $('#main_menu').hide();
+
+ // Update background color with current one
+ var blocks = $('#bg_blocks div');
+ var cur_bg = 'cur_background';
+ var canvas_bg = $.pref('bkgd_color');
+ var url = $.pref('bkgd_url');
+ // if(url) url = url[1];
+ blocks.each(function() {
+ var blk = $(this);
+ var is_bg = blk.css('background-color') == canvas_bg;
+ blk.toggleClass(cur_bg, is_bg);
+ if(is_bg) $('#canvas_bg_url').removeClass(cur_bg);
+ });
+ if(!canvas_bg) blocks.eq(0).addClass(cur_bg);
+ if(url) {
+ $('#canvas_bg_url').val(url);
+ }
+ $('grid_snapping_step').attr('value', curConfig.snappingStep);
+ if (curConfig.gridSnapping == true) {
+ $('#grid_snapping_on').attr('checked', 'checked');
+ } else {
+ $('#grid_snapping_on').removeAttr('checked');
+ }
+
+ $('#svg_prefs').show();
+ };
+
+ var properlySourceSizeTextArea = function(){
+ // TODO: remove magic numbers here and get values from CSS
+ var height = $('#svg_source_container').height() - 80;
+ $('#svg_source_textarea').css('height', height);
+ };
+
+ var saveSourceEditor = function(){
+ if (!editingsource) return;
+
+ var saveChanges = function() {
+ svgCanvas.clearSelection();
+ hideSourceEditor();
+ zoomImage();
+ populateLayers();
+ updateTitle();
+ prepPaints();
+ }
+
+ if (!svgCanvas.setSvgString($('#svg_source_textarea').val())) {
+ $.confirm(uiStrings.notification.QerrorsRevertToSource, function(ok) {
+ if(!ok) return false;
+ saveChanges();
+ });
+ } else {
+ saveChanges();
+ }
+ setSelectMode();
+ };
+
+ var updateTitle = function(title) {
+ title = title || svgCanvas.getDocumentTitle();
+ var new_title = orig_title + (title?': ' + title:'');
+
+ // Remove title update with current context info, isn't really necessary
+// if(cur_context) {
+// new_title = new_title + cur_context;
+// }
+ $('title:first').text(new_title);
+ }
+
+ var saveDocProperties = function(){
+ // set title
+ var new_title = $('#canvas_title').val();
+ updateTitle(new_title);
+ svgCanvas.setDocumentTitle(new_title);
+
+ // update resolution
+ var width = $('#canvas_width'), w = width.val();
+ var height = $('#canvas_height'), h = height.val();
+
+ if(w != "fit" && !svgedit.units.isValidUnit('width', w)) {
+ $.alert(uiStrings.notification.invalidAttrValGiven);
+ width.parent().addClass('error');
+ return false;
+ }
+
+ width.parent().removeClass('error');
+
+ if(h != "fit" && !svgedit.units.isValidUnit('height', h)) {
+ $.alert(uiStrings.notification.invalidAttrValGiven);
+ height.parent().addClass('error');
+ return false;
+ }
+
+ height.parent().removeClass('error');
+
+ if(!svgCanvas.setResolution(w, h)) {
+ $.alert(uiStrings.notification.noContentToFitTo);
+ return false;
+ }
+
+ // set image save option
+ curPrefs.img_save = $('#image_save_opts :checked').val();
+ $.pref('img_save',curPrefs.img_save);
+ updateCanvas();
+ hideDocProperties();
+ };
+
+ var savePreferences = function() {
+ // set background
+ var color = $('#bg_blocks div.cur_background').css('background-color') || '#FFF';
+ setBackground(color, $('#canvas_bg_url').val());
+
+ // set language
+ var lang = $('#lang_select').val();
+ if(lang != curPrefs.lang) {
+ Editor.putLocale(lang);
+ }
+
+ // set icon size
+ setIconSize($('#iconsize').val());
+
+ // set grid setting
+ curConfig.gridSnapping = $('#grid_snapping_on')[0].checked;
+ curConfig.snappingStep = $('#grid_snapping_step').val();
+ curConfig.showRulers = $('#show_rulers')[0].checked;
+
+ $('#rulers').toggle(curConfig.showRulers);
+ if(curConfig.showRulers) updateRulers();
+ curConfig.baseUnit = $('#base_unit').val();
+
+ svgCanvas.setConfig(curConfig);
+
+ updateCanvas();
+ hidePreferences();
+ }
+
+ function setBackground(color, url) {
+// if(color == curPrefs.bkgd_color && url == curPrefs.bkgd_url) return;
+ $.pref('bkgd_color', color);
+ $.pref('bkgd_url', url);
+
+ // This should be done in svgcanvas.js for the borderRect fill
+ svgCanvas.setBackground(color, url);
+ }
+
+ var setIcon = Editor.setIcon = function(elem, icon_id, forcedSize) {
+ var icon = (typeof icon_id === 'string') ? $.getSvgIcon(icon_id, true) : icon_id.clone();
+ if(!icon) {
+ console.log('NOTE: Icon image missing: ' + icon_id);
+ return;
+ }
+
+ $(elem).empty().append(icon);
+ }
+
+ var ua_prefix;
+ (ua_prefix = function() {
+ var regex = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/;
+ var someScript = document.getElementsByTagName('script')[0];
+ for(var prop in someScript.style) {
+ if(regex.test(prop)) {
+ // test is faster than match, so it's better to perform
+ // that on the lot and match only when necessary
+ return prop.match(regex)[0];
+ }
+ }
+
+ // Nothing found so far?
+ if('WebkitOpacity' in someScript.style) return 'Webkit';
+ if('KhtmlOpacity' in someScript.style) return 'Khtml';
+
+ return '';
+ }());
+
+ var scaleElements = function(elems, scale) {
+ var prefix = '-' + ua_prefix.toLowerCase() + '-';
+
+ var sides = ['top', 'left', 'bottom', 'right'];
+
+ elems.each(function() {
+// console.log('go', scale);
+
+ // Handled in CSS
+ // this.style[ua_prefix + 'Transform'] = 'scale(' + scale + ')';
+
+ var el = $(this);
+
+ var w = el.outerWidth() * (scale - 1);
+ var h = el.outerHeight() * (scale - 1);
+ var margins = {};
+
+ for(var i = 0; i < 4; i++) {
+ var s = sides[i];
+
+ var cur = el.data('orig_margin-' + s);
+ if(cur == null) {
+ cur = parseInt(el.css('margin-' + s));
+ // Cache the original margin
+ el.data('orig_margin-' + s, cur);
+ }
+ var val = cur * scale;
+ if(s === 'right') {
+ val += w;
+ } else if(s === 'bottom') {
+ val += h;
+ }
+
+ el.css('margin-' + s, val);
+// el.css('outline', '1px solid red');
+ }
+ });
+ }
+
+ var setIconSize = Editor.setIconSize = function(size, force) {
+ if(size == curPrefs.size && !force) return;
+// return;
+// var elems = $('.tool_button, .push_button, .tool_button_current, .disabled, .icon_label, #url_notice, #tool_open');
+ console.log('size', size);
+
+ var sel_toscale = '#tools_top .toolset, #editor_panel > *, #history_panel > *,\
+ #main_button, #tools_left > *, #path_node_panel > *, #multiselected_panel > *,\
+ #g_panel > *, #tool_font_size > *, .tools_flyout';
+
+ var elems = $(sel_toscale);
+
+ var scale = 1;
+
+ if(typeof size == 'number') {
+ scale = size;
+ } else {
+ var icon_sizes = { s:.75, m:1, l:1.25, xl:1.5 };
+ scale = icon_sizes[size];
+ }
+
+ Editor.tool_scale = tool_scale = scale;
+
+ setFlyoutPositions();
+ // $('.tools_flyout').each(function() {
+// var pos = $(this).position();
+// console.log($(this), pos.left+(34 * scale));
+// $(this).css({'left': pos.left+(34 * scale), 'top': pos.top+(77 * scale)});
+// console.log('l', $(this).css('left'));
+// });
+
+// var scale = .75;//0.75;
+
+ var hidden_ps = elems.parents(':hidden');
+ hidden_ps.css('visibility', 'hidden').show();
+ scaleElements(elems, scale);
+ hidden_ps.css('visibility', 'visible').hide();
+// console.timeEnd('elems');
+// return;
+
+ $.pref('iconsize', size);
+ $('#iconsize').val(size);
+
+
+ // Change icon size
+// $('.tool_button, .push_button, .tool_button_current, .disabled, .icon_label, #url_notice, #tool_open')
+// .find('> svg, > img').each(function() {
+// this.setAttribute('width',size_num);
+// this.setAttribute('height',size_num);
+// });
+//
+// $.resizeSvgIcons({
+// '.flyout_arrow_horiz > svg, .flyout_arrow_horiz > img': size_num / 5,
+// '#logo > svg, #logo > img': size_num * 1.3,
+// '#tools_bottom .icon_label > *': (size_num === 16 ? 18 : size_num * .75)
+// });
+// if(size != 's') {
+// $.resizeSvgIcons({'#layerbuttons svg, #layerbuttons img': size_num * .6});
+// }
+
+ // Note that all rules will be prefixed with '#svg_editor' when parsed
+ var cssResizeRules = {
+// ".tool_button,\
+// .push_button,\
+// .tool_button_current,\
+// .push_button_pressed,\
+// .disabled,\
+// .icon_label,\
+// .tools_flyout .tool_button": {
+// 'width': {s: '16px', l: '32px', xl: '48px'},
+// 'height': {s: '16px', l: '32px', xl: '48px'},
+// 'padding': {s: '1px', l: '2px', xl: '3px'}
+// },
+// ".tool_sep": {
+// 'height': {s: '16px', l: '32px', xl: '48px'},
+// 'margin': {s: '2px 2px', l: '2px 5px', xl: '2px 8px'}
+// },
+// "#main_icon": {
+// 'width': {s: '31px', l: '53px', xl: '75px'},
+// 'height': {s: '22px', l: '42px', xl: '64px'}
+// },
+ "#tools_top": {
+ 'left': 50,
+ 'height': 72
+ },
+ "#tools_left": {
+ 'width': 31,
+ 'top': 74
+ },
+ "div#workarea": {
+ 'left': 38,
+ 'top': 74
+ }
+// "#tools_bottom": {
+// 'left': {s: '27px', l: '46px', xl: '65px'},
+// 'height': {s: '58px', l: '98px', xl: '145px'}
+// },
+// "#color_tools": {
+// 'border-spacing': {s: '0 1px'},
+// 'margin-top': {s: '-1px'}
+// },
+// "#color_tools .icon_label": {
+// 'width': {l:'43px', xl: '60px'}
+// },
+// ".color_tool": {
+// 'height': {s: '20px'}
+// },
+// "#tool_opacity": {
+// 'top': {s: '1px'},
+// 'height': {s: 'auto', l:'auto', xl:'auto'}
+// },
+// "#tools_top input, #tools_bottom input": {
+// 'margin-top': {s: '2px', l: '4px', xl: '5px'},
+// 'height': {s: 'auto', l: 'auto', xl: 'auto'},
+// 'border': {s: '1px solid #555', l: 'auto', xl: 'auto'},
+// 'font-size': {s: '.9em', l: '1.2em', xl: '1.4em'}
+// },
+// "#zoom_panel": {
+// 'margin-top': {s: '3px', l: '4px', xl: '5px'}
+// },
+// "#copyright, #tools_bottom .label": {
+// 'font-size': {l: '1.5em', xl: '2em'},
+// 'line-height': {s: '15px'}
+// },
+// "#tools_bottom_2": {
+// 'width': {l: '295px', xl: '355px'},
+// 'top': {s: '4px'}
+// },
+// "#tools_top > div, #tools_top": {
+// 'line-height': {s: '17px', l: '34px', xl: '50px'}
+// },
+// ".dropdown button": {
+// 'height': {s: '18px', l: '34px', xl: '40px'},
+// 'line-height': {s: '18px', l: '34px', xl: '40px'},
+// 'margin-top': {s: '3px'}
+// },
+// "#tools_top label, #tools_bottom label": {
+// 'font-size': {s: '1em', l: '1.5em', xl: '2em'},
+// 'height': {s: '25px', l: '42px', xl: '64px'}
+// },
+// "div.toolset": {
+// 'height': {s: '25px', l: '42px', xl: '64px'}
+// },
+// "#tool_bold, #tool_italic": {
+// 'font-size': {s: '1.5em', l: '3em', xl: '4.5em'}
+// },
+// "#sidepanels": {
+// 'top': {s: '50px', l: '88px', xl: '125px'},
+// 'bottom': {s: '51px', l: '68px', xl: '65px'}
+// },
+// '#layerbuttons': {
+// 'width': {l: '130px', xl: '175px'},
+// 'height': {l: '24px', xl: '30px'}
+// },
+// '#layerlist': {
+// 'width': {l: '128px', xl: '150px'}
+// },
+// '.layer_button': {
+// 'width': {l: '19px', xl: '28px'},
+// 'height': {l: '19px', xl: '28px'}
+// },
+// "input.spin-button": {
+// 'background-image': {l: "url('images/spinbtn_updn_big.png')", xl: "url('images/spinbtn_updn_big.png')"},
+// 'background-position': {l: '100% -5px', xl: '100% -2px'},
+// 'padding-right': {l: '24px', xl: '24px' }
+// },
+// "input.spin-button.up": {
+// 'background-position': {l: '100% -45px', xl: '100% -42px'}
+// },
+// "input.spin-button.down": {
+// 'background-position': {l: '100% -85px', xl: '100% -82px'}
+// },
+// "#position_opts": {
+// 'width': {all: (size_num*4) +'px'}
+// }
+ };
+
+ var rule_elem = $('#tool_size_rules');
+ if(!rule_elem.length) {
+ rule_elem = $('<style id="tool_size_rules"><\/style>').appendTo('head');
+ } else {
+ rule_elem.empty();
+ }
+
+ if(size != 'm') {
+ var style_str = '';
+ $.each(cssResizeRules, function(selector, rules) {
+ selector = '#svg_editor ' + selector.replace(/,/g,', #svg_editor');
+ style_str += selector + '{';
+ $.each(rules, function(prop, values) {
+ if(typeof values === 'number') {
+ var val = (values * scale) + 'px';
+ } else if(values[size] || values.all) {
+ var val = (values[size] || values.all);
+ }
+ style_str += (prop + ':' + val + ';');
+ });
+ style_str += '}';
+ });
+ //this.style[ua_prefix + 'Transform'] = 'scale(' + scale + ')';
+ var prefix = '-' + ua_prefix.toLowerCase() + '-';
+ style_str += (sel_toscale + '{' + prefix + 'transform: scale(' + scale + ');}'
+ + ' #svg_editor div.toolset .toolset {' + prefix + 'transform: scale(1); margin: 1px !important;}' // Hack for markers
+ + ' #svg_editor .ui-slider {' + prefix + 'transform: scale(' + (1/scale) + ');}' // Hack for sliders
+ );
+ rule_elem.text(style_str);
+ }
+
+ setFlyoutPositions();
+ }
+
+ var cancelOverlays = function() {
+ $('#dialog_box').hide();
+ if (!editingsource && !docprops && !preferences) {
+ if(cur_context) {
+ svgCanvas.leaveContext();
+ }
+ return;
+ };
+
+ if (editingsource) {
+ if (orig_source !== $('#svg_source_textarea').val()) {
+ $.confirm(uiStrings.notification.QignoreSourceChanges, function(ok) {
+ if(ok) hideSourceEditor();
+ });
+ } else {
+ hideSourceEditor();
+ }
+ }
+ else if (docprops) {
+ hideDocProperties();
+ } else if (preferences) {
+ hidePreferences();
+ }
+ resetScrollPos();
+ };
+
+ var hideSourceEditor = function(){
+ $('#svg_source_editor').hide();
+ editingsource = false;
+ $('#svg_source_textarea').blur();
+ };
+
+ var hideDocProperties = function(){
+ $('#svg_docprops').hide();
+ $('#canvas_width,#canvas_height').removeAttr('disabled');
+ $('#resolution')[0].selectedIndex = 0;
+ $('#image_save_opts input').val([curPrefs.img_save]);
+ docprops = false;
+ };
+
+ var hidePreferences = function(){
+ $('#svg_prefs').hide();
+ preferences = false;
+ };
+
+ var win_wh = {width:$(window).width(), height:$(window).height()};
+
+ var resetScrollPos = $.noop, curScrollPos;
+
+ // Fix for Issue 781: Drawing area jumps to top-left corner on window resize (IE9)
+ if(svgedit.browser.isIE()) {
+ (function() {
+ resetScrollPos = function() {
+ if(workarea[0].scrollLeft === 0
+ && workarea[0].scrollTop === 0) {
+ workarea[0].scrollLeft = curScrollPos.left;
+ workarea[0].scrollTop = curScrollPos.top;
+ }
+ }
+
+ curScrollPos = {
+ left: workarea[0].scrollLeft,
+ top: workarea[0].scrollTop
+ };
+
+ $(window).resize(resetScrollPos);
+ svgEditor.ready(function() {
+ // TODO: Find better way to detect when to do this to minimize
+ // flickering effect
+ setTimeout(function() {
+ resetScrollPos();
+ }, 500);
+ });
+
+ workarea.scroll(function() {
+ curScrollPos = {
+ left: workarea[0].scrollLeft,
+ top: workarea[0].scrollTop
+ };
+ });
+ }());
+ }
+
+ $(window).resize(function(evt) {
+ if (editingsource) {
+ properlySourceSizeTextArea();
+ }
+
+ $.each(win_wh, function(type, val) {
+ var curval = $(window)[type]();
+ workarea[0]['scroll' + (type==='width'?'Left':'Top')] -= (curval - val)/2;
+ win_wh[type] = curval;
+ });
+ });
+
+ (function() {
+ workarea.scroll(function() {
+ // TODO: jQuery's scrollLeft/Top() wouldn't require a null check
+ if ($('#ruler_x').length != 0) {
+ $('#ruler_x')[0].scrollLeft = workarea[0].scrollLeft;
+ }
+ if ($('#ruler_y').length != 0) {
+ $('#ruler_y')[0].scrollTop = workarea[0].scrollTop;
+ }
+ });
+
+ }());
+
+ $('#url_notice').click(function() {
+ $.alert(this.title);
+ });
+
+ $('#change_image_url').click(promptImgURL);
+
+ function promptImgURL() {
+ var curhref = svgCanvas.getHref(selectedElement);
+ curhref = curhref.indexOf("data:") === 0?"":curhref;
+ $.prompt(uiStrings.notification.enterNewImgURL, curhref, function(url) {
+ if(url) setImageURL(url);
+ });
+ }
+
+ // added these event handlers for all the push buttons so they
+ // behave more like buttons being pressed-in and not images
+ (function() {
+ var toolnames = ['clear','open','save','source','delete','delete_multi','paste','clone','clone_multi','move_top','move_bottom'];
+ var all_tools = '';
+ var cur_class = 'tool_button_current';
+
+ $.each(toolnames, function(i,item) {
+ all_tools += '#tool_' + item + (i==toolnames.length-1?',':'');
+ });
+
+ $(all_tools).mousedown(function() {
+ $(this).addClass(cur_class);
+ }).bind('mousedown mouseout', function() {
+ $(this).removeClass(cur_class);
+ });
+
+ $('#tool_undo, #tool_redo').mousedown(function(){
+ if (!$(this).hasClass('disabled')) $(this).addClass(cur_class);
+ }).bind('mousedown mouseout',function(){
+ $(this).removeClass(cur_class);}
+ );
+ }());
+
+ // switch modifier key in tooltips if mac
+ // NOTE: This code is not used yet until I can figure out how to successfully bind ctrl/meta
+ // in Opera and Chrome
+ if (isMac && !window.opera) {
+ var shortcutButtons = ["tool_clear", "tool_save", "tool_source", "tool_undo", "tool_redo", "tool_clone"];
+ var i = shortcutButtons.length;
+ while (i--) {
+ var button = document.getElementById(shortcutButtons[i]);
+ if (button != null) {
+ var title = button.title;
+ var index = title.indexOf("Ctrl+");
+ button.title = [title.substr(0, index), "Cmd+", title.substr(index + 5)].join('');
+ }
+ }
+ }
+
+ // TODO: go back to the color boxes having white background-color and then setting
+ // background-image to none.png (otherwise partially transparent gradients look weird)
+ var colorPicker = function(elem) {
+ var picker = elem.attr('id') == 'stroke_color' ? 'stroke' : 'fill';
+// var opacity = (picker == 'stroke' ? $('#stroke_opacity') : $('#fill_opacity'));
+ var paint = paintBox[picker].paint;
+ var title = (picker == 'stroke' ? 'Pick a Stroke Paint and Opacity' : 'Pick a Fill Paint and Opacity');
+ var was_none = false;
+ var pos = elem.position();
+ $("#color_picker")
+ .draggable({cancel:'.jGraduate_tabs, .jGraduate_colPick, .jGraduate_gradPick, .jPicker', containment: 'window'})
+ .css(curConfig.colorPickerCSS || {'left': pos.left, 'bottom': 50 - pos.top})
+ .jGraduate(
+ {
+ paint: paint,
+ window: { pickerTitle: title },
+ images: { clientPath: curConfig.jGraduatePath },
+ newstop: 'inverse'
+ },
+ function(p) {
+ paint = new $.jGraduate.Paint(p);
+
+ paintBox[picker].setPaint(paint);
+ svgCanvas.setPaint(picker, paint);
+
+ $('#color_picker').hide();
+ },
+ function(p) {
+ $('#color_picker').hide();
+ });
+ };
+
+ var updateToolButtonState = function() {
+ var bNoFill = (svgCanvas.getColor('fill') == 'none');
+ var bNoStroke = (svgCanvas.getColor('stroke') == 'none');
+ var buttonsNeedingStroke = [ '#tool_fhpath', '#tool_line' ];
+ var buttonsNeedingFillAndStroke = [ '#tools_rect .tool_button', '#tools_ellipse .tool_button', '#tool_text', '#tool_path'];
+ if (bNoStroke) {
+ for (var index in buttonsNeedingStroke) {
+ var button = buttonsNeedingStroke[index];
+ if ($(button).hasClass('tool_button_current')) {
+ clickSelect();
+ }
+ $(button).addClass('disabled');
+ }
+ }
+ else {
+ for (var index in buttonsNeedingStroke) {
+ var button = buttonsNeedingStroke[index];
+ $(button).removeClass('disabled');
+ }
+ }
+
+ if (bNoStroke && bNoFill) {
+ for (var index in buttonsNeedingFillAndStroke) {
+ var button = buttonsNeedingFillAndStroke[index];
+ if ($(button).hasClass('tool_button_current')) {
+ clickSelect();
+ }
+ $(button).addClass('disabled');
+ }
+ }
+ else {
+ for (var index in buttonsNeedingFillAndStroke) {
+ var button = buttonsNeedingFillAndStroke[index];
+ $(button).removeClass('disabled');
+ }
+ }
+
+ svgCanvas.runExtensions("toolButtonStateUpdate", {
+ nofill: bNoFill,
+ nostroke: bNoStroke
+ });
+
+ // Disable flyouts if all inside are disabled
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ var has_enabled = false;
+ $(this).children().each(function() {
+ if(!$(this).hasClass('disabled')) {
+ has_enabled = true;
+ }
+ });
+ shower.toggleClass('disabled', !has_enabled);
+ });
+
+ operaRepaint();
+ };
+
+
+
+ var PaintBox = function(container, type) {
+ var cur = curConfig[type === 'fill' ? 'initFill' : 'initStroke'];
+
+ // set up gradients to be used for the buttons
+ var svgdocbox = new DOMParser().parseFromString(
+ '<svg xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%"\
+ fill="#' + cur.color + '" opacity="' + cur.opacity + '"/>\
+ <defs><linearGradient id="gradbox_"/></defs></svg>', 'text/xml');
+ var docElem = svgdocbox.documentElement;
+
+ docElem = $(container)[0].appendChild(document.importNode(docElem, true));
+
+ docElem.setAttribute('width',16.5);
+
+ this.rect = docElem.firstChild;
+ this.defs = docElem.getElementsByTagName('defs')[0];
+ this.grad = this.defs.firstChild;
+ this.paint = new $.jGraduate.Paint({solidColor: cur.color});
+ this.type = type;
+
+ this.setPaint = function(paint, apply) {
+ this.paint = paint;
+
+ var fillAttr = "none";
+ var ptype = paint.type;
+ var opac = paint.alpha / 100;
+
+ switch ( ptype ) {
+ case 'solidColor':
+ fillAttr = "#" + paint[ptype];
+ break;
+ case 'linearGradient':
+ case 'radialGradient':
+ this.defs.removeChild(this.grad);
+ this.grad = this.defs.appendChild(paint[ptype]);
+ var id = this.grad.id = 'gradbox_' + this.type;
+ fillAttr = "url(#" + id + ')';
+ }
+
+ this.rect.setAttribute('fill', fillAttr);
+ this.rect.setAttribute('opacity', opac);
+
+ if(apply) {
+ svgCanvas.setColor(this.type, paintColor, true);
+ svgCanvas.setPaintOpacity(this.type, paintOpacity, true);
+ }
+ }
+
+ this.update = function(apply) {
+ if(!selectedElement) return;
+ var type = this.type;
+
+ switch ( selectedElement.tagName ) {
+ case 'use':
+ case 'image':
+ case 'foreignObject':
+ // These elements don't have fill or stroke, so don't change
+ // the current value
+ return;
+ case 'g':
+ case 'a':
+ var gPaint = null;
+
+ var childs = selectedElement.getElementsByTagName('*');
+ for(var i = 0, len = childs.length; i < len; i++) {
+ var elem = childs[i];
+ var p = elem.getAttribute(type);
+ if(i === 0) {
+ gPaint = p;
+ } else if(gPaint !== p) {
+ gPaint = null;
+ break;
+ }
+ }
+ if(gPaint === null) {
+ // No common color, don't update anything
+ var paintColor = null;
+ return;
+ }
+ var paintColor = gPaint;
+
+ var paintOpacity = 1;
+ break;
+ default:
+ var paintOpacity = parseFloat(selectedElement.getAttribute(type + "-opacity"));
+ if (isNaN(paintOpacity)) {
+ paintOpacity = 1.0;
+ }
+
+ var defColor = type === "fill" ? "black" : "none";
+ var paintColor = selectedElement.getAttribute(type) || defColor;
+ }
+
+ if(apply) {
+ svgCanvas.setColor(type, paintColor, true);
+ svgCanvas.setPaintOpacity(type, paintOpacity, true);
+ }
+
+ paintOpacity *= 100;
+
+ var paint = getPaint(paintColor, paintOpacity, type);
+ // update the rect inside #fill_color/#stroke_color
+ this.setPaint(paint);
+ }
+
+ this.prep = function() {
+ var ptype = this.paint.type;
+
+ switch ( ptype ) {
+ case 'linearGradient':
+ case 'radialGradient':
+ var paint = new $.jGraduate.Paint({copy: this.paint});
+ svgCanvas.setPaint(type, paint);
+ }
+ }
+ };
+
+ paintBox.fill = new PaintBox('#fill_color', 'fill');
+ paintBox.stroke = new PaintBox('#stroke_color', 'stroke');
+
+ $('#stroke_width').val(curConfig.initStroke.width);
+ $('#group_opacity').val(curConfig.initOpacity * 100);
+
+ // Use this SVG elem to test vectorEffect support
+ var test_el = paintBox.fill.rect.cloneNode(false);
+ test_el.setAttribute('style','vector-effect:non-scaling-stroke');
+ var supportsNonSS = (test_el.style.vectorEffect === 'non-scaling-stroke');
+ test_el.removeAttribute('style');
+ var svgdocbox = paintBox.fill.rect.ownerDocument;
+ // Use this to test support for blur element. Seems to work to test support in Webkit
+ var blur_test = svgdocbox.createElementNS('http://www.w3.org/2000/svg', 'feGaussianBlur');
+ if(typeof blur_test.stdDeviationX === "undefined") {
+ $('#tool_blur').hide();
+ }
+ $(blur_test).remove();
+
+ // Test for zoom icon support
+ (function() {
+ var pre = '-' + ua_prefix.toLowerCase() + '-zoom-';
+ var zoom = pre + 'in';
+ workarea.css('cursor', zoom);
+ if(workarea.css('cursor') === zoom) {
+ zoomInIcon = zoom;
+ zoomOutIcon = pre + 'out';
+ }
+ workarea.css('cursor', 'auto');
+ }());
+
+
+
+ // Test for embedImage support (use timeout to not interfere with page load)
+ setTimeout(function() {
+ svgCanvas.embedImage('images/logo.png', function(datauri) {
+ if(!datauri) {
+ // Disable option
+ $('#image_save_opts [value=embed]').attr('disabled','disabled');
+ $('#image_save_opts input').val(['ref']);
+ curPrefs.img_save = 'ref';
+ $('#image_opt_embed').css('color','#666').attr('title',uiStrings.notification.featNotSupported);
+ }
+ });
+ },1000);
+
+ $('#fill_color, #tool_fill .icon_label').click(function(){
+ colorPicker($('#fill_color'));
+ updateToolButtonState();
+ });
+
+ $('#stroke_color, #tool_stroke .icon_label').click(function(){
+ colorPicker($('#stroke_color'));
+ updateToolButtonState();
+ });
+
+ $('#group_opacityLabel').click(function() {
+ $('#opacity_dropdown button').mousedown();
+ $(window).mouseup();
+ });
+
+ $('#zoomLabel').click(function() {
+ $('#zoom_dropdown button').mousedown();
+ $(window).mouseup();
+ });
+
+ $('#tool_move_top').mousedown(function(evt){
+ $('#tools_stacking').show();
+ evt.preventDefault();
+ });
+
+ $('.layer_button').mousedown(function() {
+ $(this).addClass('layer_buttonpressed');
+ }).mouseout(function() {
+ $(this).removeClass('layer_buttonpressed');
+ }).mouseup(function() {
+ $(this).removeClass('layer_buttonpressed');
+ });
+
+ $('.push_button').mousedown(function() {
+ if (!$(this).hasClass('disabled')) {
+ $(this).addClass('push_button_pressed').removeClass('push_button');
+ }
+ }).mouseout(function() {
+ $(this).removeClass('push_button_pressed').addClass('push_button');
+ }).mouseup(function() {
+ $(this).removeClass('push_button_pressed').addClass('push_button');
+ });
+
+ $('#layer_new').click(function() {
+ var i = svgCanvas.getCurrentDrawing().getNumLayers();
+ do {
+ var uniqName = uiStrings.layers.layer + " " + ++i;
+ } while(svgCanvas.getCurrentDrawing().hasLayer(uniqName));
+
+ $.prompt(uiStrings.notification.enterUniqueLayerName,uniqName, function(newName) {
+ if (!newName) return;
+ if (svgCanvas.getCurrentDrawing().hasLayer(newName)) {
+ $.alert(uiStrings.notification.dupeLayerName);
+ return;
+ }
+ svgCanvas.createLayer(newName);
+ updateContextPanel();
+ populateLayers();
+ });
+ });
+
+ function deleteLayer() {
+ if (svgCanvas.deleteCurrentLayer()) {
+ updateContextPanel();
+ populateLayers();
+ // This matches what SvgCanvas does
+ // TODO: make this behavior less brittle (svg-editor should get which
+ // layer is selected from the canvas and then select that one in the UI)
+ $('#layerlist tr.layer').removeClass("layersel");
+ $('#layerlist tr.layer:first').addClass("layersel");
+ }
+ }
+
+ function cloneLayer() {
+ var name = svgCanvas.getCurrentDrawing().getCurrentLayerName() + ' copy';
+
+ $.prompt(uiStrings.notification.enterUniqueLayerName, name, function(newName) {
+ if (!newName) return;
+ if (svgCanvas.getCurrentDrawing().hasLayer(newName)) {
+ $.alert(uiStrings.notification.dupeLayerName);
+ return;
+ }
+ svgCanvas.cloneLayer(newName);
+ updateContextPanel();
+ populateLayers();
+ });
+ }
+
+ function mergeLayer() {
+ if($('#layerlist tr.layersel').index() == svgCanvas.getCurrentDrawing().getNumLayers()-1) return;
+ svgCanvas.mergeLayer();
+ updateContextPanel();
+ populateLayers();
+ }
+
+ function moveLayer(pos) {
+ var curIndex = $('#layerlist tr.layersel').index();
+ var total = svgCanvas.getCurrentDrawing().getNumLayers();
+ if(curIndex > 0 || curIndex < total-1) {
+ curIndex += pos;
+ svgCanvas.setCurrentLayerPosition(total-curIndex-1);
+ populateLayers();
+ }
+ }
+
+ $('#layer_delete').click(deleteLayer);
+
+ $('#layer_up').click(function() {
+ moveLayer(-1);
+ });
+
+ $('#layer_down').click(function() {
+ moveLayer(1);
+ });
+
+ $('#layer_rename').click(function() {
+ var curIndex = $('#layerlist tr.layersel').prevAll().length;
+ var oldName = $('#layerlist tr.layersel td.layername').text();
+ $.prompt(uiStrings.notification.enterNewLayerName,"", function(newName) {
+ if (!newName) return;
+ if (oldName == newName || svgCanvas.getCurrentDrawing().hasLayer(newName)) {
+ $.alert(uiStrings.notification.layerHasThatName);
+ return;
+ }
+
+ svgCanvas.renameCurrentLayer(newName);
+ populateLayers();
+ });
+ });
+
+ var SIDEPANEL_MAXWIDTH = 300;
+ var SIDEPANEL_OPENWIDTH = 150;
+ var sidedrag = -1, sidedragging = false, allowmove = false;
+
+ var resizePanel = function(evt) {
+ if (!allowmove) return;
+ if (sidedrag == -1) return;
+ sidedragging = true;
+ var deltax = sidedrag - evt.pageX;
+
+ var sidepanels = $('#sidepanels');
+ var sidewidth = parseInt(sidepanels.css('width'));
+ if (sidewidth+deltax > SIDEPANEL_MAXWIDTH) {
+ deltax = SIDEPANEL_MAXWIDTH - sidewidth;
+ sidewidth = SIDEPANEL_MAXWIDTH;
+ }
+ else if (sidewidth+deltax < 2) {
+ deltax = 2 - sidewidth;
+ sidewidth = 2;
+ }
+
+ if (deltax == 0) return;
+ sidedrag -= deltax;
+
+ var layerpanel = $('#layerpanel');
+ workarea.css('right', parseInt(workarea.css('right'))+deltax);
+ sidepanels.css('width', parseInt(sidepanels.css('width'))+deltax);
+ layerpanel.css('width', parseInt(layerpanel.css('width'))+deltax);
+ var ruler_x = $('#ruler_x');
+ ruler_x.css('right', parseInt(ruler_x.css('right')) + deltax);
+ }
+
+ $('#sidepanel_handle')
+ .mousedown(function(evt) {
+ sidedrag = evt.pageX;
+ $(window).mousemove(resizePanel);
+ allowmove = false;
+ // Silly hack for Chrome, which always runs mousemove right after mousedown
+ setTimeout(function() {
+ allowmove = true;
+ }, 20);
+ })
+ .mouseup(function(evt) {
+ if (!sidedragging) toggleSidePanel();
+ sidedrag = -1;
+ sidedragging = false;
+ });
+
+ $(window).mouseup(function() {
+ sidedrag = -1;
+ sidedragging = false;
+ $('#svg_editor').unbind('mousemove', resizePanel);
+ });
+
+ // if width is non-zero, then fully close it, otherwise fully open it
+ // the optional close argument forces the side panel closed
+ var toggleSidePanel = function(close){
+ var w = parseInt($('#sidepanels').css('width'));
+ var deltax = (w > 2 || close ? 2 : SIDEPANEL_OPENWIDTH) - w;
+ var sidepanels = $('#sidepanels');
+ var layerpanel = $('#layerpanel');
+ var ruler_x = $('#ruler_x');
+ workarea.css('right', parseInt(workarea.css('right')) + deltax);
+ sidepanels.css('width', parseInt(sidepanels.css('width')) + deltax);
+ layerpanel.css('width', parseInt(layerpanel.css('width')) + deltax);
+ ruler_x.css('right', parseInt(ruler_x.css('right')) + deltax);
+ };
+
+ // this function highlights the layer passed in (by fading out the other layers)
+ // if no layer is passed in, this function restores the other layers
+ var toggleHighlightLayer = function(layerNameToHighlight) {
+ var curNames = new Array(svgCanvas.getCurrentDrawing().getNumLayers());
+ for (var i = 0; i < curNames.length; ++i) { curNames[i] = svgCanvas.getCurrentDrawing().getLayerName(i); }
+
+ if (layerNameToHighlight) {
+ for (var i = 0; i < curNames.length; ++i) {
+ if (curNames[i] != layerNameToHighlight) {
+ svgCanvas.getCurrentDrawing().setLayerOpacity(curNames[i], 0.5);
+ }
+ }
+ }
+ else {
+ for (var i = 0; i < curNames.length; ++i) {
+ svgCanvas.getCurrentDrawing().setLayerOpacity(curNames[i], 1.0);
+ }
+ }
+ };
+
+ var populateLayers = function(){
+ var layerlist = $('#layerlist tbody');
+ var selLayerNames = $('#selLayerNames');
+ layerlist.empty();
+ selLayerNames.empty();
+ var currentLayerName = svgCanvas.getCurrentDrawing().getCurrentLayerName();
+ var layer = svgCanvas.getCurrentDrawing().getNumLayers();
+ var icon = $.getSvgIcon('eye');
+ // we get the layers in the reverse z-order (the layer rendered on top is listed first)
+ while (layer--) {
+ var name = svgCanvas.getCurrentDrawing().getLayerName(layer);
+ // contenteditable=\"true\"
+ var appendstr = "<tr class=\"layer";
+ if (name == currentLayerName) {
+ appendstr += " layersel"
+ }
+ appendstr += "\">";
+
+ if (svgCanvas.getCurrentDrawing().getLayerVisibility(name)) {
+ appendstr += "<td class=\"layervis\"/><td class=\"layername\" >" + name + "</td></tr>";
+ }
+ else {
+ appendstr += "<td class=\"layervis layerinvis\"/><td class=\"layername\" >" + name + "</td></tr>";
+ }
+ layerlist.append(appendstr);
+ selLayerNames.append("<option value=\"" + name + "\">" + name + "</option>");
+ }
+ if(icon !== undefined) {
+ var copy = icon.clone();
+ $('td.layervis',layerlist).append(icon.clone());
+ $.resizeSvgIcons({'td.layervis .svg_icon':14});
+ }
+ // handle selection of layer
+ $('#layerlist td.layername')
+ .mouseup(function(evt){
+ $('#layerlist tr.layer').removeClass("layersel");
+ var row = $(this.parentNode);
+ row.addClass("layersel");
+ svgCanvas.setCurrentLayer(this.textContent);
+ evt.preventDefault();
+ })
+ .mouseover(function(evt){
+ $(this).css({"font-style": "italic", "color":"blue"});
+ toggleHighlightLayer(this.textContent);
+ })
+ .mouseout(function(evt){
+ $(this).css({"font-style": "normal", "color":"black"});
+ toggleHighlightLayer();
+ });
+ $('#layerlist td.layervis').click(function(evt){
+ var row = $(this.parentNode).prevAll().length;
+ var name = $('#layerlist tr.layer:eq(' + row + ') td.layername').text();
+ var vis = $(this).hasClass('layerinvis');
+ svgCanvas.setLayerVisibility(name, vis);
+ if (vis) {
+ $(this).removeClass('layerinvis');
+ }
+ else {
+ $(this).addClass('layerinvis');
+ }
+ });
+
+ // if there were too few rows, let's add a few to make it not so lonely
+ var num = 5 - $('#layerlist tr.layer').size();
+ while (num-- > 0) {
+ // FIXME: there must a better way to do this
+ layerlist.append("<tr><td style=\"color:white\">_</td><td/></tr>");
+ }
+ };
+ populateLayers();
+
+ // function changeResolution(x,y) {
+ // var zoom = svgCanvas.getResolution().zoom;
+ // setResolution(x * zoom, y * zoom);
+ // }
+
+ var centerCanvas = function() {
+ // this centers the canvas vertically in the workarea (horizontal handled in CSS)
+ workarea.css('line-height', workarea.height() + 'px');
+ };
+
+ $(window).bind('load resize', centerCanvas);
+
+ function stepFontSize(elem, step) {
+ var orig_val = elem.value-0;
+ var sug_val = orig_val + step;
+ var increasing = sug_val >= orig_val;
+ if(step === 0) return orig_val;
+
+ if(orig_val >= 24) {
+ if(increasing) {
+ return Math.round(orig_val * 1.1);
+ } else {
+ return Math.round(orig_val / 1.1);
+ }
+ } else if(orig_val <= 1) {
+ if(increasing) {
+ return orig_val * 2;
+ } else {
+ return orig_val / 2;
+ }
+ } else {
+ return sug_val;
+ }
+ }
+
+ function stepZoom(elem, step) {
+ var orig_val = elem.value-0;
+ if(orig_val === 0) return 100;
+ var sug_val = orig_val + step;
+ if(step === 0) return orig_val;
+
+ if(orig_val >= 100) {
+ return sug_val;
+ } else {
+ if(sug_val >= orig_val) {
+ return orig_val * 2;
+ } else {
+ return orig_val / 2;
+ }
+ }
+ }
+
+ // function setResolution(w, h, center) {
+ // updateCanvas();
+ // // w-=0; h-=0;
+ // // $('#svgcanvas').css( { 'width': w, 'height': h } );
+ // // $('#canvas_width').val(w);
+ // // $('#canvas_height').val(h);
+ // //
+ // // if(center) {
+ // // var w_area = workarea;
+ // // var scroll_y = h/2 - w_area.height()/2;
+ // // var scroll_x = w/2 - w_area.width()/2;
+ // // w_area[0].scrollTop = scroll_y;
+ // // w_area[0].scrollLeft = scroll_x;
+ // // }
+ // }
+
+ $('#resolution').change(function(){
+ var wh = $('#canvas_width,#canvas_height');
+ if(!this.selectedIndex) {
+ if($('#canvas_width').val() == 'fit') {
+ wh.removeAttr("disabled").val(100);
+ }
+ } else if(this.value == 'content') {
+ wh.val('fit').attr("disabled","disabled");
+ } else {
+ var dims = this.value.split('x');
+ $('#canvas_width').val(dims[0]);
+ $('#canvas_height').val(dims[1]);
+ wh.removeAttr("disabled");
+ }
+ });
+
+ //Prevent browser from erroneously repopulating fields
+ $('input,select').attr("autocomplete","off");
+
+ // Associate all button actions as well as non-button keyboard shortcuts
+ var Actions = function() {
+ // sel:'selector', fn:function, evt:'event', key:[key, preventDefault, NoDisableInInput]
+ var tool_buttons = [
+ {sel:'#tool_select', fn: clickSelect, evt: 'click', key: ['V', true]},
+ {sel:'#tool_fhpath', fn: clickFHPath, evt: 'click', key: ['Q', true]},
+ {sel:'#tool_line', fn: clickLine, evt: 'click', key: ['L', true]},
+ {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: ['R', true], parent: '#tools_rect', icon: 'rect'},
+ {sel:'#tool_square', fn: clickSquare, evt: 'mouseup', parent: '#tools_rect', icon: 'square'},
+ {sel:'#tool_fhrect', fn: clickFHRect, evt: 'mouseup', parent: '#tools_rect', icon: 'fh_rect'},
+ {sel:'#tool_ellipse', fn: clickEllipse, evt: 'mouseup', key: ['E', true], parent: '#tools_ellipse', icon: 'ellipse'},
+ {sel:'#tool_circle', fn: clickCircle, evt: 'mouseup', parent: '#tools_ellipse', icon: 'circle'},
+ {sel:'#tool_fhellipse', fn: clickFHEllipse, evt: 'mouseup', parent: '#tools_ellipse', icon: 'fh_ellipse'},
+ {sel:'#tool_path', fn: clickPath, evt: 'click', key: ['P', true]},
+ {sel:'#tool_text', fn: clickText, evt: 'click', key: ['T', true]},
+ {sel:'#tool_image', fn: clickImage, evt: 'mouseup'},
+ {sel:'#tool_zoom', fn: clickZoom, evt: 'mouseup', key: ['Z', true]},
+ {sel:'#tool_clear', fn: clickClear, evt: 'mouseup', key: ['N', true]},
+ {sel:'#tool_save', fn: function() { editingsource?saveSourceEditor():clickSave()}, evt: 'mouseup', key: ['S', true]},
+ {sel:'#tool_export', fn: clickExport, evt: 'mouseup'},
+ {sel:'#tool_open', fn: clickOpen, evt: 'mouseup', key: ['O', true]},
+ {sel:'#tool_import', fn: clickImport, evt: 'mouseup'},
+ {sel:'#tool_source', fn: showSourceEditor, evt: 'click', key: ['U', true]},
+ {sel:'#tool_wireframe', fn: clickWireframe, evt: 'click', key: ['F', true]},
+ {sel:'#tool_source_cancel,#svg_source_overlay,#tool_docprops_cancel,#tool_prefs_cancel', fn: cancelOverlays, evt: 'click', key: ['esc', false, false], hidekey: true},
+ {sel:'#tool_source_save', fn: saveSourceEditor, evt: 'click'},
+ {sel:'#tool_docprops_save', fn: saveDocProperties, evt: 'click'},
+ {sel:'#tool_docprops', fn: showDocProperties, evt: 'mouseup'},
+ {sel:'#tool_prefs_save', fn: savePreferences, evt: 'click'},
+ {sel:'#tool_prefs_option', fn: function() {showPreferences();return false}, evt: 'mouseup'},
+ {sel:'#tool_delete,#tool_delete_multi', fn: deleteSelected, evt: 'click', key: ['del/backspace', true]},
+ {sel:'#tool_reorient', fn: reorientPath, evt: 'click'},
+ {sel:'#tool_node_link', fn: linkControlPoints, evt: 'click'},
+ {sel:'#tool_node_clone', fn: clonePathNode, evt: 'click'},
+ {sel:'#tool_node_delete', fn: deletePathNode, evt: 'click'},
+ {sel:'#tool_openclose_path', fn: opencloseSubPath, evt: 'click'},
+ {sel:'#tool_add_subpath', fn: addSubPath, evt: 'click'},
+ {sel:'#tool_move_top', fn: moveToTopSelected, evt: 'click', key: 'ctrl+shift+]'},
+ {sel:'#tool_move_bottom', fn: moveToBottomSelected, evt: 'click', key: 'ctrl+shift+['},
+ {sel:'#tool_topath', fn: convertToPath, evt: 'click'},
+ {sel:'#tool_make_link,#tool_make_link_multi', fn: makeHyperlink, evt: 'click'},
+ {sel:'#tool_undo', fn: clickUndo, evt: 'click', key: ['Z', true]},
+ {sel:'#tool_redo', fn: clickRedo, evt: 'click', key: ['Y', true]},
+ {sel:'#tool_clone,#tool_clone_multi', fn: clickClone, evt: 'click', key: ['D', true]},
+ {sel:'#tool_group', fn: clickGroup, evt: 'click', key: ['G', true]},
+ {sel:'#tool_ungroup', fn: clickGroup, evt: 'click'},
+ {sel:'#tool_unlink_use', fn: clickGroup, evt: 'click'},
+ {sel:'[id^=tool_align]', fn: clickAlign, evt: 'click'},
+ // these two lines are required to make Opera work properly with the flyout mechanism
+ // {sel:'#tools_rect_show', fn: clickRect, evt: 'click'},
+ // {sel:'#tools_ellipse_show', fn: clickEllipse, evt: 'click'},
+ {sel:'#tool_bold', fn: clickBold, evt: 'mousedown'},
+ {sel:'#tool_italic', fn: clickItalic, evt: 'mousedown'},
+ {sel:'#sidepanel_handle', fn: toggleSidePanel, key: ['X']},
+ {sel:'#copy_save_done', fn: cancelOverlays, evt: 'click'},
+
+ // Shortcuts not associated with buttons
+
+ {key: 'ctrl+left', fn: function(){rotateSelected(0,1)}},
+ {key: 'ctrl+right', fn: function(){rotateSelected(1,1)}},
+ {key: 'ctrl+shift+left', fn: function(){rotateSelected(0,5)}},
+ {key: 'ctrl+shift+right', fn: function(){rotateSelected(1,5)}},
+ {key: 'shift+O', fn: selectPrev},
+ {key: 'shift+P', fn: selectNext},
+ {key: [modKey+'up', true], fn: function(){zoomImage(2);}},
+ {key: [modKey+'down', true], fn: function(){zoomImage(.5);}},
+ {key: [modKey+']', true], fn: function(){moveUpDownSelected('Up');}},
+ {key: [modKey+'[', true], fn: function(){moveUpDownSelected('Down');}},
+ {key: ['up', true], fn: function(){moveSelected(0,-1);}},
+ {key: ['down', true], fn: function(){moveSelected(0,1);}},
+ {key: ['left', true], fn: function(){moveSelected(-1,0);}},
+ {key: ['right', true], fn: function(){moveSelected(1,0);}},
+ {key: 'shift+up', fn: function(){moveSelected(0,-10)}},
+ {key: 'shift+down', fn: function(){moveSelected(0,10)}},
+ {key: 'shift+left', fn: function(){moveSelected(-10,0)}},
+ {key: 'shift+right', fn: function(){moveSelected(10,0)}},
+ {key: ['alt+up', true], fn: function(){svgCanvas.cloneSelectedElements(0,-1)}},
+ {key: ['alt+down', true], fn: function(){svgCanvas.cloneSelectedElements(0,1)}},
+ {key: ['alt+left', true], fn: function(){svgCanvas.cloneSelectedElements(-1,0)}},
+ {key: ['alt+right', true], fn: function(){svgCanvas.cloneSelectedElements(1,0)}},
+ {key: ['alt+shift+up', true], fn: function(){svgCanvas.cloneSelectedElements(0,-10)}},
+ {key: ['alt+shift+down', true], fn: function(){svgCanvas.cloneSelectedElements(0,10)}},
+ {key: ['alt+shift+left', true], fn: function(){svgCanvas.cloneSelectedElements(-10,0)}},
+ {key: ['alt+shift+right', true], fn: function(){svgCanvas.cloneSelectedElements(10,0)}},
+ {key: 'A', fn: function(){svgCanvas.selectAllInCurrentLayer();}},
+
+ // Standard shortcuts
+ {key: modKey+'z', fn: clickUndo},
+ {key: modKey + 'shift+z', fn: clickRedo},
+ {key: modKey + 'y', fn: clickRedo},
+
+ {key: modKey+'x', fn: cutSelected},
+ {key: modKey+'c', fn: copySelected},
+ {key: modKey+'v', fn: pasteInCenter}
+
+
+ ];
+
+ // Tooltips not directly associated with a single function
+ var key_assocs = {
+ '4/Shift+4': '#tools_rect_show',
+ '5/Shift+5': '#tools_ellipse_show'
+ };
+
+ return {
+ setAll: function() {
+ var flyouts = {};
+
+ $.each(tool_buttons, function(i, opts) {
+ // Bind function to button
+ if(opts.sel) {
+ var btn = $(opts.sel);
+ if (btn.length == 0) return true; // Skip if markup does not exist
+ if(opts.evt) {
+ btn[opts.evt](opts.fn);
+ }
+
+ // Add to parent flyout menu, if able to be displayed
+ if(opts.parent && $(opts.parent + '_show').length != 0) {
+ var f_h = $(opts.parent);
+ if(!f_h.length) {
+ f_h = makeFlyoutHolder(opts.parent.substr(1));
+ }
+
+ f_h.append(btn);
+
+ if(!$.isArray(flyouts[opts.parent])) {
+ flyouts[opts.parent] = [];
+ }
+ flyouts[opts.parent].push(opts);
+ }
+ }
+
+
+ // Bind function to shortcut key
+ if(opts.key) {
+ // Set shortcut based on options
+ var keyval, shortcut = '', disInInp = true, fn = opts.fn, pd = false;
+ if($.isArray(opts.key)) {
+ keyval = opts.key[0];
+ if(opts.key.length > 1) pd = opts.key[1];
+ if(opts.key.length > 2) disInInp = opts.key[2];
+ } else {
+ keyval = opts.key;
+ }
+ keyval += '';
+
+ $.each(keyval.split('/'), function(i, key) {
+ $(document).bind('keydown', key, function(e) {
+ fn();
+ if(pd) {
+ e.preventDefault();
+ }
+ // Prevent default on ALL keys?
+ return false;
+ });
+ });
+
+ // Put shortcut in title
+ if(opts.sel && !opts.hidekey && btn.attr('title')) {
+ var new_title = btn.attr('title').split('[')[0] + ' (' + keyval + ')';
+ key_assocs[keyval] = opts.sel;
+ // Disregard for menu items
+ if(!btn.parents('#main_menu').length) {
+ btn.attr('title', new_title);
+ }
+ }
+ }
+ });
+
+ // Setup flyouts
+ setupFlyouts(flyouts);
+
+
+ // Misc additional actions
+
+ // Make "return" keypress trigger the change event
+ $('.attr_changer, #image_url').bind('keydown', 'return',
+ function(evt) {$(this).change();evt.preventDefault();}
+ );
+
+ $(window).bind('keydown', 'tab', function(e) {
+ if(ui_context === 'canvas') {
+ e.preventDefault();
+ selectNext();
+ }
+ }).bind('keydown', 'shift+tab', function(e) {
+ if(ui_context === 'canvas') {
+ e.preventDefault();
+ selectPrev();
+ }
+ });
+
+ $('#tool_zoom').dblclick(dblclickZoom);
+ },
+ setTitles: function() {
+ $.each(key_assocs, function(keyval, sel) {
+ var menu = ($(sel).parents('#main_menu').length);
+
+ $(sel).each(function() {
+ if(menu) {
+ var t = $(this).text().split(' [')[0];
+ } else {
+ var t = this.title.split(' [')[0];
+ }
+ var key_str = '';
+ // Shift+Up
+ $.each(keyval.split('/'), function(i, key) {
+ var mod_bits = key.split('+'), mod = '';
+ if(mod_bits.length > 1) {
+ mod = mod_bits[0] + '+';
+ key = mod_bits[1];
+ }
+ key_str += (i?'/':'') + mod + (uiStrings['key_'+key] || key);
+ });
+ if(menu) {
+ this.lastChild.textContent = t +' ['+key_str+']';
+ } else {
+ this.title = t +' ['+key_str+']';
+ }
+ });
+ });
+ },
+ getButtonData: function(sel) {
+ var b;
+ $.each(tool_buttons, function(i, btn) {
+ if(btn.sel === sel) b = btn;
+ });
+ return b;
+ }
+ };
+ }();
+
+ Actions.setAll();
+
+ // Select given tool
+ Editor.ready(function() {
+ var tool,
+ itool = curConfig.initTool,
+ container = $("#tools_left, #svg_editor .tools_flyout"),
+ pre_tool = container.find("#tool_" + itool),
+ reg_tool = container.find("#" + itool);
+ if(pre_tool.length) {
+ tool = pre_tool;
+ } else if(reg_tool.length){
+ tool = reg_tool;
+ } else {
+ tool = $("#tool_select");
+ }
+ tool.click().mouseup();
+
+ if(curConfig.wireframe) {
+ $('#tool_wireframe').click();
+ }
+
+ if(curConfig.showlayers) {
+ toggleSidePanel();
+ }
+
+ $('#rulers').toggle(!!curConfig.showRulers);
+
+ if (curConfig.showRulers) {
+ $('#show_rulers')[0].checked = true;
+ }
+
+ if(curConfig.gridSnapping) {
+ $('#grid_snapping_on')[0].checked = true;
+ }
+
+ if(curConfig.baseUnit) {
+ $('#base_unit').val(curConfig.baseUnit);
+ }
+
+ if(curConfig.snappingStep) {
+ $('#grid_snapping_step').val(curConfig.snappingStep);
+ }
+ });
+
+ $('#rect_rx').SpinButton({ min: 0, max: 1000, step: 1, callback: changeRectRadius });
+ $('#stroke_width').SpinButton({ min: 0, max: 99, step: 1, smallStep: 0.1, callback: changeStrokeWidth });
+ $('#angle').SpinButton({ min: -180, max: 180, step: 5, callback: changeRotationAngle });
+ $('#font_size').SpinButton({ step: 1, min: 0.001, stepfunc: stepFontSize, callback: changeFontSize });
+ $('#group_opacity').SpinButton({ step: 5, min: 0, max: 100, callback: changeOpacity });
+ $('#blur').SpinButton({ step: .1, min: 0, max: 10, callback: changeBlur });
+ $('#zoom').SpinButton({ min: 0.001, max: 10000, step: 50, stepfunc: stepZoom, callback: changeZoom })
+ // Set default zoom
+ .val(svgCanvas.getZoom() * 100);
+
+ $("#workarea").contextMenu({
+ menu: 'cmenu_canvas',
+ inSpeed: 0
+ },
+ function(action, el, pos) {
+ switch ( action ) {
+ case 'delete':
+ deleteSelected();
+ break;
+ case 'cut':
+ cutSelected();
+ break;
+ case 'copy':
+ copySelected();
+ break;
+ case 'paste':
+ svgCanvas.pasteElements();
+ break;
+ case 'paste_in_place':
+ svgCanvas.pasteElements('in_place');
+ break;
+ case 'group':
+ svgCanvas.groupSelectedElements();
+ break;
+ case 'ungroup':
+ svgCanvas.ungroupSelectedElement();
+ break;
+ case 'move_front':
+ moveToTopSelected();
+ break;
+ case 'move_up':
+ moveUpDownSelected('Up');
+ break;
+ case 'move_down':
+ moveUpDownSelected('Down');
+ break;
+ case 'move_back':
+ moveToBottomSelected();
+ break;
+ default:
+ if(svgedit.contextmenu && svgedit.contextmenu.hasCustomHandler(action)){
+ svgedit.contextmenu.getCustomHandler(action).call();
+ }
+ break;
+ }
+
+ if(svgCanvas.clipBoard.length) {
+ canv_menu.enableContextMenuItems('#paste,#paste_in_place');
+ }
+ });
+
+ var lmenu_func = function(action, el, pos) {
+ switch ( action ) {
+ case 'dupe':
+ cloneLayer();
+ break;
+ case 'delete':
+ deleteLayer();
+ break;
+ case 'merge_down':
+ mergeLayer();
+ break;
+ case 'merge_all':
+ svgCanvas.mergeAllLayers();
+ updateContextPanel();
+ populateLayers();
+ break;
+ }
+ }
+
+ $("#layerlist").contextMenu({
+ menu: 'cmenu_layers',
+ inSpeed: 0
+ },
+ lmenu_func
+ );
+
+ $("#layer_moreopts").contextMenu({
+ menu: 'cmenu_layers',
+ inSpeed: 0,
+ allowLeft: true
+ },
+ lmenu_func
+ );
+
+ $('.contextMenu li').mousedown(function(ev) {
+ ev.preventDefault();
+ })
+
+ $('#cmenu_canvas li').disableContextMenu();
+ canv_menu.enableContextMenuItems('#delete,#cut,#copy');
+
+ window.onbeforeunload = function() {
+ // Suppress warning if page is empty
+ if(undoMgr.getUndoStackSize() === 0) {
+ Editor.show_save_warning = false;
+ }
+
+ // show_save_warning is set to "false" when the page is saved.
+ if(!curConfig.no_save_warning && Editor.show_save_warning) {
+ // Browser already asks question about closing the page
+ return uiStrings.notification.unsavedChanges;
+ }
+ };
+
+ Editor.openPrep = function(func) {
+ $('#main_menu').hide();
+ if(undoMgr.getUndoStackSize() === 0) {
+ func(true);
+ } else {
+ $.confirm(uiStrings.notification.QwantToOpen, func);
+ }
+ }
+
+ // use HTML5 File API: http://www.w3.org/TR/FileAPI/
+ // if browser has HTML5 File API support, then we will show the open menu item
+ // and provide a file input to click. When that change event fires, it will
+ // get the text contents of the file and send it to the canvas
+ if (window.FileReader) {
+ var inp = $('<input type="file">').change(function() {
+ var f = this;
+ Editor.openPrep(function(ok) {
+ if(!ok) return;
+ svgCanvas.clear();
+ if(f.files.length==1) {
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ loadSvgString(e.target.result);
+ updateCanvas();
+ };
+ reader.readAsText(f.files[0]);
+ }
+ });
+ });
+ $("#tool_open").show().prepend(inp);
+ var inp2 = $('<input type="file">').change(function() {
+ $('#main_menu').hide();
+ if(this.files.length==1) {
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ svgCanvas.importSvgString(e.target.result, true);
+ updateCanvas();
+ };
+ reader.readAsText(this.files[0]);
+ }
+ });
+ $("#tool_import").show().prepend(inp2);
+ }
+
+ var updateCanvas = Editor.updateCanvas = function(center, new_ctr) {
+
+ var w = workarea.width(), h = workarea.height();
+ var w_orig = w, h_orig = h;
+ var zoom = svgCanvas.getZoom();
+ var w_area = workarea;
+ var cnvs = $("#svgcanvas");
+
+ var old_ctr = {
+ x: w_area[0].scrollLeft + w_orig/2,
+ y: w_area[0].scrollTop + h_orig/2
+ };
+
+ var multi = curConfig.canvas_expansion;
+ w = Math.max(w_orig, svgCanvas.contentW * zoom * multi);
+ h = Math.max(h_orig, svgCanvas.contentH * zoom * multi);
+
+ if(w == w_orig && h == h_orig) {
+ workarea.css('overflow','hidden');
+ } else {
+ workarea.css('overflow','scroll');
+ }
+
+ var old_can_y = cnvs.height()/2;
+ var old_can_x = cnvs.width()/2;
+ cnvs.width(w).height(h);
+ var new_can_y = h/2;
+ var new_can_x = w/2;
+ var offset = svgCanvas.updateCanvas(w, h);
+
+ var ratio = new_can_x / old_can_x;
+
+ var scroll_x = w/2 - w_orig/2;
+ var scroll_y = h/2 - h_orig/2;
+
+ if(!new_ctr) {
+
+ var old_dist_x = old_ctr.x - old_can_x;
+ var new_x = new_can_x + old_dist_x * ratio;
+
+ var old_dist_y = old_ctr.y - old_can_y;
+ var new_y = new_can_y + old_dist_y * ratio;
+
+ new_ctr = {
+ x: new_x,
+ y: new_y
+ };
+
+ } else {
+ new_ctr.x += offset.x,
+ new_ctr.y += offset.y;
+ }
+
+ if(center) {
+ // Go to top-left for larger documents
+ if(svgCanvas.contentW > w_area.width()) {
+ // Top-left
+ workarea[0].scrollLeft = offset.x - 10;
+ workarea[0].scrollTop = offset.y - 10;
+ } else {
+ // Center
+ w_area[0].scrollLeft = scroll_x;
+ w_area[0].scrollTop = scroll_y;
+ }
+ } else {
+ w_area[0].scrollLeft = new_ctr.x - w_orig/2;
+ w_area[0].scrollTop = new_ctr.y - h_orig/2;
+ }
+ if(curConfig.showRulers) {
+ updateRulers(cnvs, zoom);
+ workarea.scroll();
+ }
+ }
+
+ // Make [1,2,5] array
+ var r_intervals = [];
+ for(var i = .1; i < 1E5; i *= 10) {
+ r_intervals.push(1 * i);
+ r_intervals.push(2 * i);
+ r_intervals.push(5 * i);
+ }
+
+ function updateRulers(scanvas, zoom) {
+ if(!zoom) zoom = svgCanvas.getZoom();
+ if(!scanvas) scanvas = $("#svgcanvas");
+
+ var limit = 30000;
+
+ var c_elem = svgCanvas.getContentElem();
+
+ var units = svgedit.units.getTypeMap();
+ var unit = units[curConfig.baseUnit]; // 1 = 1px
+
+ for(var d = 0; d < 2; d++) {
+ var is_x = (d === 0);
+ var dim = is_x ? 'x' : 'y';
+ var lentype = is_x?'width':'height';
+ var content_d = c_elem.getAttribute(dim)-0;
+
+ var $hcanv_orig = $('#ruler_' + dim + ' canvas:first');
+
+ // Bit of a hack to fully clear the canvas in Safari & IE9
+ $hcanv = $hcanv_orig.clone();
+ $hcanv_orig.replaceWith($hcanv);
+
+ var hcanv = $hcanv[0];
+
+ // Set the canvas size to the width of the container
+ var ruler_len = scanvas[lentype]();
+ var total_len = ruler_len;
+ hcanv.parentNode.style[lentype] = total_len + 'px';
+
+
+ var canv_count = 1;
+ var ctx_num = 0;
+ var ctx_arr;
+ var ctx = hcanv.getContext("2d");
+
+ ctx.fillStyle = "rgb(200,0,0)";
+ ctx.fillRect(0,0,hcanv.width,hcanv.height);
+
+ // Remove any existing canvasses
+ $hcanv.siblings().remove();
+
+ // Create multiple canvases when necessary (due to browser limits)
+ if(ruler_len >= limit) {
+ var num = parseInt(ruler_len / limit) + 1;
+ ctx_arr = Array(num);
+ ctx_arr[0] = ctx;
+ for(var i = 1; i < num; i++) {
+ hcanv[lentype] = limit;
+ var copy = hcanv.cloneNode(true);
+ hcanv.parentNode.appendChild(copy);
+ ctx_arr[i] = copy.getContext('2d');
+ }
+
+ copy[lentype] = ruler_len % limit;
+
+ // set copy width to last
+ ruler_len = limit;
+ }
+
+ hcanv[lentype] = ruler_len;
+
+ var u_multi = unit * zoom;
+
+ // Calculate the main number interval
+ var raw_m = 50 / u_multi;
+ var multi = 1;
+ for(var i = 0; i < r_intervals.length; i++) {
+ var num = r_intervals[i];
+ multi = num;
+ if(raw_m <= num) {
+ break;
+ }
+ }
+
+ var big_int = multi * u_multi;
+
+ ctx.font = "9px sans-serif";
+
+ var ruler_d = ((content_d / u_multi) % multi) * u_multi;
+ var label_pos = ruler_d - big_int;
+ for (; ruler_d < total_len; ruler_d += big_int) {
+ label_pos += big_int;
+ var real_d = ruler_d - content_d;
+
+ var cur_d = Math.round(ruler_d) + .5;
+ if(is_x) {
+ ctx.moveTo(cur_d, 15);
+ ctx.lineTo(cur_d, 0);
+ } else {
+ ctx.moveTo(15, cur_d);
+ ctx.lineTo(0, cur_d);
+ }
+
+ var num = (label_pos - content_d) / u_multi;
+ var label;
+ if(multi >= 1) {
+ label = Math.round(num);
+ } else {
+ var decs = (multi+'').split('.')[1].length;
+ label = num.toFixed(decs)-0;
+ }
+
+ // Do anything special for negative numbers?
+// var is_neg = label < 0;
+// real_d2 = Math.abs(real_d2);
+
+ // Change 1000s to Ks
+ if(label !== 0 && label !== 1000 && label % 1000 === 0) {
+ label = (label / 1000) + 'K';
+ }
+
+ if(is_x) {
+ ctx.fillText(label, ruler_d+2, 8);
+ } else {
+ var str = (label+'').split('');
+ for(var i = 0; i < str.length; i++) {
+ ctx.fillText(str[i], 1, (ruler_d+9) + i*9);
+ }
+ }
+
+ var part = big_int / 10;
+ for(var i = 1; i < 10; i++) {
+ var sub_d = Math.round(ruler_d + part * i) + .5;
+ if(ctx_arr && sub_d > ruler_len) {
+ ctx_num++;
+ ctx.stroke();
+ if(ctx_num >= ctx_arr.length) {
+ i = 10;
+ ruler_d = total_len;
+ continue;
+ }
+ ctx = ctx_arr[ctx_num];
+ ruler_d -= limit;
+ sub_d = Math.round(ruler_d + part * i) + .5;
+ }
+
+ var line_num = (i % 2)?12:10;
+ if(is_x) {
+ ctx.moveTo(sub_d, 15);
+ ctx.lineTo(sub_d, line_num);
+ } else {
+ ctx.moveTo(15, sub_d);
+ ctx.lineTo(line_num ,sub_d);
+ }
+ }
+ }
+
+ // console.log('ctx', ctx);
+ ctx.strokeStyle = "#000";
+ ctx.stroke();
+ }
+ }
+
+// $(function() {
+ updateCanvas(true);
+// });
+
+ // var revnums = "svg-editor.js ($Rev$) ";
+ // revnums += svgCanvas.getVersion();
+ // $('#copyright')[0].setAttribute("title", revnums);
+
+ // Callback handler for embedapi.js
+ try{
+ var json_encode = function(obj){
+ //simple partial JSON encoder implementation
+ if(window.JSON && JSON.stringify) return JSON.stringify(obj);
+ var enc = arguments.callee; //for purposes of recursion
+ if(typeof obj == "boolean" || typeof obj == "number"){
+ return obj+'' //should work...
+ }else if(typeof obj == "string"){
+ //a large portion of this is stolen from Douglas Crockford's json2.js
+ return '"'+
+ obj.replace(
+ /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g
+ , function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ })
+ +'"'; //note that this isn't quite as purtyful as the usualness
+ }else if(obj.length){ //simple hackish test for arrayish-ness
+ for(var i = 0; i < obj.length; i++){
+ obj[i] = enc(obj[i]); //encode every sub-thingy on top
+ }
+ return "["+obj.join(",")+"]";
+ }else{
+ var pairs = []; //pairs will be stored here
+ for(var k in obj){ //loop through thingys
+ pairs.push(enc(k)+":"+enc(obj[k])); //key: value
+ }
+ return "{"+pairs.join(",")+"}" //wrap in the braces
+ }
+ }
+ window.addEventListener("message", function(e){
+ var cbid = parseInt(e.data.substr(0, e.data.indexOf(";")));
+ try{
+ e.source.postMessage("SVGe"+cbid+";"+json_encode(eval(e.data)), "*");
+ }catch(err){
+ e.source.postMessage("SVGe"+cbid+";error:"+err.message, "*");
+ }
+ }, false)
+ }catch(err){
+ window.embed_error = err;
+ }
+
+
+
+ // For Compatibility with older extensions
+ $(function() {
+ window.svgCanvas = svgCanvas;
+ svgCanvas.ready = svgEditor.ready;
+ });
+
+
+ Editor.setLang = function(lang, allStrings) {
+ $.pref('lang', lang);
+ $('#lang_select').val(lang);
+ if(allStrings) {
+
+ var notif = allStrings.notification;
+
+
+
+ // $.extend will only replace the given strings
+ var oldLayerName = $('#layerlist tr.layersel td.layername').text();
+ var rename_layer = (oldLayerName == uiStrings.common.layer + ' 1');
+
+ $.extend(uiStrings, allStrings);
+ svgCanvas.setUiStrings(allStrings);
+ Actions.setTitles();
+
+ if(rename_layer) {
+ svgCanvas.renameCurrentLayer(uiStrings.common.layer + ' 1');
+ populateLayers();
+ }
+
+ svgCanvas.runExtensions("langChanged", lang);
+
+ // Update flyout tooltips
+ setFlyoutTitles();
+
+ // Copy title for certain tool elements
+ var elems = {
+ '#stroke_color': '#tool_stroke .icon_label, #tool_stroke .color_block',
+ '#fill_color': '#tool_fill label, #tool_fill .color_block',
+ '#linejoin_miter': '#cur_linejoin',
+ '#linecap_butt': '#cur_linecap'
+ }
+
+ $.each(elems, function(source, dest) {
+ $(dest).attr('title', $(source)[0].title);
+ });
+
+ // Copy alignment titles
+ $('#multiselected_panel div[id^=tool_align]').each(function() {
+ $('#tool_pos' + this.id.substr(10))[0].title = this.title;
+ });
+
+ }
+ };
+ };
+
+ var callbacks = [];
+
+ function loadSvgString(str, callback) {
+ var success = svgCanvas.setSvgString(str) !== false;
+ callback = callback || $.noop;
+ if(success) {
+ callback(true);
+ } else {
+ $.alert(uiStrings.notification.errorLoadingSVG, function() {
+ callback(false);
+ });
+ }
+ }
+
+ Editor.ready = function(cb) {
+ if(!is_ready) {
+ callbacks.push(cb);
+ } else {
+ cb();
+ }
+ };
+
+ Editor.runCallbacks = function() {
+ $.each(callbacks, function() {
+ this();
+ });
+ is_ready = true;
+ };
+
+ Editor.loadFromString = function(str) {
+ Editor.ready(function() {
+ loadSvgString(str);
+ });
+ };
+
+ Editor.disableUI = function(featList) {
+// $(function() {
+// $('#tool_wireframe, #tool_image, #main_button, #tool_source, #sidepanels').remove();
+// $('#tools_top').css('left', 5);
+// });
+ };
+
+ Editor.loadFromURL = function(url, opts) {
+ if(!opts) opts = {};
+
+ var cache = opts.cache;
+ var cb = opts.callback;
+
+ Editor.ready(function() {
+ $.ajax({
+ 'url': url,
+ 'dataType': 'text',
+ cache: !!cache,
+ success: function(str) {
+ loadSvgString(str, cb);
+ },
+ error: function(xhr, stat, err) {
+ if(xhr.status != 404 && xhr.responseText) {
+ loadSvgString(xhr.responseText, cb);
+ } else {
+ $.alert(uiStrings.notification.URLloadFail + ": \n"+err+'', cb);
+ }
+ }
+ });
+ });
+ };
+
+ Editor.loadFromDataURI = function(str) {
+ Editor.ready(function() {
+ var pre = 'data:image/svg+xml;base64,';
+ var src = str.substring(pre.length);
+ loadSvgString(svgedit.utilities.decode64(src));
+ });
+ };
+
+ Editor.addExtension = function() {
+ var args = arguments;
+
+ // Note that we don't want this on Editor.ready since some extensions
+ // may want to run before then (like server_opensave).
+ $(function() {
+ if(svgCanvas) svgCanvas.addExtension.apply(this, args);
+ });
+ };
+
+ return Editor;
+ }(jQuery);
+
+ // Run init once DOM is loaded
+ $(svgEditor.init);
+
+})();
+
+// ?iconsize=s&bkgd_color=555
+
+// svgEditor.setConfig({
+// // imgPath: 'foo',
+// dimensions: [800, 600],
+// canvas_expansion: 5,
+// initStroke: {
+// color: '0000FF',
+// width: 3.5,
+// opacity: .5
+// },
+// initFill: {
+// color: '550000',
+// opacity: .75
+// },
+// extensions: ['ext-helloworld.js']
+// })
diff --git a/files_svgedit/svg-edit/.svn/text-base/svg-editor.manifest.svn-base b/files_svgedit/svg-edit/.svn/text-base/svg-editor.manifest.svn-base
new file mode 100644
index 000000000..b1563746d
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svg-editor.manifest.svn-base
@@ -0,0 +1,121 @@
+CACHE MANIFEST
+svg-editor.html
+images/logo.png
+jgraduate/css/jPicker-1.0.9.css
+jgraduate/css/jGraduate-0.2.0.css
+svg-editor.css
+spinbtn/JQuerySpinBtn.css
+jquery.js
+js-hotkeys/jquery.hotkeys.min.js
+jquery-ui/jquery-ui-1.7.2.custom.min.js
+jgraduate/jpicker-1.0.9.min.js
+jgraduate/jquery.jgraduate.js
+spinbtn/JQuerySpinBtn.js
+svgcanvas.js
+svg-editor.js
+images/align-bottom.png
+images/align-center.png
+images/align-left.png
+images/align-middle.png
+images/align-right.png
+images/align-top.png
+images/bold.png
+images/cancel.png
+images/circle.png
+images/clear.png
+images/clone.png
+images/copy.png
+images/cut.png
+images/delete.png
+images/document-properties.png
+images/dropdown.gif
+images/ellipse.png
+images/eye.png
+images/flyouth.png
+images/flyup.gif
+images/freehand-circle.png
+images/freehand-square.png
+images/go-down.png
+images/go-up.png
+images/image.png
+images/italic.png
+images/line.png
+images/logo.png
+images/logo.svg
+images/move_bottom.png
+images/move_top.png
+images/none.png
+images/open.png
+images/paste.png
+images/path.png
+images/polygon.png
+images/rect.png
+images/redo.png
+images/save.png
+images/select.png
+images/sep.png
+images/shape_group.png
+images/shape_ungroup.png
+images/source.png
+images/square.png
+images/text.png
+images/undo.png
+images/view-refresh.png
+images/wave.png
+images/zoom.png
+locale/locale.js
+locale/lang.af.js
+locale/lang.ar.js
+locale/lang.az.js
+locale/lang.be.js
+locale/lang.bg.js
+locale/lang.ca.js
+locale/lang.cs.js
+locale/lang.cy.js
+locale/lang.da.js
+locale/lang.de.js
+locale/lang.el.js
+locale/lang.en.js
+locale/lang.es.js
+locale/lang.et.js
+locale/lang.fa.js
+locale/lang.fi.js
+locale/lang.fr.js
+locale/lang.ga.js
+locale/lang.gl.js
+locale/lang.hi.js
+locale/lang.hr.js
+locale/lang.hu.js
+locale/lang.hy.js
+locale/lang.id.js
+locale/lang.is.js
+locale/lang.it.js
+locale/lang.iw.js
+locale/lang.ja.js
+locale/lang.ko.js
+locale/lang.lt.js
+locale/lang.lv.js
+locale/lang.mk.js
+locale/lang.ms.js
+locale/lang.mt.js
+locale/lang.nl.js
+locale/lang.no.js
+locale/lang.pl.js
+locale/lang.pt-PT.js
+locale/lang.ro.js
+locale/lang.ru.js
+locale/lang.sk.js
+locale/lang.sl.js
+locale/lang.sq.js
+locale/lang.sr.js
+locale/lang.sv.js
+locale/lang.sw.js
+locale/lang.th.js
+locale/lang.tl.js
+locale/lang.tr.js
+locale/lang.uk.js
+locale/lang.vi.js
+locale/lang.yi.js
+locale/lang.zh-CN.js
+locale/lang.zh-TW.js
+locale/lang.zh.js
diff --git a/files_svgedit/svg-edit/.svn/text-base/svgcanvas.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/svgcanvas.js.svn-base
new file mode 100644
index 000000000..13d0102a2
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svgcanvas.js.svn-base
@@ -0,0 +1,8770 @@
+/*
+ * svgcanvas.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Pavol Rusnak
+ * Copyright(c) 2010 Jeff Schiller
+ *
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) svgtransformlist.js
+// 4) math.js
+// 5) units.js
+// 6) svgutils.js
+// 7) sanitize.js
+// 8) history.js
+// 9) select.js
+// 10) draw.js
+// 11) path.js
+
+if(!window.console) {
+ window.console = {};
+ window.console.log = function(str) {};
+ window.console.dir = function(str) {};
+}
+
+if(window.opera) {
+ window.console.log = function(str) { opera.postError(str); };
+ window.console.dir = function(str) {};
+}
+
+(function() {
+
+ // This fixes $(...).attr() to work as expected with SVG elements.
+ // Does not currently use *AttributeNS() since we rarely need that.
+
+ // See http://api.jquery.com/attr/ for basic documentation of .attr()
+
+ // Additional functionality:
+ // - When getting attributes, a string that's a number is return as type number.
+ // - If an array is supplied as first parameter, multiple values are returned
+ // as an object with values for each given attributes
+
+ var proxied = jQuery.fn.attr, svgns = "http://www.w3.org/2000/svg";
+ jQuery.fn.attr = function(key, value) {
+ var len = this.length;
+ if(!len) return proxied.apply(this, arguments);
+ for(var i=0; i<len; i++) {
+ var elem = this[i];
+ // set/get SVG attribute
+ if(elem.namespaceURI === svgns) {
+ // Setting attribute
+ if(value !== undefined) {
+ elem.setAttribute(key, value);
+ } else if($.isArray(key)) {
+ // Getting attributes from array
+ var j = key.length, obj = {};
+
+ while(j--) {
+ var aname = key[j];
+ var attr = elem.getAttribute(aname);
+ // This returns a number when appropriate
+ if(attr || attr === "0") {
+ attr = isNaN(attr)?attr:attr-0;
+ }
+ obj[aname] = attr;
+ }
+ return obj;
+
+ } else if(typeof key === "object") {
+ // Setting attributes form object
+ for(var v in key) {
+ elem.setAttribute(v, key[v]);
+ }
+ // Getting attribute
+ } else {
+ var attr = elem.getAttribute(key);
+ if(attr || attr === "0") {
+ attr = isNaN(attr)?attr:attr-0;
+ }
+
+ return attr;
+ }
+ } else {
+ return proxied.apply(this, arguments);
+ }
+ }
+ return this;
+ };
+
+}());
+
+// Class: SvgCanvas
+// The main SvgCanvas class that manages all SVG-related functions
+//
+// Parameters:
+// container - The container HTML element that should hold the SVG root element
+// config - An object that contains configuration data
+$.SvgCanvas = function(container, config)
+{
+// Namespace constants
+var svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ xmlns = "http://www.w3.org/XML/1998/namespace",
+ xmlnsns = "http://www.w3.org/2000/xmlns/", // see http://www.w3.org/TR/REC-xml-names/#xmlReserved
+ se_ns = "http://svg-edit.googlecode.com",
+ htmlns = "http://www.w3.org/1999/xhtml",
+ mathns = "http://www.w3.org/1998/Math/MathML";
+
+// Default configuration options
+var curConfig = {
+ show_outside_canvas: true,
+ selectNew: true,
+ dimensions: [640, 480]
+};
+
+// Update config with new one if given
+if(config) {
+ $.extend(curConfig, config);
+}
+
+// Array with width/height of canvas
+var dimensions = curConfig.dimensions;
+
+var canvas = this;
+
+// "document" element associated with the container (same as window.document using default svg-editor.js)
+// NOTE: This is not actually a SVG document, but a HTML document.
+var svgdoc = container.ownerDocument;
+
+// This is a container for the document being edited, not the document itself.
+var svgroot = svgdoc.importNode(svgedit.utilities.text2xml(
+ '<svg id="svgroot" xmlns="' + svgns + '" xlinkns="' + xlinkns + '" ' +
+ 'width="' + dimensions[0] + '" height="' + dimensions[1] + '" x="' + dimensions[0] + '" y="' + dimensions[1] + '" overflow="visible">' +
+ '<defs>' +
+ '<filter id="canvashadow" filterUnits="objectBoundingBox">' +
+ '<feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>'+
+ '<feOffset in="blur" dx="5" dy="5" result="offsetBlur"/>'+
+ '<feMerge>'+
+ '<feMergeNode in="offsetBlur"/>'+
+ '<feMergeNode in="SourceGraphic"/>'+
+ '</feMerge>'+
+ '</filter>'+
+ '</defs>'+
+ '</svg>').documentElement, true);
+container.appendChild(svgroot);
+
+// The actual element that represents the final output SVG element
+var svgcontent = svgdoc.createElementNS(svgns, "svg");
+
+// This function resets the svgcontent element while keeping it in the DOM.
+var clearSvgContentElement = canvas.clearSvgContentElement = function() {
+ while (svgcontent.firstChild) { svgcontent.removeChild(svgcontent.firstChild); }
+
+ // TODO: Clear out all other attributes first?
+ $(svgcontent).attr({
+ id: 'svgcontent',
+ width: dimensions[0],
+ height: dimensions[1],
+ x: dimensions[0],
+ y: dimensions[1],
+ overflow: curConfig.show_outside_canvas ? 'visible' : 'hidden',
+ xmlns: svgns,
+ "xmlns:se": se_ns,
+ "xmlns:xlink": xlinkns
+ }).appendTo(svgroot);
+
+ // TODO: make this string optional and set by the client
+ var comment = svgdoc.createComment(" Created with SVG-edit - http://svg-edit.googlecode.com/ ");
+ svgcontent.appendChild(comment);
+};
+clearSvgContentElement();
+
+// Prefix string for element IDs
+var idprefix = "svg_";
+
+// Function: setIdPrefix
+// Changes the ID prefix to the given value
+//
+// Parameters:
+// p - String with the new prefix
+canvas.setIdPrefix = function(p) {
+ idprefix = p;
+};
+
+// Current svgedit.draw.Drawing object
+// @type {svgedit.draw.Drawing}
+canvas.current_drawing_ = new svgedit.draw.Drawing(svgcontent, idprefix);
+
+// Function: getCurrentDrawing
+// Returns the current Drawing.
+// @return {svgedit.draw.Drawing}
+var getCurrentDrawing = canvas.getCurrentDrawing = function() {
+ return canvas.current_drawing_;
+};
+
+// Float displaying the current zoom level (1 = 100%, .5 = 50%, etc)
+var current_zoom = 1;
+
+// pointer to current group (for in-group editing)
+var current_group = null;
+
+// Object containing data for the currently selected styles
+var all_properties = {
+ shape: {
+ fill: "#" + curConfig.initFill.color,
+ fill_paint: null,
+ fill_opacity: curConfig.initFill.opacity,
+ stroke: "#" + curConfig.initStroke.color,
+ stroke_paint: null,
+ stroke_opacity: curConfig.initStroke.opacity,
+ stroke_width: curConfig.initStroke.width,
+ stroke_dasharray: 'none',
+ stroke_linejoin: 'miter',
+ stroke_linecap: 'butt',
+ opacity: curConfig.initOpacity
+ }
+};
+
+all_properties.text = $.extend(true, {}, all_properties.shape);
+$.extend(all_properties.text, {
+ fill: "#000000",
+ stroke_width: 0,
+ font_size: 24,
+ font_family: 'serif'
+});
+
+// Current shape style properties
+var cur_shape = all_properties.shape;
+
+// Array with all the currently selected elements
+// default size of 1 until it needs to grow bigger
+var selectedElements = new Array(1);
+
+// Function: addSvgElementFromJson
+// Create a new SVG element based on the given object keys/values and add it to the current layer
+// The element will be ran through cleanupElement before being returned
+//
+// Parameters:
+// data - Object with the following keys/values:
+// * element - tag name of the SVG element to create
+// * attr - Object with attributes key-values to assign to the new element
+// * curStyles - Boolean indicating that current style attributes should be applied first
+//
+// Returns: The new element
+var addSvgElementFromJson = this.addSvgElementFromJson = function(data) {
+ var shape = svgedit.utilities.getElem(data.attr.id);
+ // if shape is a path but we need to create a rect/ellipse, then remove the path
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ if (shape && data.element != shape.tagName) {
+ current_layer.removeChild(shape);
+ shape = null;
+ }
+ if (!shape) {
+ shape = svgdoc.createElementNS(svgns, data.element);
+ if (current_layer) {
+ (current_group || current_layer).appendChild(shape);
+ }
+ }
+ if(data.curStyles) {
+ svgedit.utilities.assignAttributes(shape, {
+ "fill": cur_shape.fill,
+ "stroke": cur_shape.stroke,
+ "stroke-width": cur_shape.stroke_width,
+ "stroke-dasharray": cur_shape.stroke_dasharray,
+ "stroke-linejoin": cur_shape.stroke_linejoin,
+ "stroke-linecap": cur_shape.stroke_linecap,
+ "stroke-opacity": cur_shape.stroke_opacity,
+ "fill-opacity": cur_shape.fill_opacity,
+ "opacity": cur_shape.opacity / 2,
+ "style": "pointer-events:inherit"
+ }, 100);
+ }
+ svgedit.utilities.assignAttributes(shape, data.attr, 100);
+ svgedit.utilities.cleanupElement(shape);
+ return shape;
+};
+
+
+// import svgtransformlist.js
+var getTransformList = canvas.getTransformList = svgedit.transformlist.getTransformList;
+
+// import from math.js.
+var transformPoint = svgedit.math.transformPoint;
+var matrixMultiply = canvas.matrixMultiply = svgedit.math.matrixMultiply;
+var hasMatrixTransform = canvas.hasMatrixTransform = svgedit.math.hasMatrixTransform;
+var transformListToTransform = canvas.transformListToTransform = svgedit.math.transformListToTransform;
+var snapToAngle = svgedit.math.snapToAngle;
+var getMatrix = svgedit.math.getMatrix;
+
+// initialize from units.js
+// send in an object implementing the ElementContainer interface (see units.js)
+svgedit.units.init({
+ getBaseUnit: function() { return curConfig.baseUnit; },
+ getElement: svgedit.utilities.getElem,
+ getHeight: function() { return svgcontent.getAttribute("height")/current_zoom; },
+ getWidth: function() { return svgcontent.getAttribute("width")/current_zoom; },
+ getRoundDigits: function() { return save_options.round_digits; }
+});
+// import from units.js
+var convertToNum = canvas.convertToNum = svgedit.units.convertToNum;
+
+// import from svgutils.js
+svgedit.utilities.init({
+ getDOMDocument: function() { return svgdoc; },
+ getDOMContainer: function() { return container; },
+ getSVGRoot: function() { return svgroot; },
+ // TODO: replace this mostly with a way to get the current drawing.
+ getSelectedElements: function() { return selectedElements; },
+ getSVGContent: function() { return svgcontent; }
+});
+var getUrlFromAttr = canvas.getUrlFromAttr = svgedit.utilities.getUrlFromAttr;
+var getHref = canvas.getHref = svgedit.utilities.getHref;
+var setHref = canvas.setHref = svgedit.utilities.setHref;
+var getPathBBox = svgedit.utilities.getPathBBox;
+var getBBox = canvas.getBBox = svgedit.utilities.getBBox;
+var getRotationAngle = canvas.getRotationAngle = svgedit.utilities.getRotationAngle;
+var getElem = canvas.getElem = svgedit.utilities.getElem;
+var assignAttributes = canvas.assignAttributes = svgedit.utilities.assignAttributes;
+var cleanupElement = this.cleanupElement = svgedit.utilities.cleanupElement;
+
+// import from sanitize.js
+var nsMap = svgedit.sanitize.getNSMap();
+var sanitizeSvg = canvas.sanitizeSvg = svgedit.sanitize.sanitizeSvg;
+
+// import from history.js
+var MoveElementCommand = svgedit.history.MoveElementCommand;
+var InsertElementCommand = svgedit.history.InsertElementCommand;
+var RemoveElementCommand = svgedit.history.RemoveElementCommand;
+var ChangeElementCommand = svgedit.history.ChangeElementCommand;
+var BatchCommand = svgedit.history.BatchCommand;
+// Implement the svgedit.history.HistoryEventHandler interface.
+canvas.undoMgr = new svgedit.history.UndoManager({
+ handleHistoryEvent: function(eventType, cmd) {
+ var EventTypes = svgedit.history.HistoryEventTypes;
+ // TODO: handle setBlurOffsets.
+ if (eventType == EventTypes.BEFORE_UNAPPLY || eventType == EventTypes.BEFORE_APPLY) {
+ canvas.clearSelection();
+ } else if (eventType == EventTypes.AFTER_APPLY || eventType == EventTypes.AFTER_UNAPPLY) {
+ var elems = cmd.elements();
+ canvas.pathActions.clear();
+ call("changed", elems);
+
+ var cmdType = cmd.type();
+ var isApply = (eventType == EventTypes.AFTER_APPLY);
+ if (cmdType == MoveElementCommand.type()) {
+ var parent = isApply ? cmd.newParent : cmd.oldParent;
+ if (parent == svgcontent) {
+ canvas.identifyLayers();
+ }
+ } else if (cmdType == InsertElementCommand.type() ||
+ cmdType == RemoveElementCommand.type()) {
+ if (cmd.parent == svgcontent) {
+ canvas.identifyLayers();
+ }
+ if (cmdType == InsertElementCommand.type()) {
+ if (isApply) restoreRefElems(cmd.elem);
+ } else {
+ if (!isApply) restoreRefElems(cmd.elem);
+ }
+
+ if(cmd.elem.tagName === 'use') {
+ setUseData(cmd.elem);
+ }
+ } else if (cmdType == ChangeElementCommand.type()) {
+ // if we are changing layer names, re-identify all layers
+ if (cmd.elem.tagName == "title" && cmd.elem.parentNode.parentNode == svgcontent) {
+ canvas.identifyLayers();
+ }
+ var values = isApply ? cmd.newValues : cmd.oldValues;
+ // If stdDeviation was changed, update the blur.
+ if (values["stdDeviation"]) {
+ canvas.setBlurOffsets(cmd.elem.parentNode, values["stdDeviation"]);
+ }
+
+ // Remove & Re-add hack for Webkit (issue 775)
+ if(cmd.elem.tagName === 'use' && svgedit.browser.isWebkit()) {
+ var elem = cmd.elem;
+ if(!elem.getAttribute('x') && !elem.getAttribute('y')) {
+ var parent = elem.parentNode;
+ var sib = elem.nextSibling;
+ parent.removeChild(elem);
+ parent.insertBefore(elem, sib);
+ }
+ }
+ }
+ }
+ }
+});
+var addCommandToHistory = function(cmd) {
+ canvas.undoMgr.addCommandToHistory(cmd);
+};
+
+// import from select.js
+svgedit.select.init(curConfig, {
+ createSVGElement: function(jsonMap) { return canvas.addSvgElementFromJson(jsonMap); },
+ svgRoot: function() { return svgroot; },
+ svgContent: function() { return svgcontent; },
+ currentZoom: function() { return current_zoom; },
+ // TODO(codedread): Remove when getStrokedBBox() has been put into svgutils.js.
+ getStrokedBBox: function(elems) { return canvas.getStrokedBBox([elems]); }
+});
+// this object manages selectors for us
+var selectorManager = this.selectorManager = svgedit.select.getSelectorManager();
+
+// Import from path.js
+svgedit.path.init({
+ getCurrentZoom: function() { return current_zoom; },
+ getSVGRoot: function() { return svgroot; }
+});
+
+// Function: snapToGrid
+// round value to for snapping
+// NOTE: This function did not move to svgutils.js since it depends on curConfig.
+svgedit.utilities.snapToGrid = function(value){
+ var stepSize = curConfig.snappingStep;
+ var unit = curConfig.baseUnit;
+ if(unit !== "px") {
+ stepSize *= svgedit.units.getTypeMap()[unit];
+ }
+ value = Math.round(value/stepSize)*stepSize;
+ return value;
+};
+var snapToGrid = svgedit.utilities.snapToGrid;
+
+// Interface strings, usually for title elements
+var uiStrings = {
+ "exportNoBlur": "Blurred elements will appear as un-blurred",
+ "exportNoforeignObject": "foreignObject elements will not appear",
+ "exportNoDashArray": "Strokes will appear filled",
+ "exportNoText": "Text may not appear as expected"
+};
+
+var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use';
+var ref_attrs = ["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"];
+
+var elData = $.data;
+
+// Animation element to change the opacity of any newly created element
+var opac_ani = document.createElementNS(svgns, 'animate');
+$(opac_ani).attr({
+ attributeName: 'opacity',
+ begin: 'indefinite',
+ dur: 1,
+ fill: 'freeze'
+}).appendTo(svgroot);
+
+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];
+ }
+ }
+ }
+
+ var childs = elem.getElementsByTagName('*');
+
+ if(childs.length) {
+ for(var i = 0, l = childs.length; i < l; i++) {
+ restoreRefElems(childs[i]);
+ }
+ }
+};
+
+(function() {
+ // TODO For Issue 208: this is a start on a thumbnail
+ // var svgthumb = svgdoc.createElementNS(svgns, "use");
+ // svgthumb.setAttribute('width', '100');
+ // svgthumb.setAttribute('height', '100');
+ // svgedit.utilities.setHref(svgthumb, '#svgcontent');
+ // svgroot.appendChild(svgthumb);
+
+})();
+
+// Object to contain image data for raster images that were found encodable
+var encodableImages = {},
+
+ // String with image URL of last loadable image
+ last_good_img_url = curConfig.imgPath + 'logo.png',
+
+ // Array with current disabled elements (for in-group editing)
+ disabled_elems = [],
+
+ // Object with save options
+ save_options = {round_digits: 5},
+
+ // Boolean indicating whether or not a draw action has been started
+ started = false,
+
+ // String with an element's initial transform attribute value
+ start_transform = null,
+
+ // String indicating the current editor mode
+ current_mode = "select",
+
+ // String with the current direction in which an element is being resized
+ current_resize_mode = "none",
+
+ // Object with IDs for imported files, to see if one was already added
+ import_ids = {};
+
+// Current text style properties
+var cur_text = all_properties.text,
+
+ // Current general properties
+ cur_properties = cur_shape,
+
+ // Array with selected elements' Bounding box object
+// selectedBBoxes = new Array(1),
+
+ // The DOM element that was just selected
+ justSelected = null,
+
+ // DOM element for selection rectangle drawn by the user
+ rubberBox = null,
+
+ // Array of current BBoxes (still needed?)
+ curBBoxes = [],
+
+ // Object to contain all included extensions
+ extensions = {},
+
+ // Canvas point for the most recent right click
+ lastClickPoint = null,
+
+ // Map of deleted reference elements
+ removedElements = {}
+
+// Clipboard for cut, copy&pasted elements
+canvas.clipBoard = [];
+
+// Should this return an array by default, so extension results aren't overwritten?
+var runExtensions = this.runExtensions = function(action, vars, returnArray) {
+ var result = false;
+ if(returnArray) result = [];
+ $.each(extensions, function(name, opts) {
+ if(action in opts) {
+ if(returnArray) {
+ result.push(opts[action](vars))
+ } else {
+ result = opts[action](vars);
+ }
+ }
+ });
+ return result;
+}
+
+// Function: addExtension
+// Add an extension to the editor
+//
+// Parameters:
+// name - String with the ID of the extension
+// ext_func - Function supplied by the extension with its data
+this.addExtension = function(name, ext_func) {
+ if(!(name in extensions)) {
+ // Provide private vars/funcs here. Is there a better way to do this?
+
+ if($.isFunction(ext_func)) {
+ var ext = ext_func($.extend(canvas.getPrivateMethods(), {
+ svgroot: svgroot,
+ svgcontent: svgcontent,
+ nonce: getCurrentDrawing().getNonce(),
+ selectorManager: selectorManager
+ }));
+ } else {
+ var ext = ext_func;
+ }
+ extensions[name] = ext;
+ call("extension_added", ext);
+ } else {
+ console.log('Cannot add extension "' + name + '", an extension by that name already exists"');
+ }
+};
+
+// This method rounds the incoming value to the nearest value based on the current_zoom
+var round = this.round = function(val) {
+ return parseInt(val*current_zoom)/current_zoom;
+};
+
+// This method sends back an array or a NodeList full of elements that
+// intersect the multi-select rubber-band-box on the current_layer only.
+//
+// Since the only browser that supports the SVG DOM getIntersectionList is Opera,
+// we need to provide an implementation here. We brute-force it for now.
+//
+// Reference:
+// Firefox does not implement getIntersectionList(), see https://bugzilla.mozilla.org/show_bug.cgi?id=501421
+// Webkit does not implement getIntersectionList(), see https://bugs.webkit.org/show_bug.cgi?id=11274
+var getIntersectionList = this.getIntersectionList = function(rect) {
+ if (rubberBox == null) { return null; }
+
+ var parent = current_group || getCurrentDrawing().getCurrentLayer();
+
+ if(!curBBoxes.length) {
+ // Cache all bboxes
+ curBBoxes = getVisibleElementsAndBBoxes(parent);
+ }
+
+ var resultList = null;
+ try {
+ resultList = parent.getIntersectionList(rect, null);
+ } catch(e) { }
+
+ if (resultList == null || typeof(resultList.item) != "function") {
+ resultList = [];
+
+ if(!rect) {
+ var rubberBBox = rubberBox.getBBox();
+ var bb = {};
+
+ for(var o in rubberBBox) {
+ bb[o] = rubberBBox[o] / current_zoom;
+ }
+ rubberBBox = bb;
+
+ } else {
+ var rubberBBox = rect;
+ }
+ var i = curBBoxes.length;
+ while (i--) {
+ if(!rubberBBox.width || !rubberBBox.width) continue;
+ if (svgedit.math.rectsIntersect(rubberBBox, curBBoxes[i].bbox)) {
+ resultList.push(curBBoxes[i].elem);
+ }
+ }
+ }
+ // addToSelection expects an array, but it's ok to pass a NodeList
+ // because using square-bracket notation is allowed:
+ // http://www.w3.org/TR/DOM-Level-2-Core/ecma-script-binding.html
+ return resultList;
+};
+
+// TODO(codedread): Migrate this into svgutils.js
+// Function: getStrokedBBox
+// Get the bounding box for one or more stroked and/or transformed elements
+//
+// Parameters:
+// elems - Array with DOM elements to check
+//
+// Returns:
+// A single bounding box object
+getStrokedBBox = this.getStrokedBBox = function(elems) {
+ if(!elems) elems = getVisibleElements();
+ if(!elems.length) return false;
+ // Make sure the expected BBox is returned if the element is a group
+ var getCheckedBBox = function(elem) {
+
+ try {
+ // TODO: Fix issue with rotated groups. Currently they work
+ // fine in FF, but not in other browsers (same problem mentioned
+ // in Issue 339 comment #2).
+
+ var bb = svgedit.utilities.getBBox(elem);
+
+ var angle = svgedit.utilities.getRotationAngle(elem);
+ if ((angle && angle % 90) ||
+ svgedit.math.hasMatrixTransform(svgedit.transformlist.getTransformList(elem))) {
+ // Accurate way to get BBox of rotated element in Firefox:
+ // Put element in group and get its BBox
+
+ var good_bb = false;
+
+ // Get the BBox from the raw path for these elements
+ var elemNames = ['ellipse','path','line','polyline','polygon'];
+ if(elemNames.indexOf(elem.tagName) >= 0) {
+ bb = good_bb = canvas.convertToPath(elem, true);
+ } else if(elem.tagName == 'rect') {
+ // Look for radius
+ var rx = elem.getAttribute('rx');
+ var ry = elem.getAttribute('ry');
+ if(rx || ry) {
+ bb = good_bb = canvas.convertToPath(elem, true);
+ }
+ }
+
+ if(!good_bb) {
+ // Must use clone else FF freaks out
+ var clone = elem.cloneNode(true);
+ var g = document.createElementNS(svgns, "g");
+ var parent = elem.parentNode;
+ parent.appendChild(g);
+ g.appendChild(clone);
+ bb = svgedit.utilities.bboxToObj(g.getBBox());
+ parent.removeChild(g);
+ }
+
+
+ // Old method: Works by giving the rotated BBox,
+ // this is (unfortunately) what Opera and Safari do
+ // natively when getting the BBox of the parent group
+// var angle = angle * Math.PI / 180.0;
+// var rminx = Number.MAX_VALUE, rminy = Number.MAX_VALUE,
+// rmaxx = Number.MIN_VALUE, rmaxy = Number.MIN_VALUE;
+// var cx = round(bb.x + bb.width/2),
+// cy = round(bb.y + bb.height/2);
+// var pts = [ [bb.x - cx, bb.y - cy],
+// [bb.x + bb.width - cx, bb.y - cy],
+// [bb.x + bb.width - cx, bb.y + bb.height - cy],
+// [bb.x - cx, bb.y + bb.height - cy] ];
+// var j = 4;
+// while (j--) {
+// var x = pts[j][0],
+// y = pts[j][1],
+// r = Math.sqrt( x*x + y*y );
+// var theta = Math.atan2(y,x) + angle;
+// x = round(r * Math.cos(theta) + cx);
+// y = round(r * Math.sin(theta) + cy);
+//
+// // now set the bbox for the shape after it's been rotated
+// if (x < rminx) rminx = x;
+// if (y < rminy) rminy = y;
+// if (x > rmaxx) rmaxx = x;
+// if (y > rmaxy) rmaxy = y;
+// }
+//
+// bb.x = rminx;
+// bb.y = rminy;
+// bb.width = rmaxx - rminx;
+// bb.height = rmaxy - rminy;
+ }
+ return bb;
+ } catch(e) {
+ console.log(elem, e);
+ return null;
+ }
+ };
+
+ var full_bb;
+ $.each(elems, function() {
+ if(full_bb) return;
+ if(!this.parentNode) return;
+ full_bb = getCheckedBBox(this);
+ });
+
+ // This shouldn't ever happen...
+ if(full_bb == null) return null;
+
+ // full_bb doesn't include the stoke, so this does no good!
+// if(elems.length == 1) return full_bb;
+
+ var max_x = full_bb.x + full_bb.width;
+ var max_y = full_bb.y + full_bb.height;
+ var min_x = full_bb.x;
+ var min_y = full_bb.y;
+
+ // FIXME: same re-creation problem with this function as getCheckedBBox() above
+ var getOffset = function(elem) {
+ var sw = elem.getAttribute("stroke-width");
+ var offset = 0;
+ if (elem.getAttribute("stroke") != "none" && !isNaN(sw)) {
+ offset += sw/2;
+ }
+ return offset;
+ }
+ var bboxes = [];
+ $.each(elems, function(i, elem) {
+ var cur_bb = getCheckedBBox(elem);
+ if(cur_bb) {
+ var offset = getOffset(elem);
+ min_x = Math.min(min_x, cur_bb.x - offset);
+ min_y = Math.min(min_y, cur_bb.y - offset);
+ bboxes.push(cur_bb);
+ }
+ });
+
+ full_bb.x = min_x;
+ full_bb.y = min_y;
+
+ $.each(elems, function(i, elem) {
+ var cur_bb = bboxes[i];
+ // ensure that elem is really an element node
+ if (cur_bb && elem.nodeType == 1) {
+ var offset = getOffset(elem);
+ max_x = Math.max(max_x, cur_bb.x + cur_bb.width + offset);
+ max_y = Math.max(max_y, cur_bb.y + cur_bb.height + offset);
+ }
+ });
+
+ full_bb.width = max_x - min_x;
+ full_bb.height = max_y - min_y;
+ return full_bb;
+}
+
+// Function: getVisibleElements
+// Get all elements that have a BBox (excludes <defs>, <title>, etc).
+// Note that 0-opacity, off-screen etc elements are still considered "visible"
+// for this function
+//
+// Parameters:
+// parent - The parent DOM element to search within
+//
+// Returns:
+// An array with all "visible" elements.
+var getVisibleElements = this.getVisibleElements = function(parent) {
+ if(!parent) parent = $(svgcontent).children(); // Prevent layers from being included
+
+ var contentElems = [];
+ $(parent).children().each(function(i, elem) {
+ try {
+ if (elem.getBBox()) {
+ contentElems.push(elem);
+ }
+ } catch(e) {}
+ });
+ return contentElems.reverse();
+};
+
+// Function: getVisibleElementsAndBBoxes
+// Get all elements that have a BBox (excludes <defs>, <title>, etc).
+// Note that 0-opacity, off-screen etc elements are still considered "visible"
+// for this function
+//
+// Parameters:
+// parent - The parent DOM element to search within
+//
+// Returns:
+// An array with objects that include:
+// * elem - The element
+// * bbox - The element's BBox as retrieved from getStrokedBBox
+var getVisibleElementsAndBBoxes = this.getVisibleElementsAndBBoxes = function(parent) {
+ if(!parent) parent = $(svgcontent).children(); // Prevent layers from being included
+
+ var contentElems = [];
+ $(parent).children().each(function(i, elem) {
+ try {
+ if (elem.getBBox()) {
+ contentElems.push({'elem':elem, 'bbox':getStrokedBBox([elem])});
+ }
+ } catch(e) {}
+ });
+ return contentElems.reverse();
+};
+
+// Function: groupSvgElem
+// Wrap an SVG element into a group element, mark the group as 'gsvg'
+//
+// Parameters:
+// elem - SVG element to wrap
+var groupSvgElem = this.groupSvgElem = function(elem) {
+ var g = document.createElementNS(svgns, "g");
+ elem.parentNode.replaceChild(g, elem);
+ $(g).append(elem).data('gsvg', elem)[0].id = getNextId();
+}
+
+// Function: copyElem
+// Create a clone of an element, updating its ID and its children's IDs when needed
+//
+// Parameters:
+// el - DOM element to clone
+//
+// Returns: The cloned element
+var copyElem = function(el) {
+ // manually create a copy of the element
+ var new_el = document.createElementNS(el.namespaceURI, el.nodeName);
+ $.each(el.attributes, function(i, attr) {
+ if (attr.localName != '-moz-math-font-style') {
+ new_el.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.nodeValue);
+ }
+ });
+ // set the copied element's new id
+ new_el.removeAttribute("id");
+ new_el.id = getNextId();
+
+ // Opera's "d" value needs to be reset for Opera/Win/non-EN
+ // Also needed for webkit (else does not keep curved segments on clone)
+ if(svgedit.browser.isWebkit() && el.nodeName == 'path') {
+ var fixed_d = pathActions.convertPath(el);
+ new_el.setAttribute('d', fixed_d);
+ }
+
+ // now create copies of all children
+ $.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;
+ }
+ });
+
+ if($(el).data('gsvg')) {
+ $(new_el).data('gsvg', new_el.firstChild);
+ } else if($(el).data('symbol')) {
+ var ref = $(el).data('symbol');
+ $(new_el).data('ref', ref).data('symbol', ref);
+ }
+
+ else if(new_el.tagName == 'image') {
+ preventClickDefault(new_el);
+ }
+ return new_el;
+};
+
+// Set scope for these functions
+var getId, getNextId, call;
+
+(function(c) {
+
+ // Object to contain editor event names and callback functions
+ var events = {};
+
+ getId = c.getId = function() { return getCurrentDrawing().getId(); };
+ getNextId = c.getNextId = function() { return getCurrentDrawing().getNextId(); };
+
+ // Function: call
+ // Run the callback function associated with the given event
+ //
+ // Parameters:
+ // event - String with the event name
+ // arg - Argument to pass through to the callback function
+ call = c.call = function(event, arg) {
+ if (events[event]) {
+ return events[event](this, arg);
+ }
+ };
+
+ // Function: bind
+ // Attaches a callback function to an event
+ //
+ // Parameters:
+ // event - String indicating the name of the event
+ // f - The callback function to bind to the event
+ //
+ // Return:
+ // The previous event
+ c.bind = function(event, f) {
+ var old = events[event];
+ events[event] = f;
+ return old;
+ };
+
+}(canvas));
+
+// Function: canvas.prepareSvg
+// Runs the SVG Document through the sanitizer and then updates its paths.
+//
+// Parameters:
+// newDoc - The SVG DOM document
+this.prepareSvg = function(newDoc) {
+ this.sanitizeSvg(newDoc.documentElement);
+
+ // convert paths into absolute commands
+ var paths = newDoc.getElementsByTagNameNS(svgns, "path");
+ for (var i = 0, len = paths.length; i < len; ++i) {
+ var path = paths[i];
+ path.setAttribute('d', pathActions.convertPath(path));
+ pathActions.fixEnd(path);
+ }
+};
+
+// Function getRefElem
+// Get the reference element associated with the given attribute value
+//
+// Parameters:
+// attrVal - The attribute value as a string
+var getRefElem = this.getRefElem = function(attrVal) {
+ return getElem(getUrlFromAttr(attrVal).substr(1));
+}
+
+// Function: ffClone
+// Hack for Firefox bugs where text element features aren't updated or get
+// messed up. See issue 136 and issue 137.
+// This function clones the element and re-selects it
+// TODO: Test for this bug on load and add it to "support" object instead of
+// browser sniffing
+//
+// Parameters:
+// elem - The (text) DOM element to clone
+var ffClone = function(elem) {
+ if(!svgedit.browser.isGecko()) return elem;
+ var clone = elem.cloneNode(true)
+ elem.parentNode.insertBefore(clone, elem);
+ elem.parentNode.removeChild(elem);
+ selectorManager.releaseSelector(elem);
+ selectedElements[0] = clone;
+ selectorManager.requestSelector(clone).showGrips(true);
+ return clone;
+}
+
+
+// this.each is deprecated, if any extension used this it can be recreated by doing this:
+// $(canvas.getRootElem()).children().each(...)
+
+// this.each = function(cb) {
+// $(svgroot).children().each(cb);
+// };
+
+
+// Function: setRotationAngle
+// Removes any old rotations if present, prepends a new rotation at the
+// transformed center
+//
+// Parameters:
+// val - The new rotation angle in degrees
+// preventUndo - Boolean indicating whether the action should be undoable or not
+this.setRotationAngle = function(val, preventUndo) {
+ // ensure val is the proper type
+ val = parseFloat(val);
+ var elem = selectedElements[0];
+ var oldTransform = elem.getAttribute("transform");
+ var bbox = svgedit.utilities.getBBox(elem);
+ var cx = bbox.x+bbox.width/2, cy = bbox.y+bbox.height/2;
+ var tlist = getTransformList(elem);
+
+ // only remove the real rotational transform if present (i.e. at index=0)
+ if (tlist.numberOfItems > 0) {
+ var xform = tlist.getItem(0);
+ if (xform.type == 4) {
+ tlist.removeItem(0);
+ }
+ }
+ // find R_nc and insert it
+ if (val != 0) {
+ var center = transformPoint(cx,cy,transformListToTransform(tlist).matrix);
+ var R_nc = svgroot.createSVGTransform();
+ R_nc.setRotate(val, center.x, center.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(R_nc, 0);
+ } else {
+ tlist.appendItem(R_nc);
+ }
+ }
+ else if (tlist.numberOfItems == 0) {
+ elem.removeAttribute("transform");
+ }
+
+ if (!preventUndo) {
+ // we need to undo it, then redo it so it can be undo-able! :)
+ // TODO: figure out how to make changes to transform list undo-able cross-browser?
+ var newTransform = elem.getAttribute("transform");
+ elem.setAttribute("transform", oldTransform);
+ changeSelectedAttribute("transform",newTransform,selectedElements);
+ call("changed", selectedElements);
+ }
+ var pointGripContainer = getElem("pathpointgrip_container");
+// if(elem.nodeName == "path" && pointGripContainer) {
+// pathActions.setPointContainerTransform(elem.getAttribute("transform"));
+// }
+ var selector = selectorManager.requestSelector(selectedElements[0]);
+ selector.resize();
+ selector.updateGripCursors(val);
+};
+
+// Function: recalculateAllSelectedDimensions
+// Runs recalculateDimensions on the selected elements,
+// adding the changes to a single batch command
+var recalculateAllSelectedDimensions = this.recalculateAllSelectedDimensions = function() {
+ var text = (current_resize_mode == "none" ? "position" : "size");
+ var batchCmd = new BatchCommand(text);
+
+ var i = selectedElements.length;
+ while(i--) {
+ var elem = selectedElements[i];
+// if(getRotationAngle(elem) && !hasMatrixTransform(getTransformList(elem))) continue;
+ var cmd = recalculateDimensions(elem);
+ if (cmd) {
+ batchCmd.addSubCommand(cmd);
+ }
+ }
+
+ if (!batchCmd.isEmpty()) {
+ addCommandToHistory(batchCmd);
+ call("changed", selectedElements);
+ }
+};
+
+// this is how we map paths to our preferred relative segment types
+var pathMap = [0, 'z', 'M', 'm', 'L', 'l', 'C', 'c', 'Q', 'q', 'A', 'a',
+ 'H', 'h', 'V', 'v', 'S', 's', 'T', 't'];
+
+// Debug tool to easily see the current matrix in the browser's console
+var logMatrix = function(m) {
+ console.log([m.a,m.b,m.c,m.d,m.e,m.f]);
+};
+
+// Function: remapElement
+// Applies coordinate changes to an element based on the given matrix
+//
+// Parameters:
+// selected - DOM element to be changed
+// changes - Object with changes to be remapped
+// m - Matrix object to use for remapping coordinates
+var remapElement = this.remapElement = function(selected,changes,m) {
+
+ var remap = function(x,y) { return transformPoint(x,y,m); },
+ scalew = function(w) { return m.a*w; },
+ scaleh = function(h) { return m.d*h; },
+ doSnapping = curConfig.gridSnapping && selected.parentNode.parentNode.localName === "svg",
+ finishUp = function() {
+ if(doSnapping) for(var o in changes) changes[o] = snapToGrid(changes[o]);
+ assignAttributes(selected, changes, 1000, true);
+ }
+ box = svgedit.utilities.getBBox(selected);
+
+ for(var i = 0; i < 2; i++) {
+ var type = i === 0 ? 'fill' : 'stroke';
+ var attrVal = selected.getAttribute(type);
+ if(attrVal && attrVal.indexOf('url(') === 0) {
+ if(m.a < 0 || m.d < 0) {
+ var grad = getRefElem(attrVal);
+ var newgrad = grad.cloneNode(true);
+
+ if(m.a < 0) {
+ //flip x
+ var x1 = newgrad.getAttribute('x1');
+ var x2 = newgrad.getAttribute('x2');
+ newgrad.setAttribute('x1', -(x1 - 1));
+ newgrad.setAttribute('x2', -(x2 - 1));
+ }
+
+ if(m.d < 0) {
+ //flip y
+ var y1 = newgrad.getAttribute('y1');
+ var y2 = newgrad.getAttribute('y2');
+ newgrad.setAttribute('y1', -(y1 - 1));
+ newgrad.setAttribute('y2', -(y2 - 1));
+ }
+ newgrad.id = getNextId();
+ findDefs().appendChild(newgrad);
+ selected.setAttribute(type, 'url(#' + newgrad.id + ')');
+ }
+
+ // Not really working :(
+// if(selected.tagName === 'path') {
+// reorientGrads(selected, m);
+// }
+ }
+ }
+
+
+ var elName = selected.tagName;
+ if(elName === "g" || elName === "text" || elName === "use") {
+ // if it was a translate, then just update x,y
+ if (m.a == 1 && m.b == 0 && m.c == 0 && m.d == 1 &&
+ (m.e != 0 || m.f != 0) )
+ {
+ // [T][M] = [M][T']
+ // therefore [T'] = [M_inv][T][M]
+ var existing = transformListToTransform(selected).matrix,
+ t_new = matrixMultiply(existing.inverse(), m, existing);
+ changes.x = parseFloat(changes.x) + t_new.e;
+ changes.y = parseFloat(changes.y) + t_new.f;
+ }
+ else {
+ // we just absorb all matrices into the element and don't do any remapping
+ var chlist = getTransformList(selected);
+ var mt = svgroot.createSVGTransform();
+ mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix,m));
+ chlist.clear();
+ chlist.appendItem(mt);
+ }
+ }
+
+ // now we have a set of changes and an applied reduced transform list
+ // we apply the changes directly to the DOM
+ switch (elName)
+ {
+ case "foreignObject":
+ case "rect":
+ case "image":
+
+ // Allow images to be inverted (give them matrix when flipped)
+ if(elName === 'image' && (m.a < 0 || m.d < 0)) {
+ // Convert to matrix
+ var chlist = getTransformList(selected);
+ var mt = svgroot.createSVGTransform();
+ mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix,m));
+ chlist.clear();
+ chlist.appendItem(mt);
+ } else {
+ var pt1 = remap(changes.x,changes.y);
+
+ changes.width = scalew(changes.width);
+ changes.height = scaleh(changes.height);
+
+ changes.x = pt1.x + Math.min(0,changes.width);
+ changes.y = pt1.y + Math.min(0,changes.height);
+ changes.width = Math.abs(changes.width);
+ changes.height = Math.abs(changes.height);
+ }
+ finishUp();
+ break;
+ case "ellipse":
+ var c = remap(changes.cx,changes.cy);
+ changes.cx = c.x;
+ changes.cy = c.y;
+ changes.rx = scalew(changes.rx);
+ changes.ry = scaleh(changes.ry);
+
+ changes.rx = Math.abs(changes.rx);
+ changes.ry = Math.abs(changes.ry);
+ finishUp();
+ break;
+ case "circle":
+ var c = remap(changes.cx,changes.cy);
+ changes.cx = c.x;
+ changes.cy = c.y;
+ // take the minimum of the new selected box's dimensions for the new circle radius
+ var tbox = svgedit.math.transformBox(box.x, box.y, box.width, box.height, m);
+ var w = tbox.tr.x - tbox.tl.x, h = tbox.bl.y - tbox.tl.y;
+ changes.r = Math.min(w/2, h/2);
+
+ if(changes.r) changes.r = Math.abs(changes.r);
+ finishUp();
+ break;
+ case "line":
+ var pt1 = remap(changes.x1,changes.y1),
+ pt2 = remap(changes.x2,changes.y2);
+ changes.x1 = pt1.x;
+ changes.y1 = pt1.y;
+ changes.x2 = pt2.x;
+ changes.y2 = pt2.y;
+
+ case "text":
+ case "use":
+ finishUp();
+ break;
+ case "g":
+ var gsvg = $(selected).data('gsvg');
+ if(gsvg) {
+ assignAttributes(gsvg, changes, 1000, true);
+ }
+ break;
+ case "polyline":
+ case "polygon":
+ var len = changes.points.length;
+ for (var i = 0; i < len; ++i) {
+ var pt = changes.points[i];
+ pt = remap(pt.x,pt.y);
+ changes.points[i].x = pt.x;
+ changes.points[i].y = pt.y;
+ }
+
+ var len = changes.points.length;
+ var pstr = "";
+ for (var i = 0; i < len; ++i) {
+ var pt = changes.points[i];
+ pstr += pt.x + "," + pt.y + " ";
+ }
+ selected.setAttribute("points", pstr);
+ break;
+ case "path":
+
+ var segList = selected.pathSegList;
+ var len = segList.numberOfItems;
+ changes.d = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ var seg = segList.getItem(i);
+ changes.d[i] = {
+ type: seg.pathSegType,
+ x: seg.x,
+ y: seg.y,
+ x1: seg.x1,
+ y1: seg.y1,
+ x2: seg.x2,
+ y2: seg.y2,
+ r1: seg.r1,
+ r2: seg.r2,
+ angle: seg.angle,
+ largeArcFlag: seg.largeArcFlag,
+ sweepFlag: seg.sweepFlag
+ };
+ }
+
+ var len = changes.d.length,
+ firstseg = changes.d[0],
+ currentpt = remap(firstseg.x,firstseg.y);
+ changes.d[0].x = currentpt.x;
+ changes.d[0].y = currentpt.y;
+ for (var i = 1; i < len; ++i) {
+ var seg = changes.d[i];
+ var type = seg.type;
+ // if absolute or first segment, we want to remap x, y, x1, y1, x2, y2
+ // if relative, we want to scalew, scaleh
+ if (type % 2 == 0) { // absolute
+ var thisx = (seg.x != undefined) ? seg.x : currentpt.x, // for V commands
+ thisy = (seg.y != undefined) ? seg.y : currentpt.y, // for H commands
+ pt = remap(thisx,thisy),
+ pt1 = remap(seg.x1,seg.y1),
+ pt2 = remap(seg.x2,seg.y2);
+ seg.x = pt.x;
+ seg.y = pt.y;
+ seg.x1 = pt1.x;
+ seg.y1 = pt1.y;
+ seg.x2 = pt2.x;
+ seg.y2 = pt2.y;
+ seg.r1 = scalew(seg.r1),
+ seg.r2 = scaleh(seg.r2);
+ }
+ else { // relative
+ seg.x = scalew(seg.x);
+ seg.y = scaleh(seg.y);
+ seg.x1 = scalew(seg.x1);
+ seg.y1 = scaleh(seg.y1);
+ seg.x2 = scalew(seg.x2);
+ seg.y2 = scaleh(seg.y2);
+ seg.r1 = scalew(seg.r1),
+ seg.r2 = scaleh(seg.r2);
+ }
+ } // for each segment
+
+ var dstr = "";
+ var len = changes.d.length;
+ for (var i = 0; i < len; ++i) {
+ var seg = changes.d[i];
+ var type = seg.type;
+ dstr += pathMap[type];
+ switch(type) {
+ case 13: // relative horizontal line (h)
+ case 12: // absolute horizontal line (H)
+ dstr += seg.x + " ";
+ break;
+ case 15: // relative vertical line (v)
+ case 14: // absolute vertical line (V)
+ dstr += seg.y + " ";
+ break;
+ case 3: // relative move (m)
+ case 5: // relative line (l)
+ case 19: // relative smooth quad (t)
+ case 2: // absolute move (M)
+ case 4: // absolute line (L)
+ case 18: // absolute smooth quad (T)
+ dstr += seg.x + "," + seg.y + " ";
+ break;
+ case 7: // relative cubic (c)
+ case 6: // absolute cubic (C)
+ dstr += seg.x1 + "," + seg.y1 + " " + seg.x2 + "," + seg.y2 + " " +
+ seg.x + "," + seg.y + " ";
+ break;
+ case 9: // relative quad (q)
+ case 8: // absolute quad (Q)
+ dstr += seg.x1 + "," + seg.y1 + " " + seg.x + "," + seg.y + " ";
+ break;
+ case 11: // relative elliptical arc (a)
+ case 10: // absolute elliptical arc (A)
+ dstr += seg.r1 + "," + seg.r2 + " " + seg.angle + " " + (+seg.largeArcFlag) +
+ " " + (+seg.sweepFlag) + " " + seg.x + "," + seg.y + " ";
+ break;
+ case 17: // relative smooth cubic (s)
+ case 16: // absolute smooth cubic (S)
+ dstr += seg.x2 + "," + seg.y2 + " " + seg.x + "," + seg.y + " ";
+ break;
+ }
+ }
+
+ selected.setAttribute("d", dstr);
+ break;
+ }
+};
+
+// Function: updateClipPath
+// Updates a <clipPath>s values based on the given translation of an element
+//
+// Parameters:
+// attr - The clip-path attribute value with the clipPath's ID
+// tx - The translation's x value
+// ty - The translation's y value
+var updateClipPath = function(attr, tx, ty) {
+ var path = getRefElem(attr).firstChild;
+
+ var cp_xform = getTransformList(path);
+
+ var newxlate = svgroot.createSVGTransform();
+ newxlate.setTranslate(tx, ty);
+
+ cp_xform.appendItem(newxlate);
+
+ // Update clipPath's dimensions
+ recalculateDimensions(path);
+}
+
+// Function: recalculateDimensions
+// Decides the course of action based on the element's transform list
+//
+// Parameters:
+// selected - The DOM element to recalculate
+//
+// Returns:
+// Undo command object with the resulting change
+var recalculateDimensions = this.recalculateDimensions = function(selected) {
+ if (selected == null) return null;
+
+ var tlist = getTransformList(selected);
+
+ // remove any unnecessary transforms
+ if (tlist && tlist.numberOfItems > 0) {
+ var k = tlist.numberOfItems;
+ while (k--) {
+ var xform = tlist.getItem(k);
+ if (xform.type === 0) {
+ tlist.removeItem(k);
+ }
+ // remove identity matrices
+ else if (xform.type === 1) {
+ if (svgedit.math.isIdentity(xform.matrix)) {
+ tlist.removeItem(k);
+ }
+ }
+ // remove zero-degree rotations
+ else if (xform.type === 4) {
+ if (xform.angle === 0) {
+ tlist.removeItem(k);
+ }
+ }
+ }
+ // End here if all it has is a rotation
+ if(tlist.numberOfItems === 1 && getRotationAngle(selected)) return null;
+ }
+
+ // if this element had no transforms, we are done
+ if (!tlist || tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ return null;
+ }
+
+ // TODO: Make this work for more than 2
+ if (tlist) {
+ var k = tlist.numberOfItems;
+ var mxs = [];
+ while (k--) {
+ var xform = tlist.getItem(k);
+ if (xform.type === 1) {
+ mxs.push([xform.matrix, k]);
+ } else if(mxs.length) {
+ mxs = [];
+ }
+ }
+ if(mxs.length === 2) {
+ var m_new = svgroot.createSVGTransformFromMatrix(matrixMultiply(mxs[1][0], mxs[0][0]));
+ tlist.removeItem(mxs[0][1]);
+ tlist.removeItem(mxs[1][1]);
+ tlist.insertItemBefore(m_new, mxs[1][1]);
+ }
+
+ // combine matrix + translate
+ k = tlist.numberOfItems;
+ if(k >= 2 && tlist.getItem(k-2).type === 1 && tlist.getItem(k-1).type === 2) {
+ var mt = svgroot.createSVGTransform();
+
+ var m = matrixMultiply(
+ tlist.getItem(k-2).matrix,
+ tlist.getItem(k-1).matrix
+ );
+ mt.setMatrix(m);
+ tlist.removeItem(k-2);
+ tlist.removeItem(k-2);
+ tlist.appendItem(mt);
+ }
+ }
+
+ // If it still has a single [M] or [R][M], return null too (prevents BatchCommand from being returned).
+ switch ( selected.tagName ) {
+ // Ignore these elements, as they can absorb the [M]
+ case 'line':
+ case 'polyline':
+ case 'polygon':
+ case 'path':
+ break;
+ default:
+ if(
+ (tlist.numberOfItems === 1 && tlist.getItem(0).type === 1)
+ || (tlist.numberOfItems === 2 && tlist.getItem(0).type === 1 && tlist.getItem(0).type === 4)
+ ) {
+ return null;
+ }
+ }
+
+ // Grouped SVG element
+ var gsvg = $(selected).data('gsvg');
+
+ // we know we have some transforms, so set up return variable
+ var batchCmd = new BatchCommand("Transform");
+
+ // store initial values that will be affected by reducing the transform list
+ var changes = {}, initial = null, attrs = [];
+ switch (selected.tagName)
+ {
+ case "line":
+ attrs = ["x1", "y1", "x2", "y2"];
+ break;
+ case "circle":
+ attrs = ["cx", "cy", "r"];
+ break;
+ case "ellipse":
+ attrs = ["cx", "cy", "rx", "ry"];
+ break;
+ case "foreignObject":
+ case "rect":
+ case "image":
+ attrs = ["width", "height", "x", "y"];
+ break;
+ case "use":
+ case "text":
+ attrs = ["x", "y"];
+ break;
+ case "polygon":
+ case "polyline":
+ initial = {};
+ initial["points"] = selected.getAttribute("points");
+ var list = selected.points;
+ var len = list.numberOfItems;
+ changes["points"] = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ var pt = list.getItem(i);
+ changes["points"][i] = {x:pt.x,y:pt.y};
+ }
+ break;
+ case "path":
+ initial = {};
+ initial["d"] = selected.getAttribute("d");
+ changes["d"] = selected.getAttribute("d");
+ break;
+ } // switch on element type to get initial values
+
+ if(attrs.length) {
+ changes = $(selected).attr(attrs);
+ $.each(changes, function(attr, val) {
+ changes[attr] = convertToNum(attr, val);
+ });
+ } else if(gsvg) {
+ // GSVG exception
+ changes = {
+ x: $(gsvg).attr('x') || 0,
+ y: $(gsvg).attr('y') || 0
+ };
+ }
+
+ // if we haven't created an initial array in polygon/polyline/path, then
+ // make a copy of initial values and include the transform
+ if (initial == null) {
+ initial = $.extend(true, {}, changes);
+ $.each(initial, function(attr, val) {
+ initial[attr] = convertToNum(attr, val);
+ });
+ }
+ // save the start transform value too
+ initial["transform"] = start_transform ? start_transform : "";
+
+ // if it's a regular group, we have special processing to flatten transforms
+ if ((selected.tagName == "g" && !gsvg) || selected.tagName == "a") {
+ var box = svgedit.utilities.getBBox(selected),
+ oldcenter = {x: box.x+box.width/2, y: box.y+box.height/2},
+ newcenter = transformPoint(box.x+box.width/2, box.y+box.height/2,
+ transformListToTransform(tlist).matrix),
+ m = svgroot.createSVGMatrix();
+
+
+ // temporarily strip off the rotate and save the old center
+ var gangle = getRotationAngle(selected);
+ if (gangle) {
+ var a = gangle * Math.PI / 180;
+ if ( Math.abs(a) > (1.0e-10) ) {
+ var s = Math.sin(a)/(1 - Math.cos(a));
+ } else {
+ // FIXME: This blows up if the angle is exactly 0!
+ var s = 2/a;
+ }
+ for (var i = 0; i < tlist.numberOfItems; ++i) {
+ var xform = tlist.getItem(i);
+ if (xform.type == 4) {
+ // extract old center through mystical arts
+ var rm = xform.matrix;
+ oldcenter.y = (s*rm.e + rm.f)/2;
+ oldcenter.x = (rm.e - s*rm.f)/2;
+ tlist.removeItem(i);
+ break;
+ }
+ }
+ }
+ var tx = 0, ty = 0,
+ operation = 0,
+ N = tlist.numberOfItems;
+
+ if(N) {
+ var first_m = tlist.getItem(0).matrix;
+ }
+
+ // first, if it was a scale then the second-last transform will be it
+ if (N >= 3 && tlist.getItem(N-2).type == 3 &&
+ tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
+ {
+ operation = 3; // scale
+
+ // if the children are unrotated, pass the scale down directly
+ // otherwise pass the equivalent matrix() down directly
+ var tm = tlist.getItem(N-3).matrix,
+ sm = tlist.getItem(N-2).matrix,
+ tmn = tlist.getItem(N-1).matrix;
+
+ var children = selected.childNodes;
+ var c = children.length;
+ while (c--) {
+ var child = children.item(c);
+ tx = 0;
+ ty = 0;
+ if (child.nodeType == 1) {
+ var childTlist = getTransformList(child);
+
+ // some children might not have a transform (<metadata>, <defs>, etc)
+ if (!childTlist) continue;
+
+ var m = transformListToTransform(childTlist).matrix;
+
+ // Convert a matrix to a scale if applicable
+// if(hasMatrixTransform(childTlist) && childTlist.numberOfItems == 1) {
+// if(m.b==0 && m.c==0 && m.e==0 && m.f==0) {
+// childTlist.removeItem(0);
+// var translateOrigin = svgroot.createSVGTransform(),
+// scale = svgroot.createSVGTransform(),
+// translateBack = svgroot.createSVGTransform();
+// translateOrigin.setTranslate(0, 0);
+// scale.setScale(m.a, m.d);
+// translateBack.setTranslate(0, 0);
+// childTlist.appendItem(translateBack);
+// childTlist.appendItem(scale);
+// childTlist.appendItem(translateOrigin);
+// }
+// }
+
+ var angle = getRotationAngle(child);
+ var old_start_transform = start_transform;
+ var childxforms = [];
+ start_transform = child.getAttribute("transform");
+ if(angle || hasMatrixTransform(childTlist)) {
+ var e2t = svgroot.createSVGTransform();
+ e2t.setMatrix(matrixMultiply(tm, sm, tmn, m));
+ childTlist.clear();
+ childTlist.appendItem(e2t);
+ childxforms.push(e2t);
+ }
+ // if not rotated or skewed, push the [T][S][-T] down to the child
+ else {
+ // update the transform list with translate,scale,translate
+
+ // slide the [T][S][-T] from the front to the back
+ // [T][S][-T][M] = [M][T2][S2][-T2]
+
+ // (only bringing [-T] to the right of [M])
+ // [T][S][-T][M] = [T][S][M][-T2]
+ // [-T2] = [M_inv][-T][M]
+ var t2n = matrixMultiply(m.inverse(), tmn, m);
+ // [T2] is always negative translation of [-T2]
+ var t2 = svgroot.createSVGMatrix();
+ t2.e = -t2n.e;
+ t2.f = -t2n.f;
+
+ // [T][S][-T][M] = [M][T2][S2][-T2]
+ // [S2] = [T2_inv][M_inv][T][S][-T][M][-T2_inv]
+ var s2 = matrixMultiply(t2.inverse(), m.inverse(), tm, sm, tmn, m, t2n.inverse());
+
+ var translateOrigin = svgroot.createSVGTransform(),
+ scale = svgroot.createSVGTransform(),
+ translateBack = svgroot.createSVGTransform();
+ translateOrigin.setTranslate(t2n.e, t2n.f);
+ scale.setScale(s2.a, s2.d);
+ translateBack.setTranslate(t2.e, t2.f);
+ childTlist.appendItem(translateBack);
+ childTlist.appendItem(scale);
+ childTlist.appendItem(translateOrigin);
+ childxforms.push(translateBack);
+ childxforms.push(scale);
+ childxforms.push(translateOrigin);
+// logMatrix(translateBack.matrix);
+// logMatrix(scale.matrix);
+ } // not rotated
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ // TODO: If any <use> have this group as a parent and are
+ // referencing this child, then we need to impose a reverse
+ // scale on it so that when it won't get double-translated
+// var uses = selected.getElementsByTagNameNS(svgns, "use");
+// var href = "#"+child.id;
+// var u = uses.length;
+// while (u--) {
+// var useElem = uses.item(u);
+// if(href == getHref(useElem)) {
+// var usexlate = svgroot.createSVGTransform();
+// usexlate.setTranslate(-tx,-ty);
+// getTransformList(useElem).insertItemBefore(usexlate,0);
+// batchCmd.addSubCommand( recalculateDimensions(useElem) );
+// }
+// }
+ start_transform = old_start_transform;
+ } // element
+ } // for each child
+ // Remove these transforms from group
+ tlist.removeItem(N-1);
+ tlist.removeItem(N-2);
+ tlist.removeItem(N-3);
+ }
+ else if (N >= 3 && tlist.getItem(N-1).type == 1)
+ {
+ operation = 3; // scale
+ m = transformListToTransform(tlist).matrix;
+ var e2t = svgroot.createSVGTransform();
+ e2t.setMatrix(m);
+ tlist.clear();
+ tlist.appendItem(e2t);
+ }
+ // next, check if the first transform was a translate
+ // if we had [ T1 ] [ M ] we want to transform this into [ M ] [ T2 ]
+ // therefore [ T2 ] = [ M_inv ] [ T1 ] [ M ]
+ else if ( (N == 1 || (N > 1 && tlist.getItem(1).type != 3)) &&
+ tlist.getItem(0).type == 2)
+ {
+ operation = 2; // translate
+ var T_M = transformListToTransform(tlist).matrix;
+ tlist.removeItem(0);
+ var M_inv = transformListToTransform(tlist).matrix.inverse();
+ var M2 = matrixMultiply( M_inv, T_M );
+
+ tx = M2.e;
+ ty = M2.f;
+
+ if (tx != 0 || ty != 0) {
+ // we pass the translates down to the individual children
+ var children = selected.childNodes;
+ var c = children.length;
+
+ var clipPaths_done = [];
+
+ while (c--) {
+ var child = children.item(c);
+ if (child.nodeType == 1) {
+
+ // Check if child has clip-path
+ if(child.getAttribute('clip-path')) {
+ // tx, ty
+ var attr = child.getAttribute('clip-path');
+ if(clipPaths_done.indexOf(attr) === -1) {
+ updateClipPath(attr, tx, ty);
+ clipPaths_done.push(attr);
+ }
+ }
+
+ var old_start_transform = start_transform;
+ start_transform = child.getAttribute("transform");
+
+ var childTlist = getTransformList(child);
+ // some children might not have a transform (<metadata>, <defs>, etc)
+ if (childTlist) {
+ var newxlate = svgroot.createSVGTransform();
+ newxlate.setTranslate(tx,ty);
+ if(childTlist.numberOfItems) {
+ childTlist.insertItemBefore(newxlate, 0);
+ } else {
+ childTlist.appendItem(newxlate);
+ }
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ // If any <use> have this group as a parent and are
+ // referencing this child, then impose a reverse translate on it
+ // so that when it won't get double-translated
+ var uses = selected.getElementsByTagNameNS(svgns, "use");
+ var href = "#"+child.id;
+ var u = uses.length;
+ while (u--) {
+ var useElem = uses.item(u);
+ if(href == getHref(useElem)) {
+ var usexlate = svgroot.createSVGTransform();
+ usexlate.setTranslate(-tx,-ty);
+ getTransformList(useElem).insertItemBefore(usexlate,0);
+ batchCmd.addSubCommand( recalculateDimensions(useElem) );
+ }
+ }
+ start_transform = old_start_transform;
+ }
+ }
+ }
+
+ clipPaths_done = [];
+
+ start_transform = old_start_transform;
+ }
+ }
+ // else, a matrix imposition from a parent group
+ // keep pushing it down to the children
+ else if (N == 1 && tlist.getItem(0).type == 1 && !gangle) {
+ operation = 1;
+ var m = tlist.getItem(0).matrix,
+ children = selected.childNodes,
+ c = children.length;
+ while (c--) {
+ var child = children.item(c);
+ if (child.nodeType == 1) {
+ var old_start_transform = start_transform;
+ start_transform = child.getAttribute("transform");
+ var childTlist = getTransformList(child);
+
+ if (!childTlist) continue;
+
+ var em = matrixMultiply(m, transformListToTransform(childTlist).matrix);
+ var e2m = svgroot.createSVGTransform();
+ e2m.setMatrix(em);
+ childTlist.clear();
+ childTlist.appendItem(e2m,0);
+
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ start_transform = old_start_transform;
+
+ // Convert stroke
+ // TODO: Find out if this should actually happen somewhere else
+ var sw = child.getAttribute("stroke-width");
+ if (child.getAttribute("stroke") !== "none" && !isNaN(sw)) {
+ var avg = (Math.abs(em.a) + Math.abs(em.d)) / 2;
+ child.setAttribute('stroke-width', sw * avg);
+ }
+
+ }
+ }
+ tlist.clear();
+ }
+ // else it was just a rotate
+ else {
+ if (gangle) {
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(gangle,newcenter.x,newcenter.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ if (tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ }
+ return null;
+ }
+
+ // if it was a translate, put back the rotate at the new center
+ if (operation == 2) {
+ if (gangle) {
+ newcenter = {
+ x: oldcenter.x + first_m.e,
+ y: oldcenter.y + first_m.f
+ };
+
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(gangle,newcenter.x,newcenter.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ }
+ // if it was a resize
+ else if (operation == 3) {
+ var m = transformListToTransform(tlist).matrix;
+ var roldt = svgroot.createSVGTransform();
+ roldt.setRotate(gangle, oldcenter.x, oldcenter.y);
+ var rold = roldt.matrix;
+ var rnew = svgroot.createSVGTransform();
+ rnew.setRotate(gangle, newcenter.x, newcenter.y);
+ var rnew_inv = rnew.matrix.inverse(),
+ m_inv = m.inverse(),
+ extrat = matrixMultiply(m_inv, rnew_inv, rold, m);
+
+ tx = extrat.e;
+ ty = extrat.f;
+
+ if (tx != 0 || ty != 0) {
+ // now push this transform down to the children
+ // we pass the translates down to the individual children
+ var children = selected.childNodes;
+ var c = children.length;
+ while (c--) {
+ var child = children.item(c);
+ if (child.nodeType == 1) {
+ var old_start_transform = start_transform;
+ start_transform = child.getAttribute("transform");
+ var childTlist = getTransformList(child);
+ var newxlate = svgroot.createSVGTransform();
+ newxlate.setTranslate(tx,ty);
+ if(childTlist.numberOfItems) {
+ childTlist.insertItemBefore(newxlate, 0);
+ } else {
+ childTlist.appendItem(newxlate);
+ }
+
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ start_transform = old_start_transform;
+ }
+ }
+ }
+
+ if (gangle) {
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(rnew, 0);
+ } else {
+ tlist.appendItem(rnew);
+ }
+ }
+ }
+ }
+ // else, it's a non-group
+ else {
+
+ // FIXME: box might be null for some elements (<metadata> etc), need to handle this
+ var box = svgedit.utilities.getBBox(selected);
+
+ // Paths (and possbly other shapes) will have no BBox while still in <defs>,
+ // but we still may need to recalculate them (see issue 595).
+ // TODO: Figure out how to get BBox from these elements in case they
+ // have a rotation transform
+
+ if(!box && selected.tagName != 'path') return null;
+
+
+ var m = svgroot.createSVGMatrix(),
+ // temporarily strip off the rotate and save the old center
+ angle = getRotationAngle(selected);
+ if (angle) {
+ var oldcenter = {x: box.x+box.width/2, y: box.y+box.height/2},
+ newcenter = transformPoint(box.x+box.width/2, box.y+box.height/2,
+ transformListToTransform(tlist).matrix);
+
+ var a = angle * Math.PI / 180;
+ if ( Math.abs(a) > (1.0e-10) ) {
+ var s = Math.sin(a)/(1 - Math.cos(a));
+ } else {
+ // FIXME: This blows up if the angle is exactly 0!
+ var s = 2/a;
+ }
+ for (var i = 0; i < tlist.numberOfItems; ++i) {
+ var xform = tlist.getItem(i);
+ if (xform.type == 4) {
+ // extract old center through mystical arts
+ var rm = xform.matrix;
+ oldcenter.y = (s*rm.e + rm.f)/2;
+ oldcenter.x = (rm.e - s*rm.f)/2;
+ tlist.removeItem(i);
+ break;
+ }
+ }
+ }
+
+ // 2 = translate, 3 = scale, 4 = rotate, 1 = matrix imposition
+ var operation = 0;
+ var N = tlist.numberOfItems;
+
+ // Check if it has a gradient with userSpaceOnUse, in which case
+ // adjust it by recalculating the matrix transform.
+ // TODO: Make this work in Webkit using svgedit.transformlist.SVGTransformList
+ if(!svgedit.browser.isWebkit()) {
+ var fill = selected.getAttribute('fill');
+ if(fill && fill.indexOf('url(') === 0) {
+ var paint = getRefElem(fill);
+ var type = 'pattern';
+ if(paint.tagName !== type) type = 'gradient';
+ var attrVal = paint.getAttribute(type + 'Units');
+ if(attrVal === 'userSpaceOnUse') {
+ //Update the userSpaceOnUse element
+ m = transformListToTransform(tlist).matrix;
+ var gtlist = getTransformList(paint);
+ var gmatrix = transformListToTransform(gtlist).matrix;
+ m = matrixMultiply(m, gmatrix);
+ var m_str = "matrix(" + [m.a,m.b,m.c,m.d,m.e,m.f].join(",") + ")";
+ paint.setAttribute(type + 'Transform', m_str);
+ }
+ }
+ }
+
+ // first, if it was a scale of a non-skewed element, then the second-last
+ // transform will be the [S]
+ // if we had [M][T][S][T] we want to extract the matrix equivalent of
+ // [T][S][T] and push it down to the element
+ if (N >= 3 && tlist.getItem(N-2).type == 3 &&
+ tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
+
+ // Removed this so a <use> with a given [T][S][T] would convert to a matrix.
+ // Is that bad?
+ // && selected.nodeName != "use"
+ {
+ operation = 3; // scale
+ m = transformListToTransform(tlist,N-3,N-1).matrix;
+ tlist.removeItem(N-1);
+ tlist.removeItem(N-2);
+ tlist.removeItem(N-3);
+ } // if we had [T][S][-T][M], then this was a skewed element being resized
+ // Thus, we simply combine it all into one matrix
+ else if(N == 4 && tlist.getItem(N-1).type == 1) {
+ operation = 3; // scale
+ m = transformListToTransform(tlist).matrix;
+ var e2t = svgroot.createSVGTransform();
+ e2t.setMatrix(m);
+ tlist.clear();
+ tlist.appendItem(e2t);
+ // reset the matrix so that the element is not re-mapped
+ m = svgroot.createSVGMatrix();
+ } // if we had [R][T][S][-T][M], then this was a rotated matrix-element
+ // if we had [T1][M] we want to transform this into [M][T2]
+ // therefore [ T2 ] = [ M_inv ] [ T1 ] [ M ] and we can push [T2]
+ // down to the element
+ else if ( (N == 1 || (N > 1 && tlist.getItem(1).type != 3)) &&
+ tlist.getItem(0).type == 2)
+ {
+ operation = 2; // translate
+ var oldxlate = tlist.getItem(0).matrix,
+ meq = transformListToTransform(tlist,1).matrix,
+ meq_inv = meq.inverse();
+ m = matrixMultiply( meq_inv, oldxlate, meq );
+ tlist.removeItem(0);
+ }
+ // else if this child now has a matrix imposition (from a parent group)
+ // we might be able to simplify
+ else if (N == 1 && tlist.getItem(0).type == 1 && !angle) {
+ // Remap all point-based elements
+ m = transformListToTransform(tlist).matrix;
+ switch (selected.tagName) {
+ case 'line':
+ changes = $(selected).attr(["x1","y1","x2","y2"]);
+ case 'polyline':
+ case 'polygon':
+ changes.points = selected.getAttribute("points");
+ if(changes.points) {
+ var list = selected.points;
+ var len = list.numberOfItems;
+ changes.points = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ var pt = list.getItem(i);
+ changes.points[i] = {x:pt.x,y:pt.y};
+ }
+ }
+ case 'path':
+ changes.d = selected.getAttribute("d");
+ operation = 1;
+ tlist.clear();
+ break;
+ default:
+ break;
+ }
+ }
+ // if it was a rotation, put the rotate back and return without a command
+ // (this function has zero work to do for a rotate())
+ else {
+ operation = 4; // rotation
+ if (angle) {
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(angle,newcenter.x,newcenter.y);
+
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ if (tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ }
+ return null;
+ }
+
+ // if it was a translate or resize, we need to remap the element and absorb the xform
+ if (operation == 1 || operation == 2 || operation == 3) {
+ remapElement(selected,changes,m);
+ } // if we are remapping
+
+ // if it was a translate, put back the rotate at the new center
+ if (operation == 2) {
+ if (angle) {
+ if(!hasMatrixTransform(tlist)) {
+ newcenter = {
+ x: oldcenter.x + m.e,
+ y: oldcenter.y + m.f
+ };
+ }
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(angle, newcenter.x, newcenter.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ }
+ // [Rold][M][T][S][-T] became [Rold][M]
+ // we want it to be [Rnew][M][Tr] where Tr is the
+ // translation required to re-center it
+ // Therefore, [Tr] = [M_inv][Rnew_inv][Rold][M]
+ else if (operation == 3 && angle) {
+ var m = transformListToTransform(tlist).matrix;
+ var roldt = svgroot.createSVGTransform();
+ roldt.setRotate(angle, oldcenter.x, oldcenter.y);
+ var rold = roldt.matrix;
+ var rnew = svgroot.createSVGTransform();
+ rnew.setRotate(angle, newcenter.x, newcenter.y);
+ var rnew_inv = rnew.matrix.inverse();
+ var m_inv = m.inverse();
+ var extrat = matrixMultiply(m_inv, rnew_inv, rold, m);
+
+ remapElement(selected,changes,extrat);
+ if (angle) {
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(rnew, 0);
+ } else {
+ tlist.appendItem(rnew);
+ }
+ }
+ }
+ } // a non-group
+
+ // if the transform list has been emptied, remove it
+ if (tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ }
+
+ batchCmd.addSubCommand(new ChangeElementCommand(selected, initial));
+
+ return batchCmd;
+};
+
+// Root Current Transformation Matrix in user units
+var root_sctm = null;
+
+// Group: Selection
+
+// Function: clearSelection
+// Clears the selection. The 'selected' handler is then called.
+// Parameters:
+// noCall - Optional boolean that when true does not call the "selected" handler
+var clearSelection = this.clearSelection = function(noCall) {
+ if (selectedElements[0] != null) {
+ var len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ var elem = selectedElements[i];
+ if (elem == null) break;
+ selectorManager.releaseSelector(elem);
+ selectedElements[i] = null;
+ }
+// selectedBBoxes[0] = null;
+ }
+ if(!noCall) call("selected", selectedElements);
+};
+
+// TODO: do we need to worry about selectedBBoxes here?
+
+
+// Function: addToSelection
+// Adds a list of elements to the selection. The 'selected' handler is then called.
+//
+// Parameters:
+// elemsToAdd - an array of DOM elements to add to the selection
+// showGrips - a boolean flag indicating whether the resize grips should be shown
+var addToSelection = this.addToSelection = function(elemsToAdd, showGrips) {
+ if (elemsToAdd.length == 0) { return; }
+ // find the first null in our selectedElements array
+ var j = 0;
+
+ while (j < selectedElements.length) {
+ if (selectedElements[j] == null) {
+ break;
+ }
+ ++j;
+ }
+
+ // now add each element consecutively
+ var i = elemsToAdd.length;
+ while (i--) {
+ var elem = elemsToAdd[i];
+ if (!elem || !svgedit.utilities.getBBox(elem)) continue;
+
+ if(elem.tagName === 'a' && elem.childNodes.length === 1) {
+ // Make "a" element's child be the selected element
+ elem = elem.firstChild;
+ }
+
+ // if it's not already there, add it
+ if (selectedElements.indexOf(elem) == -1) {
+
+ selectedElements[j] = elem;
+
+ // only the first selectedBBoxes element is ever used in the codebase these days
+// if (j == 0) selectedBBoxes[0] = svgedit.utilities.getBBox(elem);
+ j++;
+ var sel = selectorManager.requestSelector(elem);
+
+ if (selectedElements.length > 1) {
+ sel.showGrips(false);
+ }
+ }
+ }
+ call("selected", selectedElements);
+
+ if (showGrips || selectedElements.length == 1) {
+ selectorManager.requestSelector(selectedElements[0]).showGrips(true);
+ }
+ else {
+ selectorManager.requestSelector(selectedElements[0]).showGrips(false);
+ }
+
+ // make sure the elements are in the correct order
+ // See: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition
+
+ selectedElements.sort(function(a,b) {
+ if(a && b && a.compareDocumentPosition) {
+ return 3 - (b.compareDocumentPosition(a) & 6);
+ } else if(a == null) {
+ return 1;
+ }
+ });
+
+ // Make sure first elements are not null
+ while(selectedElements[0] == null) selectedElements.shift(0);
+};
+
+// Function: selectOnly()
+// Selects only the given elements, shortcut for clearSelection(); addToSelection()
+//
+// Parameters:
+// elems - an array of DOM elements to be selected
+var selectOnly = this.selectOnly = function(elems, showGrips) {
+ clearSelection(true);
+ addToSelection(elems, showGrips);
+}
+
+// TODO: could use slice here to make this faster?
+// TODO: should the 'selected' handler
+
+// Function: removeFromSelection
+// Removes elements from the selection.
+//
+// Parameters:
+// elemsToRemove - an array of elements to remove from selection
+var removeFromSelection = this.removeFromSelection = function(elemsToRemove) {
+ if (selectedElements[0] == null) { return; }
+ if (elemsToRemove.length == 0) { return; }
+
+ // find every element and remove it from our array copy
+ var newSelectedItems = new Array(selectedElements.length);
+ j = 0,
+ len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ var elem = selectedElements[i];
+ if (elem) {
+ // keep the item
+ if (elemsToRemove.indexOf(elem) == -1) {
+ newSelectedItems[j] = elem;
+ j++;
+ }
+ else { // remove the item and its selector
+ selectorManager.releaseSelector(elem);
+ }
+ }
+ }
+ // the copy becomes the master now
+ selectedElements = newSelectedItems;
+};
+
+// Function: selectAllInCurrentLayer
+// Clears the selection, then adds all elements in the current layer to the selection.
+this.selectAllInCurrentLayer = function() {
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ if (current_layer) {
+ current_mode = "select";
+ selectOnly($(current_group || current_layer).children());
+ }
+};
+
+// Function: getMouseTarget
+// Gets the desired element from a mouse event
+//
+// Parameters:
+// evt - Event object from the mouse event
+//
+// Returns:
+// DOM element we want
+var getMouseTarget = this.getMouseTarget = function(evt) {
+ if (evt == null) {
+ return null;
+ }
+ var mouse_target = evt.target;
+
+ // if it was a <use>, Opera and WebKit return the SVGElementInstance
+ if (mouse_target.correspondingUseElement) mouse_target = mouse_target.correspondingUseElement;
+
+ // for foreign content, go up until we find the foreignObject
+ // WebKit browsers set the mouse target to the svgcanvas div
+ if ([mathns, htmlns].indexOf(mouse_target.namespaceURI) >= 0 &&
+ mouse_target.id != "svgcanvas")
+ {
+ while (mouse_target.nodeName != "foreignObject") {
+ mouse_target = mouse_target.parentNode;
+ if(!mouse_target) return svgroot;
+ }
+ }
+
+ // Get the desired mouse_target with jQuery selector-fu
+ // If it's root-like, select the root
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ if([svgroot, container, svgcontent, current_layer].indexOf(mouse_target) >= 0) {
+ return svgroot;
+ }
+
+ var $target = $(mouse_target);
+
+ // If it's a selection grip, return the grip parent
+ if($target.closest('#selectorParentGroup').length) {
+ // While we could instead have just returned mouse_target,
+ // this makes it easier to indentify as being a selector grip
+ return selectorManager.selectorParentGroup;
+ }
+
+ while (mouse_target.parentNode !== (current_group || current_layer)) {
+ mouse_target = mouse_target.parentNode;
+ }
+
+//
+// // go up until we hit a child of a layer
+// while (mouse_target.parentNode.parentNode.tagName == 'g') {
+// mouse_target = mouse_target.parentNode;
+// }
+ // Webkit bubbles the mouse event all the way up to the div, so we
+ // set the mouse_target to the svgroot like the other browsers
+// if (mouse_target.nodeName.toLowerCase() == "div") {
+// mouse_target = svgroot;
+// }
+
+ return mouse_target;
+};
+
+// Mouse events
+(function() {
+ var d_attr = null,
+ start_x = null,
+ start_y = null,
+ r_start_x = null,
+ r_start_y = null,
+ init_bbox = {},
+ freehand = {
+ minx: null,
+ miny: null,
+ maxx: null,
+ maxy: null
+ };
+
+ // - when we are in a create mode, the element is added to the canvas
+ // but the action is not recorded until mousing up
+ // - when we are in select mode, select the element, remember the position
+ // and do nothing else
+ var mouseDown = function(evt)
+ {
+ if(canvas.spaceKey || evt.button === 1) return;
+
+ var right_click = evt.button === 2;
+
+ if(evt.altKey) { // duplicate when dragging
+ svgCanvas.cloneSelectedElements(0,0);
+ }
+
+ root_sctm = svgcontent.getScreenCTM().inverse();
+
+ var pt = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = pt.x * current_zoom,
+ mouse_y = pt.y * current_zoom;
+
+ evt.preventDefault();
+
+ if(right_click) {
+ current_mode = "select";
+ lastClickPoint = pt;
+ }
+
+ // This would seem to be unnecessary...
+// if(['select', 'resize'].indexOf(current_mode) == -1) {
+// setGradient();
+// }
+
+ var x = mouse_x / current_zoom,
+ y = mouse_y / current_zoom,
+ mouse_target = getMouseTarget(evt);
+
+ if(mouse_target.tagName === 'a' && mouse_target.childNodes.length === 1) {
+ mouse_target = mouse_target.firstChild;
+ }
+
+ // real_x/y ignores grid-snap value
+ var real_x = r_start_x = start_x = x;
+ var real_y = r_start_y = start_y = y;
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ start_x = snapToGrid(start_x);
+ start_y = snapToGrid(start_y);
+ }
+
+ // if it is a selector grip, then it must be a single element selected,
+ // set the mouse_target to that and update the mode to rotate/resize
+
+ if (mouse_target == selectorManager.selectorParentGroup && selectedElements[0] != null) {
+ var grip = evt.target;
+ var griptype = elData(grip, "type");
+ // rotating
+ if (griptype == "rotate") {
+ current_mode = "rotate";
+ }
+ // resizing
+ else if(griptype == "resize") {
+ current_mode = "resize";
+ current_resize_mode = elData(grip, "dir");
+ }
+ mouse_target = selectedElements[0];
+ }
+
+ start_transform = mouse_target.getAttribute("transform");
+ var tlist = getTransformList(mouse_target);
+ switch (current_mode) {
+ case "select":
+ started = true;
+ current_resize_mode = "none";
+ if(right_click) started = false;
+
+ if (mouse_target != svgroot) {
+ // if this element is not yet selected, clear selection and select it
+ if (selectedElements.indexOf(mouse_target) == -1) {
+ // only clear selection if shift is not pressed (otherwise, add
+ // element to selection)
+ if (!evt.shiftKey) {
+ // No need to do the call here as it will be done on addToSelection
+ clearSelection(true);
+ }
+ addToSelection([mouse_target]);
+ justSelected = mouse_target;
+ pathActions.clear();
+ }
+ // else if it's a path, go into pathedit mode in mouseup
+
+ if(!right_click) {
+ // insert a dummy transform so if the element(s) are moved it will have
+ // a transform to use for its translate
+ for (var i = 0; i < selectedElements.length; ++i) {
+ if(selectedElements[i] == null) continue;
+ var slist = getTransformList(selectedElements[i]);
+ if(slist.numberOfItems) {
+ slist.insertItemBefore(svgroot.createSVGTransform(), 0);
+ } else {
+ slist.appendItem(svgroot.createSVGTransform());
+ }
+ }
+ }
+ }
+ else if(!right_click){
+ clearSelection();
+ current_mode = "multiselect";
+ if (rubberBox == null) {
+ rubberBox = selectorManager.getRubberBandBox();
+ }
+ r_start_x *= current_zoom;
+ r_start_y *= current_zoom;
+// console.log('p',[evt.pageX, evt.pageY]);
+// console.log('c',[evt.clientX, evt.clientY]);
+// console.log('o',[evt.offsetX, evt.offsetY]);
+// console.log('s',[start_x, start_y]);
+
+ assignAttributes(rubberBox, {
+ 'x': r_start_x,
+ 'y': r_start_y,
+ 'width': 0,
+ 'height': 0,
+ 'display': 'inline'
+ }, 100);
+ }
+ break;
+ case "zoom":
+ started = true;
+ if (rubberBox == null) {
+ rubberBox = selectorManager.getRubberBandBox();
+ }
+ assignAttributes(rubberBox, {
+ 'x': real_x * current_zoom,
+ 'y': real_x * current_zoom,
+ 'width': 0,
+ 'height': 0,
+ 'display': 'inline'
+ }, 100);
+ break;
+ case "resize":
+ started = true;
+ start_x = x;
+ start_y = y;
+
+ // Getting the BBox from the selection box, since we know we
+ // want to orient around it
+ init_bbox = svgedit.utilities.getBBox($('#selectedBox0')[0]);
+ var bb = {};
+ $.each(init_bbox, function(key, val) {
+ bb[key] = val/current_zoom;
+ });
+ init_bbox = bb;
+
+ // append three dummy transforms to the tlist so that
+ // we can translate,scale,translate in mousemove
+ var pos = getRotationAngle(mouse_target)?1:0;
+
+ if(hasMatrixTransform(tlist)) {
+ tlist.insertItemBefore(svgroot.createSVGTransform(), pos);
+ tlist.insertItemBefore(svgroot.createSVGTransform(), pos);
+ tlist.insertItemBefore(svgroot.createSVGTransform(), pos);
+ } else {
+ tlist.appendItem(svgroot.createSVGTransform());
+ tlist.appendItem(svgroot.createSVGTransform());
+ tlist.appendItem(svgroot.createSVGTransform());
+
+ if(svgedit.browser.supportsNonScalingStroke()) {
+ //Handle crash for newer Chrome + Windows: https://code.google.com/p/svg-edit/issues/detail?id=904
+ // TODO: Remove this workaround (all isChromeWindows blocks) once vendor fixes the issue
+ var isChromeWindows = svgedit.browser.isChrome() && svgedit.browser.isWindows();
+ if(isChromeWindows) {
+ var delayedStroke = function(ele) {
+ var _stroke = ele.getAttributeNS(null, 'stroke');
+ ele.removeAttributeNS(null, 'stroke');
+ //Re-apply stroke after delay. Anything higher than 1 seems to cause flicker
+ setTimeout(function() { ele.setAttributeNS(null, 'stroke', _stroke) }, 1);
+ }
+ }
+ mouse_target.style.vectorEffect = 'non-scaling-stroke';
+ if(isChromeWindows) delayedStroke(mouse_target);
+
+ var all = mouse_target.getElementsByTagName('*'),
+ len = all.length;
+ for(var i = 0; i < len; i++) {
+ all[i].style.vectorEffect = 'non-scaling-stroke';
+ if(isChromeWindows) delayedStroke(all[i]);
+ }
+ }
+ }
+ break;
+ case "fhellipse":
+ case "fhrect":
+ case "fhpath":
+ started = true;
+ d_attr = real_x + "," + real_y + " ";
+ var stroke_w = cur_shape.stroke_width == 0?1:cur_shape.stroke_width;
+ addSvgElementFromJson({
+ "element": "polyline",
+ "curStyles": true,
+ "attr": {
+ "points": d_attr,
+ "id": getNextId(),
+ "fill": "none",
+ "opacity": cur_shape.opacity / 2,
+ "stroke-linecap": "round",
+ "style": "pointer-events:none"
+ }
+ });
+ freehand.minx = real_x;
+ freehand.maxx = real_x;
+ freehand.miny = real_y;
+ freehand.maxy = real_y;
+ break;
+ case "image":
+ started = true;
+ var newImage = addSvgElementFromJson({
+ "element": "image",
+ "attr": {
+ "x": x,
+ "y": y,
+ "width": 0,
+ "height": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2,
+ "style": "pointer-events:inherit"
+ }
+ });
+ setHref(newImage, last_good_img_url);
+ preventClickDefault(newImage);
+ break;
+ case "square":
+ // FIXME: once we create the rect, we lose information that this was a square
+ // (for resizing purposes this could be important)
+ case "rect":
+ started = true;
+ start_x = x;
+ start_y = y;
+ addSvgElementFromJson({
+ "element": "rect",
+ "curStyles": true,
+ "attr": {
+ "x": x,
+ "y": y,
+ "width": 0,
+ "height": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ break;
+ case "line":
+ started = true;
+ var stroke_w = cur_shape.stroke_width == 0?1:cur_shape.stroke_width;
+ addSvgElementFromJson({
+ "element": "line",
+ "curStyles": true,
+ "attr": {
+ "x1": x,
+ "y1": y,
+ "x2": x,
+ "y2": y,
+ "id": getNextId(),
+ "stroke": cur_shape.stroke,
+ "stroke-width": stroke_w,
+ "stroke-dasharray": cur_shape.stroke_dasharray,
+ "stroke-linejoin": cur_shape.stroke_linejoin,
+ "stroke-linecap": cur_shape.stroke_linecap,
+ "stroke-opacity": cur_shape.stroke_opacity,
+ "fill": "none",
+ "opacity": cur_shape.opacity / 2,
+ "style": "pointer-events:none"
+ }
+ });
+ break;
+ case "circle":
+ started = true;
+ addSvgElementFromJson({
+ "element": "circle",
+ "curStyles": true,
+ "attr": {
+ "cx": x,
+ "cy": y,
+ "r": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ break;
+ case "ellipse":
+ started = true;
+ addSvgElementFromJson({
+ "element": "ellipse",
+ "curStyles": true,
+ "attr": {
+ "cx": x,
+ "cy": y,
+ "rx": 0,
+ "ry": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ break;
+ case "text":
+ started = true;
+ var newText = addSvgElementFromJson({
+ "element": "text",
+ "curStyles": true,
+ "attr": {
+ "x": x,
+ "y": y,
+ "id": getNextId(),
+ "fill": cur_text.fill,
+ "stroke-width": cur_text.stroke_width,
+ "font-size": cur_text.font_size,
+ "font-family": cur_text.font_family,
+ "text-anchor": "middle",
+ "xml:space": "preserve",
+ "opacity": cur_shape.opacity
+ }
+ });
+// newText.textContent = "text";
+ break;
+ case "path":
+ // Fall through
+ case "pathedit":
+ start_x *= current_zoom;
+ start_y *= current_zoom;
+ pathActions.mouseDown(evt, mouse_target, start_x, start_y);
+ started = true;
+ break;
+ case "textedit":
+ start_x *= current_zoom;
+ start_y *= current_zoom;
+ textActions.mouseDown(evt, mouse_target, start_x, start_y);
+ started = true;
+ break;
+ case "rotate":
+ started = true;
+ // we are starting an undoable change (a drag-rotation)
+ canvas.undoMgr.beginUndoableChange("transform", selectedElements);
+ break;
+ default:
+ // This could occur in an extension
+ break;
+ }
+
+ var ext_result = runExtensions("mouseDown", {
+ event: evt,
+ start_x: start_x,
+ start_y: start_y,
+ selectedElements: selectedElements
+ }, true);
+
+ $.each(ext_result, function(i, r) {
+ if(r && r.started) {
+ started = true;
+ }
+ });
+ };
+
+ // in this function we do not record any state changes yet (but we do update
+ // any elements that are still being created, moved or resized on the canvas)
+ var mouseMove = function(evt)
+ {
+ if (!started) return;
+ if(evt.button === 1 || canvas.spaceKey) return;
+
+ var selected = selectedElements[0],
+ pt = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = pt.x * current_zoom,
+ mouse_y = pt.y * current_zoom,
+ shape = getElem(getId());
+
+ var real_x = x = mouse_x / current_zoom;
+ var real_y = y = mouse_y / current_zoom;
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ }
+
+ evt.preventDefault();
+
+ switch (current_mode)
+ {
+ case "select":
+ // we temporarily use a translate on the element(s) being dragged
+ // this transform is removed upon mousing up and the element is
+ // relocated to the new location
+ if (selectedElements[0] !== null) {
+ var dx = x - start_x;
+ var dy = y - start_y;
+
+ if(curConfig.gridSnapping){
+ dx = snapToGrid(dx);
+ dy = snapToGrid(dy);
+ }
+
+ 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;
+ for (var i = 0; i < len; ++i) {
+ var selected = selectedElements[i];
+ if (selected == null) break;
+// if (i==0) {
+// var box = svgedit.utilities.getBBox(selected);
+// selectedBBoxes[i].x = box.x + dx;
+// selectedBBoxes[i].y = box.y + dy;
+// }
+
+ // update the dummy transform in our transform list
+ // to be a translate
+ var xform = svgroot.createSVGTransform();
+ var tlist = getTransformList(selected);
+ // Note that if Webkit and there's no ID for this
+ // element, the dummy transform may have gotten lost.
+ // This results in unexpected behaviour
+
+ xform.setTranslate(dx,dy);
+ if(tlist.numberOfItems) {
+ tlist.replaceItem(xform, 0);
+ } else {
+ tlist.appendItem(xform);
+ }
+
+ // update our internal bbox that we're tracking while dragging
+ selectorManager.requestSelector(selected).resize();
+ }
+
+ call("transition", selectedElements);
+ }
+ }
+ break;
+ case "multiselect":
+ real_x *= current_zoom;
+ real_y *= current_zoom;
+ assignAttributes(rubberBox, {
+ 'x': Math.min(r_start_x, real_x),
+ 'y': Math.min(r_start_y, real_y),
+ 'width': Math.abs(real_x - r_start_x),
+ 'height': Math.abs(real_y - r_start_y)
+ },100);
+
+ // for each selected:
+ // - if newList contains selected, do nothing
+ // - if newList doesn't contain selected, remove it from selected
+ // - for any newList that was not in selectedElements, add it to selected
+ var elemsToRemove = [], elemsToAdd = [],
+ newList = getIntersectionList(),
+ len = selectedElements.length;
+
+ for (var i = 0; i < len; ++i) {
+ var ind = newList.indexOf(selectedElements[i]);
+ if (ind == -1) {
+ elemsToRemove.push(selectedElements[i]);
+ }
+ else {
+ newList[ind] = null;
+ }
+ }
+
+ len = newList.length;
+ for (i = 0; i < len; ++i) { if (newList[i]) elemsToAdd.push(newList[i]); }
+
+ if (elemsToRemove.length > 0)
+ canvas.removeFromSelection(elemsToRemove);
+
+ if (elemsToAdd.length > 0)
+ addToSelection(elemsToAdd);
+
+ break;
+ case "resize":
+ // we track the resize bounding box and translate/scale the selected element
+ // while the mouse is down, when mouse goes up, we use this to recalculate
+ // the shape's coordinates
+ var tlist = getTransformList(selected),
+ hasMatrix = hasMatrixTransform(tlist),
+ box = hasMatrix ? init_bbox : svgedit.utilities.getBBox(selected),
+ left=box.x, top=box.y, width=box.width,
+ height=box.height, dx=(x-start_x), dy=(y-start_y);
+
+ if(curConfig.gridSnapping){
+ dx = snapToGrid(dx);
+ dy = snapToGrid(dy);
+ height = snapToGrid(height);
+ width = snapToGrid(width);
+ }
+
+ // if rotated, adjust the dx,dy values
+ var angle = getRotationAngle(selected);
+ if (angle) {
+ var r = Math.sqrt( dx*dx + dy*dy ),
+ theta = Math.atan2(dy,dx) - angle * Math.PI / 180.0;
+ dx = r * Math.cos(theta);
+ dy = r * Math.sin(theta);
+ }
+
+ // if not stretching in y direction, set dy to 0
+ // if not stretching in x direction, set dx to 0
+ if(current_resize_mode.indexOf("n")==-1 && current_resize_mode.indexOf("s")==-1) {
+ dy = 0;
+ }
+ if(current_resize_mode.indexOf("e")==-1 && current_resize_mode.indexOf("w")==-1) {
+ dx = 0;
+ }
+
+ var ts = null,
+ tx = 0, ty = 0,
+ sy = height ? (height+dy)/height : 1,
+ sx = width ? (width+dx)/width : 1;
+ // if we are dragging on the north side, then adjust the scale factor and ty
+ if(current_resize_mode.indexOf("n") >= 0) {
+ sy = height ? (height-dy)/height : 1;
+ ty = height;
+ }
+
+ // if we dragging on the east side, then adjust the scale factor and tx
+ if(current_resize_mode.indexOf("w") >= 0) {
+ sx = width ? (width-dx)/width : 1;
+ tx = width;
+ }
+
+ // update the transform list with translate,scale,translate
+ var translateOrigin = svgroot.createSVGTransform(),
+ scale = svgroot.createSVGTransform(),
+ translateBack = svgroot.createSVGTransform();
+
+ if(curConfig.gridSnapping){
+ left = snapToGrid(left);
+ tx = snapToGrid(tx);
+ top = snapToGrid(top);
+ ty = snapToGrid(ty);
+ }
+
+ translateOrigin.setTranslate(-(left+tx),-(top+ty));
+ if(evt.shiftKey) {
+ if(sx == 1) sx = sy
+ else sy = sx;
+ }
+ scale.setScale(sx,sy);
+
+ translateBack.setTranslate(left+tx,top+ty);
+ if(hasMatrix) {
+ var diff = angle?1:0;
+ tlist.replaceItem(translateOrigin, 2+diff);
+ tlist.replaceItem(scale, 1+diff);
+ tlist.replaceItem(translateBack, 0+diff);
+ } else {
+ var N = tlist.numberOfItems;
+ tlist.replaceItem(translateBack, N-3);
+ tlist.replaceItem(scale, N-2);
+ tlist.replaceItem(translateOrigin, N-1);
+ }
+
+ selectorManager.requestSelector(selected).resize();
+
+ call("transition", selectedElements);
+
+ break;
+ case "zoom":
+ real_x *= current_zoom;
+ real_y *= current_zoom;
+ assignAttributes(rubberBox, {
+ 'x': Math.min(r_start_x*current_zoom, real_x),
+ 'y': Math.min(r_start_y*current_zoom, real_y),
+ 'width': Math.abs(real_x - r_start_x*current_zoom),
+ 'height': Math.abs(real_y - r_start_y*current_zoom)
+ },100);
+ break;
+ case "text":
+ assignAttributes(shape,{
+ 'x': x,
+ 'y': y
+ },1000);
+ break;
+ case "line":
+ // Opera has a problem with suspendRedraw() apparently
+ var handle = null;
+ if (!window.opera) svgroot.suspendRedraw(1000);
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ }
+
+ var x2 = x;
+ var y2 = 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);
+ if (!window.opera) svgroot.unsuspendRedraw(handle);
+ break;
+ case "foreignObject":
+ // fall through
+ case "square":
+ // fall through
+ case "rect":
+ // fall through
+ case "image":
+ var square = (current_mode == 'square') || evt.shiftKey,
+ w = Math.abs(x - start_x),
+ h = Math.abs(y - start_y),
+ new_x, new_y;
+ if(square) {
+ w = h = Math.max(w, h);
+ new_x = start_x < x ? start_x : start_x - w;
+ new_y = start_y < y ? start_y : start_y - h;
+ } else {
+ new_x = Math.min(start_x,x);
+ new_y = Math.min(start_y,y);
+ }
+
+ if(curConfig.gridSnapping){
+ w = snapToGrid(w);
+ h = snapToGrid(h);
+ new_x = snapToGrid(new_x);
+ new_y = snapToGrid(new_y);
+ }
+
+ assignAttributes(shape,{
+ 'width': w,
+ 'height': h,
+ 'x': new_x,
+ 'y': new_y
+ },1000);
+
+ break;
+ case "circle":
+ var c = $(shape).attr(["cx", "cy"]);
+ var cx = c.cx, cy = c.cy,
+ rad = Math.sqrt( (x-cx)*(x-cx) + (y-cy)*(y-cy) );
+ if(curConfig.gridSnapping){
+ rad = snapToGrid(rad);
+ }
+ shape.setAttributeNS(null, "r", rad);
+ break;
+ case "ellipse":
+ var c = $(shape).attr(["cx", "cy"]);
+ var cx = c.cx, cy = c.cy;
+ // Opera has a problem with suspendRedraw() apparently
+ handle = null;
+ if (!window.opera) svgroot.suspendRedraw(1000);
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ cx = snapToGrid(cx);
+ y = snapToGrid(y);
+ cy = snapToGrid(cy);
+ }
+ shape.setAttributeNS(null, "rx", Math.abs(x - cx) );
+ var ry = Math.abs(evt.shiftKey?(x - cx):(y - cy));
+ shape.setAttributeNS(null, "ry", ry );
+ if (!window.opera) svgroot.unsuspendRedraw(handle);
+ break;
+ case "fhellipse":
+ case "fhrect":
+ freehand.minx = Math.min(real_x, freehand.minx);
+ freehand.maxx = Math.max(real_x, freehand.maxx);
+ freehand.miny = Math.min(real_y, freehand.miny);
+ freehand.maxy = Math.max(real_y, freehand.maxy);
+ // break; missing on purpose
+ case "fhpath":
+ d_attr += + real_x + "," + real_y + " ";
+ shape.setAttributeNS(null, "points", d_attr);
+ break;
+ // update path stretch line coordinates
+ case "path":
+ // fall through
+ case "pathedit":
+ x *= current_zoom;
+ y *= current_zoom;
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ start_x = snapToGrid(start_x);
+ start_y = snapToGrid(start_y);
+ }
+ if(evt.shiftKey) {
+ var path = svgedit.path.path;
+ if(path) {
+ var x1 = path.dragging?path.dragging[0]:start_x;
+ var y1 = path.dragging?path.dragging[1]:start_y;
+ } else {
+ var x1 = start_x;
+ var y1 = start_y;
+ }
+ var xya = snapToAngle(x1,y1,x,y);
+ x=xya.x; y=xya.y;
+ }
+
+ if(rubberBox && rubberBox.getAttribute('display') !== 'none') {
+ real_x *= current_zoom;
+ real_y *= current_zoom;
+ assignAttributes(rubberBox, {
+ 'x': Math.min(r_start_x*current_zoom, real_x),
+ 'y': Math.min(r_start_y*current_zoom, real_y),
+ 'width': Math.abs(real_x - r_start_x*current_zoom),
+ 'height': Math.abs(real_y - r_start_y*current_zoom)
+ },100);
+ }
+ pathActions.mouseMove(x, y);
+
+ break;
+ case "textedit":
+ x *= current_zoom;
+ y *= current_zoom;
+// if(rubberBox && rubberBox.getAttribute('display') != 'none') {
+// assignAttributes(rubberBox, {
+// 'x': Math.min(start_x,x),
+// 'y': Math.min(start_y,y),
+// 'width': Math.abs(x-start_x),
+// 'height': Math.abs(y-start_y)
+// },100);
+// }
+
+ textActions.mouseMove(mouse_x, mouse_y);
+
+ break;
+ case "rotate":
+ var box = svgedit.utilities.getBBox(selected),
+ cx = box.x + box.width/2,
+ cy = box.y + box.height/2,
+ m = getMatrix(selected),
+ center = transformPoint(cx,cy,m);
+ cx = center.x;
+ cy = center.y;
+ var angle = ((Math.atan2(cy-y,cx-x) * (180/Math.PI))-90) % 360;
+ if(curConfig.gridSnapping){
+ angle = snapToGrid(angle);
+ }
+ if(evt.shiftKey) { // restrict rotations to nice angles (WRS)
+ var snap = 45;
+ angle= Math.round(angle/snap)*snap;
+ }
+
+ canvas.setRotationAngle(angle<-180?(360+angle):angle, true);
+ call("transition", selectedElements);
+ break;
+ default:
+ break;
+ }
+
+ runExtensions("mouseMove", {
+ event: evt,
+ mouse_x: mouse_x,
+ mouse_y: mouse_y,
+ selected: selected
+ });
+
+ }; // mouseMove()
+
+ // - in create mode, the element's opacity is set properly, we create an InsertElementCommand
+ // and store it on the Undo stack
+ // - in move/resize mode, the element's attributes which were affected by the move/resize are
+ // identified, a ChangeElementCommand is created and stored on the stack for those attrs
+ // this is done in when we recalculate the selected dimensions()
+ var mouseUp = function(evt)
+ {
+ if(evt.button === 2) return;
+ var tempJustSelected = justSelected;
+ justSelected = null;
+ if (!started) return;
+ var pt = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = pt.x * current_zoom,
+ mouse_y = pt.y * current_zoom,
+ x = mouse_x / current_zoom,
+ y = mouse_y / current_zoom,
+ element = getElem(getId()),
+ keep = false;
+
+ var real_x = x;
+ var real_y = y;
+
+ // TODO: Make true when in multi-unit mode
+ var useUnit = false; // (curConfig.baseUnit !== 'px');
+ started = false;
+ switch (current_mode)
+ {
+ // intentionally fall-through to select here
+ case "resize":
+ case "multiselect":
+ if (rubberBox != null) {
+ rubberBox.setAttribute("display", "none");
+ curBBoxes = [];
+ }
+ current_mode = "select";
+ case "select":
+ if (selectedElements[0] != null) {
+ // if we only have one selected element
+ if (selectedElements[1] == null) {
+ // set our current stroke/fill properties to the element's
+ var selected = selectedElements[0];
+ switch ( selected.tagName ) {
+ case "g":
+ case "use":
+ case "image":
+ case "foreignObject":
+ break;
+ default:
+ cur_properties.fill = selected.getAttribute("fill");
+ cur_properties.fill_opacity = selected.getAttribute("fill-opacity");
+ cur_properties.stroke = selected.getAttribute("stroke");
+ cur_properties.stroke_opacity = selected.getAttribute("stroke-opacity");
+ cur_properties.stroke_width = selected.getAttribute("stroke-width");
+ cur_properties.stroke_dasharray = selected.getAttribute("stroke-dasharray");
+ cur_properties.stroke_linejoin = selected.getAttribute("stroke-linejoin");
+ cur_properties.stroke_linecap = selected.getAttribute("stroke-linecap");
+ }
+
+ if (selected.tagName == "text") {
+ cur_text.font_size = selected.getAttribute("font-size");
+ cur_text.font_family = selected.getAttribute("font-family");
+ }
+ selectorManager.requestSelector(selected).showGrips(true);
+
+ // This shouldn't be necessary as it was done on mouseDown...
+// call("selected", [selected]);
+ }
+ // always recalculate dimensions to strip off stray identity transforms
+ recalculateAllSelectedDimensions();
+ // if it was being dragged/resized
+ if (real_x != r_start_x || real_y != r_start_y) {
+ var len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ if (selectedElements[i] == null) break;
+ if(!selectedElements[i].firstChild) {
+ // Not needed for groups (incorrectly resizes elems), possibly not needed at all?
+ selectorManager.requestSelector(selectedElements[i]).resize();
+ }
+ }
+ }
+ // no change in position/size, so maybe we should move to pathedit
+ else {
+ var t = evt.target;
+ if (selectedElements[0].nodeName === "path" && selectedElements[1] == null) {
+ pathActions.select(selectedElements[0]);
+ } // if it was a path
+ // else, if it was selected and this is a shift-click, remove it from selection
+ else if (evt.shiftKey) {
+ if(tempJustSelected != t) {
+ canvas.removeFromSelection([t]);
+ }
+ }
+ } // no change in mouse position
+
+ // Remove non-scaling stroke
+ if(svgedit.browser.supportsNonScalingStroke()) {
+ var elem = selectedElements[0];
+ if (elem) {
+ elem.removeAttribute('style');
+ svgedit.utilities.walkTree(elem, function(elem) {
+ elem.removeAttribute('style');
+ });
+ }
+ }
+
+ }
+ return;
+ break;
+ case "zoom":
+ if (rubberBox != null) {
+ rubberBox.setAttribute("display", "none");
+ }
+ var factor = evt.shiftKey?.5:2;
+ call("zoomed", {
+ 'x': Math.min(r_start_x, real_x),
+ 'y': Math.min(r_start_y, real_y),
+ 'width': Math.abs(real_x - r_start_x),
+ 'height': Math.abs(real_y - r_start_y),
+ 'factor': factor
+ });
+ return;
+ case "fhpath":
+ // Check that the path contains at least 2 points; a degenerate one-point path
+ // causes problems.
+ // Webkit ignores how we set the points attribute with commas and uses space
+ // to separate all coordinates, see https://bugs.webkit.org/show_bug.cgi?id=29870
+ var coords = element.getAttribute('points');
+ var commaIndex = coords.indexOf(',');
+ if (commaIndex >= 0) {
+ keep = coords.indexOf(',', commaIndex+1) >= 0;
+ } else {
+ keep = coords.indexOf(' ', coords.indexOf(' ')+1) >= 0;
+ }
+ if (keep) {
+ element = pathActions.smoothPolylineIntoPath(element);
+ }
+ break;
+ case "line":
+ var attrs = $(element).attr(["x1", "x2", "y1", "y2"]);
+ keep = (attrs.x1 != attrs.x2 || attrs.y1 != attrs.y2);
+ break;
+ case "foreignObject":
+ case "square":
+ case "rect":
+ case "image":
+ var attrs = $(element).attr(["width", "height"]);
+ // Image should be kept regardless of size (use inherit dimensions later)
+ keep = (attrs.width != 0 || attrs.height != 0) || current_mode === "image";
+ break;
+ case "circle":
+ keep = (element.getAttribute('r') != 0);
+ break;
+ case "ellipse":
+ var attrs = $(element).attr(["rx", "ry"]);
+ keep = (attrs.rx != null || attrs.ry != null);
+ break;
+ case "fhellipse":
+ if ((freehand.maxx - freehand.minx) > 0 &&
+ (freehand.maxy - freehand.miny) > 0) {
+ element = addSvgElementFromJson({
+ "element": "ellipse",
+ "curStyles": true,
+ "attr": {
+ "cx": (freehand.minx + freehand.maxx) / 2,
+ "cy": (freehand.miny + freehand.maxy) / 2,
+ "rx": (freehand.maxx - freehand.minx) / 2,
+ "ry": (freehand.maxy - freehand.miny) / 2,
+ "id": getId()
+ }
+ });
+ call("changed",[element]);
+ keep = true;
+ }
+ break;
+ case "fhrect":
+ if ((freehand.maxx - freehand.minx) > 0 &&
+ (freehand.maxy - freehand.miny) > 0) {
+ element = addSvgElementFromJson({
+ "element": "rect",
+ "curStyles": true,
+ "attr": {
+ "x": freehand.minx,
+ "y": freehand.miny,
+ "width": (freehand.maxx - freehand.minx),
+ "height": (freehand.maxy - freehand.miny),
+ "id": getId()
+ }
+ });
+ call("changed",[element]);
+ keep = true;
+ }
+ break;
+ case "text":
+ keep = true;
+ selectOnly([element]);
+ textActions.start(element);
+ break;
+ case "path":
+ // set element to null here so that it is not removed nor finalized
+ element = null;
+ // continue to be set to true so that mouseMove happens
+ started = true;
+
+ var res = pathActions.mouseUp(evt, element, mouse_x, mouse_y);
+ element = res.element
+ keep = res.keep;
+ break;
+ case "pathedit":
+ keep = true;
+ element = null;
+ pathActions.mouseUp(evt);
+ break;
+ case "textedit":
+ keep = false;
+ element = null;
+ textActions.mouseUp(evt, mouse_x, mouse_y);
+ break;
+ case "rotate":
+ keep = true;
+ element = null;
+ current_mode = "select";
+ var batchCmd = canvas.undoMgr.finishUndoableChange();
+ if (!batchCmd.isEmpty()) {
+ addCommandToHistory(batchCmd);
+ }
+ // perform recalculation to weed out any stray identity transforms that might get stuck
+ recalculateAllSelectedDimensions();
+ call("changed", selectedElements);
+ break;
+ default:
+ // This could occur in an extension
+ break;
+ }
+
+ var ext_result = runExtensions("mouseUp", {
+ event: evt,
+ mouse_x: mouse_x,
+ mouse_y: mouse_y
+ }, true);
+
+ $.each(ext_result, function(i, r) {
+ if(r) {
+ keep = r.keep || keep;
+ element = r.element;
+ started = r.started || started;
+ }
+ });
+
+ if (!keep && element != null) {
+ getCurrentDrawing().releaseId(getId());
+ element.parentNode.removeChild(element);
+ element = null;
+
+ var t = evt.target;
+
+ // if this element is in a group, go up until we reach the top-level group
+ // just below the layer groups
+ // TODO: once we implement links, we also would have to check for <a> elements
+ while (t.parentNode.parentNode.tagName == "g") {
+ t = t.parentNode;
+ }
+ // if we are not in the middle of creating a path, and we've clicked on some shape,
+ // then go to Select mode.
+ // WebKit returns <div> when the canvas is clicked, Firefox/Opera return <svg>
+ if ( (current_mode != "path" || !drawn_path) &&
+ t.parentNode.id != "selectorParentGroup" &&
+ t.id != "svgcanvas" && t.id != "svgroot")
+ {
+ // switch into "select" mode if we've clicked on an element
+ canvas.setMode("select");
+ selectOnly([t], true);
+ }
+
+ } else if (element != null) {
+ canvas.addedNew = true;
+
+ if(useUnit) svgedit.units.convertAttrs(element);
+
+ var ani_dur = .2, c_ani;
+ if(opac_ani.beginElement && element.getAttribute('opacity') != cur_shape.opacity) {
+ c_ani = $(opac_ani).clone().attr({
+ to: cur_shape.opacity,
+ dur: ani_dur
+ }).appendTo(element);
+ try {
+ // Fails in FF4 on foreignObject
+ c_ani[0].beginElement();
+ } catch(e){}
+ } else {
+ ani_dur = 0;
+ }
+
+ // Ideally this would be done on the endEvent of the animation,
+ // but that doesn't seem to be supported in Webkit
+ setTimeout(function() {
+ if(c_ani) c_ani.remove();
+ element.setAttribute("opacity", cur_shape.opacity);
+ element.setAttribute("style", "pointer-events:inherit");
+ cleanupElement(element);
+ if(current_mode === "path") {
+ pathActions.toEditMode(element);
+ } else {
+ if(curConfig.selectNew) {
+ selectOnly([element], true);
+ }
+ }
+ // we create the insert command that is stored on the stack
+ // undo means to call cmd.unapply(), redo means to call cmd.apply()
+ addCommandToHistory(new InsertElementCommand(element));
+
+ call("changed",[element]);
+ }, ani_dur * 1000);
+ }
+
+ start_transform = null;
+ };
+
+ var dblClick = function(evt) {
+ var evt_target = evt.target;
+ var parent = evt_target.parentNode;
+
+ // Do nothing if already in current group
+ if(parent === current_group) return;
+
+ var mouse_target = getMouseTarget(evt);
+ var tagName = mouse_target.tagName;
+
+ if(tagName === 'text' && current_mode !== 'textedit') {
+ var pt = transformPoint( evt.pageX, evt.pageY, root_sctm );
+ textActions.select(mouse_target, pt.x, pt.y);
+ }
+
+ if((tagName === "g" || tagName === "a") && getRotationAngle(mouse_target)) {
+ // TODO: Allow method of in-group editing without having to do
+ // this (similar to editing rotated paths)
+
+ // Ungroup and regroup
+ pushGroupProperties(mouse_target);
+ mouse_target = selectedElements[0];
+ clearSelection(true);
+ }
+ // Reset context
+ if(current_group) {
+ leaveContext();
+ }
+
+ if((parent.tagName !== 'g' && parent.tagName !== 'a') ||
+ parent === getCurrentDrawing().getCurrentLayer() ||
+ mouse_target === selectorManager.selectorParentGroup)
+ {
+ // Escape from in-group edit
+ return;
+ }
+ setContext(mouse_target);
+ }
+
+ // prevent links from being followed in the canvas
+ var handleLinkInCanvas = function(e) {
+ e.preventDefault();
+ return false;
+ };
+
+ // Added mouseup to the container here.
+ // TODO(codedread): Figure out why after the Closure compiler, the window mouseup is ignored.
+ $(container).mousedown(mouseDown).mousemove(mouseMove).click(handleLinkInCanvas).dblclick(dblClick).mouseup(mouseUp);
+// $(window).mouseup(mouseUp);
+
+ $(container).bind("mousewheel DOMMouseScroll", function(e){
+ if(!e.shiftKey) return;
+ e.preventDefault();
+
+ root_sctm = svgcontent.getScreenCTM().inverse();
+ var pt = transformPoint( e.pageX, e.pageY, root_sctm );
+ var bbox = {
+ 'x': pt.x,
+ 'y': pt.y,
+ 'width': 0,
+ 'height': 0
+ };
+
+ // Respond to mouse wheel in IE/Webkit/Opera.
+ // (It returns up/dn motion in multiples of 120)
+ if(e.wheelDelta) {
+ if (e.wheelDelta >= 120) {
+ bbox.factor = 2;
+ } else if (e.wheelDelta <= -120) {
+ bbox.factor = .5;
+ }
+ } else if(e.detail) {
+ if (e.detail > 0) {
+ bbox.factor = .5;
+ } else if (e.detail < 0) {
+ bbox.factor = 2;
+ }
+ }
+
+ if(!bbox.factor) return;
+ call("zoomed", bbox);
+ });
+
+}());
+
+// Function: preventClickDefault
+// Prevents default browser click behaviour on the given element
+//
+// Parameters:
+// img - The DOM element to prevent the cilck on
+var preventClickDefault = function(img) {
+ $(img).click(function(e){e.preventDefault()});
+}
+
+// Group: Text edit functions
+// Functions relating to editing text elements
+var textActions = canvas.textActions = function() {
+ var curtext;
+ var textinput;
+ var cursor;
+ var selblock;
+ var blinker;
+ var chardata = [];
+ var textbb, transbb;
+ var matrix;
+ var last_x, last_y;
+ var allow_dbl;
+
+ function setCursor(index) {
+ var empty = (textinput.value === "");
+ $(textinput).focus();
+
+ if(!arguments.length) {
+ if(empty) {
+ index = 0;
+ } else {
+ if(textinput.selectionEnd !== textinput.selectionStart) return;
+ index = textinput.selectionEnd;
+ }
+ }
+
+ var charbb;
+ charbb = chardata[index];
+ if(!empty) {
+ textinput.setSelectionRange(index, index);
+ }
+ cursor = getElem("text_cursor");
+ if (!cursor) {
+ cursor = document.createElementNS(svgns, "line");
+ assignAttributes(cursor, {
+ 'id': "text_cursor",
+ 'stroke': "#333",
+ 'stroke-width': 1
+ });
+ cursor = getElem("selectorParentGroup").appendChild(cursor);
+ }
+
+ if(!blinker) {
+ blinker = setInterval(function() {
+ var show = (cursor.getAttribute('display') === 'none');
+ cursor.setAttribute('display', show?'inline':'none');
+ }, 600);
+
+ }
+
+
+ var start_pt = ptToScreen(charbb.x, textbb.y);
+ var end_pt = ptToScreen(charbb.x, (textbb.y + textbb.height));
+
+ assignAttributes(cursor, {
+ x1: start_pt.x,
+ y1: start_pt.y,
+ x2: end_pt.x,
+ y2: end_pt.y,
+ visibility: 'visible',
+ display: 'inline'
+ });
+
+ if(selblock) selblock.setAttribute('d', '');
+ }
+
+ function setSelection(start, end, skipInput) {
+ if(start === end) {
+ setCursor(end);
+ return;
+ }
+
+ if(!skipInput) {
+ textinput.setSelectionRange(start, end);
+ }
+
+ selblock = getElem("text_selectblock");
+ if (!selblock) {
+
+ selblock = document.createElementNS(svgns, "path");
+ assignAttributes(selblock, {
+ 'id': "text_selectblock",
+ 'fill': "green",
+ 'opacity': .5,
+ 'style': "pointer-events:none"
+ });
+ getElem("selectorParentGroup").appendChild(selblock);
+ }
+
+
+ var startbb = chardata[start];
+
+ var endbb = chardata[end];
+
+ cursor.setAttribute('visibility', 'hidden');
+
+ var tl = ptToScreen(startbb.x, textbb.y),
+ tr = ptToScreen(startbb.x + (endbb.x - startbb.x), textbb.y),
+ bl = ptToScreen(startbb.x, textbb.y + textbb.height),
+ br = ptToScreen(startbb.x + (endbb.x - startbb.x), textbb.y + textbb.height);
+
+
+ var dstr = "M" + tl.x + "," + tl.y
+ + " L" + tr.x + "," + tr.y
+ + " " + br.x + "," + br.y
+ + " " + bl.x + "," + bl.y + "z";
+
+ assignAttributes(selblock, {
+ d: dstr,
+ 'display': 'inline'
+ });
+ }
+
+ function getIndexFromPoint(mouse_x, mouse_y) {
+ // Position cursor here
+ var pt = svgroot.createSVGPoint();
+ pt.x = mouse_x;
+ pt.y = mouse_y;
+
+ // No content, so return 0
+ if(chardata.length == 1) return 0;
+ // Determine if cursor should be on left or right of character
+ var charpos = curtext.getCharNumAtPosition(pt);
+ if(charpos < 0) {
+ // Out of text range, look at mouse coords
+ charpos = chardata.length - 2;
+ if(mouse_x <= chardata[0].x) {
+ charpos = 0;
+ }
+ } else if(charpos >= chardata.length - 2) {
+ charpos = chardata.length - 2;
+ }
+ var charbb = chardata[charpos];
+ var mid = charbb.x + (charbb.width/2);
+ if(mouse_x > mid) {
+ charpos++;
+ }
+ return charpos;
+ }
+
+ function setCursorFromPoint(mouse_x, mouse_y) {
+ setCursor(getIndexFromPoint(mouse_x, mouse_y));
+ }
+
+ function setEndSelectionFromPoint(x, y, apply) {
+ var i1 = textinput.selectionStart;
+ var i2 = getIndexFromPoint(x, y);
+
+ var start = Math.min(i1, i2);
+ var end = Math.max(i1, i2);
+ setSelection(start, end, !apply);
+ }
+
+ function screenToPt(x_in, y_in) {
+ var out = {
+ x: x_in,
+ y: y_in
+ }
+
+ out.x /= current_zoom;
+ out.y /= current_zoom;
+
+ if(matrix) {
+ var pt = transformPoint(out.x, out.y, matrix.inverse());
+ out.x = pt.x;
+ out.y = pt.y;
+ }
+
+ return out;
+ }
+
+ function ptToScreen(x_in, y_in) {
+ var out = {
+ x: x_in,
+ y: y_in
+ }
+
+ if(matrix) {
+ var pt = transformPoint(out.x, out.y, matrix);
+ out.x = pt.x;
+ out.y = pt.y;
+ }
+
+ out.x *= current_zoom;
+ out.y *= current_zoom;
+
+ return out;
+ }
+
+ function hideCursor() {
+ if(cursor) {
+ cursor.setAttribute('visibility', 'hidden');
+ }
+ }
+
+ function selectAll(evt) {
+ setSelection(0, curtext.textContent.length);
+ $(this).unbind(evt);
+ }
+
+ function selectWord(evt) {
+ if(!allow_dbl || !curtext) return;
+
+ var ept = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = ept.x * current_zoom,
+ mouse_y = ept.y * current_zoom;
+ var pt = screenToPt(mouse_x, mouse_y);
+
+ var index = getIndexFromPoint(pt.x, pt.y);
+ var str = curtext.textContent;
+ var first = str.substr(0, index).replace(/[a-z0-9]+$/i, '').length;
+ var m = str.substr(index).match(/^[a-z0-9]+/i);
+ var last = (m?m[0].length:0) + index;
+ setSelection(first, last);
+
+ // Set tripleclick
+ $(evt.target).click(selectAll);
+ setTimeout(function() {
+ $(evt.target).unbind('click', selectAll);
+ }, 300);
+
+ }
+
+ return {
+ select: function(target, x, y) {
+ curtext = target;
+ textActions.toEditMode(x, y);
+ },
+ start: function(elem) {
+ curtext = elem;
+ textActions.toEditMode();
+ },
+ mouseDown: function(evt, mouse_target, start_x, start_y) {
+ var pt = screenToPt(start_x, start_y);
+
+ textinput.focus();
+ setCursorFromPoint(pt.x, pt.y);
+ last_x = start_x;
+ last_y = start_y;
+
+ // TODO: Find way to block native selection
+ },
+ mouseMove: function(mouse_x, mouse_y) {
+ var pt = screenToPt(mouse_x, mouse_y);
+ setEndSelectionFromPoint(pt.x, pt.y);
+ },
+ mouseUp: function(evt, mouse_x, mouse_y) {
+ var pt = screenToPt(mouse_x, mouse_y);
+
+ setEndSelectionFromPoint(pt.x, pt.y, true);
+
+ // TODO: Find a way to make this work: Use transformed BBox instead of evt.target
+// if(last_x === mouse_x && last_y === mouse_y
+// && !svgedit.math.rectsIntersect(transbb, {x: pt.x, y: pt.y, width:0, height:0})) {
+// textActions.toSelectMode(true);
+// }
+
+ if(
+ evt.target !== curtext
+ && mouse_x < last_x + 2
+ && mouse_x > last_x - 2
+ && mouse_y < last_y + 2
+ && mouse_y > last_y - 2) {
+
+ textActions.toSelectMode(true);
+ }
+
+ },
+ setCursor: setCursor,
+ toEditMode: function(x, y) {
+ allow_dbl = false;
+ current_mode = "textedit";
+ selectorManager.requestSelector(curtext).showGrips(false);
+ // Make selector group accept clicks
+ var sel = selectorManager.requestSelector(curtext).selectorRect;
+
+ textActions.init();
+
+ $(curtext).css('cursor', 'text');
+
+// if(svgedit.browser.supportsEditableText()) {
+// curtext.setAttribute('editable', 'simple');
+// return;
+// }
+
+ if(!arguments.length) {
+ setCursor();
+ } else {
+ var pt = screenToPt(x, y);
+ setCursorFromPoint(pt.x, pt.y);
+ }
+
+ setTimeout(function() {
+ allow_dbl = true;
+ }, 300);
+ },
+ toSelectMode: function(selectElem) {
+ current_mode = "select";
+ clearInterval(blinker);
+ blinker = null;
+ if(selblock) $(selblock).attr('display','none');
+ if(cursor) $(cursor).attr('visibility','hidden');
+ $(curtext).css('cursor', 'move');
+
+ if(selectElem) {
+ clearSelection();
+ $(curtext).css('cursor', 'move');
+
+ call("selected", [curtext]);
+ addToSelection([curtext], true);
+ }
+ if(curtext && !curtext.textContent.length) {
+ // No content, so delete
+ canvas.deleteSelectedElements();
+ }
+
+ $(textinput).blur();
+
+ curtext = false;
+
+// if(svgedit.browser.supportsEditableText()) {
+// curtext.removeAttribute('editable');
+// }
+ },
+ setInputElem: function(elem) {
+ textinput = elem;
+// $(textinput).blur(hideCursor);
+ },
+ clear: function() {
+ if(current_mode == "textedit") {
+ textActions.toSelectMode();
+ }
+ },
+ init: function(inputElem) {
+ if(!curtext) return;
+
+// if(svgedit.browser.supportsEditableText()) {
+// curtext.select();
+// return;
+// }
+
+ if(!curtext.parentNode) {
+ // Result of the ffClone, need to get correct element
+ curtext = selectedElements[0];
+ selectorManager.requestSelector(curtext).showGrips(false);
+ }
+
+ var str = curtext.textContent;
+ var len = str.length;
+
+ var xform = curtext.getAttribute('transform');
+
+ textbb = svgedit.utilities.getBBox(curtext);
+
+ matrix = xform?getMatrix(curtext):null;
+
+ chardata = Array(len);
+ textinput.focus();
+
+ $(curtext).unbind('dblclick', selectWord).dblclick(selectWord);
+
+ if(!len) {
+ var end = {x: textbb.x + (textbb.width/2), width: 0};
+ }
+
+ for(var i=0; i<len; i++) {
+ var start = curtext.getStartPositionOfChar(i);
+ var end = curtext.getEndPositionOfChar(i);
+
+ if(!svgedit.browser.supportsGoodTextCharPos()) {
+ var offset = canvas.contentW * current_zoom;
+ start.x -= offset;
+ end.x -= offset;
+
+ start.x /= current_zoom;
+ end.x /= current_zoom;
+ }
+
+ // Get a "bbox" equivalent for each character. Uses the
+ // bbox data of the actual text for y, height purposes
+
+ // TODO: Decide if y, width and height are actually necessary
+ chardata[i] = {
+ x: start.x,
+ y: textbb.y, // start.y?
+ width: end.x - start.x,
+ height: textbb.height
+ };
+ }
+
+ // Add a last bbox for cursor at end of text
+ chardata.push({
+ x: end.x,
+ width: 0
+ });
+ setSelection(textinput.selectionStart, textinput.selectionEnd, true);
+ }
+ }
+}();
+
+// TODO: Migrate all of this code into path.js
+// Group: Path edit functions
+// Functions relating to editing path elements
+var pathActions = canvas.pathActions = function() {
+
+ var subpath = false;
+ var current_path;
+ var newPoint, firstCtrl;
+
+ function resetD(p) {
+ p.setAttribute("d", pathActions.convertPath(p));
+ }
+
+ // TODO: Move into path.js
+ svgedit.path.Path.prototype.endChanges = function(text) {
+ if(svgedit.browser.isWebkit()) resetD(this.elem);
+ var cmd = new ChangeElementCommand(this.elem, {d: this.last_d}, text);
+ addCommandToHistory(cmd);
+ call("changed", [this.elem]);
+ }
+
+ svgedit.path.Path.prototype.addPtsToSelection = function(indexes) {
+ if(!$.isArray(indexes)) indexes = [indexes];
+ for(var i=0; i< indexes.length; i++) {
+ var index = indexes[i];
+ var seg = this.segs[index];
+ if(seg.ptgrip) {
+ if(this.selected_pts.indexOf(index) == -1 && index >= 0) {
+ this.selected_pts.push(index);
+ }
+ }
+ };
+ this.selected_pts.sort();
+ var i = this.selected_pts.length,
+ grips = new Array(i);
+ // Loop through points to be selected and highlight each
+ while(i--) {
+ var pt = this.selected_pts[i];
+ var seg = this.segs[pt];
+ seg.select(true);
+ grips[i] = seg.ptgrip;
+ }
+ // TODO: Correct this:
+ pathActions.canDeleteNodes = true;
+
+ pathActions.closed_subpath = this.subpathIsClosed(this.selected_pts[0]);
+
+ call("selected", grips);
+ }
+
+ var current_path = null,
+ drawn_path = null,
+ hasMoved = false;
+
+ // This function converts a polyline (created by the fh_path tool) into
+ // a path element and coverts every three line segments into a single bezier
+ // curve in an attempt to smooth out the free-hand
+ var smoothPolylineIntoPath = function(element) {
+ var points = element.points;
+ var N = points.numberOfItems;
+ if (N >= 4) {
+ // loop through every 3 points and convert to a cubic bezier curve segment
+ //
+ // NOTE: this is cheating, it means that every 3 points has the potential to
+ // be a corner instead of treating each point in an equal manner. In general,
+ // this technique does not look that good.
+ //
+ // I am open to better ideas!
+ //
+ // Reading:
+ // - http://www.efg2.com/Lab/Graphics/Jean-YvesQueinecBezierCurves.htm
+ // - http://www.codeproject.com/KB/graphics/BezierSpline.aspx?msg=2956963
+ // - http://www.ian-ko.com/ET_GeoWizards/UserGuide/smooth.htm
+ // - http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-der.html
+ var curpos = points.getItem(0), prevCtlPt = null;
+ var d = [];
+ d.push(["M",curpos.x,",",curpos.y," C"].join(""));
+ for (var i = 1; i <= (N-4); i += 3) {
+ var ct1 = points.getItem(i);
+ var ct2 = points.getItem(i+1);
+ var end = points.getItem(i+2);
+
+ // if the previous segment had a control point, we want to smooth out
+ // the control points on both sides
+ if (prevCtlPt) {
+ var newpts = svgedit.path.smoothControlPoints( prevCtlPt, ct1, curpos );
+ if (newpts && newpts.length == 2) {
+ var prevArr = d[d.length-1].split(',');
+ prevArr[2] = newpts[0].x;
+ prevArr[3] = newpts[0].y;
+ d[d.length-1] = prevArr.join(',');
+ ct1 = newpts[1];
+ }
+ }
+
+ d.push([ct1.x,ct1.y,ct2.x,ct2.y,end.x,end.y].join(','));
+
+ curpos = end;
+ prevCtlPt = ct2;
+ }
+ // handle remaining line segments
+ d.push("L");
+ for(;i < N;++i) {
+ var pt = points.getItem(i);
+ d.push([pt.x,pt.y].join(","));
+ }
+ d = d.join(" ");
+
+ // create new path element
+ element = addSvgElementFromJson({
+ "element": "path",
+ "curStyles": true,
+ "attr": {
+ "id": getId(),
+ "d": d,
+ "fill": "none"
+ }
+ });
+ // No need to call "changed", as this is already done under mouseUp
+ }
+ return element;
+ };
+
+ return {
+ mouseDown: function(evt, mouse_target, start_x, start_y) {
+ if(current_mode === "path") {
+ mouse_x = start_x;
+ mouse_y = start_y;
+
+ var x = mouse_x/current_zoom,
+ y = mouse_y/current_zoom,
+ stretchy = getElem("path_stretch_line");
+ newPoint = [x, y];
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ mouse_x = snapToGrid(mouse_x);
+ mouse_y = snapToGrid(mouse_y);
+ }
+
+ if (!stretchy) {
+ stretchy = document.createElementNS(svgns, "path");
+ assignAttributes(stretchy, {
+ 'id': "path_stretch_line",
+ 'stroke': "#22C",
+ 'stroke-width': "0.5",
+ 'fill': 'none'
+ });
+ stretchy = getElem("selectorParentGroup").appendChild(stretchy);
+ }
+ stretchy.setAttribute("display", "inline");
+
+ var keep = null;
+
+ // if pts array is empty, create path element with M at current point
+ if (!drawn_path) {
+ d_attr = "M" + x + "," + y + " ";
+ drawn_path = addSvgElementFromJson({
+ "element": "path",
+ "curStyles": true,
+ "attr": {
+ "d": d_attr,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ // set stretchy line to first point
+ stretchy.setAttribute('d', ['M', mouse_x, mouse_y, mouse_x, mouse_y].join(' '));
+ var index = subpath ? svgedit.path.path.segs.length : 0;
+ svgedit.path.addPointGrip(index, mouse_x, mouse_y);
+ }
+ else {
+ // determine if we clicked on an existing point
+ var seglist = drawn_path.pathSegList;
+ var i = seglist.numberOfItems;
+ var FUZZ = 6/current_zoom;
+ var clickOnPoint = false;
+ while(i) {
+ i --;
+ var item = seglist.getItem(i);
+ var px = item.x, py = item.y;
+ // found a matching point
+ if ( x >= (px-FUZZ) && x <= (px+FUZZ) && y >= (py-FUZZ) && y <= (py+FUZZ) ) {
+ clickOnPoint = true;
+ break;
+ }
+ }
+
+ // get path element that we are in the process of creating
+ var id = getId();
+
+ // Remove previous path object if previously created
+ svgedit.path.removePath_(id);
+
+ var newpath = getElem(id);
+
+ var len = seglist.numberOfItems;
+ // if we clicked on an existing point, then we are done this path, commit it
+ // (i,i+1) are the x,y that were clicked on
+ if (clickOnPoint) {
+ // if clicked on any other point but the first OR
+ // the first point was clicked on and there are less than 3 points
+ // then leave the path open
+ // otherwise, close the path
+ if (i <= 1 && len >= 2) {
+ // Create end segment
+ var abs_x = seglist.getItem(0).x;
+ var abs_y = seglist.getItem(0).y;
+
+
+ var s_seg = stretchy.pathSegList.getItem(1);
+ if(s_seg.pathSegType === 4) {
+ var newseg = drawn_path.createSVGPathSegLinetoAbs(abs_x, abs_y);
+ } else {
+ var newseg = drawn_path.createSVGPathSegCurvetoCubicAbs(
+ abs_x,
+ abs_y,
+ s_seg.x1 / current_zoom,
+ s_seg.y1 / current_zoom,
+ abs_x,
+ abs_y
+ );
+ }
+
+ var endseg = drawn_path.createSVGPathSegClosePath();
+ seglist.appendItem(newseg);
+ seglist.appendItem(endseg);
+ } else if(len < 3) {
+ keep = false;
+ return keep;
+ }
+ $(stretchy).remove();
+
+ // this will signal to commit the path
+ element = newpath;
+ drawn_path = null;
+ started = false;
+
+ if(subpath) {
+ if(svgedit.path.path.matrix) {
+ remapElement(newpath, {}, svgedit.path.path.matrix.inverse());
+ }
+
+ var new_d = newpath.getAttribute("d");
+ var orig_d = $(svgedit.path.path.elem).attr("d");
+ $(svgedit.path.path.elem).attr("d", orig_d + new_d);
+ $(newpath).remove();
+ if(svgedit.path.path.matrix) {
+ svgedit.path.recalcRotatedPath();
+ }
+ svgedit.path.path.init();
+ pathActions.toEditMode(svgedit.path.path.elem);
+ svgedit.path.path.selectPt();
+ return false;
+ }
+ }
+ // else, create a new point, update path element
+ else {
+ // Checks if current target or parents are #svgcontent
+ if(!$.contains(container, getMouseTarget(evt))) {
+ // Clicked outside canvas, so don't make point
+ console.log("Clicked outside canvas");
+ return false;
+ }
+
+ var num = drawn_path.pathSegList.numberOfItems;
+ var last = drawn_path.pathSegList.getItem(num -1);
+ var lastx = last.x, lasty = last.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);
+ if(s_seg.pathSegType === 4) {
+ var newseg = drawn_path.createSVGPathSegLinetoAbs(round(x), round(y));
+ } else {
+ var newseg = drawn_path.createSVGPathSegCurvetoCubicAbs(
+ round(x),
+ round(y),
+ s_seg.x1 / current_zoom,
+ s_seg.y1 / current_zoom,
+ s_seg.x2 / current_zoom,
+ s_seg.y2 / current_zoom
+ );
+ }
+
+ drawn_path.pathSegList.appendItem(newseg);
+
+ x *= current_zoom;
+ y *= current_zoom;
+
+ // set stretchy line to latest point
+ stretchy.setAttribute('d', ['M', x, y, x, y].join(' '));
+ var index = num;
+ if(subpath) index += svgedit.path.path.segs.length;
+ svgedit.path.addPointGrip(index, x, y);
+ }
+// keep = true;
+ }
+
+ return;
+ }
+
+ // TODO: Make sure current_path isn't null at this point
+ if(!svgedit.path.path) return;
+
+ svgedit.path.path.storeD();
+
+ var id = evt.target.id;
+ if (id.substr(0,14) == "pathpointgrip_") {
+ // Select this point
+ var cur_pt = svgedit.path.path.cur_pt = parseInt(id.substr(14));
+ svgedit.path.path.dragging = [start_x, start_y];
+ var seg = svgedit.path.path.segs[cur_pt];
+
+ // only clear selection if shift is not pressed (otherwise, add
+ // node to selection)
+ if (!evt.shiftKey) {
+ if(svgedit.path.path.selected_pts.length <= 1 || !seg.selected) {
+ svgedit.path.path.clearSelection();
+ }
+ svgedit.path.path.addPtsToSelection(cur_pt);
+ } else if(seg.selected) {
+ svgedit.path.path.removePtFromSelection(cur_pt);
+ } else {
+ svgedit.path.path.addPtsToSelection(cur_pt);
+ }
+ } else if(id.indexOf("ctrlpointgrip_") == 0) {
+ svgedit.path.path.dragging = [start_x, start_y];
+
+ var parts = id.split('_')[1].split('c');
+ var cur_pt = parts[0]-0;
+ var ctrl_num = parts[1]-0;
+ svgedit.path.path.selectPt(cur_pt, ctrl_num);
+ }
+
+ // Start selection box
+ if(!svgedit.path.path.dragging) {
+ if (rubberBox == null) {
+ rubberBox = selectorManager.getRubberBandBox();
+ }
+ assignAttributes(rubberBox, {
+ 'x': start_x * current_zoom,
+ 'y': start_y * current_zoom,
+ 'width': 0,
+ 'height': 0,
+ 'display': 'inline'
+ }, 100);
+ }
+ },
+ mouseMove: function(mouse_x, mouse_y) {
+ hasMoved = true;
+ if(current_mode === "path") {
+ if(!drawn_path) return;
+ var seglist = drawn_path.pathSegList;
+ var index = seglist.numberOfItems - 1;
+
+ if(newPoint) {
+ // First point
+// if(!index) return;
+
+ // Set control points
+ var pointGrip1 = svgedit.path.addCtrlGrip('1c1');
+ var pointGrip2 = svgedit.path.addCtrlGrip('0c2');
+
+ // dragging pointGrip1
+ pointGrip1.setAttribute('cx', mouse_x);
+ pointGrip1.setAttribute('cy', mouse_y);
+ pointGrip1.setAttribute('display', 'inline');
+
+ var pt_x = newPoint[0];
+ var pt_y = newPoint[1];
+
+ // set curve
+ var seg = seglist.getItem(index);
+ var cur_x = mouse_x / current_zoom;
+ var cur_y = mouse_y / current_zoom;
+ var alt_x = (pt_x + (pt_x - cur_x));
+ var alt_y = (pt_y + (pt_y - cur_y));
+
+ pointGrip2.setAttribute('cx', alt_x * current_zoom);
+ pointGrip2.setAttribute('cy', alt_y * current_zoom);
+ pointGrip2.setAttribute('display', 'inline');
+
+ var ctrlLine = svgedit.path.getCtrlLine(1);
+ assignAttributes(ctrlLine, {
+ x1: mouse_x,
+ y1: mouse_y,
+ x2: alt_x * current_zoom,
+ y2: alt_y * current_zoom,
+ display: 'inline'
+ });
+
+ if(index === 0) {
+ firstCtrl = [mouse_x, mouse_y];
+ } else {
+ var last_x, last_y;
+
+ var last = seglist.getItem(index - 1);
+ var last_x = last.x;
+ var last_y = last.y
+
+ if(last.pathSegType === 6) {
+ last_x += (last_x - last.x2);
+ last_y += (last_y - last.y2);
+ } else if(firstCtrl) {
+ last_x = firstCtrl[0]/current_zoom;
+ last_y = firstCtrl[1]/current_zoom;
+ }
+ svgedit.path.replacePathSeg(6, index, [pt_x, pt_y, last_x, last_y, alt_x, alt_y], drawn_path);
+ }
+ } else {
+ var stretchy = getElem("path_stretch_line");
+ if (stretchy) {
+ var prev = seglist.getItem(index);
+ if(prev.pathSegType === 6) {
+ var prev_x = prev.x + (prev.x - prev.x2);
+ var prev_y = prev.y + (prev.y - prev.y2);
+ svgedit.path.replacePathSeg(6, 1, [mouse_x, mouse_y, prev_x * current_zoom, prev_y * current_zoom, mouse_x, mouse_y], stretchy);
+ } else if(firstCtrl) {
+ svgedit.path.replacePathSeg(6, 1, [mouse_x, mouse_y, firstCtrl[0], firstCtrl[1], mouse_x, mouse_y], stretchy);
+ } else {
+ svgedit.path.replacePathSeg(4, 1, [mouse_x, mouse_y], stretchy);
+ }
+ }
+ }
+ return;
+ }
+ // if we are dragging a point, let's move it
+ if (svgedit.path.path.dragging) {
+ var pt = svgedit.path.getPointFromGrip({
+ x: svgedit.path.path.dragging[0],
+ y: svgedit.path.path.dragging[1]
+ }, svgedit.path.path);
+ var mpt = svgedit.path.getPointFromGrip({
+ x: mouse_x,
+ y: mouse_y
+ }, svgedit.path.path);
+ var diff_x = mpt.x - pt.x;
+ var diff_y = mpt.y - pt.y;
+ svgedit.path.path.dragging = [mouse_x, mouse_y];
+
+ if(svgedit.path.path.dragctrl) {
+ svgedit.path.path.moveCtrl(diff_x, diff_y);
+ } else {
+ svgedit.path.path.movePts(diff_x, diff_y);
+ }
+ } else {
+ svgedit.path.path.selected_pts = [];
+ svgedit.path.path.eachSeg(function(i) {
+ var seg = this;
+ if(!seg.next && !seg.prev) return;
+
+ var item = seg.item;
+ var rbb = rubberBox.getBBox();
+
+ var pt = svgedit.path.getGripPt(seg);
+ var pt_bb = {
+ x: pt.x,
+ y: pt.y,
+ width: 0,
+ height: 0
+ };
+
+ var sel = svgedit.math.rectsIntersect(rbb, pt_bb);
+
+ this.select(sel);
+ //Note that addPtsToSelection is not being run
+ if(sel) svgedit.path.path.selected_pts.push(seg.index);
+ });
+
+ }
+ },
+ mouseUp: function(evt, element, mouse_x, mouse_y) {
+
+ // Create mode
+ if(current_mode === "path") {
+ newPoint = null;
+ if(!drawn_path) {
+ element = getElem(getId());
+ started = false;
+ firstCtrl = null;
+ }
+
+ return {
+ keep: true,
+ element: element
+ }
+ }
+
+ // Edit mode
+
+ if (svgedit.path.path.dragging) {
+ var last_pt = svgedit.path.path.cur_pt;
+
+ svgedit.path.path.dragging = false;
+ svgedit.path.path.dragctrl = false;
+ svgedit.path.path.update();
+
+
+ if(hasMoved) {
+ svgedit.path.path.endChanges("Move path point(s)");
+ }
+
+ if(!evt.shiftKey && !hasMoved) {
+ svgedit.path.path.selectPt(last_pt);
+ }
+ }
+ else if(rubberBox && rubberBox.getAttribute('display') != 'none') {
+ // Done with multi-node-select
+ rubberBox.setAttribute("display", "none");
+
+ if(rubberBox.getAttribute('width') <= 2 && rubberBox.getAttribute('height') <= 2) {
+ pathActions.toSelectMode(evt.target);
+ }
+
+ // else, move back to select mode
+ } else {
+ pathActions.toSelectMode(evt.target);
+ }
+ hasMoved = false;
+ },
+ toEditMode: function(element) {
+ svgedit.path.path = svgedit.path.getPath_(element);
+ current_mode = "pathedit";
+ clearSelection();
+ svgedit.path.path.show(true).update();
+ svgedit.path.path.oldbbox = svgedit.utilities.getBBox(svgedit.path.path.elem);
+ subpath = false;
+ },
+ toSelectMode: function(elem) {
+ var selPath = (elem == svgedit.path.path.elem);
+ current_mode = "select";
+ svgedit.path.path.show(false);
+ current_path = false;
+ clearSelection();
+
+ if(svgedit.path.path.matrix) {
+ // Rotated, so may need to re-calculate the center
+ svgedit.path.recalcRotatedPath();
+ }
+
+ if(selPath) {
+ call("selected", [elem]);
+ addToSelection([elem], true);
+ }
+ },
+ addSubPath: function(on) {
+ if(on) {
+ // Internally we go into "path" mode, but in the UI it will
+ // still appear as if in "pathedit" mode.
+ current_mode = "path";
+ subpath = true;
+ } else {
+ pathActions.clear(true);
+ pathActions.toEditMode(svgedit.path.path.elem);
+ }
+ },
+ select: function(target) {
+ if (current_path === target) {
+ pathActions.toEditMode(target);
+ current_mode = "pathedit";
+ } // going into pathedit mode
+ else {
+ current_path = target;
+ }
+ },
+ reorient: function() {
+ var elem = selectedElements[0];
+ if(!elem) return;
+ var angle = getRotationAngle(elem);
+ if(angle == 0) return;
+
+ var batchCmd = new BatchCommand("Reorient path");
+ var changes = {
+ d: elem.getAttribute('d'),
+ transform: elem.getAttribute('transform')
+ };
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+ clearSelection();
+ this.resetOrientation(elem);
+
+ addCommandToHistory(batchCmd);
+
+ // Set matrix to null
+ svgedit.path.getPath_(elem).show(false).matrix = null;
+
+ this.clear();
+
+ addToSelection([elem], true);
+ call("changed", selectedElements);
+ },
+
+ clear: function(remove) {
+ current_path = null;
+ if (drawn_path) {
+ var elem = getElem(getId());
+ $(getElem("path_stretch_line")).remove();
+ $(elem).remove();
+ $(getElem("pathpointgrip_container")).find('*').attr('display', 'none');
+ drawn_path = firstCtrl = null;
+ started = false;
+ } else if (current_mode == "pathedit") {
+ this.toSelectMode();
+ }
+ if(svgedit.path.path) svgedit.path.path.init().show(false);
+ },
+ resetOrientation: function(path) {
+ if(path == null || path.nodeName != 'path') return false;
+ var tlist = getTransformList(path);
+ var m = transformListToTransform(tlist).matrix;
+ tlist.clear();
+ path.removeAttribute("transform");
+ var segList = path.pathSegList;
+
+ // Opera/win/non-EN throws an error here.
+ // TODO: Find out why!
+ // Presumed fixed in Opera 10.5, so commented out for now
+
+// try {
+ var len = segList.numberOfItems;
+// } catch(err) {
+// var fixed_d = pathActions.convertPath(path);
+// path.setAttribute('d', fixed_d);
+// segList = path.pathSegList;
+// var len = segList.numberOfItems;
+// }
+ var last_x, last_y;
+
+
+ for (var i = 0; i < len; ++i) {
+ var seg = segList.getItem(i);
+ var type = seg.pathSegType;
+ if(type == 1) continue;
+ var pts = [];
+ $.each(['',1,2], function(j, n) {
+ var x = seg['x'+n], y = seg['y'+n];
+ if(x !== undefined && y !== undefined) {
+ var pt = transformPoint(x, y, m);
+ pts.splice(pts.length, 0, pt.x, pt.y);
+ }
+ });
+ svgedit.path.replacePathSeg(type, i, pts, path);
+ }
+
+ reorientGrads(path, m);
+
+
+ },
+ zoomChange: function() {
+ if(current_mode == "pathedit") {
+ svgedit.path.path.update();
+ }
+ },
+ getNodePoint: function() {
+ var sel_pt = svgedit.path.path.selected_pts.length ? svgedit.path.path.selected_pts[0] : 1;
+
+ var seg = svgedit.path.path.segs[sel_pt];
+ return {
+ x: seg.item.x,
+ y: seg.item.y,
+ type: seg.type
+ };
+ },
+ linkControlPoints: function(linkPoints) {
+ svgedit.path.setLinkControlPoints(linkPoints);
+ },
+ clonePathNode: function() {
+ svgedit.path.path.storeD();
+
+ var sel_pts = svgedit.path.path.selected_pts;
+ var segs = svgedit.path.path.segs;
+
+ var i = sel_pts.length;
+ var nums = [];
+
+ while(i--) {
+ var pt = sel_pts[i];
+ svgedit.path.path.addSeg(pt);
+
+ nums.push(pt + i);
+ nums.push(pt + i + 1);
+ }
+ svgedit.path.path.init().addPtsToSelection(nums);
+
+ svgedit.path.path.endChanges("Clone path node(s)");
+ },
+ opencloseSubPath: function() {
+ var sel_pts = svgedit.path.path.selected_pts;
+ // Only allow one selected node for now
+ if(sel_pts.length !== 1) return;
+
+ var elem = svgedit.path.path.elem;
+ var list = elem.pathSegList;
+
+ var len = list.numberOfItems;
+
+ var index = sel_pts[0];
+
+ var open_pt = null;
+ var start_item = null;
+
+ // Check if subpath is already open
+ svgedit.path.path.eachSeg(function(i) {
+ if(this.type === 2 && i <= index) {
+ start_item = this.item;
+ }
+ if(i <= index) return true;
+ if(this.type === 2) {
+ // Found M first, so open
+ open_pt = i;
+ return false;
+ } else if(this.type === 1) {
+ // Found Z first, so closed
+ open_pt = false;
+ return false;
+ }
+ });
+
+ if(open_pt == null) {
+ // Single path, so close last seg
+ open_pt = svgedit.path.path.segs.length - 1;
+ }
+
+ if(open_pt !== false) {
+ // Close this path
+
+ // Create a line going to the previous "M"
+ var newseg = elem.createSVGPathSegLinetoAbs(start_item.x, start_item.y);
+
+ var closer = elem.createSVGPathSegClosePath();
+ if(open_pt == svgedit.path.path.segs.length - 1) {
+ list.appendItem(newseg);
+ list.appendItem(closer);
+ } else {
+ svgedit.path.insertItemBefore(elem, closer, open_pt);
+ svgedit.path.insertItemBefore(elem, newseg, open_pt);
+ }
+
+ svgedit.path.path.init().selectPt(open_pt+1);
+ return;
+ }
+
+
+
+ // M 1,1 L 2,2 L 3,3 L 1,1 z // open at 2,2
+ // M 2,2 L 3,3 L 1,1
+
+ // M 1,1 L 2,2 L 1,1 z M 4,4 L 5,5 L6,6 L 5,5 z
+ // M 1,1 L 2,2 L 1,1 z [M 4,4] L 5,5 L(M)6,6 L 5,5 z
+
+ var seg = svgedit.path.path.segs[index];
+
+ if(seg.mate) {
+ list.removeItem(index); // Removes last "L"
+ list.removeItem(index); // Removes the "Z"
+ svgedit.path.path.init().selectPt(index - 1);
+ return;
+ }
+
+ var last_m, z_seg;
+
+ // Find this sub-path's closing point and remove
+ for(var i=0; i<list.numberOfItems; i++) {
+ var item = list.getItem(i);
+
+ if(item.pathSegType === 2) {
+ // Find the preceding M
+ last_m = i;
+ } else if(i === index) {
+ // Remove it
+ list.removeItem(last_m);
+// index--;
+ } else if(item.pathSegType === 1 && index < i) {
+ // Remove the closing seg of this subpath
+ z_seg = i-1;
+ list.removeItem(i);
+ break;
+ }
+ }
+
+ var num = (index - last_m) - 1;
+
+ while(num--) {
+ svgedit.path.insertItemBefore(elem, list.getItem(last_m), z_seg);
+ }
+
+ var pt = list.getItem(last_m);
+
+ // Make this point the new "M"
+ svgedit.path.replacePathSeg(2, last_m, [pt.x, pt.y]);
+
+ var i = index
+
+ svgedit.path.path.init().selectPt(0);
+ },
+ deletePathNode: function() {
+ if(!pathActions.canDeleteNodes) return;
+ svgedit.path.path.storeD();
+
+ var sel_pts = svgedit.path.path.selected_pts;
+ var i = sel_pts.length;
+
+ while(i--) {
+ var pt = sel_pts[i];
+ svgedit.path.path.deleteSeg(pt);
+ }
+
+ // Cleanup
+ var cleanup = function() {
+ var segList = svgedit.path.path.elem.pathSegList;
+ var len = segList.numberOfItems;
+
+ var remItems = function(pos, count) {
+ while(count--) {
+ segList.removeItem(pos);
+ }
+ }
+
+ if(len <= 1) return true;
+
+ while(len--) {
+ var item = segList.getItem(len);
+ if(item.pathSegType === 1) {
+ var prev = segList.getItem(len-1);
+ var nprev = segList.getItem(len-2);
+ if(prev.pathSegType === 2) {
+ remItems(len-1, 2);
+ cleanup();
+ break;
+ } else if(nprev.pathSegType === 2) {
+ remItems(len-2, 3);
+ cleanup();
+ break;
+ }
+
+ } else if(item.pathSegType === 2) {
+ if(len > 0) {
+ var prev_type = segList.getItem(len-1).pathSegType;
+ // Path has M M
+ if(prev_type === 2) {
+ remItems(len-1, 1);
+ cleanup();
+ break;
+ // Entire path ends with Z M
+ } else if(prev_type === 1 && segList.numberOfItems-1 === len) {
+ remItems(len, 1);
+ cleanup();
+ break;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ cleanup();
+
+ // Completely delete a path with 1 or 0 segments
+ if(svgedit.path.path.elem.pathSegList.numberOfItems <= 1) {
+ pathActions.toSelectMode(svgedit.path.path.elem);
+ canvas.deleteSelectedElements();
+ return;
+ }
+
+ svgedit.path.path.init();
+
+ svgedit.path.path.clearSelection();
+
+ // TODO: Find right way to select point now
+ // path.selectPt(sel_pt);
+ if(window.opera) { // Opera repaints incorrectly
+ var cp = $(svgedit.path.path.elem); cp.attr('d',cp.attr('d'));
+ }
+ svgedit.path.path.endChanges("Delete path node(s)");
+ },
+ smoothPolylineIntoPath: smoothPolylineIntoPath,
+ setSegType: function(v) {
+ svgedit.path.path.setSegType(v);
+ },
+ moveNode: function(attr, newValue) {
+ var sel_pts = svgedit.path.path.selected_pts;
+ if(!sel_pts.length) return;
+
+ svgedit.path.path.storeD();
+
+ // Get first selected point
+ var seg = svgedit.path.path.segs[sel_pts[0]];
+ var diff = {x:0, y:0};
+ diff[attr] = newValue - seg.item[attr];
+
+ seg.move(diff.x, diff.y);
+ svgedit.path.path.endChanges("Move path point");
+ },
+ fixEnd: function(elem) {
+ // Adds an extra segment if the last seg before a Z doesn't end
+ // at its M point
+ // M0,0 L0,100 L100,100 z
+ var segList = elem.pathSegList;
+ var len = segList.numberOfItems;
+ var last_m;
+ for (var i = 0; i < len; ++i) {
+ var item = segList.getItem(i);
+ if(item.pathSegType === 2) {
+ last_m = item;
+ }
+
+ if(item.pathSegType === 1) {
+ var prev = segList.getItem(i-1);
+ if(prev.x != last_m.x || prev.y != last_m.y) {
+ // Add an L segment here
+ var newseg = elem.createSVGPathSegLinetoAbs(last_m.x, last_m.y);
+ svgedit.path.insertItemBefore(elem, newseg, i);
+ // Can this be done better?
+ pathActions.fixEnd(elem);
+ break;
+ }
+
+ }
+ }
+ if(svgedit.browser.isWebkit()) resetD(elem);
+ },
+ // Convert a path to one with only absolute or relative values
+ convertPath: function(path, toRel) {
+ var segList = path.pathSegList;
+ var len = segList.numberOfItems;
+ var curx = 0, cury = 0;
+ var d = "";
+ var last_m = null;
+
+ for (var i = 0; i < len; ++i) {
+ var seg = segList.getItem(i);
+ // if these properties are not in the segment, set them to zero
+ var x = seg.x || 0,
+ y = seg.y || 0,
+ x1 = seg.x1 || 0,
+ y1 = seg.y1 || 0,
+ x2 = seg.x2 || 0,
+ y2 = seg.y2 || 0;
+
+ var type = seg.pathSegType;
+ var letter = pathMap[type]['to'+(toRel?'Lower':'Upper')+'Case']();
+
+ var addToD = function(pnts, more, last) {
+ var str = '';
+ var more = more?' '+more.join(' '):'';
+ var last = last?' '+svgedit.units.shortFloat(last):'';
+ $.each(pnts, function(i, pnt) {
+ pnts[i] = svgedit.units.shortFloat(pnt);
+ });
+ d += letter + pnts.join(' ') + more + last;
+ }
+
+ switch (type) {
+ case 1: // z,Z closepath (Z/z)
+ d += "z";
+ break;
+ case 12: // absolute horizontal line (H)
+ x -= curx;
+ case 13: // relative horizontal line (h)
+ if(toRel) {
+ curx += x;
+ letter = 'l';
+ } else {
+ x += curx;
+ curx = x;
+ letter = 'L';
+ }
+ // Convert to "line" for easier editing
+ addToD([[x, cury]]);
+ break;
+ case 14: // absolute vertical line (V)
+ y -= cury;
+ case 15: // relative vertical line (v)
+ if(toRel) {
+ cury += y;
+ letter = 'l';
+ } else {
+ y += cury;
+ cury = y;
+ letter = 'L';
+ }
+ // Convert to "line" for easier editing
+ addToD([[curx, y]]);
+ break;
+ case 2: // absolute move (M)
+ case 4: // absolute line (L)
+ case 18: // absolute smooth quad (T)
+ x -= curx;
+ y -= cury;
+ case 5: // relative line (l)
+ case 3: // relative move (m)
+ // If the last segment was a "z", this must be relative to
+ if(last_m && segList.getItem(i-1).pathSegType === 1 && !toRel) {
+ curx = last_m[0];
+ cury = last_m[1];
+ }
+
+ case 19: // relative smooth quad (t)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx;
+ y += cury;
+ curx = x;
+ cury = y;
+ }
+ if(type === 3) last_m = [curx, cury];
+
+ addToD([[x,y]]);
+ break;
+ case 6: // absolute cubic (C)
+ x -= curx; x1 -= curx; x2 -= curx;
+ y -= cury; y1 -= cury; y2 -= cury;
+ case 7: // relative cubic (c)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx; x1 += curx; x2 += curx;
+ y += cury; y1 += cury; y2 += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[x1,y1],[x2,y2],[x,y]]);
+ break;
+ case 8: // absolute quad (Q)
+ x -= curx; x1 -= curx;
+ y -= cury; y1 -= cury;
+ case 9: // relative quad (q)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx; x1 += curx;
+ y += cury; y1 += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[x1,y1],[x,y]]);
+ break;
+ case 10: // absolute elliptical arc (A)
+ x -= curx;
+ y -= cury;
+ case 11: // relative elliptical arc (a)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx;
+ y += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[seg.r1,seg.r2]], [
+ seg.angle,
+ (seg.largeArcFlag ? 1 : 0),
+ (seg.sweepFlag ? 1 : 0)
+ ],[x,y]
+ );
+ break;
+ case 16: // absolute smooth cubic (S)
+ x -= curx; x2 -= curx;
+ y -= cury; y2 -= cury;
+ case 17: // relative smooth cubic (s)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx; x2 += curx;
+ y += cury; y2 += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[x2,y2],[x,y]]);
+ break;
+ } // switch on path segment type
+ } // for each segment
+ return d;
+ }
+ }
+}();
+// end pathActions
+
+// Group: Serialization
+
+// Function: removeUnusedDefElems
+// Looks at DOM elements inside the <defs> to see if they are referred to,
+// removes them from the DOM if they are not.
+//
+// Returns:
+// The amount of elements that were removed
+var removeUnusedDefElems = this.removeUnusedDefElems = function() {
+ var defs = svgcontent.getElementsByTagNameNS(svgns, "defs");
+ if(!defs || !defs.length) return 0;
+
+// if(!defs.firstChild) return;
+
+ var defelem_uses = [],
+ numRemoved = 0;
+ var attrs = ['fill', 'stroke', 'filter', 'marker-start', 'marker-mid', 'marker-end'];
+ var alen = attrs.length;
+
+ var all_els = svgcontent.getElementsByTagNameNS(svgns, '*');
+ var all_len = all_els.length;
+
+ for(var i=0; i<all_len; i++) {
+ var el = all_els[i];
+ for(var j = 0; j < alen; j++) {
+ var ref = getUrlFromAttr(el.getAttribute(attrs[j]));
+ if(ref) {
+ defelem_uses.push(ref.substr(1));
+ }
+ }
+
+ // gradients can refer to other gradients
+ var href = getHref(el);
+ if (href && href.indexOf('#') === 0) {
+ defelem_uses.push(href.substr(1));
+ }
+ };
+
+ var defelems = $(svgcontent).find("linearGradient, radialGradient, filter, marker, svg, symbol");
+ defelem_ids = [],
+ i = defelems.length;
+ while (i--) {
+ var defelem = defelems[i];
+ var id = defelem.id;
+ if(defelem_uses.indexOf(id) < 0) {
+ // Not found, so remove (but remember)
+ removedElements[id] = defelem;
+ defelem.parentNode.removeChild(defelem);
+ numRemoved++;
+ }
+ }
+
+ return numRemoved;
+}
+
+// Function: svgCanvasToString
+// Main function to set up the SVG content for output
+//
+// Returns:
+// String containing the SVG image for output
+this.svgCanvasToString = function() {
+ // keep calling it until there are none to remove
+ while (removeUnusedDefElems() > 0) {};
+
+ pathActions.clear(true);
+
+ // Keep SVG-Edit comment on top
+ $.each(svgcontent.childNodes, function(i, node) {
+ if(i && node.nodeType === 8 && node.data.indexOf('Created with') >= 0) {
+ svgcontent.insertBefore(node, svgcontent.firstChild);
+ }
+ });
+
+ // Move out of in-group editing mode
+ if(current_group) {
+ leaveContext();
+ selectOnly([current_group]);
+ }
+
+ var naked_svgs = [];
+
+ // Unwrap gsvg if it has no special attributes (only id and style)
+ $(svgcontent).find('g:data(gsvg)').each(function() {
+ var attrs = this.attributes;
+ var len = attrs.length;
+ for(var i=0; i<len; i++) {
+ if(attrs[i].nodeName == 'id' || attrs[i].nodeName == 'style') {
+ len--;
+ }
+ }
+ // No significant attributes, so ungroup
+ if(len <= 0) {
+ var svg = this.firstChild;
+ naked_svgs.push(svg);
+ $(this).replaceWith(svg);
+ }
+ });
+ var output = this.svgToString(svgcontent, 0);
+
+ // Rewrap gsvg
+ if(naked_svgs.length) {
+ $(naked_svgs).each(function() {
+ groupSvgElem(this);
+ });
+ }
+
+ return output;
+};
+
+// Function: svgToString
+// Sub function ran on each SVG element to convert it to a string as desired
+//
+// Parameters:
+// elem - The SVG element to convert
+// indent - Integer with the amount of spaces to indent this tag
+//
+// Returns:
+// String with the given element as an SVG tag
+this.svgToString = function(elem, indent) {
+ var out = new Array(), toXml = svgedit.utilities.toXml;
+ var unit = curConfig.baseUnit;
+ var unit_re = new RegExp('^-?[\\d\\.]+' + unit + '$');
+
+ if (elem) {
+ cleanupElement(elem);
+ var attrs = elem.attributes,
+ attr,
+ i,
+ childs = elem.childNodes;
+
+ for (var i=0; i<indent; i++) out.push(" ");
+ out.push("<"); out.push(elem.nodeName);
+ if(elem.id === 'svgcontent') {
+ // Process root element separately
+ var res = getResolution();
+
+ var vb = "";
+ // TODO: Allow this by dividing all values by current baseVal
+ // Note that this also means we should properly deal with this on import
+// if(curConfig.baseUnit !== "px") {
+// var unit = curConfig.baseUnit;
+// var unit_m = svgedit.units.getTypeMap()[unit];
+// res.w = svgedit.units.shortFloat(res.w / unit_m)
+// res.h = svgedit.units.shortFloat(res.h / unit_m)
+// vb = ' viewBox="' + [0, 0, res.w, res.h].join(' ') + '"';
+// res.w += unit;
+// res.h += unit;
+// }
+
+ if(unit !== "px") {
+ res.w = svgedit.units.convertUnit(res.w, unit) + unit;
+ res.h = svgedit.units.convertUnit(res.h, unit) + unit;
+ }
+
+ out.push(' width="' + res.w + '" height="' + res.h + '"' + vb + ' xmlns="'+svgns+'"');
+
+ var nsuris = {};
+
+ // Check elements for namespaces, add if found
+ $(elem).find('*').andSelf().each(function() {
+ var el = this;
+ $.each(this.attributes, function(i, attr) {
+ var uri = attr.namespaceURI;
+ if(uri && !nsuris[uri] && nsMap[uri] !== 'xmlns' && nsMap[uri] !== 'xml' ) {
+ nsuris[uri] = true;
+ out.push(" xmlns:" + nsMap[uri] + '="' + uri +'"');
+ }
+ });
+ });
+
+ var i = attrs.length;
+ var attr_names = ['width','height','xmlns','x','y','viewBox','id','overflow'];
+ while (i--) {
+ attr = attrs.item(i);
+ var attrVal = toXml(attr.nodeValue);
+
+ // Namespaces have already been dealt with, so skip
+ if(attr.nodeName.indexOf('xmlns:') === 0) continue;
+
+ // only serialize attributes we don't use internally
+ if (attrVal != "" && attr_names.indexOf(attr.localName) == -1)
+ {
+
+ if(!attr.namespaceURI || nsMap[attr.namespaceURI]) {
+ out.push(' ');
+ out.push(attr.nodeName); out.push("=\"");
+ out.push(attrVal); out.push("\"");
+ }
+ }
+ }
+ } else {
+ // Skip empty defs
+ if(elem.nodeName === 'defs' && !elem.firstChild) return;
+
+ var moz_attrs = ['-moz-math-font-style', '_moz-math-font-style'];
+ for (var i=attrs.length-1; i>=0; i--) {
+ attr = attrs.item(i);
+ var attrVal = toXml(attr.nodeValue);
+ //remove bogus attributes added by Gecko
+ if (moz_attrs.indexOf(attr.localName) >= 0) continue;
+ if (attrVal != "") {
+ if(attrVal.indexOf('pointer-events') === 0) continue;
+ if(attr.localName === "class" && attrVal.indexOf('se_') === 0) continue;
+ out.push(" ");
+ if(attr.localName === 'd') attrVal = pathActions.convertPath(elem, true);
+ if(!isNaN(attrVal)) {
+ attrVal = svgedit.units.shortFloat(attrVal);
+ } else if(unit_re.test(attrVal)) {
+ attrVal = svgedit.units.shortFloat(attrVal) + unit;
+ }
+
+ // Embed images when saving
+ if(save_options.apply
+ && elem.nodeName === 'image'
+ && attr.localName === 'href'
+ && save_options.images
+ && save_options.images === 'embed')
+ {
+ var img = encodableImages[attrVal];
+ if(img) attrVal = img;
+ }
+
+ // map various namespaces to our fixed namespace prefixes
+ // (the default xmlns attribute itself does not get a prefix)
+ if(!attr.namespaceURI || attr.namespaceURI == svgns || nsMap[attr.namespaceURI]) {
+ out.push(attr.nodeName); out.push("=\"");
+ out.push(attrVal); out.push("\"");
+ }
+ }
+ }
+ }
+
+ if (elem.hasChildNodes()) {
+ out.push(">");
+ indent++;
+ var bOneLine = false;
+
+ for (var i=0; i<childs.length; i++)
+ {
+ var child = childs.item(i);
+ switch(child.nodeType) {
+ case 1: // element node
+ out.push("\n");
+ out.push(this.svgToString(childs.item(i), indent));
+ break;
+ case 3: // text node
+ var str = child.nodeValue.replace(/^\s+|\s+$/g, "");
+ if (str != "") {
+ bOneLine = true;
+ out.push(toXml(str) + "");
+ }
+ break;
+ case 4: // cdata node
+ out.push("\n");
+ out.push(new Array(indent+1).join(" "));
+ out.push("<![CDATA[");
+ out.push(child.nodeValue);
+ out.push("]]>");
+ break;
+ case 8: // comment
+ out.push("\n");
+ out.push(new Array(indent+1).join(" "));
+ out.push("<!--");
+ out.push(child.data);
+ out.push("-->");
+ break;
+ } // switch on node type
+ }
+ indent--;
+ if (!bOneLine) {
+ out.push("\n");
+ for (var i=0; i<indent; i++) out.push(" ");
+ }
+ out.push("</"); out.push(elem.nodeName); out.push(">");
+ } else {
+ out.push("/>");
+ }
+ }
+ return out.join('');
+}; // end svgToString()
+
+// Function: embedImage
+// Converts a given image file to a data URL when possible, then runs a given callback
+//
+// Parameters:
+// val - String with the path/URL of the image
+// callback - Optional function to run when image data is found, supplies the
+// result (data URL or false) as first parameter.
+this.embedImage = function(val, callback) {
+
+ // load in the image and once it's loaded, get the dimensions
+ $(new Image()).load(function() {
+ // create a canvas the same size as the raster image
+ var canvas = document.createElement("canvas");
+ canvas.width = this.width;
+ canvas.height = this.height;
+ // load the raster image into the canvas
+ canvas.getContext("2d").drawImage(this,0,0);
+ // retrieve the data: URL
+ try {
+ var urldata = ';svgedit_url=' + encodeURIComponent(val);
+ urldata = canvas.toDataURL().replace(';base64',urldata+';base64');
+ encodableImages[val] = urldata;
+ } catch(e) {
+ encodableImages[val] = false;
+ }
+ last_good_img_url = val;
+ if(callback) callback(encodableImages[val]);
+ }).attr('src',val);
+}
+
+// Function: setGoodImage
+// Sets a given URL to be a "last good image" URL
+this.setGoodImage = function(val) {
+ last_good_img_url = val;
+}
+
+this.open = function() {
+ // Nothing by default, handled by optional widget/extension
+};
+
+// Function: save
+// Serializes the current drawing into SVG XML text and returns it to the 'saved' handler.
+// This function also includes the XML prolog. Clients of the SvgCanvas bind their save
+// function to the 'saved' event.
+//
+// Returns:
+// Nothing
+this.save = function(opts) {
+ // remove the selected outline before serializing
+ clearSelection();
+ // Update save options if provided
+ if(opts) $.extend(save_options, opts);
+ save_options.apply = true;
+
+ // no need for doctype, see http://jwatt.org/svg/authoring/#doctype-declaration
+ var str = this.svgCanvasToString();
+ call("saved", str);
+};
+
+// Function: rasterExport
+// Generates a PNG Data URL based on the current image, then calls "exported"
+// with an object including the string and any issues found
+this.rasterExport = function() {
+ // remove the selected outline before serializing
+ clearSelection();
+
+ // Check for known CanVG issues
+ var issues = [];
+
+ // Selector and notice
+ var issue_list = {
+ 'feGaussianBlur': uiStrings.exportNoBlur,
+ 'foreignObject': uiStrings.exportNoforeignObject,
+ '[stroke-dasharray]': uiStrings.exportNoDashArray
+ };
+ var content = $(svgcontent);
+
+ // Add font/text check if Canvas Text API is not implemented
+ if(!("font" in $('<canvas>')[0].getContext('2d'))) {
+ issue_list['text'] = uiStrings.exportNoText;
+ }
+
+ $.each(issue_list, function(sel, descr) {
+ if(content.find(sel).length) {
+ issues.push(descr);
+ }
+ });
+
+ var str = this.svgCanvasToString();
+ call("exported", {svg: str, issues: issues});
+};
+
+// Function: getSvgString
+// Returns the current drawing as raw SVG XML text.
+//
+// Returns:
+// The current drawing as raw SVG XML text.
+this.getSvgString = function() {
+ save_options.apply = false;
+ return this.svgCanvasToString();
+};
+
+// Function: randomizeIds
+// This function determines whether to use a nonce in the prefix, when
+// generating IDs for future documents in SVG-Edit.
+//
+// Parameters:
+// an opional boolean, which, if true, adds a nonce to the prefix. Thus
+// svgCanvas.randomizeIds() <==> svgCanvas.randomizeIds(true)
+//
+// if you're controlling SVG-Edit externally, and want randomized IDs, call
+// this BEFORE calling svgCanvas.setSvgString
+//
+this.randomizeIds = function() {
+ if (arguments.length > 0 && arguments[0] == false) {
+ svgedit.draw.randomizeIds(false, getCurrentDrawing());
+ } else {
+ svgedit.draw.randomizeIds(true, getCurrentDrawing());
+ }
+};
+
+// Function: uniquifyElems
+// Ensure each element has a unique ID
+//
+// Parameters:
+// g - The parent element of the tree to give unique IDs
+var uniquifyElems = this.uniquifyElems = function(g) {
+ var ids = {};
+ // TODO: Handle markers and connectors. These are not yet re-identified properly
+ // as their referring elements do not get remapped.
+ //
+ // <marker id='se_marker_end_svg_7'/>
+ // <polyline id='svg_7' se:connector='svg_1 svg_6' marker-end='url(#se_marker_end_svg_7)'/>
+ //
+ // Problem #1: if svg_1 gets renamed, we do not update the polyline's se:connector attribute
+ // Problem #2: if the polyline svg_7 gets renamed, we do not update the marker id nor the polyline's marker-end attribute
+ var ref_elems = ["filter", "linearGradient", "pattern", "radialGradient", "symbol", "textPath", "use"];
+
+ svgedit.utilities.walkTree(g, function(n) {
+ // if it's an element node
+ if (n.nodeType == 1) {
+ // and the element has an ID
+ if (n.id) {
+ // and we haven't tracked this ID yet
+ if (!(n.id in ids)) {
+ // add this id to our map
+ ids[n.id] = {elem:null, attrs:[], hrefs:[]};
+ }
+ ids[n.id]["elem"] = n;
+ }
+
+ // now search for all attributes on this element that might refer
+ // to other elements
+ $.each(ref_attrs,function(i,attr) {
+ var attrnode = n.getAttributeNode(attr);
+ if (attrnode) {
+ // the incoming file has been sanitized, so we should be able to safely just strip off the leading #
+ var url = svgedit.utilities.getUrlFromAttr(attrnode.value),
+ refid = url ? url.substr(1) : null;
+ if (refid) {
+ if (!(refid in ids)) {
+ // add this id to our map
+ ids[refid] = {elem:null, attrs:[], hrefs:[]};
+ }
+ ids[refid]["attrs"].push(attrnode);
+ }
+ }
+ });
+
+ // check xlink:href now
+ var href = svgedit.utilities.getHref(n);
+ // TODO: what if an <image> or <a> element refers to an element internally?
+ if(href && ref_elems.indexOf(n.nodeName) >= 0)
+ {
+ var refid = href.substr(1);
+ if (refid) {
+ if (!(refid in ids)) {
+ // add this id to our map
+ ids[refid] = {elem:null, attrs:[], hrefs:[]};
+ }
+ ids[refid]["hrefs"].push(n);
+ }
+ }
+ }
+ });
+
+ // in ids, we now have a map of ids, elements and attributes, let's re-identify
+ for (var oldid in ids) {
+ if (!oldid) continue;
+ var elem = ids[oldid]["elem"];
+ if (elem) {
+ var newid = getNextId();
+
+ // assign element its new id
+ elem.id = newid;
+
+ // remap all url() attributes
+ var attrs = ids[oldid]["attrs"];
+ var j = attrs.length;
+ while (j--) {
+ var attr = attrs[j];
+ attr.ownerElement.setAttribute(attr.name, "url(#" + newid + ")");
+ }
+
+ // remap all href attributes
+ var hreffers = ids[oldid]["hrefs"];
+ var k = hreffers.length;
+ while (k--) {
+ var hreffer = hreffers[k];
+ svgedit.utilities.setHref(hreffer, "#"+newid);
+ }
+ }
+ }
+}
+
+// Function setUseData
+// Assigns reference data for each use element
+var setUseData = this.setUseData = function(parent) {
+ var elems = $(parent);
+
+ if(parent.tagName !== 'use') {
+ elems = elems.find('use');
+ }
+
+ elems.each(function() {
+ var id = getHref(this).substr(1);
+ var ref_elem = getElem(id);
+ if(!ref_elem) return;
+ $(this).data('ref', ref_elem);
+ if(ref_elem.tagName == 'symbol' || ref_elem.tagName == 'svg') {
+ $(this).data('symbol', ref_elem).data('ref', ref_elem);
+ }
+ });
+}
+
+// Function convertGradients
+// Converts gradients from userSpaceOnUse to objectBoundingBox
+var convertGradients = this.convertGradients = function(elem) {
+ var elems = $(elem).find('linearGradient, radialGradient');
+ if(!elems.length && svgedit.browser.isWebkit()) {
+ // Bug in webkit prevents regular *Gradient selector search
+ elems = $(elem).find('*').filter(function() {
+ return (this.tagName.indexOf('Gradient') >= 0);
+ });
+ }
+
+ elems.each(function() {
+ var grad = this;
+ if($(grad).attr('gradientUnits') === 'userSpaceOnUse') {
+ // TODO: Support more than one element with this ref by duplicating parent grad
+ var elems = $(svgcontent).find('[fill=url(#' + grad.id + ')],[stroke=url(#' + grad.id + ')]');
+ if(!elems.length) return;
+
+ // get object's bounding box
+ var bb = svgedit.utilities.getBBox(elems[0]);
+
+ // This will occur if the element is inside a <defs> or a <symbol>,
+ // in which we shouldn't need to convert anyway.
+ if(!bb) return;
+
+ if(grad.tagName === 'linearGradient') {
+ var g_coords = $(grad).attr(['x1', 'y1', 'x2', 'y2']);
+
+ // If has transform, convert
+ var tlist = grad.gradientTransform.baseVal;
+ if(tlist && tlist.numberOfItems > 0) {
+ var m = transformListToTransform(tlist).matrix;
+ var pt1 = transformPoint(g_coords.x1, g_coords.y1, m);
+ var pt2 = transformPoint(g_coords.x2, g_coords.y2, m);
+
+ g_coords.x1 = pt1.x;
+ g_coords.y1 = pt1.y;
+ g_coords.x2 = pt2.x;
+ g_coords.y2 = pt2.y;
+ grad.removeAttribute('gradientTransform');
+ }
+
+ $(grad).attr({
+ x1: (g_coords.x1 - bb.x) / bb.width,
+ y1: (g_coords.y1 - bb.y) / bb.height,
+ x2: (g_coords.x2 - bb.x) / bb.width,
+ y2: (g_coords.y2 - bb.y) / bb.height
+ });
+ grad.removeAttribute('gradientUnits');
+ } else {
+ // Note: radialGradient elements cannot be easily converted
+ // because userSpaceOnUse will keep circular gradients, while
+ // objectBoundingBox will x/y scale the gradient according to
+ // its bbox.
+
+ // For now we'll do nothing, though we should probably have
+ // the gradient be updated as the element is moved, as
+ // inkscape/illustrator do.
+
+// var g_coords = $(grad).attr(['cx', 'cy', 'r']);
+//
+// $(grad).attr({
+// cx: (g_coords.cx - bb.x) / bb.width,
+// cy: (g_coords.cy - bb.y) / bb.height,
+// r: g_coords.r
+// });
+//
+// grad.removeAttribute('gradientUnits');
+ }
+
+
+ }
+ });
+}
+
+// Function: convertToGroup
+// Converts selected/given <use> or child SVG element to a group
+var convertToGroup = this.convertToGroup = function(elem) {
+ if(!elem) {
+ elem = selectedElements[0];
+ }
+ var $elem = $(elem);
+
+ var batchCmd = new BatchCommand();
+
+ var ts;
+
+ if($elem.data('gsvg')) {
+ // Use the gsvg as the new group
+ var svg = elem.firstChild;
+ var pt = $(svg).attr(['x', 'y']);
+
+ $(elem.firstChild.firstChild).unwrap();
+ $(elem).removeData('gsvg');
+
+ var tlist = getTransformList(elem);
+ var xform = svgroot.createSVGTransform();
+ xform.setTranslate(pt.x, pt.y);
+ tlist.appendItem(xform);
+ recalculateDimensions(elem);
+ call("selected", [elem]);
+ } else if($elem.data('symbol')) {
+ elem = $elem.data('symbol');
+
+ ts = $elem.attr('transform');
+ var pos = $elem.attr(['x','y']);
+
+ var vb = elem.getAttribute('viewBox');
+
+ if(vb) {
+ var nums = vb.split(' ');
+ pos.x -= +nums[0];
+ pos.y -= +nums[1];
+ }
+
+ // Not ideal, but works
+ ts += " translate(" + (pos.x || 0) + "," + (pos.y || 0) + ")";
+
+ var prev = $elem.prev();
+
+ // Remove <use> element
+ batchCmd.addSubCommand(new RemoveElementCommand($elem[0], $elem[0].nextSibling, $elem[0].parentNode));
+ $elem.remove();
+
+ // See if other elements reference this symbol
+ var has_more = $(svgcontent).find('use:data(symbol)').length;
+
+ var g = svgdoc.createElementNS(svgns, "g");
+ var childs = elem.childNodes;
+
+ for(var i = 0; i < childs.length; i++) {
+ g.appendChild(childs[i].cloneNode(true));
+ }
+
+ // Duplicate the gradients for Gecko, since they weren't included in the <symbol>
+ if(svgedit.browser.isGecko()) {
+ var dupeGrads = $(findDefs()).children('linearGradient,radialGradient,pattern').clone();
+ $(g).append(dupeGrads);
+ }
+
+ if (ts) {
+ g.setAttribute("transform", ts);
+ }
+
+ var parent = elem.parentNode;
+
+ uniquifyElems(g);
+
+ // Put the dupe gradients back into <defs> (after uniquifying them)
+ if(svgedit.browser.isGecko()) {
+ $(findDefs()).append( $(g).find('linearGradient,radialGradient,pattern') );
+ }
+
+ // now give the g itself a new id
+ g.id = getNextId();
+
+ prev.after(g);
+
+ if(parent) {
+ if(!has_more) {
+ // remove symbol/svg element
+ var nextSibling = elem.nextSibling;
+ parent.removeChild(elem);
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ }
+ batchCmd.addSubCommand(new InsertElementCommand(g));
+ }
+
+ setUseData(g);
+
+ if(svgedit.browser.isGecko()) {
+ convertGradients(findDefs());
+ } else {
+ convertGradients(g);
+ }
+
+ // recalculate dimensions on the top-level children so that unnecessary transforms
+ // are removed
+ svgedit.utilities.walkTreePost(g, function(n){try{recalculateDimensions(n)}catch(e){console.log(e)}});
+
+ // Give ID for any visible element missing one
+ $(g).find(visElems).each(function() {
+ if(!this.id) this.id = getNextId();
+ });
+
+ selectOnly([g]);
+
+ var cm = pushGroupProperties(g, true);
+ if(cm) {
+ batchCmd.addSubCommand(cm);
+ }
+
+ addCommandToHistory(batchCmd);
+
+ } else {
+ console.log('Unexpected element to ungroup:', elem);
+ }
+}
+
+//
+// Function: setSvgString
+// This function sets the current drawing as the input SVG XML.
+//
+// Parameters:
+// xmlString - The SVG as XML text.
+//
+// Returns:
+// This function returns false if the set was unsuccessful, true otherwise.
+this.setSvgString = function(xmlString) {
+ try {
+ // convert string into XML document
+ var newDoc = svgedit.utilities.text2xml(xmlString);
+
+ this.prepareSvg(newDoc);
+
+ var batchCmd = new BatchCommand("Change Source");
+
+ // remove old svg document
+ var nextSibling = svgcontent.nextSibling;
+ var oldzoom = svgroot.removeChild(svgcontent);
+ batchCmd.addSubCommand(new RemoveElementCommand(oldzoom, nextSibling, svgroot));
+
+ // set new svg document
+ // If DOM3 adoptNode() available, use it. Otherwise fall back to DOM2 importNode()
+ if(svgdoc.adoptNode) {
+ svgcontent = svgdoc.adoptNode(newDoc.documentElement);
+ }
+ else {
+ svgcontent = svgdoc.importNode(newDoc.documentElement, true);
+ }
+
+ svgroot.appendChild(svgcontent);
+ var content = $(svgcontent);
+
+ canvas.current_drawing_ = new svgedit.draw.Drawing(svgcontent, idprefix);
+
+ // retrieve or set the nonce
+ var nonce = getCurrentDrawing().getNonce();
+ if (nonce) {
+ call("setnonce", nonce);
+ } else {
+ call("unsetnonce");
+ }
+
+ // change image href vals if possible
+ content.find('image').each(function() {
+ var image = this;
+ preventClickDefault(image);
+ var val = getHref(this);
+ if(val.indexOf('data:') === 0) {
+ // Check if an SVG-edit data URI
+ var m = val.match(/svgedit_url=(.*?);/);
+ if(m) {
+ var url = decodeURIComponent(m[1]);
+ $(new Image()).load(function() {
+ image.setAttributeNS(xlinkns,'xlink:href',url);
+ }).attr('src',url);
+ }
+ }
+ // Add to encodableImages if it loads
+ canvas.embedImage(val);
+ });
+
+ // Wrap child SVGs in group elements
+ content.find('svg').each(function() {
+ // Skip if it's in a <defs>
+ if($(this).closest('defs').length) return;
+
+ uniquifyElems(this);
+
+ // Check if it already has a gsvg group
+ var pa = this.parentNode;
+ if(pa.childNodes.length === 1 && pa.nodeName === 'g') {
+ $(pa).data('gsvg', this);
+ pa.id = pa.id || getNextId();
+ } else {
+ groupSvgElem(this);
+ }
+ });
+
+ // For Firefox: Put all paint elems in defs
+ if(svgedit.browser.isGecko()) {
+ content.find('linearGradient, radialGradient, pattern').appendTo(findDefs());
+ }
+
+
+ // Set ref element for <use> elements
+
+ // TODO: This should also be done if the object is re-added through "redo"
+ setUseData(content);
+
+ convertGradients(content[0]);
+
+ // recalculate dimensions on the top-level children so that unnecessary transforms
+ // are removed
+ svgedit.utilities.walkTreePost(svgcontent, function(n){try{recalculateDimensions(n)}catch(e){console.log(e)}});
+
+ var attrs = {
+ id: 'svgcontent',
+ overflow: curConfig.show_outside_canvas?'visible':'hidden'
+ };
+
+ var percs = false;
+
+ // determine proper size
+ if (content.attr("viewBox")) {
+ var vb = content.attr("viewBox").split(' ');
+ attrs.width = vb[2];
+ attrs.height = vb[3];
+ }
+ // handle content that doesn't have a viewBox
+ else {
+ $.each(['width', 'height'], function(i, dim) {
+ // Set to 100 if not given
+ var val = content.attr(dim);
+
+ if(!val) val = '100%';
+
+ if((val+'').substr(-1) === "%") {
+ // Use user units if percentage given
+ percs = true;
+ } else {
+ attrs[dim] = convertToNum(dim, val);
+ }
+ });
+ }
+
+ // identify layers
+ identifyLayers();
+
+ // Give ID for any visible layer children missing one
+ content.children().find(visElems).each(function() {
+ if(!this.id) this.id = getNextId();
+ });
+
+ // Percentage width/height, so let's base it on visible elements
+ if(percs) {
+ var bb = getStrokedBBox();
+ attrs.width = bb.width + bb.x;
+ attrs.height = bb.height + bb.y;
+ }
+
+ // Just in case negative numbers are given or
+ // result from the percs calculation
+ if(attrs.width <= 0) attrs.width = 100;
+ if(attrs.height <= 0) attrs.height = 100;
+
+ content.attr(attrs);
+ this.contentW = attrs['width'];
+ this.contentH = attrs['height'];
+
+ batchCmd.addSubCommand(new InsertElementCommand(svgcontent));
+ // update root to the correct size
+ var changes = content.attr(["width", "height"]);
+ batchCmd.addSubCommand(new ChangeElementCommand(svgroot, changes));
+
+ // reset zoom
+ current_zoom = 1;
+
+ // reset transform lists
+ svgedit.transformlist.resetListMap();
+ clearSelection();
+ svgedit.path.clearData();
+ svgroot.appendChild(selectorManager.selectorParentGroup);
+
+ addCommandToHistory(batchCmd);
+ call("changed", [svgcontent]);
+ } catch(e) {
+ console.log(e);
+ return false;
+ }
+
+ return true;
+};
+
+// Function: importSvgString
+// This function imports the input SVG XML as a <symbol> in the <defs>, then adds a
+// <use> to the current layer.
+//
+// Parameters:
+// xmlString - The SVG as XML text.
+//
+// Returns:
+// This function returns false if the import was unsuccessful, true otherwise.
+// TODO:
+// * properly handle if namespace is introduced by imported content (must add to svgcontent
+// and update all prefixes in the imported node)
+// * properly handle recalculating dimensions, recalculateDimensions() doesn't handle
+// arbitrary transform lists, but makes some assumptions about how the transform list
+// was obtained
+// * import should happen in top-left of current zoomed viewport
+this.importSvgString = function(xmlString) {
+
+ try {
+ // Get unique ID
+ var uid = svgedit.utilities.encode64(xmlString.length + xmlString).substr(0,32);
+
+ var useExisting = false;
+
+ // Look for symbol and make sure symbol exists in image
+ if(import_ids[uid]) {
+ if( $(import_ids[uid].symbol).parents('#svgroot').length ) {
+ useExisting = true;
+ }
+ }
+
+ var batchCmd = new BatchCommand("Import SVG");
+
+ if(useExisting) {
+ var symbol = import_ids[uid].symbol;
+ var ts = import_ids[uid].xform;
+ } else {
+ // convert string into XML document
+ var newDoc = svgedit.utilities.text2xml(xmlString);
+
+ this.prepareSvg(newDoc);
+
+ // import new svg document into our document
+ var svg;
+ // If DOM3 adoptNode() available, use it. Otherwise fall back to DOM2 importNode()
+ if(svgdoc.adoptNode) {
+ svg = svgdoc.adoptNode(newDoc.documentElement);
+ }
+ else {
+ svg = svgdoc.importNode(newDoc.documentElement, true);
+ }
+
+ uniquifyElems(svg);
+
+ var innerw = convertToNum('width', svg.getAttribute("width")),
+ innerh = convertToNum('height', svg.getAttribute("height")),
+ innervb = svg.getAttribute("viewBox"),
+ // if no explicit viewbox, create one out of the width and height
+ vb = innervb ? innervb.split(" ") : [0,0,innerw,innerh];
+ for (var j = 0; j < 4; ++j)
+ vb[j] = +(vb[j]);
+
+ // TODO: properly handle preserveAspectRatio
+ var canvasw = +svgcontent.getAttribute("width"),
+ canvash = +svgcontent.getAttribute("height");
+ // imported content should be 1/3 of the canvas on its largest dimension
+
+ if (innerh > innerw) {
+ var ts = "scale(" + (canvash/3)/vb[3] + ")";
+ }
+ else {
+ var ts = "scale(" + (canvash/3)/vb[2] + ")";
+ }
+
+ // Hack to make recalculateDimensions understand how to scale
+ ts = "translate(0) " + ts + " translate(0)";
+
+ var symbol = svgdoc.createElementNS(svgns, "symbol");
+ var defs = findDefs();
+
+ if(svgedit.browser.isGecko()) {
+ // Move all gradients into root for Firefox, workaround for this bug:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=353575
+ // TODO: Make this properly undo-able.
+ $(svg).find('linearGradient, radialGradient, pattern').appendTo(defs);
+ }
+
+ while (svg.firstChild) {
+ var first = svg.firstChild;
+ symbol.appendChild(first);
+ }
+ var attrs = svg.attributes;
+ for(var i=0; i < attrs.length; i++) {
+ var attr = attrs[i];
+ symbol.setAttribute(attr.nodeName, attr.nodeValue);
+ }
+ symbol.id = getNextId();
+
+ // Store data
+ import_ids[uid] = {
+ symbol: symbol,
+ xform: ts
+ }
+
+ findDefs().appendChild(symbol);
+ batchCmd.addSubCommand(new InsertElementCommand(symbol));
+ }
+
+
+ var use_el = svgdoc.createElementNS(svgns, "use");
+ use_el.id = getNextId();
+ setHref(use_el, "#" + symbol.id);
+
+ (current_group || getCurrentDrawing().getCurrentLayer()).appendChild(use_el);
+ batchCmd.addSubCommand(new InsertElementCommand(use_el));
+ clearSelection();
+
+ use_el.setAttribute("transform", ts);
+ recalculateDimensions(use_el);
+ $(use_el).data('symbol', symbol).data('ref', symbol);
+ addToSelection([use_el]);
+
+ // TODO: Find way to add this in a recalculateDimensions-parsable way
+// if (vb[0] != 0 || vb[1] != 0)
+// ts = "translate(" + (-vb[0]) + "," + (-vb[1]) + ") " + ts;
+ addCommandToHistory(batchCmd);
+ call("changed", [svgcontent]);
+
+ } catch(e) {
+ console.log(e);
+ return false;
+ }
+
+ return true;
+};
+
+// TODO(codedread): Move all layer/context functions in draw.js
+// Layer API Functions
+
+// Group: Layers
+
+// Function: identifyLayers
+// Updates layer system
+var identifyLayers = canvas.identifyLayers = function() {
+ leaveContext();
+ getCurrentDrawing().identifyLayers();
+};
+
+// Function: createLayer
+// Creates a new top-level layer in the drawing with the given name, sets the current layer
+// to it, and then clears the selection This function then calls the 'changed' handler.
+// This is an undoable action.
+//
+// Parameters:
+// name - The given name
+this.createLayer = function(name) {
+ var batchCmd = new BatchCommand("Create Layer");
+ var new_layer = getCurrentDrawing().createLayer(name);
+ batchCmd.addSubCommand(new InsertElementCommand(new_layer));
+ addCommandToHistory(batchCmd);
+ clearSelection();
+ call("changed", [new_layer]);
+};
+
+// Function: cloneLayer
+// Creates a new top-level layer in the drawing with the given name, copies all the current layer's contents
+// to it, and then clears the selection This function then calls the 'changed' handler.
+// This is an undoable action.
+//
+// Parameters:
+// name - The given name
+this.cloneLayer = function(name) {
+ var batchCmd = new BatchCommand("Duplicate Layer");
+ var new_layer = svgdoc.createElementNS(svgns, "g");
+ var layer_title = svgdoc.createElementNS(svgns, "title");
+ layer_title.textContent = name;
+ new_layer.appendChild(layer_title);
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ $(current_layer).after(new_layer);
+ var childs = current_layer.childNodes;
+ for(var i = 0; i < childs.length; i++) {
+ var ch = childs[i];
+ if(ch.localName == 'title') continue;
+ new_layer.appendChild(copyElem(ch));
+ }
+
+ clearSelection();
+ identifyLayers();
+
+ batchCmd.addSubCommand(new InsertElementCommand(new_layer));
+ addCommandToHistory(batchCmd);
+ canvas.setCurrentLayer(name);
+ call("changed", [new_layer]);
+};
+
+// Function: deleteCurrentLayer
+// Deletes the current layer from the drawing and then clears the selection. This function
+// then calls the 'changed' handler. This is an undoable action.
+this.deleteCurrentLayer = function() {
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ var nextSibling = current_layer.nextSibling;
+ var parent = current_layer.parentNode;
+ current_layer = getCurrentDrawing().deleteCurrentLayer();
+ if (current_layer) {
+ var batchCmd = new BatchCommand("Delete Layer");
+ // store in our Undo History
+ batchCmd.addSubCommand(new RemoveElementCommand(current_layer, nextSibling, parent));
+ addCommandToHistory(batchCmd);
+ clearSelection();
+ call("changed", [parent]);
+ return true;
+ }
+ return false;
+};
+
+// Function: setCurrentLayer
+// Sets the current layer. If the name is not a valid layer name, then this function returns
+// false. Otherwise it returns true. This is not an undo-able action.
+//
+// Parameters:
+// name - the name of the layer you want to switch to.
+//
+// Returns:
+// true if the current layer was switched, otherwise false
+this.setCurrentLayer = function(name) {
+ var result = getCurrentDrawing().setCurrentLayer(svgedit.utilities.toXml(name));
+ if (result) {
+ clearSelection();
+ }
+ return result;
+};
+
+// Function: renameCurrentLayer
+// Renames the current layer. If the layer name is not valid (i.e. unique), then this function
+// does nothing and returns false, otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// newname - the new name you want to give the current layer. This name must be unique
+// among all layer names.
+//
+// Returns:
+// true if the rename succeeded, false otherwise.
+this.renameCurrentLayer = function(newname) {
+ var drawing = getCurrentDrawing();
+ if (drawing.current_layer) {
+ var oldLayer = drawing.current_layer;
+ // setCurrentLayer will return false if the name doesn't already exist
+ // this means we are free to rename our oldLayer
+ if (!canvas.setCurrentLayer(newname)) {
+ var batchCmd = new BatchCommand("Rename Layer");
+ // find the index of the layer
+ for (var i = 0; i < drawing.getNumLayers(); ++i) {
+ if (drawing.all_layers[i][1] == oldLayer) break;
+ }
+ var oldname = drawing.getLayerName(i);
+ drawing.all_layers[i][0] = svgedit.utilities.toXml(newname);
+
+ // now change the underlying title element contents
+ var len = oldLayer.childNodes.length;
+ for (var i = 0; i < len; ++i) {
+ var child = oldLayer.childNodes.item(i);
+ // found the <title> element, now append all the
+ if (child && child.tagName == "title") {
+ // wipe out old name
+ while (child.firstChild) { child.removeChild(child.firstChild); }
+ child.textContent = newname;
+
+ batchCmd.addSubCommand(new ChangeElementCommand(child, {"#text":oldname}));
+ addCommandToHistory(batchCmd);
+ call("changed", [oldLayer]);
+ return true;
+ }
+ }
+ }
+ drawing.current_layer = oldLayer;
+ }
+ return false;
+};
+
+// Function: setCurrentLayerPosition
+// Changes the position of the current layer to the new value. If the new index is not valid,
+// this function does nothing and returns false, otherwise it returns true. This is an
+// undo-able action.
+//
+// Parameters:
+// newpos - The zero-based index of the new position of the layer. This should be between
+// 0 and (number of layers - 1)
+//
+// Returns:
+// true if the current layer position was changed, false otherwise.
+this.setCurrentLayerPosition = function(newpos) {
+ var drawing = getCurrentDrawing();
+ if (drawing.current_layer && newpos >= 0 && newpos < drawing.getNumLayers()) {
+ for (var oldpos = 0; oldpos < drawing.getNumLayers(); ++oldpos) {
+ if (drawing.all_layers[oldpos][1] == drawing.current_layer) break;
+ }
+ // some unknown error condition (current_layer not in all_layers)
+ if (oldpos == drawing.getNumLayers()) { return false; }
+
+ if (oldpos != newpos) {
+ // if our new position is below us, we need to insert before the node after newpos
+ var refLayer = null;
+ var oldNextSibling = drawing.current_layer.nextSibling;
+ if (newpos > oldpos ) {
+ if (newpos < drawing.getNumLayers()-1) {
+ refLayer = drawing.all_layers[newpos+1][1];
+ }
+ }
+ // if our new position is above us, we need to insert before the node at newpos
+ else {
+ refLayer = drawing.all_layers[newpos][1];
+ }
+ svgcontent.insertBefore(drawing.current_layer, refLayer);
+ addCommandToHistory(new MoveElementCommand(drawing.current_layer, oldNextSibling, svgcontent));
+
+ identifyLayers();
+ canvas.setCurrentLayer(drawing.getLayerName(newpos));
+
+ return true;
+ }
+ }
+
+ return false;
+};
+
+// Function: setLayerVisibility
+// Sets the visibility of the layer. If the layer name is not valid, this function return
+// false, otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// layername - the name of the layer to change the visibility
+// bVisible - true/false, whether the layer should be visible
+//
+// Returns:
+// true if the layer's visibility was set, false otherwise
+this.setLayerVisibility = function(layername, bVisible) {
+ var drawing = getCurrentDrawing();
+ var prevVisibility = drawing.getLayerVisibility(layername);
+ var layer = drawing.setLayerVisibility(layername, bVisible);
+ if (layer) {
+ var oldDisplay = prevVisibility ? 'inline' : 'none';
+ addCommandToHistory(new ChangeElementCommand(layer, {'display':oldDisplay}, 'Layer Visibility'));
+ } else {
+ return false;
+ }
+
+ if (layer == drawing.getCurrentLayer()) {
+ clearSelection();
+ pathActions.clear();
+ }
+// call("changed", [selected]);
+ return true;
+};
+
+// Function: moveSelectedToLayer
+// Moves the selected elements to layername. If the name is not a valid layer name, then false
+// is returned. Otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// layername - the name of the layer you want to which you want to move the selected elements
+//
+// Returns:
+// true if the selected elements were moved to the layer, false otherwise.
+this.moveSelectedToLayer = function(layername) {
+ // find the layer
+ var layer = null;
+ var drawing = getCurrentDrawing();
+ for (var i = 0; i < drawing.getNumLayers(); ++i) {
+ if (drawing.getLayerName(i) == layername) {
+ layer = drawing.all_layers[i][1];
+ break;
+ }
+ }
+ if (!layer) return false;
+
+ var batchCmd = new BatchCommand("Move Elements to Layer");
+
+ // loop for each selected element and move it
+ var selElems = selectedElements;
+ var i = selElems.length;
+ while (i--) {
+ var elem = selElems[i];
+ if (!elem) continue;
+ var oldNextSibling = elem.nextSibling;
+ // TODO: this is pretty brittle!
+ var oldLayer = elem.parentNode;
+ layer.appendChild(elem);
+ batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldLayer));
+ }
+
+ addCommandToHistory(batchCmd);
+
+ return true;
+};
+
+this.mergeLayer = function(skipHistory) {
+ var batchCmd = new BatchCommand("Merge Layer");
+ var drawing = getCurrentDrawing();
+ var prev = $(drawing.current_layer).prev()[0];
+ if(!prev) return;
+ var childs = drawing.current_layer.childNodes;
+ var len = childs.length;
+ var layerNextSibling = drawing.current_layer.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(drawing.current_layer, layerNextSibling, svgcontent));
+
+ while(drawing.current_layer.firstChild) {
+ var ch = drawing.current_layer.firstChild;
+ if(ch.localName == 'title') {
+ var chNextSibling = ch.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(ch, chNextSibling, drawing.current_layer));
+ drawing.current_layer.removeChild(ch);
+ continue;
+ }
+ var oldNextSibling = ch.nextSibling;
+ prev.appendChild(ch);
+ batchCmd.addSubCommand(new MoveElementCommand(ch, oldNextSibling, drawing.current_layer));
+ }
+
+ // Remove current layer
+ svgcontent.removeChild(drawing.current_layer);
+
+ if(!skipHistory) {
+ clearSelection();
+ identifyLayers();
+
+ call("changed", [svgcontent]);
+
+ addCommandToHistory(batchCmd);
+ }
+
+ drawing.current_layer = prev;
+ return batchCmd;
+}
+
+this.mergeAllLayers = function() {
+ var batchCmd = new BatchCommand("Merge all Layers");
+ var drawing = getCurrentDrawing();
+ drawing.current_layer = drawing.all_layers[drawing.getNumLayers()-1][1];
+ while($(svgcontent).children('g').length > 1) {
+ batchCmd.addSubCommand(canvas.mergeLayer(true));
+ }
+
+ clearSelection();
+ identifyLayers();
+ call("changed", [svgcontent]);
+ addCommandToHistory(batchCmd);
+}
+
+// Function: leaveContext
+// Return from a group context to the regular kind, make any previously
+// disabled elements enabled again
+var leaveContext = this.leaveContext = function() {
+ var len = disabled_elems.length;
+ if(len) {
+ for(var i = 0; i < len; i++) {
+ var elem = disabled_elems[i];
+
+ var orig = elData(elem, 'orig_opac');
+ if(orig !== 1) {
+ elem.setAttribute('opacity', orig);
+ } else {
+ elem.removeAttribute('opacity');
+ }
+ elem.setAttribute('style', 'pointer-events: inherit');
+ }
+ disabled_elems = [];
+ clearSelection(true);
+ call("contextset", null);
+ }
+ current_group = null;
+}
+
+// Function: setContext
+// Set the current context (for in-group editing)
+var setContext = this.setContext = function(elem) {
+ leaveContext();
+ if(typeof elem === 'string') {
+ elem = getElem(elem);
+ }
+
+ // Edit inside this group
+ current_group = elem;
+
+ // Disable other elements
+ $(elem).parentsUntil('#svgcontent').andSelf().siblings().each(function() {
+ var opac = this.getAttribute('opacity') || 1;
+ // Store the original's opacity
+ elData(this, 'orig_opac', opac);
+ this.setAttribute('opacity', opac * .33);
+ this.setAttribute('style', 'pointer-events: none');
+ disabled_elems.push(this);
+ });
+
+ clearSelection();
+ call("contextset", current_group);
+}
+
+// Group: Document functions
+
+// Function: clear
+// Clears the current document. This is not an undoable action.
+this.clear = function() {
+ pathActions.clear();
+
+ clearSelection();
+
+ // clear the svgcontent node
+ canvas.clearSvgContentElement();
+
+ // create new document
+ canvas.current_drawing_ = new svgedit.draw.Drawing(svgcontent);
+
+ // create empty first layer
+ canvas.createLayer("Layer 1");
+
+ // clear the undo stack
+ canvas.undoMgr.resetUndoStack();
+
+ // reset the selector manager
+ selectorManager.initGroup();
+
+ // reset the rubber band box
+ rubberBox = selectorManager.getRubberBandBox();
+
+ call("cleared");
+};
+
+// Function: linkControlPoints
+// Alias function
+this.linkControlPoints = pathActions.linkControlPoints;
+
+// Function: getContentElem
+// Returns the content DOM element
+this.getContentElem = function() { return svgcontent; };
+
+// Function: getRootElem
+// Returns the root DOM element
+this.getRootElem = function() { return svgroot; };
+
+// Function: getSelectedElems
+// Returns the array with selected DOM elements
+this.getSelectedElems = function() { return selectedElements; };
+
+// Function: getResolution
+// Returns the current dimensions and zoom level in an object
+var getResolution = this.getResolution = function() {
+// var vb = svgcontent.getAttribute("viewBox").split(' ');
+// return {'w':vb[2], 'h':vb[3], 'zoom': current_zoom};
+
+ var width = svgcontent.getAttribute("width")/current_zoom;
+ var height = svgcontent.getAttribute("height")/current_zoom;
+
+ return {
+ 'w': width,
+ 'h': height,
+ 'zoom': current_zoom
+ };
+};
+
+// Function: getZoom
+// Returns the current zoom level
+this.getZoom = function(){return current_zoom;};
+
+// Function: getVersion
+// Returns a string which describes the revision number of SvgCanvas.
+this.getVersion = function() {
+ return "svgcanvas.js ($Rev$)";
+};
+
+// Function: setUiStrings
+// Update interface strings with given values
+//
+// Parameters:
+// strs - Object with strings (see uiStrings for examples)
+this.setUiStrings = function(strs) {
+ $.extend(uiStrings, strs.notification);
+}
+
+// Function: setConfig
+// Update configuration options with given values
+//
+// Parameters:
+// opts - Object with options (see curConfig for examples)
+this.setConfig = function(opts) {
+ $.extend(curConfig, opts);
+}
+
+// Function: getTitle
+// Returns the current group/SVG's title contents
+this.getTitle = function(elem) {
+ elem = elem || selectedElements[0];
+ if(!elem) return;
+ elem = $(elem).data('gsvg') || $(elem).data('symbol') || elem;
+ var childs = elem.childNodes;
+ for (var i=0; i<childs.length; i++) {
+ if(childs[i].nodeName == 'title') {
+ return childs[i].textContent;
+ }
+ }
+ return '';
+}
+
+// Function: setGroupTitle
+// Sets the group/SVG's title content
+// TODO: Combine this with setDocumentTitle
+this.setGroupTitle = function(val) {
+ var elem = selectedElements[0];
+ elem = $(elem).data('gsvg') || elem;
+
+ var ts = $(elem).children('title');
+
+ var batchCmd = new BatchCommand("Set Label");
+
+ if(!val.length) {
+ // Remove title element
+ var tsNextSibling = ts.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(ts[0], tsNextSibling, elem));
+ ts.remove();
+ } else if(ts.length) {
+ // Change title contents
+ var title = ts[0];
+ batchCmd.addSubCommand(new ChangeElementCommand(title, {'#text': title.textContent}));
+ title.textContent = val;
+ } else {
+ // Add title element
+ title = svgdoc.createElementNS(svgns, "title");
+ title.textContent = val;
+ $(elem).prepend(title);
+ batchCmd.addSubCommand(new InsertElementCommand(title));
+ }
+
+ addCommandToHistory(batchCmd);
+}
+
+// Function: getDocumentTitle
+// Returns the current document title or an empty string if not found
+this.getDocumentTitle = function() {
+ return canvas.getTitle(svgcontent);
+}
+
+// Function: setDocumentTitle
+// Adds/updates a title element for the document with the given name.
+// This is an undoable action
+//
+// Parameters:
+// newtitle - String with the new title
+this.setDocumentTitle = function(newtitle) {
+ var childs = svgcontent.childNodes, doc_title = false, old_title = '';
+
+ var batchCmd = new BatchCommand("Change Image Title");
+
+ for (var i=0; i<childs.length; i++) {
+ if(childs[i].nodeName == 'title') {
+ doc_title = childs[i];
+ old_title = doc_title.textContent;
+ break;
+ }
+ }
+ if(!doc_title) {
+ doc_title = svgdoc.createElementNS(svgns, "title");
+ svgcontent.insertBefore(doc_title, svgcontent.firstChild);
+ }
+
+ if(newtitle.length) {
+ doc_title.textContent = newtitle;
+ } else {
+ // No title given, so element is not necessary
+ doc_title.parentNode.removeChild(doc_title);
+ }
+ batchCmd.addSubCommand(new ChangeElementCommand(doc_title, {'#text': old_title}));
+ addCommandToHistory(batchCmd);
+}
+
+// Function: getEditorNS
+// Returns the editor's namespace URL, optionally adds it to root element
+//
+// Parameters:
+// add - Boolean to indicate whether or not to add the namespace value
+this.getEditorNS = function(add) {
+ if(add) {
+ svgcontent.setAttribute('xmlns:se', se_ns);
+ }
+ return se_ns;
+}
+
+// Function: setResolution
+// Changes the document's dimensions to the given size
+//
+// Parameters:
+// x - Number with the width of the new dimensions in user units.
+// Can also be the string "fit" to indicate "fit to content"
+// y - Number with the height of the new dimensions in user units.
+//
+// Returns:
+// Boolean to indicate if resolution change was succesful.
+// It will fail on "fit to content" option with no content to fit to.
+this.setResolution = function(x, y) {
+ var res = getResolution();
+ var w = res.w, h = res.h;
+ var batchCmd;
+
+ if(x == 'fit') {
+ // Get bounding box
+ var bbox = getStrokedBBox();
+
+ if(bbox) {
+ batchCmd = new BatchCommand("Fit Canvas to Content");
+ var visEls = getVisibleElements();
+ addToSelection(visEls);
+ var dx = [], dy = [];
+ $.each(visEls, function(i, item) {
+ dx.push(bbox.x*-1);
+ dy.push(bbox.y*-1);
+ });
+
+ var cmd = canvas.moveSelectedElements(dx, dy, true);
+ batchCmd.addSubCommand(cmd);
+ clearSelection();
+
+ x = Math.round(bbox.width);
+ y = Math.round(bbox.height);
+ } else {
+ return false;
+ }
+ }
+ if (x != w || y != h) {
+ var handle = svgroot.suspendRedraw(1000);
+ if(!batchCmd) {
+ batchCmd = new BatchCommand("Change Image Dimensions");
+ }
+
+ x = convertToNum('width', x);
+ y = convertToNum('height', y);
+
+ svgcontent.setAttribute('width', x);
+ svgcontent.setAttribute('height', y);
+
+ this.contentW = x;
+ this.contentH = y;
+ batchCmd.addSubCommand(new ChangeElementCommand(svgcontent, {"width":w, "height":h}));
+
+ svgcontent.setAttribute("viewBox", [0, 0, x/current_zoom, y/current_zoom].join(' '));
+ batchCmd.addSubCommand(new ChangeElementCommand(svgcontent, {"viewBox": ["0 0", w, h].join(' ')}));
+
+ addCommandToHistory(batchCmd);
+ svgroot.unsuspendRedraw(handle);
+ call("changed", [svgcontent]);
+ }
+ return true;
+};
+
+// Function: getOffset
+// Returns an object with x, y values indicating the svgcontent element's
+// position in the editor's canvas.
+this.getOffset = function() {
+ return $(svgcontent).attr(['x', 'y']);
+}
+
+// Function: setBBoxZoom
+// Sets the zoom level on the canvas-side based on the given value
+//
+// Parameters:
+// val - Bounding box object to zoom to or string indicating zoom option
+// editor_w - Integer with the editor's workarea box's width
+// editor_h - Integer with the editor's workarea box's height
+this.setBBoxZoom = function(val, editor_w, editor_h) {
+ var spacer = .85;
+ var bb;
+ var calcZoom = function(bb) {
+ if(!bb) return false;
+ var w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
+ var h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
+ var zoomlevel = Math.min(w_zoom,h_zoom);
+ canvas.setZoom(zoomlevel);
+ return {'zoom': zoomlevel, 'bbox': bb};
+ }
+
+ if(typeof val == 'object') {
+ bb = val;
+ if(bb.width == 0 || bb.height == 0) {
+ var newzoom = bb.zoom?bb.zoom:current_zoom * bb.factor;
+ canvas.setZoom(newzoom);
+ return {'zoom': current_zoom, 'bbox': bb};
+ }
+ return calcZoom(bb);
+ }
+
+ switch (val) {
+ case 'selection':
+ if(!selectedElements[0]) return;
+ var sel_elems = $.map(selectedElements, function(n){ if(n) return n; });
+ bb = getStrokedBBox(sel_elems);
+ break;
+ case 'canvas':
+ var res = getResolution();
+ spacer = .95;
+ bb = {width:res.w, height:res.h ,x:0, y:0};
+ break;
+ case 'content':
+ bb = getStrokedBBox();
+ break;
+ case 'layer':
+ bb = getStrokedBBox(getVisibleElements(getCurrentDrawing().getCurrentLayer()));
+ break;
+ default:
+ return;
+ }
+ return calcZoom(bb);
+}
+
+// Function: setZoom
+// Sets the zoom to the given level
+//
+// Parameters:
+// zoomlevel - Float indicating the zoom level to change to
+this.setZoom = function(zoomlevel) {
+ var res = getResolution();
+ svgcontent.setAttribute("viewBox", "0 0 " + res.w/zoomlevel + " " + res.h/zoomlevel);
+ current_zoom = zoomlevel;
+ $.each(selectedElements, function(i, elem) {
+ if(!elem) return;
+ selectorManager.requestSelector(elem).resize();
+ });
+ pathActions.zoomChange();
+ runExtensions("zoomChanged", zoomlevel);
+}
+
+// Function: getMode
+// Returns the current editor mode string
+this.getMode = function() {
+ return current_mode;
+};
+
+// Function: setMode
+// Sets the editor's mode to the given string
+//
+// Parameters:
+// name - String with the new mode to change to
+this.setMode = function(name) {
+ pathActions.clear(true);
+ textActions.clear();
+ cur_properties = (selectedElements[0] && selectedElements[0].nodeName == 'text') ? cur_text : cur_shape;
+ current_mode = name;
+};
+
+// Group: Element Styling
+
+// Function: getColor
+// Returns the current fill/stroke option
+this.getColor = function(type) {
+ return cur_properties[type];
+};
+
+// Function: setColor
+// Change the current stroke/fill color/gradient value
+//
+// Parameters:
+// type - String indicating fill or stroke
+// val - The value to set the stroke attribute to
+// preventUndo - Boolean indicating whether or not this should be and undoable option
+this.setColor = function(type, val, preventUndo) {
+ cur_shape[type] = val;
+ cur_properties[type + '_paint'] = {type:"solidColor"};
+ var elems = [];
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem) {
+ if (elem.tagName == "g")
+ svgedit.utilities.walkTree(elem, function(e){if(e.nodeName!="g") elems.push(e);});
+ else {
+ if(type == 'fill') {
+ if(elem.tagName != "polyline" && elem.tagName != "line") {
+ elems.push(elem);
+ }
+ } else {
+ elems.push(elem);
+ }
+ }
+ }
+ }
+ if (elems.length > 0) {
+ if (!preventUndo) {
+ changeSelectedAttribute(type, val, elems);
+ call("changed", elems);
+ } else
+ changeSelectedAttributeNoUndo(type, val, elems);
+ }
+}
+
+
+// Function: findDefs
+// Return the document's <defs> element, create it first if necessary
+var findDefs = function() {
+ var defs = svgcontent.getElementsByTagNameNS(svgns, "defs");
+ if (defs.length > 0) {
+ defs = defs[0];
+ }
+ else {
+ defs = svgdoc.createElementNS(svgns, "defs" );
+ if(svgcontent.firstChild) {
+ // first child is a comment, so call nextSibling
+ svgcontent.insertBefore( defs, svgcontent.firstChild.nextSibling);
+ } else {
+ svgcontent.appendChild(defs);
+ }
+ }
+ return defs;
+};
+
+// Function: setGradient
+// Apply the current gradient to selected element's fill or stroke
+//
+// Parameters
+// type - String indicating "fill" or "stroke" to apply to an element
+var setGradient = this.setGradient = function(type) {
+ if(!cur_properties[type + '_paint'] || cur_properties[type + '_paint'].type == "solidColor") return;
+ var grad = canvas[type + 'Grad'];
+ // find out if there is a duplicate gradient already in the defs
+ var duplicate_grad = findDuplicateGradient(grad);
+ 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) );
+ // get next id and set it on the grad
+ grad.id = getNextId();
+ }
+ else { // use existing gradient
+ grad = duplicate_grad;
+ }
+ canvas.setColor(type, "url(#" + grad.id + ")");
+}
+
+// Function: findDuplicateGradient
+// Check if exact gradient already exists
+//
+// Parameters:
+// grad - The gradient DOM element to compare to others
+//
+// Returns:
+// The existing gradient if found, null if not
+var findDuplicateGradient = function(grad) {
+ var defs = findDefs();
+ var existing_grads = $(defs).find("linearGradient, radialGradient");
+ var i = existing_grads.length;
+ var rad_attrs = ['r','cx','cy','fx','fy'];
+ while (i--) {
+ var og = existing_grads[i];
+ if(grad.tagName == "linearGradient") {
+ if (grad.getAttribute('x1') != og.getAttribute('x1') ||
+ grad.getAttribute('y1') != og.getAttribute('y1') ||
+ grad.getAttribute('x2') != og.getAttribute('x2') ||
+ grad.getAttribute('y2') != og.getAttribute('y2'))
+ {
+ continue;
+ }
+ } else {
+ var grad_attrs = $(grad).attr(rad_attrs);
+ var og_attrs = $(og).attr(rad_attrs);
+
+ var diff = false;
+ $.each(rad_attrs, function(i, attr) {
+ if(grad_attrs[attr] != og_attrs[attr]) diff = true;
+ });
+
+ if(diff) continue;
+ }
+
+ // else could be a duplicate, iterate through stops
+ var stops = grad.getElementsByTagNameNS(svgns, "stop");
+ var ostops = og.getElementsByTagNameNS(svgns, "stop");
+
+ if (stops.length != ostops.length) {
+ continue;
+ }
+
+ var j = stops.length;
+ while(j--) {
+ var stop = stops[j];
+ var ostop = ostops[j];
+
+ if (stop.getAttribute('offset') != ostop.getAttribute('offset') ||
+ stop.getAttribute('stop-opacity') != ostop.getAttribute('stop-opacity') ||
+ stop.getAttribute('stop-color') != ostop.getAttribute('stop-color'))
+ {
+ break;
+ }
+ }
+
+ if (j == -1) {
+ return og;
+ }
+ } // for each gradient in defs
+
+ return null;
+};
+
+function reorientGrads(elem, m) {
+ var bb = svgedit.utilities.getBBox(elem);
+ for(var i = 0; i < 2; i++) {
+ var type = i === 0 ? 'fill' : 'stroke';
+ var attrVal = elem.getAttribute(type);
+ if(attrVal && attrVal.indexOf('url(') === 0) {
+ var grad = getRefElem(attrVal);
+ if(grad.tagName === 'linearGradient') {
+ var x1 = grad.getAttribute('x1') || 0;
+ var y1 = grad.getAttribute('y1') || 0;
+ var x2 = grad.getAttribute('x2') || 1;
+ var y2 = grad.getAttribute('y2') || 0;
+
+ // Convert to USOU points
+ x1 = (bb.width * x1) + bb.x;
+ y1 = (bb.height * y1) + bb.y;
+ x2 = (bb.width * x2) + bb.x;
+ y2 = (bb.height * y2) + bb.y;
+
+ // Transform those points
+ var pt1 = transformPoint(x1, y1, m);
+ var pt2 = transformPoint(x2, y2, m);
+
+ // Convert back to BB points
+ var g_coords = {};
+
+ g_coords.x1 = (pt1.x - bb.x) / bb.width;
+ g_coords.y1 = (pt1.y - bb.y) / bb.height;
+ g_coords.x2 = (pt2.x - bb.x) / bb.width;
+ g_coords.y2 = (pt2.y - bb.y) / bb.height;
+
+ var newgrad = grad.cloneNode(true);
+ $(newgrad).attr(g_coords);
+
+ newgrad.id = getNextId();
+ findDefs().appendChild(newgrad);
+ elem.setAttribute(type, 'url(#' + newgrad.id + ')');
+ }
+ }
+ }
+}
+
+// Function: setPaint
+// Set a color/gradient to a fill/stroke
+//
+// Parameters:
+// type - String with "fill" or "stroke"
+// paint - The jGraduate paint object to apply
+this.setPaint = function(type, paint) {
+ // make a copy
+ var p = new $.jGraduate.Paint(paint);
+ this.setPaintOpacity(type, p.alpha/100, true);
+
+ // now set the current paint object
+ cur_properties[type + '_paint'] = p;
+ switch ( p.type ) {
+ case "solidColor":
+ this.setColor(type, p.solidColor != "none" ? "#"+p.solidColor : "none");;
+ break;
+ case "linearGradient":
+ case "radialGradient":
+ canvas[type + 'Grad'] = p[p.type];
+ setGradient(type);
+ break;
+ default:
+// console.log("none!");
+ }
+};
+
+
+// this.setStrokePaint = function(p) {
+// // make a copy
+// var p = new $.jGraduate.Paint(p);
+// this.setStrokeOpacity(p.alpha/100);
+//
+// // now set the current paint object
+// cur_properties.stroke_paint = p;
+// switch ( p.type ) {
+// case "solidColor":
+// this.setColor('stroke', p.solidColor != "none" ? "#"+p.solidColor : "none");;
+// break;
+// case "linearGradient"
+// case "radialGradient"
+// canvas.strokeGrad = p[p.type];
+// setGradient(type);
+// default:
+// // console.log("none!");
+// }
+// };
+//
+// this.setFillPaint = function(p, addGrad) {
+// // make a copy
+// var p = new $.jGraduate.Paint(p);
+// this.setFillOpacity(p.alpha/100, true);
+//
+// // now set the current paint object
+// cur_properties.fill_paint = p;
+// if (p.type == "solidColor") {
+// this.setColor('fill', p.solidColor != "none" ? "#"+p.solidColor : "none");
+// }
+// else if(p.type == "linearGradient") {
+// canvas.fillGrad = p.linearGradient;
+// if(addGrad) setGradient();
+// }
+// else if(p.type == "radialGradient") {
+// canvas.fillGrad = p.radialGradient;
+// if(addGrad) setGradient();
+// }
+// else {
+// // console.log("none!");
+// }
+// };
+
+// Function: getStrokeWidth
+// Returns the current stroke-width value
+this.getStrokeWidth = function() {
+ return cur_properties.stroke_width;
+};
+
+// Function: setStrokeWidth
+// Sets the stroke width for the current selected elements
+// When attempting to set a line's width to 0, this changes it to 1 instead
+//
+// Parameters:
+// val - A Float indicating the new stroke width value
+this.setStrokeWidth = function(val) {
+ if(val == 0 && ['line', 'path'].indexOf(current_mode) >= 0) {
+ canvas.setStrokeWidth(1);
+ return;
+ }
+ cur_properties.stroke_width = val;
+
+ var elems = [];
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem) {
+ if (elem.tagName == "g")
+ svgedit.utilities.walkTree(elem, function(e){if(e.nodeName!="g") elems.push(e);});
+ else
+ elems.push(elem);
+ }
+ }
+ if (elems.length > 0) {
+ changeSelectedAttribute("stroke-width", val, elems);
+ call("changed", selectedElements);
+ }
+};
+
+// Function: setStrokeAttr
+// Set the given stroke-related attribute the given value for selected elements
+//
+// Parameters:
+// attr - String with the attribute name
+// val - String or number with the attribute value
+this.setStrokeAttr = function(attr, val) {
+ cur_shape[attr.replace('-','_')] = val;
+ var elems = [];
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem) {
+ if (elem.tagName == "g")
+ svgedit.utilities.walkTree(elem, function(e){if(e.nodeName!="g") elems.push(e);});
+ else
+ elems.push(elem);
+ }
+ }
+ if (elems.length > 0) {
+ changeSelectedAttribute(attr, val, elems);
+ call("changed", selectedElements);
+ }
+};
+
+// Function: getStyle
+// Returns current style options
+this.getStyle = function() {
+ return cur_shape;
+}
+
+// Function: getOpacity
+// Returns the current opacity
+this.getOpacity = function() {
+ return cur_shape.opacity;
+};
+
+// Function: setOpacity
+// Sets the given opacity to the current selected elements
+this.setOpacity = function(val) {
+ cur_shape.opacity = val;
+ changeSelectedAttribute("opacity", val);
+};
+
+// Function: getOpacity
+// Returns the current fill opacity
+this.getFillOpacity = function() {
+ return cur_shape.fill_opacity;
+};
+
+// Function: getStrokeOpacity
+// Returns the current stroke opacity
+this.getStrokeOpacity = function() {
+ return cur_shape.stroke_opacity;
+};
+
+// Function: setPaintOpacity
+// Sets the current fill/stroke opacity
+//
+// Parameters:
+// type - String with "fill" or "stroke"
+// val - Float with the new opacity value
+// preventUndo - Boolean indicating whether or not this should be an undoable action
+this.setPaintOpacity = function(type, val, preventUndo) {
+ cur_shape[type + '_opacity'] = val;
+ if (!preventUndo)
+ changeSelectedAttribute(type + "-opacity", val);
+ else
+ changeSelectedAttributeNoUndo(type + "-opacity", val);
+};
+
+// Function: getBlur
+// Gets the stdDeviation blur value of the given element
+//
+// Parameters:
+// elem - The element to check the blur value for
+this.getBlur = function(elem) {
+ var val = 0;
+// var elem = selectedElements[0];
+
+ if(elem) {
+ var filter_url = elem.getAttribute('filter');
+ if(filter_url) {
+ var blur = getElem(elem.id + '_blur');
+ if(blur) {
+ val = blur.firstChild.getAttribute('stdDeviation');
+ }
+ }
+ }
+ return val;
+};
+
+(function() {
+ var cur_command = null;
+ var filter = null;
+ var filterHidden = false;
+
+ // Function: setBlurNoUndo
+ // Sets the stdDeviation blur value on the selected element without being undoable
+ //
+ // Parameters:
+ // val - The new stdDeviation value
+ canvas.setBlurNoUndo = function(val) {
+ if(!filter) {
+ canvas.setBlur(val);
+ return;
+ }
+ if(val === 0) {
+ // Don't change the StdDev, as that will hide the element.
+ // Instead, just remove the value for "filter"
+ changeSelectedAttributeNoUndo("filter", "");
+ filterHidden = true;
+ } else {
+ var elem = selectedElements[0];
+ if(filterHidden) {
+ changeSelectedAttributeNoUndo("filter", 'url(#' + elem.id + '_blur)');
+ }
+ if(svgedit.browser.isWebkit()) {
+ console.log('e', elem);
+ elem.removeAttribute('filter');
+ elem.setAttribute('filter', 'url(#' + elem.id + '_blur)');
+ }
+ changeSelectedAttributeNoUndo("stdDeviation", val, [filter.firstChild]);
+ canvas.setBlurOffsets(filter, val);
+ }
+ }
+
+ function finishChange() {
+ var bCmd = canvas.undoMgr.finishUndoableChange();
+ cur_command.addSubCommand(bCmd);
+ addCommandToHistory(cur_command);
+ cur_command = null;
+ filter = null;
+ }
+
+ // Function: setBlurOffsets
+ // Sets the x, y, with, height values of the filter element in order to
+ // make the blur not be clipped. Removes them if not neeeded
+ //
+ // Parameters:
+ // filter - The filter DOM element to update
+ // stdDev - The standard deviation value on which to base the offset size
+ canvas.setBlurOffsets = function(filter, stdDev) {
+ if(stdDev > 3) {
+ // TODO: Create algorithm here where size is based on expected blur
+ assignAttributes(filter, {
+ x: '-50%',
+ y: '-50%',
+ width: '200%',
+ height: '200%'
+ }, 100);
+ } else {
+ // Removing these attributes hides text in Chrome (see Issue 579)
+ if(!svgedit.browser.isWebkit()) {
+ filter.removeAttribute('x');
+ filter.removeAttribute('y');
+ filter.removeAttribute('width');
+ filter.removeAttribute('height');
+ }
+ }
+ }
+
+ // Function: setBlur
+ // Adds/updates the blur filter to the selected element
+ //
+ // Parameters:
+ // val - Float with the new stdDeviation blur value
+ // complete - Boolean indicating whether or not the action should be completed (to add to the undo manager)
+ canvas.setBlur = function(val, complete) {
+ if(cur_command) {
+ finishChange();
+ return;
+ }
+
+ // Looks for associated blur, creates one if not found
+ var elem = selectedElements[0];
+ var elem_id = elem.id;
+ filter = getElem(elem_id + '_blur');
+
+ val -= 0;
+
+ var batchCmd = new BatchCommand();
+
+ // Blur found!
+ if(filter) {
+ if(val === 0) {
+ filter = null;
+ }
+ } else {
+ // Not found, so create
+ var newblur = addSvgElementFromJson({ "element": "feGaussianBlur",
+ "attr": {
+ "in": 'SourceGraphic',
+ "stdDeviation": val
+ }
+ });
+
+ filter = addSvgElementFromJson({ "element": "filter",
+ "attr": {
+ "id": elem_id + '_blur'
+ }
+ });
+
+ filter.appendChild(newblur);
+ findDefs().appendChild(filter);
+
+ batchCmd.addSubCommand(new InsertElementCommand(filter));
+ }
+
+ var changes = {filter: elem.getAttribute('filter')};
+
+ if(val === 0) {
+ elem.removeAttribute("filter");
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+ return;
+ } else {
+ changeSelectedAttribute("filter", 'url(#' + elem_id + '_blur)');
+
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+
+ canvas.setBlurOffsets(filter, val);
+ }
+
+ cur_command = batchCmd;
+ canvas.undoMgr.beginUndoableChange("stdDeviation", [filter?filter.firstChild:null]);
+ if(complete) {
+ canvas.setBlurNoUndo(val);
+ finishChange();
+ }
+ };
+}());
+
+// Function: getBold
+// Check whether selected element is bold or not
+//
+// Returns:
+// Boolean indicating whether or not element is bold
+this.getBold = function() {
+ // should only have one element selected
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ return (selected.getAttribute("font-weight") == "bold");
+ }
+ return false;
+};
+
+// Function: setBold
+// Make the selected element bold or normal
+//
+// Parameters:
+// b - Boolean indicating bold (true) or normal (false)
+this.setBold = function(b) {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ changeSelectedAttribute("font-weight", b ? "bold" : "normal");
+ }
+ if(!selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+// Function: getItalic
+// Check whether selected element is italic or not
+//
+// Returns:
+// Boolean indicating whether or not element is italic
+this.getItalic = function() {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ return (selected.getAttribute("font-style") == "italic");
+ }
+ return false;
+};
+
+// Function: setItalic
+// Make the selected element italic or normal
+//
+// Parameters:
+// b - Boolean indicating italic (true) or normal (false)
+this.setItalic = function(i) {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ changeSelectedAttribute("font-style", i ? "italic" : "normal");
+ }
+ if(!selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+// Function: getFontFamily
+// Returns the current font family
+this.getFontFamily = function() {
+ return cur_text.font_family;
+};
+
+// Function: setFontFamily
+// Set the new font family
+//
+// Parameters:
+// val - String with the new font family
+this.setFontFamily = function(val) {
+ cur_text.font_family = val;
+ changeSelectedAttribute("font-family", val);
+ if(selectedElements[0] && !selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+
+// Function: setFontColor
+// Set the new font color
+//
+// Parameters:
+// val - String with the new font color
+this.setFontColor = function(val) {
+ cur_text.fill = val;
+ changeSelectedAttribute("fill", val);
+};
+
+// Function: getFontColor
+// Returns the current font color
+this.getFontSize = function() {
+ return cur_text.fill;
+};
+
+// Function: getFontSize
+// Returns the current font size
+this.getFontSize = function() {
+ return cur_text.font_size;
+};
+
+// Function: setFontSize
+// Applies the given font size to the selected element
+//
+// Parameters:
+// val - Float with the new font size
+this.setFontSize = function(val) {
+ cur_text.font_size = val;
+ changeSelectedAttribute("font-size", val);
+ if(!selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+// Function: getText
+// Returns the current text (textContent) of the selected element
+this.getText = function() {
+ var selected = selectedElements[0];
+ if (selected == null) { return ""; }
+ return selected.textContent;
+};
+
+// Function: setTextContent
+// Updates the text element with the given string
+//
+// Parameters:
+// val - String with the new text
+this.setTextContent = function(val) {
+ changeSelectedAttribute("#text", val);
+ textActions.init(val);
+ textActions.setCursor();
+};
+
+// Function: setImageURL
+// Sets the new image URL for the selected image element. Updates its size if
+// a new URL is given
+//
+// Parameters:
+// val - String with the image URL/path
+this.setImageURL = function(val) {
+ var elem = selectedElements[0];
+ if(!elem) return;
+
+ var attrs = $(elem).attr(['width', 'height']);
+ var setsize = (!attrs.width || !attrs.height);
+
+ var cur_href = getHref(elem);
+
+ // Do nothing if no URL change or size change
+ if(cur_href !== val) {
+ setsize = true;
+ } else if(!setsize) return;
+
+ var batchCmd = new BatchCommand("Change Image URL");
+
+ setHref(elem, val);
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, {
+ "#href": cur_href
+ }));
+
+ if(setsize) {
+ $(new Image()).load(function() {
+ var changes = $(elem).attr(['width', 'height']);
+
+ $(elem).attr({
+ width: this.width,
+ height: this.height
+ });
+
+ selectorManager.requestSelector(elem).resize();
+
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+ addCommandToHistory(batchCmd);
+ call("changed", [elem]);
+ }).attr('src',val);
+ } else {
+ addCommandToHistory(batchCmd);
+ }
+};
+
+// Function: setLinkURL
+// Sets the new link URL for the selected anchor element.
+//
+// Parameters:
+// val - String with the link URL/path
+this.setLinkURL = function(val) {
+ var elem = selectedElements[0];
+ if(!elem) return;
+ if(elem.tagName !== 'a') {
+ // See if parent is an anchor
+ var parents_a = $(elem).parents('a');
+ if(parents_a.length) {
+ elem = parents_a[0];
+ } else {
+ return;
+ }
+ }
+
+ var cur_href = getHref(elem);
+
+ if(cur_href === val) return;
+
+ var batchCmd = new BatchCommand("Change Link URL");
+
+ setHref(elem, val);
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, {
+ "#href": cur_href
+ }));
+
+ addCommandToHistory(batchCmd);
+};
+
+
+// Function: setRectRadius
+// Sets the rx & ry values to the selected rect element to change its corner radius
+//
+// Parameters:
+// val - The new radius
+this.setRectRadius = function(val) {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "rect") {
+ var r = selected.getAttribute("rx");
+ if (r != val) {
+ selected.setAttribute("rx", val);
+ selected.setAttribute("ry", val);
+ addCommandToHistory(new ChangeElementCommand(selected, {"rx":r, "ry":r}, "Radius"));
+ call("changed", [selected]);
+ }
+ }
+};
+
+// Function: makeHyperlink
+// Wraps the selected element(s) in an anchor element or converts group to one
+this.makeHyperlink = function(url) {
+ canvas.groupSelectedElements('a', url);
+
+ // TODO: If element is a single "g", convert to "a"
+ // if(selectedElements.length > 1 && selectedElements[1]) {
+
+}
+
+// Function: removeHyperlink
+this.removeHyperlink = function() {
+ canvas.ungroupSelectedElement();
+}
+
+// Group: Element manipulation
+
+// Function: setSegType
+// Sets the new segment type to the selected segment(s).
+//
+// Parameters:
+// new_type - Integer with the new segment type
+// See http://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathSeg for list
+this.setSegType = function(new_type) {
+ pathActions.setSegType(new_type);
+}
+
+// TODO(codedread): Remove the getBBox argument and split this function into two.
+// Function: convertToPath
+// Convert selected element to a path, or get the BBox of an element-as-path
+//
+// Parameters:
+// elem - The DOM element to be converted
+// getBBox - Boolean on whether or not to only return the path's BBox
+//
+// Returns:
+// If the getBBox flag is true, the resulting path's bounding box object.
+// Otherwise the resulting path element is returned.
+this.convertToPath = function(elem, getBBox) {
+ if(elem == null) {
+ var elems = selectedElements;
+ $.each(selectedElements, function(i, elem) {
+ if(elem) canvas.convertToPath(elem);
+ });
+ return;
+ }
+
+ if(!getBBox) {
+ var batchCmd = new BatchCommand("Convert element to Path");
+ }
+
+ var attrs = getBBox?{}:{
+ "fill": cur_shape.fill,
+ "fill-opacity": cur_shape.fill_opacity,
+ "stroke": cur_shape.stroke,
+ "stroke-width": cur_shape.stroke_width,
+ "stroke-dasharray": cur_shape.stroke_dasharray,
+ "stroke-linejoin": cur_shape.stroke_linejoin,
+ "stroke-linecap": cur_shape.stroke_linecap,
+ "stroke-opacity": cur_shape.stroke_opacity,
+ "opacity": cur_shape.opacity,
+ "visibility":"hidden"
+ };
+
+ // any attribute on the element not covered by the above
+ // TODO: make this list global so that we can properly maintain it
+ // TODO: what about @transform, @clip-rule, @fill-rule, etc?
+ $.each(['marker-start', 'marker-end', 'marker-mid', 'filter', 'clip-path'], function() {
+ if (elem.getAttribute(this)) {
+ attrs[this] = elem.getAttribute(this);
+ }
+ });
+
+ var path = addSvgElementFromJson({
+ "element": "path",
+ "attr": attrs
+ });
+
+ var eltrans = elem.getAttribute("transform");
+ if(eltrans) {
+ path.setAttribute("transform",eltrans);
+ }
+
+ var id = elem.id;
+ var parent = elem.parentNode;
+ if(elem.nextSibling) {
+ parent.insertBefore(path, elem);
+ } else {
+ parent.appendChild(path);
+ }
+
+ var d = '';
+
+ var joinSegs = function(segs) {
+ $.each(segs, function(j, seg) {
+ var l = seg[0], pts = seg[1];
+ d += l;
+ for(var i=0; i < pts.length; i+=2) {
+ d += (pts[i] +','+pts[i+1]) + ' ';
+ }
+ });
+ }
+
+ // Possibly the cubed root of 6, but 1.81 works best
+ var num = 1.81;
+
+ switch (elem.tagName) {
+ case 'ellipse':
+ case 'circle':
+ var a = $(elem).attr(['rx', 'ry', 'cx', 'cy']);
+ var cx = a.cx, cy = a.cy, rx = a.rx, ry = a.ry;
+ if(elem.tagName == 'circle') {
+ rx = ry = $(elem).attr('r');
+ }
+
+ joinSegs([
+ ['M',[(cx-rx),(cy)]],
+ ['C',[(cx-rx),(cy-ry/num), (cx-rx/num),(cy-ry), (cx),(cy-ry)]],
+ ['C',[(cx+rx/num),(cy-ry), (cx+rx),(cy-ry/num), (cx+rx),(cy)]],
+ ['C',[(cx+rx),(cy+ry/num), (cx+rx/num),(cy+ry), (cx),(cy+ry)]],
+ ['C',[(cx-rx/num),(cy+ry), (cx-rx),(cy+ry/num), (cx-rx),(cy)]],
+ ['Z',[]]
+ ]);
+ break;
+ case 'path':
+ d = elem.getAttribute('d');
+ break;
+ case 'line':
+ var a = $(elem).attr(["x1", "y1", "x2", "y2"]);
+ d = "M"+a.x1+","+a.y1+"L"+a.x2+","+a.y2;
+ break;
+ case 'polyline':
+ case 'polygon':
+ d = "M" + elem.getAttribute('points');
+ break;
+ case 'rect':
+ var r = $(elem).attr(['rx', 'ry']);
+ var rx = r.rx, ry = r.ry;
+ var b = elem.getBBox();
+ var x = b.x, y = b.y, w = b.width, h = b.height;
+ var num = 4-num; // Why? Because!
+
+ if(!rx && !ry) {
+ // Regular rect
+ joinSegs([
+ ['M',[x, y]],
+ ['L',[x+w, y]],
+ ['L',[x+w, y+h]],
+ ['L',[x, y+h]],
+ ['L',[x, y]],
+ ['Z',[]]
+ ]);
+ } else {
+ joinSegs([
+ ['M',[x, y+ry]],
+ ['C',[x,y+ry/num, x+rx/num,y, x+rx,y]],
+ ['L',[x+w-rx, y]],
+ ['C',[x+w-rx/num,y, x+w,y+ry/num, x+w,y+ry]],
+ ['L',[x+w, y+h-ry]],
+ ['C',[x+w, y+h-ry/num, x+w-rx/num,y+h, x+w-rx,y+h]],
+ ['L',[x+rx, y+h]],
+ ['C',[x+rx/num, y+h, x,y+h-ry/num, x,y+h-ry]],
+ ['L',[x, y+ry]],
+ ['Z',[]]
+ ]);
+ }
+ break;
+ default:
+ path.parentNode.removeChild(path);
+ break;
+ }
+
+ if(d) {
+ path.setAttribute('d',d);
+ }
+
+ if(!getBBox) {
+ // Replace the current element with the converted one
+
+ // Reorient if it has a matrix
+ if(eltrans) {
+ var tlist = getTransformList(path);
+ if(hasMatrixTransform(tlist)) {
+ pathActions.resetOrientation(path);
+ }
+ }
+
+ var nextSibling = elem.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ batchCmd.addSubCommand(new InsertElementCommand(path));
+
+ clearSelection();
+ elem.parentNode.removeChild(elem)
+ path.setAttribute('id', id);
+ path.removeAttribute("visibility");
+ addToSelection([path], true);
+
+ addCommandToHistory(batchCmd);
+
+ } else {
+ // Get the correct BBox of the new path, then discard it
+ pathActions.resetOrientation(path);
+ var bb = false;
+ try {
+ bb = path.getBBox();
+ } catch(e) {
+ // Firefox fails
+ }
+ path.parentNode.removeChild(path);
+ return bb;
+ }
+};
+
+
+// Function: changeSelectedAttributeNoUndo
+// This function makes the changes to the elements. It does not add the change
+// to the history stack.
+//
+// Parameters:
+// attr - String with the attribute name
+// newValue - String or number with the new attribute value
+// elems - The DOM elements to apply the change to
+var changeSelectedAttributeNoUndo = function(attr, newValue, elems) {
+ var handle = svgroot.suspendRedraw(1000);
+ if(current_mode == 'pathedit') {
+ // Editing node
+ pathActions.moveNode(attr, newValue);
+ }
+ var elems = elems || selectedElements;
+ var i = elems.length;
+ var no_xy_elems = ['g', 'polyline', 'path'];
+ var good_g_attrs = ['transform', 'opacity', 'filter'];
+
+ while (i--) {
+ var elem = elems[i];
+ if (elem == null) continue;
+
+ // Go into "select" mode for text changes
+ if(current_mode === "textedit" && attr !== "#text" && elem.textContent.length) {
+ textActions.toSelectMode(elem);
+ }
+
+ // Set x,y vals on elements that don't have them
+ if((attr === 'x' || attr === 'y') && no_xy_elems.indexOf(elem.tagName) >= 0) {
+ var bbox = getStrokedBBox([elem]);
+ var diff_x = attr === 'x' ? newValue - bbox.x : 0;
+ var diff_y = attr === 'y' ? newValue - bbox.y : 0;
+ canvas.moveSelectedElements(diff_x*current_zoom, diff_y*current_zoom, true);
+ continue;
+ }
+
+ // only allow the transform/opacity/filter attribute to change on <g> elements, slightly hacky
+ // TODO: FIXME: This doesn't seem right. Where's the body of this if statement?
+ if (elem.tagName === "g" && good_g_attrs.indexOf(attr) >= 0);
+ var oldval = attr === "#text" ? elem.textContent : elem.getAttribute(attr);
+ if (oldval == null) oldval = "";
+ if (oldval !== String(newValue)) {
+ if (attr == "#text") {
+ var old_w = svgedit.utilities.getBBox(elem).width;
+ elem.textContent = newValue;
+
+ // FF bug occurs on on rotated elements
+ if(/rotate/.test(elem.getAttribute('transform'))) {
+ elem = ffClone(elem);
+ }
+
+ // Hoped to solve the issue of moving text with text-anchor="start",
+ // but this doesn't actually fix it. Hopefully on the right track, though. -Fyrd
+
+// var box=getBBox(elem), left=box.x, top=box.y, width=box.width,
+// height=box.height, dx = width - old_w, dy=0;
+// var angle = getRotationAngle(elem, true);
+// if (angle) {
+// var r = Math.sqrt( dx*dx + dy*dy );
+// var theta = Math.atan2(dy,dx) - angle;
+// dx = r * Math.cos(theta);
+// dy = r * Math.sin(theta);
+//
+// elem.setAttribute('x', elem.getAttribute('x')-dx);
+// elem.setAttribute('y', elem.getAttribute('y')-dy);
+// }
+
+ } else if (attr == "#href") {
+ setHref(elem, newValue);
+ }
+ else elem.setAttribute(attr, newValue);
+// if (i==0)
+// selectedBBoxes[0] = svgedit.utilities.getBBox(elem);
+ // Use the Firefox ffClone hack for text elements with gradients or
+ // where other text attributes are changed.
+ if(svgedit.browser.isGecko() && elem.nodeName === 'text' && /rotate/.test(elem.getAttribute('transform'))) {
+ if((newValue+'').indexOf('url') === 0 || ['font-size','font-family','x','y'].indexOf(attr) >= 0 && elem.textContent) {
+ elem = ffClone(elem);
+ }
+ }
+ // Timeout needed for Opera & Firefox
+ // codedread: it is now possible for this function to be called with elements
+ // that are not in the selectedElements array, we need to only request a
+ // selector if the element is in that array
+ if (selectedElements.indexOf(elem) >= 0) {
+ setTimeout(function() {
+ // Due to element replacement, this element may no longer
+ // be part of the DOM
+ if(!elem.parentNode) return;
+ selectorManager.requestSelector(elem).resize();
+ },0);
+ }
+ // if this element was rotated, and we changed the position of this element
+ // we need to update the rotational transform attribute
+ var angle = getRotationAngle(elem);
+ if (angle != 0 && attr != "transform") {
+ var tlist = getTransformList(elem);
+ var n = tlist.numberOfItems;
+ while (n--) {
+ var xform = tlist.getItem(n);
+ if (xform.type == 4) {
+ // remove old rotate
+ tlist.removeItem(n);
+
+ var box = svgedit.utilities.getBBox(elem);
+ var center = transformPoint(box.x+box.width/2, box.y+box.height/2, transformListToTransform(tlist).matrix);
+ var cx = center.x,
+ cy = center.y;
+ var newrot = svgroot.createSVGTransform();
+ newrot.setRotate(angle, cx, cy);
+ tlist.insertItemBefore(newrot, n);
+ break;
+ }
+ }
+ }
+ } // if oldValue != newValue
+ } // for each elem
+ svgroot.unsuspendRedraw(handle);
+};
+
+// Function: changeSelectedAttribute
+// Change the given/selected element and add the original value to the history stack
+// If you want to change all selectedElements, ignore the elems argument.
+// If you want to change only a subset of selectedElements, then send the
+// subset to this function in the elems argument.
+//
+// Parameters:
+// attr - String with the attribute name
+// newValue - String or number with the new attribute value
+// elems - The DOM elements to apply the change to
+var changeSelectedAttribute = this.changeSelectedAttribute = function(attr, val, elems) {
+ var elems = elems || selectedElements;
+ canvas.undoMgr.beginUndoableChange(attr, elems);
+ var i = elems.length;
+
+ changeSelectedAttributeNoUndo(attr, val, elems);
+
+ var batchCmd = canvas.undoMgr.finishUndoableChange();
+ if (!batchCmd.isEmpty()) {
+ addCommandToHistory(batchCmd);
+ }
+};
+
+// Function: deleteSelectedElements
+// Removes all selected elements from the DOM and adds the change to the
+// history stack
+this.deleteSelectedElements = function() {
+ var batchCmd = new BatchCommand("Delete Elements");
+ var len = selectedElements.length;
+ var selectedCopy = []; //selectedElements is being deleted
+ for (var i = 0; i < len; ++i) {
+ var selected = selectedElements[i];
+ if (selected == null) break;
+
+ var parent = selected.parentNode;
+ var t = selected;
+
+ // this will unselect the element and remove the selectedOutline
+ selectorManager.releaseSelector(t);
+
+ // Remove the path if present.
+ svgedit.path.removePath_(t.id);
+
+ // Get the parent if it's a single-child anchor
+ if(parent.tagName === 'a' && parent.childNodes.length === 1) {
+ t = parent;
+ parent = parent.parentNode;
+ }
+
+ var nextSibling = t.nextSibling;
+ var elem = parent.removeChild(t);
+ selectedCopy.push(selected); //for the copy
+ selectedElements[i] = null;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ }
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+ call("changed", selectedCopy);
+ clearSelection();
+};
+
+// Function: cutSelectedElements
+// Removes all selected elements from the DOM and adds the change to the
+// history stack. Remembers removed elements on the clipboard
+
+// TODO: Combine similar code with deleteSelectedElements
+this.cutSelectedElements = function() {
+ var batchCmd = new BatchCommand("Cut Elements");
+ var len = selectedElements.length;
+ var selectedCopy = []; //selectedElements is being deleted
+ for (var i = 0; i < len; ++i) {
+ var selected = selectedElements[i];
+ if (selected == null) break;
+
+ var parent = selected.parentNode;
+ var t = selected;
+
+ // this will unselect the element and remove the selectedOutline
+ selectorManager.releaseSelector(t);
+
+ // Remove the path if present.
+ svgedit.path.removePath_(t.id);
+
+ var nextSibling = t.nextSibling;
+ var elem = parent.removeChild(t);
+ selectedCopy.push(selected); //for the copy
+ selectedElements[i] = null;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ }
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+ call("changed", selectedCopy);
+ clearSelection();
+
+ canvas.clipBoard = selectedCopy;
+};
+
+// Function: copySelectedElements
+// Remembers the current selected elements on the clipboard
+this.copySelectedElements = function() {
+ canvas.clipBoard = $.merge([], selectedElements);
+};
+
+this.pasteElements = function(type, x, y) {
+ var cb = canvas.clipBoard;
+ var len = cb.length;
+ if(!len) return;
+
+ var pasted = [];
+ var batchCmd = new BatchCommand('Paste elements');
+
+ // Move elements to lastClickPoint
+
+ while (len--) {
+ var elem = cb[len];
+ if(!elem) continue;
+ var copy = copyElem(elem);
+
+ // See if elem with elem ID is in the DOM already
+ if(!getElem(elem.id)) copy.id = elem.id;
+
+ pasted.push(copy);
+ (current_group || getCurrentDrawing().getCurrentLayer()).appendChild(copy);
+ batchCmd.addSubCommand(new InsertElementCommand(copy));
+ }
+
+ selectOnly(pasted);
+
+ if(type !== 'in_place') {
+
+ var ctr_x, ctr_y;
+
+ if(!type) {
+ ctr_x = lastClickPoint.x;
+ ctr_y = lastClickPoint.y;
+ } else if(type === 'point') {
+ ctr_x = x;
+ ctr_y = y;
+ }
+
+ var bbox = getStrokedBBox(pasted);
+ var cx = ctr_x - (bbox.x + bbox.width/2),
+ cy = ctr_y - (bbox.y + bbox.height/2),
+ dx = [],
+ dy = [];
+
+ $.each(pasted, function(i, item) {
+ dx.push(cx);
+ dy.push(cy);
+ });
+
+ var cmd = canvas.moveSelectedElements(dx, dy, false);
+ batchCmd.addSubCommand(cmd);
+ }
+
+
+
+ addCommandToHistory(batchCmd);
+ call("changed", pasted);
+}
+
+// Function: groupSelectedElements
+// Wraps all the selected elements in a group (g) element
+
+// Parameters:
+// type - type of element to group into, defaults to <g>
+this.groupSelectedElements = function(type) {
+ if(!type) type = 'g';
+ var cmd_str = '';
+
+ switch ( type ) {
+ case "a":
+ cmd_str = "Make hyperlink";
+ var url = '';
+ if(arguments.length > 1) {
+ url = arguments[1];
+ }
+ break;
+ default:
+ type = 'g';
+ cmd_str = "Group Elements";
+ break;
+ }
+
+ var batchCmd = new BatchCommand(cmd_str);
+
+ // create and insert the group element
+ var g = addSvgElementFromJson({
+ "element": type,
+ "attr": {
+ "id": getNextId()
+ }
+ });
+ if(type === 'a') {
+ setHref(g, url);
+ }
+ batchCmd.addSubCommand(new InsertElementCommand(g));
+
+ // now move all children into the group
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem == null) continue;
+
+ if (elem.parentNode.tagName === 'a' && elem.parentNode.childNodes.length === 1) {
+ elem = elem.parentNode;
+ }
+
+ var oldNextSibling = elem.nextSibling;
+ var oldParent = elem.parentNode;
+ g.appendChild(elem);
+ batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));
+ }
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+
+ // update selection
+ selectOnly([g], true);
+};
+
+
+// Function: pushGroupProperties
+// Pushes all appropriate parent group properties down to its children, then
+// removes them from the group
+var pushGroupProperties = this.pushGroupProperties = function(g, undoable) {
+
+ var children = g.childNodes;
+ var len = children.length;
+ var xform = g.getAttribute("transform");
+
+ var glist = getTransformList(g);
+ var m = transformListToTransform(glist).matrix;
+
+ var batchCmd = new BatchCommand("Push group properties");
+
+ // TODO: get all fill/stroke properties from the group that we are about to destroy
+ // "fill", "fill-opacity", "fill-rule", "stroke", "stroke-dasharray", "stroke-dashoffset",
+ // "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity",
+ // "stroke-width"
+ // and then for each child, if they do not have the attribute (or the value is 'inherit')
+ // then set the child's attribute
+
+ var i = 0;
+ var gangle = getRotationAngle(g);
+
+ var gattrs = $(g).attr(['filter', 'opacity']);
+ var gfilter, gblur;
+
+ for(var i = 0; i < len; i++) {
+ var elem = children[i];
+
+ if(elem.nodeType !== 1) continue;
+
+ if(gattrs.opacity !== null && gattrs.opacity !== 1) {
+ var c_opac = elem.getAttribute('opacity') || 1;
+ var new_opac = Math.round((elem.getAttribute('opacity') || 1) * gattrs.opacity * 100)/100;
+ changeSelectedAttribute('opacity', new_opac, [elem]);
+ }
+
+ if(gattrs.filter) {
+ var cblur = this.getBlur(elem);
+ var orig_cblur = cblur;
+ if(!gblur) gblur = this.getBlur(g);
+ if(cblur) {
+ // Is this formula correct?
+ cblur = (gblur-0) + (cblur-0);
+ } else if(cblur === 0) {
+ cblur = gblur;
+ }
+
+ // If child has no current filter, get group's filter or clone it.
+ if(!orig_cblur) {
+ // Set group's filter to use first child's ID
+ if(!gfilter) {
+ gfilter = getRefElem(gattrs.filter);
+ } else {
+ // Clone the group's filter
+ gfilter = copyElem(gfilter);
+ findDefs().appendChild(gfilter);
+ }
+ } else {
+ gfilter = getRefElem(elem.getAttribute('filter'));
+ }
+
+ // Change this in future for different filters
+ var suffix = (gfilter.firstChild.tagName === 'feGaussianBlur')?'blur':'filter';
+ gfilter.id = elem.id + '_' + suffix;
+ changeSelectedAttribute('filter', 'url(#' + gfilter.id + ')', [elem]);
+
+ // Update blur value
+ if(cblur) {
+ changeSelectedAttribute('stdDeviation', cblur, [gfilter.firstChild]);
+ canvas.setBlurOffsets(gfilter, cblur);
+ }
+ }
+
+ var chtlist = getTransformList(elem);
+
+ // Don't process gradient transforms
+ if(~elem.tagName.indexOf('Gradient')) chtlist = null;
+
+ // Hopefully not a problem to add this. Necessary for elements like <desc/>
+ if(!chtlist) continue;
+
+ // Apparently <defs> can get get a transformlist, but we don't want it to have one!
+ if(elem.tagName === 'defs') continue;
+
+ if (glist.numberOfItems) {
+ // TODO: if the group's transform is just a rotate, we can always transfer the
+ // rotate() down to the children (collapsing consecutive rotates and factoring
+ // out any translates)
+ if (gangle && glist.numberOfItems == 1) {
+ // [Rg] [Rc] [Mc]
+ // we want [Tr] [Rc2] [Mc] where:
+ // - [Rc2] is at the child's current center but has the
+ // sum of the group and child's rotation angles
+ // - [Tr] is the equivalent translation that this child
+ // undergoes if the group wasn't there
+
+ // [Tr] = [Rg] [Rc] [Rc2_inv]
+
+ // get group's rotation matrix (Rg)
+ var rgm = glist.getItem(0).matrix;
+
+ // get child's rotation matrix (Rc)
+ var rcm = svgroot.createSVGMatrix();
+ var cangle = getRotationAngle(elem);
+ if (cangle) {
+ rcm = chtlist.getItem(0).matrix;
+ }
+
+ // get child's old center of rotation
+ var cbox = svgedit.utilities.getBBox(elem);
+ var ceqm = transformListToTransform(chtlist).matrix;
+ var coldc = transformPoint(cbox.x+cbox.width/2, cbox.y+cbox.height/2,ceqm);
+
+ // sum group and child's angles
+ var sangle = gangle + cangle;
+
+ // get child's rotation at the old center (Rc2_inv)
+ var r2 = svgroot.createSVGTransform();
+ r2.setRotate(sangle, coldc.x, coldc.y);
+
+ // calculate equivalent translate
+ var trm = matrixMultiply(rgm, rcm, r2.matrix.inverse());
+
+ // set up tlist
+ if (cangle) {
+ chtlist.removeItem(0);
+ }
+
+ if (sangle) {
+ if(chtlist.numberOfItems) {
+ chtlist.insertItemBefore(r2, 0);
+ } else {
+ chtlist.appendItem(r2);
+ }
+ }
+
+ if (trm.e || trm.f) {
+ var tr = svgroot.createSVGTransform();
+ tr.setTranslate(trm.e, trm.f);
+ if(chtlist.numberOfItems) {
+ chtlist.insertItemBefore(tr, 0);
+ } else {
+ chtlist.appendItem(tr);
+ }
+ }
+ }
+ else { // more complicated than just a rotate
+
+ // transfer the group's transform down to each child and then
+ // call recalculateDimensions()
+ var oldxform = elem.getAttribute("transform");
+ var changes = {};
+ changes["transform"] = oldxform ? oldxform : "";
+
+ var newxform = svgroot.createSVGTransform();
+
+ // [ gm ] [ chm ] = [ chm ] [ gm' ]
+ // [ gm' ] = [ chm_inv ] [ gm ] [ chm ]
+ var chm = transformListToTransform(chtlist).matrix,
+ chm_inv = chm.inverse();
+ var gm = matrixMultiply( chm_inv, m, chm );
+ newxform.setMatrix(gm);
+ chtlist.appendItem(newxform);
+ }
+ var cmd = recalculateDimensions(elem);
+ if(cmd) batchCmd.addSubCommand(cmd);
+ }
+ }
+
+
+ // remove transform and make it undo-able
+ if (xform) {
+ var changes = {};
+ changes["transform"] = xform;
+ g.setAttribute("transform", "");
+ g.removeAttribute("transform");
+ batchCmd.addSubCommand(new ChangeElementCommand(g, changes));
+ }
+
+ if (undoable && !batchCmd.isEmpty()) {
+ return batchCmd;
+ }
+}
+
+
+// Function: ungroupSelectedElement
+// Unwraps all the elements in a selected group (g) element. This requires
+// significant recalculations to apply group's transforms, etc to its children
+this.ungroupSelectedElement = function() {
+ var g = selectedElements[0];
+ if($(g).data('gsvg') || $(g).data('symbol')) {
+ // Is svg, so actually convert to group
+
+ convertToGroup(g);
+ return;
+ } else if(g.tagName === 'use') {
+ // Somehow doesn't have data set, so retrieve
+ var symbol = getElem(getHref(g).substr(1));
+ $(g).data('symbol', symbol).data('ref', symbol);
+ convertToGroup(g);
+ return;
+ }
+ var parents_a = $(g).parents('a');
+ if(parents_a.length) {
+ g = parents_a[0];
+ }
+
+ // Look for parent "a"
+ if (g.tagName === "g" || g.tagName === "a") {
+
+ var batchCmd = new BatchCommand("Ungroup Elements");
+ var cmd = pushGroupProperties(g, true);
+ if(cmd) batchCmd.addSubCommand(cmd);
+
+ var parent = g.parentNode;
+ var anchor = g.nextSibling;
+ var children = new Array(g.childNodes.length);
+
+ var i = 0;
+
+ while (g.firstChild) {
+ var elem = g.firstChild;
+ var oldNextSibling = elem.nextSibling;
+ var oldParent = elem.parentNode;
+
+ // Remove child title elements
+ if(elem.tagName === 'title') {
+ var nextSibling = elem.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, oldParent));
+ oldParent.removeChild(elem);
+ continue;
+ }
+
+ children[i++] = elem = parent.insertBefore(elem, anchor);
+ batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));
+ }
+
+ // remove the group from the selection
+ clearSelection();
+
+ // delete the group element (but make undo-able)
+ var gNextSibling = g.nextSibling;
+ g = parent.removeChild(g);
+ batchCmd.addSubCommand(new RemoveElementCommand(g, gNextSibling, parent));
+
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+
+ // update selection
+ addToSelection(children);
+ }
+};
+
+// Function: moveToTopSelectedElement
+// Repositions the selected element to the bottom in the DOM to appear on top of
+// other elements
+this.moveToTopSelectedElement = function() {
+ var selected = selectedElements[0];
+ if (selected != null) {
+ var t = selected;
+ var oldParent = t.parentNode;
+ var oldNextSibling = t.nextSibling;
+ t = t.parentNode.appendChild(t);
+ // If the element actually moved position, add the command and fire the changed
+ // event handler.
+ if (oldNextSibling != t.nextSibling) {
+ addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "top"));
+ call("changed", [t]);
+ }
+ }
+};
+
+// Function: moveToBottomSelectedElement
+// Repositions the selected element to the top in the DOM to appear under
+// other elements
+this.moveToBottomSelectedElement = function() {
+ var selected = selectedElements[0];
+ if (selected != null) {
+ var t = selected;
+ var oldParent = t.parentNode;
+ var oldNextSibling = t.nextSibling;
+ var firstChild = t.parentNode.firstChild;
+ if (firstChild.tagName == 'title') {
+ firstChild = firstChild.nextSibling;
+ }
+ // This can probably be removed, as the defs should not ever apppear
+ // inside a layer group
+ if (firstChild.tagName == 'defs') {
+ firstChild = firstChild.nextSibling;
+ }
+ t = t.parentNode.insertBefore(t, firstChild);
+ // If the element actually moved position, add the command and fire the changed
+ // event handler.
+ if (oldNextSibling != t.nextSibling) {
+ addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "bottom"));
+ call("changed", [t]);
+ }
+ }
+};
+
+// Function: moveUpDownSelected
+// Moves the select element up or down the stack, based on the visibly
+// intersecting elements
+//
+// Parameters:
+// dir - String that's either 'Up' or 'Down'
+this.moveUpDownSelected = function(dir) {
+ var selected = selectedElements[0];
+ if (!selected) return;
+
+ curBBoxes = [];
+ var closest, found_cur;
+ // jQuery sorts this list
+ var list = $(getIntersectionList(getStrokedBBox([selected]))).toArray();
+ if(dir == 'Down') list.reverse();
+
+ $.each(list, function() {
+ if(!found_cur) {
+ if(this == selected) {
+ found_cur = true;
+ }
+ return;
+ }
+ closest = this;
+ return false;
+ });
+ if(!closest) return;
+
+ var t = selected;
+ var oldParent = t.parentNode;
+ var oldNextSibling = t.nextSibling;
+ $(closest)[dir == 'Down'?'before':'after'](t);
+ // If the element actually moved position, add the command and fire the changed
+ // event handler.
+ if (oldNextSibling != t.nextSibling) {
+ addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "Move " + dir));
+ call("changed", [t]);
+ }
+};
+
+// Function: moveSelectedElements
+// Moves selected elements on the X/Y axis
+//
+// Parameters:
+// dx - Float with the distance to move on the x-axis
+// dy - Float with the distance to move on the y-axis
+// undoable - Boolean indicating whether or not the action should be undoable
+//
+// Returns:
+// Batch command for the move
+this.moveSelectedElements = function(dx, dy, undoable) {
+ // if undoable is not sent, default to true
+ // if single values, scale them to the zoom
+ if (dx.constructor != Array) {
+ dx /= current_zoom;
+ dy /= current_zoom;
+ }
+ var undoable = undoable || true;
+ var batchCmd = new BatchCommand("position");
+ var i = selectedElements.length;
+ while (i--) {
+ var selected = selectedElements[i];
+ if (selected != null) {
+// if (i==0)
+// selectedBBoxes[0] = svgedit.utilities.getBBox(selected);
+
+// var b = {};
+// for(var j in selectedBBoxes[i]) b[j] = selectedBBoxes[i][j];
+// selectedBBoxes[i] = b;
+
+ var xform = svgroot.createSVGTransform();
+ var tlist = getTransformList(selected);
+
+ // dx and dy could be arrays
+ if (dx.constructor == Array) {
+// if (i==0) {
+// selectedBBoxes[0].x += dx[0];
+// selectedBBoxes[0].y += dy[0];
+// }
+ xform.setTranslate(dx[i],dy[i]);
+ } else {
+// if (i==0) {
+// selectedBBoxes[0].x += dx;
+// selectedBBoxes[0].y += dy;
+// }
+ xform.setTranslate(dx,dy);
+ }
+
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(xform, 0);
+ } else {
+ tlist.appendItem(xform);
+ }
+
+ var cmd = recalculateDimensions(selected);
+ if (cmd) {
+ batchCmd.addSubCommand(cmd);
+ }
+
+ selectorManager.requestSelector(selected).resize();
+ }
+ }
+ if (!batchCmd.isEmpty()) {
+ if (undoable)
+ addCommandToHistory(batchCmd);
+ call("changed", selectedElements);
+ return batchCmd;
+ }
+};
+
+// Function: cloneSelectedElements
+// Create deep DOM copies (clones) of all selected elements and move them slightly
+// from their originals
+this.cloneSelectedElements = function(x,y) {
+ var batchCmd = new BatchCommand("Clone Elements");
+ // find all the elements selected (stop at first null)
+ var len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ var elem = selectedElements[i];
+ if (elem == null) break;
+ }
+ // use slice to quickly get the subset of elements we need
+ var copiedElements = selectedElements.slice(0,i);
+ this.clearSelection(true);
+ // note that we loop in the reverse way because of the way elements are added
+ // to the selectedElements array (top-first)
+ var i = copiedElements.length;
+ while (i--) {
+ // clone each element and replace it within copiedElements
+ var elem = copiedElements[i] = copyElem(copiedElements[i]);
+ (current_group || getCurrentDrawing().getCurrentLayer()).appendChild(elem);
+ batchCmd.addSubCommand(new InsertElementCommand(elem));
+ }
+
+ if (!batchCmd.isEmpty()) {
+ addToSelection(copiedElements.reverse()); // Need to reverse for correct selection-adding
+ this.moveSelectedElements(x,y,false);
+ addCommandToHistory(batchCmd);
+ }
+};
+
+// Function: alignSelectedElements
+// Aligns selected elements
+//
+// Parameters:
+// type - String with single character indicating the alignment type
+// relative_to - String that must be one of the following:
+// "selected", "largest", "smallest", "page"
+this.alignSelectedElements = function(type, relative_to) {
+ var bboxes = [], angles = [];
+ var minx = Number.MAX_VALUE, maxx = Number.MIN_VALUE, miny = Number.MAX_VALUE, maxy = Number.MIN_VALUE;
+ var curwidth = Number.MIN_VALUE, curheight = Number.MIN_VALUE;
+ var len = selectedElements.length;
+ if (!len) return;
+ for (var i = 0; i < len; ++i) {
+ if (selectedElements[i] == null) break;
+ var elem = selectedElements[i];
+ bboxes[i] = getStrokedBBox([elem]);
+
+ // now bbox is axis-aligned and handles rotation
+ switch (relative_to) {
+ case 'smallest':
+ if ( (type == 'l' || type == 'c' || type == 'r') && (curwidth == Number.MIN_VALUE || curwidth > bboxes[i].width) ||
+ (type == 't' || type == 'm' || type == 'b') && (curheight == Number.MIN_VALUE || curheight > bboxes[i].height) ) {
+ minx = bboxes[i].x;
+ miny = bboxes[i].y;
+ maxx = bboxes[i].x + bboxes[i].width;
+ maxy = bboxes[i].y + bboxes[i].height;
+ curwidth = bboxes[i].width;
+ curheight = bboxes[i].height;
+ }
+ break;
+ case 'largest':
+ if ( (type == 'l' || type == 'c' || type == 'r') && (curwidth == Number.MIN_VALUE || curwidth < bboxes[i].width) ||
+ (type == 't' || type == 'm' || type == 'b') && (curheight == Number.MIN_VALUE || curheight < bboxes[i].height) ) {
+ minx = bboxes[i].x;
+ miny = bboxes[i].y;
+ maxx = bboxes[i].x + bboxes[i].width;
+ maxy = bboxes[i].y + bboxes[i].height;
+ curwidth = bboxes[i].width;
+ curheight = bboxes[i].height;
+ }
+ break;
+ default: // 'selected'
+ if (bboxes[i].x < minx) minx = bboxes[i].x;
+ if (bboxes[i].y < miny) miny = bboxes[i].y;
+ if (bboxes[i].x + bboxes[i].width > maxx) maxx = bboxes[i].x + bboxes[i].width;
+ if (bboxes[i].y + bboxes[i].height > maxy) maxy = bboxes[i].y + bboxes[i].height;
+ break;
+ }
+ } // loop for each element to find the bbox and adjust min/max
+
+ if (relative_to == 'page') {
+ minx = 0;
+ miny = 0;
+ maxx = canvas.contentW;
+ maxy = canvas.contentH;
+ }
+
+ var dx = new Array(len);
+ var dy = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ if (selectedElements[i] == null) break;
+ var elem = selectedElements[i];
+ var bbox = bboxes[i];
+ dx[i] = 0;
+ dy[i] = 0;
+ switch (type) {
+ case 'l': // left (horizontal)
+ dx[i] = minx - bbox.x;
+ break;
+ case 'c': // center (horizontal)
+ dx[i] = (minx+maxx)/2 - (bbox.x + bbox.width/2);
+ break;
+ case 'r': // right (horizontal)
+ dx[i] = maxx - (bbox.x + bbox.width);
+ break;
+ case 't': // top (vertical)
+ dy[i] = miny - bbox.y;
+ break;
+ case 'm': // middle (vertical)
+ dy[i] = (miny+maxy)/2 - (bbox.y + bbox.height/2);
+ break;
+ case 'b': // bottom (vertical)
+ dy[i] = maxy - (bbox.y + bbox.height);
+ break;
+ }
+ }
+ this.moveSelectedElements(dx,dy);
+};
+
+// Group: Additional editor tools
+
+this.contentW = getResolution().w;
+this.contentH = getResolution().h;
+
+// Function: updateCanvas
+// Updates the editor canvas width/height/position after a zoom has occurred
+//
+// Parameters:
+// w - Float with the new width
+// h - Float with the new height
+//
+// Returns:
+// Object with the following values:
+// * x - The canvas' new x coordinate
+// * y - The canvas' new y coordinate
+// * old_x - The canvas' old x coordinate
+// * old_y - The canvas' old y coordinate
+// * d_x - The x position difference
+// * d_y - The y position difference
+this.updateCanvas = function(w, h) {
+ svgroot.setAttribute("width", w);
+ svgroot.setAttribute("height", h);
+ var bg = $('#canvasBackground')[0];
+ var old_x = svgcontent.getAttribute('x');
+ var old_y = svgcontent.getAttribute('y');
+ var x = (w/2 - this.contentW*current_zoom/2);
+ var y = (h/2 - this.contentH*current_zoom/2);
+
+ assignAttributes(svgcontent, {
+ width: this.contentW*current_zoom,
+ height: this.contentH*current_zoom,
+ 'x': x,
+ 'y': y,
+ "viewBox" : "0 0 " + this.contentW + " " + this.contentH
+ });
+
+ assignAttributes(bg, {
+ width: svgcontent.getAttribute('width'),
+ height: svgcontent.getAttribute('height'),
+ x: x,
+ y: y
+ });
+
+ var bg_img = getElem('background_image');
+ if (bg_img) {
+ assignAttributes(bg_img, {
+ 'width': '100%',
+ 'height': '100%'
+ });
+ }
+
+ selectorManager.selectorParentGroup.setAttribute("transform","translate(" + x + "," + y + ")");
+
+ return {x:x, y:y, old_x:old_x, old_y:old_y, d_x:x - old_x, d_y:y - old_y};
+}
+
+// Function: setBackground
+// Set the background of the editor (NOT the actual document)
+//
+// Parameters:
+// color - String with fill color to apply
+// url - URL or path to image to use
+this.setBackground = function(color, url) {
+ var bg = getElem('canvasBackground');
+ var border = $(bg).find('rect')[0];
+ var bg_img = getElem('background_image');
+ border.setAttribute('fill',color);
+ if(url) {
+ if(!bg_img) {
+ bg_img = svgdoc.createElementNS(svgns, "image");
+ assignAttributes(bg_img, {
+ 'id': 'background_image',
+ 'width': '100%',
+ 'height': '100%',
+ 'preserveAspectRatio': 'xMinYMin',
+ 'style':'pointer-events:none'
+ });
+ }
+ setHref(bg_img, url);
+ bg.appendChild(bg_img);
+ } else if(bg_img) {
+ bg_img.parentNode.removeChild(bg_img);
+ }
+}
+
+// Function: cycleElement
+// Select the next/previous element within the current layer
+//
+// Parameters:
+// next - Boolean where true = next and false = previous element
+this.cycleElement = function(next) {
+ var cur_elem = selectedElements[0];
+ var elem = false;
+ var all_elems = getVisibleElements(current_group || getCurrentDrawing().getCurrentLayer());
+ if(!all_elems.length) return;
+ if (cur_elem == null) {
+ var num = next?all_elems.length-1:0;
+ elem = all_elems[num];
+ } else {
+ var i = all_elems.length;
+ while(i--) {
+ if(all_elems[i] == cur_elem) {
+ var num = next?i-1:i+1;
+ if(num >= all_elems.length) {
+ num = 0;
+ } else if(num < 0) {
+ num = all_elems.length-1;
+ }
+ elem = all_elems[num];
+ break;
+ }
+ }
+ }
+ selectOnly([elem], true);
+ call("selected", selectedElements);
+}
+
+this.clear();
+
+
+// DEPRECATED: getPrivateMethods
+// Since all methods are/should be public somehow, this function should be removed
+
+// Being able to access private methods publicly seems wrong somehow,
+// but currently appears to be the best way to allow testing and provide
+// access to them to plugins.
+this.getPrivateMethods = function() {
+ var obj = {
+ addCommandToHistory: addCommandToHistory,
+ setGradient: setGradient,
+ addSvgElementFromJson: addSvgElementFromJson,
+ assignAttributes: assignAttributes,
+ BatchCommand: BatchCommand,
+ call: call,
+ ChangeElementCommand: ChangeElementCommand,
+ copyElem: copyElem,
+ ffClone: ffClone,
+ findDefs: findDefs,
+ findDuplicateGradient: findDuplicateGradient,
+ getElem: getElem,
+ getId: getId,
+ getIntersectionList: getIntersectionList,
+ getMouseTarget: getMouseTarget,
+ getNextId: getNextId,
+ getPathBBox: getPathBBox,
+ getUrlFromAttr: getUrlFromAttr,
+ hasMatrixTransform: hasMatrixTransform,
+ identifyLayers: identifyLayers,
+ InsertElementCommand: InsertElementCommand,
+ isIdentity: svgedit.math.isIdentity,
+ logMatrix: logMatrix,
+ matrixMultiply: matrixMultiply,
+ MoveElementCommand: MoveElementCommand,
+ preventClickDefault: preventClickDefault,
+ recalculateAllSelectedDimensions: recalculateAllSelectedDimensions,
+ recalculateDimensions: recalculateDimensions,
+ remapElement: remapElement,
+ RemoveElementCommand: RemoveElementCommand,
+ removeUnusedDefElems: removeUnusedDefElems,
+ round: round,
+ runExtensions: runExtensions,
+ sanitizeSvg: sanitizeSvg,
+ SVGEditTransformList: svgedit.transformlist.SVGTransformList,
+ toString: toString,
+ transformBox: svgedit.math.transformBox,
+ transformListToTransform: transformListToTransform,
+ transformPoint: transformPoint,
+ walkTree: svgedit.utilities.walkTree
+ }
+ return obj;
+};
+
+}
diff --git a/files_svgedit/svg-edit/.svn/text-base/svgtransformlist.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/svgtransformlist.js.svn-base
new file mode 100644
index 000000000..5c291ca79
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svgtransformlist.js.svn-base
@@ -0,0 +1,291 @@
+/**
+ * SVGTransformList
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) browser.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.transformlist) {
+ svgedit.transformlist = {};
+}
+
+var svgroot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+
+// Helper function.
+function transformToString(xform) {
+ var m = xform.matrix,
+ text = "";
+ switch(xform.type) {
+ case 1: // MATRIX
+ text = "matrix(" + [m.a,m.b,m.c,m.d,m.e,m.f].join(",") + ")";
+ break;
+ case 2: // TRANSLATE
+ text = "translate(" + m.e + "," + m.f + ")";
+ break;
+ case 3: // SCALE
+ if (m.a == m.d) text = "scale(" + m.a + ")";
+ else text = "scale(" + m.a + "," + m.d + ")";
+ break;
+ case 4: // ROTATE
+ var cx = 0, cy = 0;
+ // this prevents divide by zero
+ if (xform.angle != 0) {
+ var K = 1 - m.a;
+ cy = ( K * m.f + m.b*m.e ) / ( K*K + m.b*m.b );
+ cx = ( m.e - m.b * cy ) / K;
+ }
+ text = "rotate(" + xform.angle + " " + cx + "," + cy + ")";
+ break;
+ }
+ return text;
+};
+
+
+/**
+ * Map of SVGTransformList objects.
+ */
+var listMap_ = {};
+
+
+// **************************************************************************************
+// SVGTransformList implementation for Webkit
+// These methods do not currently raise any exceptions.
+// These methods also do not check that transforms are being inserted. This is basically
+// implementing as much of SVGTransformList that we need to get the job done.
+//
+// interface SVGEditTransformList {
+// attribute unsigned long numberOfItems;
+// void clear ( )
+// SVGTransform initialize ( in SVGTransform newItem )
+// SVGTransform getItem ( in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform insertItemBefore ( in SVGTransform newItem, in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform replaceItem ( in SVGTransform newItem, in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform removeItem ( in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform appendItem ( in SVGTransform newItem )
+// NOT IMPLEMENTED: SVGTransform createSVGTransformFromMatrix ( in SVGMatrix matrix );
+// NOT IMPLEMENTED: SVGTransform consolidate ( );
+// }
+// **************************************************************************************
+svgedit.transformlist.SVGTransformList = function(elem) {
+ this._elem = elem || null;
+ this._xforms = [];
+ // TODO: how do we capture the undo-ability in the changed transform list?
+ this._update = function() {
+ var tstr = "";
+ var concatMatrix = svgroot.createSVGMatrix();
+ for (var i = 0; i < this.numberOfItems; ++i) {
+ var xform = this._list.getItem(i);
+ tstr += transformToString(xform) + " ";
+ }
+ this._elem.setAttribute("transform", tstr);
+ };
+ this._list = this;
+ this._init = function() {
+ // Transform attribute parser
+ var str = this._elem.getAttribute("transform");
+ if(!str) return;
+
+ // TODO: Add skew support in future
+ var re = /\s*((scale|matrix|rotate|translate)\s*\(.*?\))\s*,?\s*/;
+ var arr = [];
+ var m = true;
+ while(m) {
+ m = str.match(re);
+ str = str.replace(re,'');
+ if(m && m[1]) {
+ var x = m[1];
+ var bits = x.split(/\s*\(/);
+ var name = bits[0];
+ var val_bits = bits[1].match(/\s*(.*?)\s*\)/);
+ val_bits[1] = val_bits[1].replace(/(\d)-/g, "$1 -");
+ var val_arr = val_bits[1].split(/[, ]+/);
+ var letters = 'abcdef'.split('');
+ var mtx = svgroot.createSVGMatrix();
+ $.each(val_arr, function(i, item) {
+ val_arr[i] = parseFloat(item);
+ if(name == 'matrix') {
+ mtx[letters[i]] = val_arr[i];
+ }
+ });
+ var xform = svgroot.createSVGTransform();
+ var fname = 'set' + name.charAt(0).toUpperCase() + name.slice(1);
+ var values = name=='matrix'?[mtx]:val_arr;
+
+ if (name == 'scale' && values.length == 1) {
+ values.push(values[0]);
+ } else if (name == 'translate' && values.length == 1) {
+ values.push(0);
+ } else if (name == 'rotate' && values.length == 1) {
+ values.push(0);
+ values.push(0);
+ }
+ xform[fname].apply(xform, values);
+ this._list.appendItem(xform);
+ }
+ }
+ };
+ this._removeFromOtherLists = function(item) {
+ if (item) {
+ // Check if this transform is already in a transformlist, and
+ // remove it if so.
+ var found = false;
+ for (var id in listMap_) {
+ var tl = listMap_[id];
+ for (var i = 0, len = tl._xforms.length; i < len; ++i) {
+ if(tl._xforms[i] == item) {
+ found = true;
+ tl.removeItem(i);
+ break;
+ }
+ }
+ if (found) {
+ break;
+ }
+ }
+ }
+ };
+
+ this.numberOfItems = 0;
+ this.clear = function() {
+ this.numberOfItems = 0;
+ this._xforms = [];
+ };
+
+ this.initialize = function(newItem) {
+ this.numberOfItems = 1;
+ this._removeFromOtherLists(newItem);
+ this._xforms = [newItem];
+ };
+
+ this.getItem = function(index) {
+ if (index < this.numberOfItems && index >= 0) {
+ return this._xforms[index];
+ }
+ throw {code: 1}; // DOMException with code=INDEX_SIZE_ERR
+ };
+
+ this.insertItemBefore = function(newItem, index) {
+ var retValue = null;
+ if (index >= 0) {
+ if (index < this.numberOfItems) {
+ this._removeFromOtherLists(newItem);
+ var newxforms = new Array(this.numberOfItems + 1);
+ // TODO: use array copying and slicing
+ for ( var i = 0; i < index; ++i) {
+ newxforms[i] = this._xforms[i];
+ }
+ newxforms[i] = newItem;
+ for ( var j = i+1; i < this.numberOfItems; ++j, ++i) {
+ newxforms[j] = this._xforms[i];
+ }
+ this.numberOfItems++;
+ this._xforms = newxforms;
+ retValue = newItem;
+ this._list._update();
+ }
+ else {
+ retValue = this._list.appendItem(newItem);
+ }
+ }
+ return retValue;
+ };
+
+ this.replaceItem = function(newItem, index) {
+ var retValue = null;
+ if (index < this.numberOfItems && index >= 0) {
+ this._removeFromOtherLists(newItem);
+ this._xforms[index] = newItem;
+ retValue = newItem;
+ this._list._update();
+ }
+ return retValue;
+ };
+
+ this.removeItem = function(index) {
+ if (index < this.numberOfItems && index >= 0) {
+ var retValue = this._xforms[index];
+ var newxforms = new Array(this.numberOfItems - 1);
+ for (var i = 0; i < index; ++i) {
+ newxforms[i] = this._xforms[i];
+ }
+ for (var j = i; j < this.numberOfItems-1; ++j, ++i) {
+ newxforms[j] = this._xforms[i+1];
+ }
+ this.numberOfItems--;
+ this._xforms = newxforms;
+ this._list._update();
+ return retValue;
+ } else {
+ throw {code: 1}; // DOMException with code=INDEX_SIZE_ERR
+ }
+ };
+
+ this.appendItem = function(newItem) {
+ this._removeFromOtherLists(newItem);
+ this._xforms.push(newItem);
+ this.numberOfItems++;
+ this._list._update();
+ return newItem;
+ };
+};
+
+
+svgedit.transformlist.resetListMap = function() {
+ listMap_ = {};
+};
+
+/**
+ * Removes transforms of the given element from the map.
+ * Parameters:
+ * elem - a DOM Element
+ */
+svgedit.transformlist.removeElementFromListMap = function(elem) {
+ if (elem.id && listMap_[elem.id]) {
+ delete listMap_[elem.id];
+ }
+};
+
+// Function: getTransformList
+// Returns an object that behaves like a SVGTransformList for the given DOM element
+//
+// Parameters:
+// elem - DOM element to get a transformlist from
+svgedit.transformlist.getTransformList = function(elem) {
+ if (!svgedit.browser.supportsNativeTransformLists()) {
+ var id = elem.id;
+ if(!id) {
+ // Get unique ID for temporary element
+ id = 'temp';
+ }
+ var t = listMap_[id];
+ if (!t || id == 'temp') {
+ listMap_[id] = new svgedit.transformlist.SVGTransformList(elem);
+ listMap_[id]._init();
+ t = listMap_[id];
+ }
+ return t;
+ }
+ else if (elem.transform) {
+ return elem.transform.baseVal;
+ }
+ else if (elem.gradientTransform) {
+ return elem.gradientTransform.baseVal;
+ }
+ else if (elem.patternTransform) {
+ return elem.patternTransform.baseVal;
+ }
+
+ return null;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/.svn/text-base/svgutils.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/svgutils.js.svn-base
new file mode 100644
index 000000000..931fb334b
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/svgutils.js.svn-base
@@ -0,0 +1,647 @@
+/**
+ * Package: svgedit.utilities
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) svgtransformlist.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.utilities) {
+ svgedit.utilities = {};
+}
+
+// Constants
+
+// String used to encode base64.
+var KEYSTR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+var SVGNS = 'http://www.w3.org/2000/svg';
+var XLINKNS = 'http://www.w3.org/1999/xlink';
+var XMLNS = "http://www.w3.org/XML/1998/namespace";
+
+// Much faster than running getBBox() every time
+var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use';
+var visElems_arr = visElems.split(',');
+//var hidElems = 'clipPath,defs,desc,feGaussianBlur,filter,linearGradient,marker,mask,metadata,pattern,radialGradient,stop,switch,symbol,title,textPath';
+
+var editorContext_ = null;
+var domdoc_ = null;
+var domcontainer_ = null;
+var svgroot_ = null;
+
+svgedit.utilities.init = function(editorContext) {
+ editorContext_ = editorContext;
+ domdoc_ = editorContext.getDOMDocument();
+ domcontainer_ = editorContext.getDOMContainer();
+ svgroot_ = editorContext.getSVGRoot();
+};
+
+// Function: svgedit.utilities.toXml
+// Converts characters in a string to XML-friendly entities.
+//
+// Example: "&" becomes "&amp;"
+//
+// Parameters:
+// str - The string to be converted
+//
+// Returns:
+// The converted string
+svgedit.utilities.toXml = function(str) {
+ return $('<p/>').text(str).html();
+};
+
+// Function: svgedit.utilities.fromXml
+// Converts XML entities in a string to single characters.
+// Example: "&amp;" becomes "&"
+//
+// Parameters:
+// str - The string to be converted
+//
+// Returns:
+// The converted string
+svgedit.utilities.fromXml = function(str) {
+ return $('<p/>').html(str).text();
+};
+
+// This code was written by Tyler Akins and has been placed in the
+// public domain. It would be nice if you left this header intact.
+// Base64 code from Tyler Akins -- http://rumkin.com
+
+// schiller: Removed string concatenation in favour of Array.join() optimization,
+// also precalculate the size of the array needed.
+
+// Function: svgedit.utilities.encode64
+// Converts a string to base64
+svgedit.utilities.encode64 = function(input) {
+ // base64 strings are 4/3 larger than the original string
+// 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 output = new Array( Math.floor( (input.length + 2) / 3 ) * 4 );
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0, p = 0;
+
+ do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ 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('');
+};
+
+// Function: svgedit.utilities.decode64
+// Converts a string from base64
+svgedit.utilities.decode64 = function(input) {
+ if(window.atob) return window.atob(input);
+ var output = "";
+ var chr1, chr2, chr3 = "";
+ var enc1, enc2, enc3, enc4 = "";
+ var i = 0;
+
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+ 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++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+
+ chr1 = chr2 = chr3 = "";
+ enc1 = enc2 = enc3 = enc4 = "";
+
+ } while (i < input.length);
+ return unescape(output);
+};
+
+// Currently not being used, so commented out for now
+// based on http://phpjs.org/functions/utf8_encode:577
+// codedread:does not seem to work with webkit-based browsers on OSX
+// "encodeUTF8": function(input) {
+// //return unescape(encodeURIComponent(input)); //may or may not work
+// var output = '';
+// for (var n = 0; n < input.length; n++){
+// var c = input.charCodeAt(n);
+// if (c < 128) {
+// output += input[n];
+// }
+// else if (c > 127) {
+// if (c < 2048){
+// output += String.fromCharCode((c >> 6) | 192);
+// }
+// else {
+// output += String.fromCharCode((c >> 12) | 224) + String.fromCharCode((c >> 6) & 63 | 128);
+// }
+// output += String.fromCharCode((c & 63) | 128);
+// }
+// }
+// return output;
+// },
+
+// Function: svgedit.utilities.convertToXMLReferences
+// Converts a string to use XML references
+svgedit.utilities.convertToXMLReferences = function(input) {
+ var output = '';
+ for (var n = 0; n < input.length; n++){
+ var c = input.charCodeAt(n);
+ if (c < 128) {
+ output += input[n];
+ } else if(c > 127) {
+ output += ("&#" + c + ";");
+ }
+ }
+ return output;
+};
+
+// Function: svgedit.utilities.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
+svgedit.utilities.text2xml = function(sXML) {
+ if(sXML.indexOf('<svg:svg') >= 0) {
+ sXML = sXML.replace(/<(\/?)svg:/g, '<$1').replace('xmlns:svg', 'xmlns');
+ }
+
+ var out;
+ try{
+ var dXML = (window.DOMParser)?new DOMParser():new ActiveXObject("Microsoft.XMLDOM");
+ dXML.async = false;
+ } catch(e){
+ throw new Error("XML Parser could not be instantiated");
+ };
+ try{
+ if(dXML.loadXML) out = (dXML.loadXML(sXML))?dXML:false;
+ else out = dXML.parseFromString(sXML, "text/xml");
+ }
+ catch(e){ throw new Error("Error parsing XML string"); };
+ return out;
+};
+
+// Function: svgedit.utilities.bboxToObj
+// Converts a SVGRect into an object.
+//
+// Parameters:
+// bbox - a SVGRect
+//
+// Returns:
+// An object with properties names x, y, width, height.
+svgedit.utilities.bboxToObj = function(bbox) {
+ return {
+ x: bbox.x,
+ y: bbox.y,
+ width: bbox.width,
+ height: bbox.height
+ }
+};
+
+// Function: svgedit.utilities.walkTree
+// Walks the tree and executes the callback on each element in a top-down fashion
+//
+// Parameters:
+// elem - DOM element to traverse
+// cbFn - Callback function to run on each element
+svgedit.utilities.walkTree = function(elem, cbFn){
+ if (elem && elem.nodeType == 1) {
+ cbFn(elem);
+ var i = elem.childNodes.length;
+ while (i--) {
+ svgedit.utilities.walkTree(elem.childNodes.item(i), cbFn);
+ }
+ }
+};
+
+// Function: svgedit.utilities.walkTreePost
+// Walks the tree and executes the callback on each element in a depth-first fashion
+// TODO: FIXME: Shouldn't this be calling walkTreePost?
+//
+// Parameters:
+// elem - DOM element to traverse
+// cbFn - Callback function to run on each element
+svgedit.utilities.walkTreePost = function(elem, cbFn) {
+ if (elem && elem.nodeType == 1) {
+ var i = elem.childNodes.length;
+ while (i--) {
+ svgedit.utilities.walkTree(elem.childNodes.item(i), cbFn);
+ }
+ cbFn(elem);
+ }
+};
+
+// Function: svgedit.utilities.getUrlFromAttr
+// Extracts the URL from the url(...) syntax of some attributes.
+// Three variants:
+// * <circle fill="url(someFile.svg#foo)" />
+// * <circle fill="url('someFile.svg#foo')" />
+// * <circle fill='url("someFile.svg#foo")' />
+//
+// Parameters:
+// attrVal - The attribute value as a string
+//
+// Returns:
+// String with just the URL, like someFile.svg#foo
+svgedit.utilities.getUrlFromAttr = function(attrVal) {
+ if (attrVal) {
+ // url("#somegrad")
+ if (attrVal.indexOf('url("') === 0) {
+ return attrVal.substring(5,attrVal.indexOf('"',6));
+ }
+ // url('#somegrad')
+ else if (attrVal.indexOf("url('") === 0) {
+ return attrVal.substring(5,attrVal.indexOf("'",6));
+ }
+ else if (attrVal.indexOf("url(") === 0) {
+ return attrVal.substring(4,attrVal.indexOf(')'));
+ }
+ }
+ return null;
+};
+
+// Function: svgedit.utilities.getHref
+// Returns the given element's xlink:href value
+svgedit.utilities.getHref = function(elem) {
+ 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);
+}
+
+// Function: findDefs
+// Parameters:
+// svgElement - The <svg> element.
+//
+// Returns:
+// The document's <defs> element, create it first if necessary
+svgedit.utilities.findDefs = function(svgElement) {
+ var svgElement = editorContext_.getSVGContent().documentElement;
+ var defs = svgElement.getElementsByTagNameNS(SVGNS, "defs");
+ if (defs.length > 0) {
+ defs = defs[0];
+ }
+ else {
+ // first child is a comment, so call nextSibling
+ defs = svgElement.insertBefore( svgElement.ownerDocument.createElementNS(SVGNS, "defs" ), svgElement.firstChild.nextSibling);
+ }
+ return defs;
+};
+
+// TODO(codedread): Consider moving the next to functions to bbox.js
+
+// Function: svgedit.utilities.getPathBBox
+// Get correct BBox for a path in Webkit
+// Converted from code found here:
+// http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
+//
+// Parameters:
+// path - The path DOM element to get the BBox for
+//
+// Returns:
+// A BBox-like object
+svgedit.utilities.getPathBBox = function(path) {
+ var seglist = path.pathSegList;
+ var tot = seglist.numberOfItems;
+
+ var bounds = [[], []];
+ var start = seglist.getItem(0);
+ var P0 = [start.x, start.y];
+
+ for(var i=0; i < tot; i++) {
+ var seg = seglist.getItem(i);
+ if(!seg.x) continue;
+
+ // Add actual points to limits
+ bounds[0].push(P0[0]);
+ bounds[1].push(P0[1]);
+
+ if(seg.x1) {
+ var P1 = [seg.x1, seg.y1],
+ P2 = [seg.x2, seg.y2],
+ P3 = [seg.x, seg.y];
+
+ for(var j=0; j < 2; j++) {
+
+ var calc = function(t) {
+ return Math.pow(1-t,3) * P0[j]
+ + 3 * Math.pow(1-t,2) * t * P1[j]
+ + 3 * (1-t) * Math.pow(t,2) * P2[j]
+ + Math.pow(t,3) * P3[j];
+ };
+
+ var b = 6 * P0[j] - 12 * P1[j] + 6 * P2[j];
+ var a = -3 * P0[j] + 9 * P1[j] - 9 * P2[j] + 3 * P3[j];
+ var c = 3 * P1[j] - 3 * P0[j];
+
+ if(a == 0) {
+ if(b == 0) {
+ continue;
+ }
+ var t = -c / b;
+ if(0 < t && t < 1) {
+ bounds[j].push(calc(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) bounds[j].push(calc(t1));
+ var t2 = (-b - Math.sqrt(b2ac))/(2 * a);
+ if(0 < t2 && t2 < 1) bounds[j].push(calc(t2));
+ }
+ P0 = P3;
+ } else {
+ bounds[0].push(seg.x);
+ bounds[1].push(seg.y);
+ }
+ }
+
+ var x = Math.min.apply(null, bounds[0]);
+ var w = Math.max.apply(null, bounds[0]) - x;
+ var y = Math.min.apply(null, bounds[1]);
+ var h = Math.max.apply(null, bounds[1]) - y;
+ return {
+ 'x': x,
+ 'y': y,
+ 'width': w,
+ 'height': h
+ };
+};
+
+// Function: groupBBFix
+// Get the given/selected element's bounding box object, checking for
+// horizontal/vertical lines (see issue 717)
+// Note that performance is currently terrible, so some way to improve would
+// be great.
+//
+// Parameters:
+// selected - Container or <use> DOM element
+function groupBBFix(selected) {
+ if(svgedit.browser.supportsHVLineContainerBBox()) {
+ try { return selected.getBBox();} catch(e){}
+ }
+ var ref = $.data(selected, 'ref');
+ var matched = null;
+
+ if(ref) {
+ var copy = $(ref).children().clone().attr('visibility', 'hidden');
+ $(svgroot_).append(copy);
+ matched = copy.filter('line, path');
+ } else {
+ matched = $(selected).find('line, path');
+ }
+
+ var issue = false;
+ if(matched.length) {
+ matched.each(function() {
+ var bb = this.getBBox();
+ if(!bb.width || !bb.height) {
+ issue = true;
+ }
+ });
+ if(issue) {
+ var elems = ref ? copy : $(selected).children();
+ ret = getStrokedBBox(elems);
+ } else {
+ ret = selected.getBBox();
+ }
+ } else {
+ ret = selected.getBBox();
+ }
+ if(ref) {
+ copy.remove();
+ }
+ return ret;
+}
+
+// Function: svgedit.utilities.getBBox
+// Get the given/selected element's bounding box object, convert it to be more
+// usable when necessary
+//
+// Parameters:
+// elem - Optional DOM element to get the BBox for
+svgedit.utilities.getBBox = function(elem) {
+ var selected = elem || editorContext_.geSelectedElements()[0];
+ if (elem.nodeType != 1) return null;
+ var ret = null;
+ var elname = selected.nodeName;
+
+ switch ( elname ) {
+ case 'text':
+ if(selected.textContent === '') {
+ selected.textContent = 'a'; // Some character needed for the selector to use.
+ ret = selected.getBBox();
+ selected.textContent = '';
+ } else {
+ try { ret = selected.getBBox();} catch(e){}
+ }
+ break;
+ case 'path':
+ if(!svgedit.browser.supportsPathBBox()) {
+ ret = svgedit.utilities.getPathBBox(selected);
+ } else {
+ try { ret = selected.getBBox();} catch(e){}
+ }
+ break;
+ case 'g':
+ case 'a':
+ ret = groupBBFix(selected);
+ break;
+ default:
+
+ if(elname === 'use') {
+ ret = groupBBFix(selected, true);
+ }
+
+ if(elname === 'use' || elname === 'foreignObject') {
+ if(!ret) ret = selected.getBBox();
+ if(!svgedit.browser.isWebkit()) {
+ var bb = {};
+ bb.width = ret.width;
+ bb.height = ret.height;
+ bb.x = ret.x + parseFloat(selected.getAttribute('x')||0);
+ bb.y = ret.y + parseFloat(selected.getAttribute('y')||0);
+ ret = bb;
+ }
+ } else if(~visElems_arr.indexOf(elname)) {
+ try { ret = selected.getBBox();}
+ catch(e) {
+ // Check if element is child of a foreignObject
+ var fo = $(selected).closest("foreignObject");
+ if(fo.length) {
+ try {
+ ret = fo[0].getBBox();
+ } catch(e) {
+ ret = null;
+ }
+ } else {
+ ret = null;
+ }
+ }
+ }
+ }
+
+ if(ret) {
+ ret = svgedit.utilities.bboxToObj(ret);
+ }
+
+ // get the bounding box from the DOM (which is in that element's coordinate system)
+ return ret;
+};
+
+// Function: svgedit.utilities.getRotationAngle
+// Get the rotation angle of the given/selected DOM element
+//
+// Parameters:
+// elem - Optional DOM element to get the angle for
+// to_rad - Boolean that when true returns the value in radians rather than degrees
+//
+// Returns:
+// Float with the angle in degrees or radians
+svgedit.utilities.getRotationAngle = function(elem, to_rad) {
+ var selected = elem || editorContext_.getSelectedElements()[0];
+ // find the rotation transform (if any) and set it
+ var tlist = svgedit.transformlist.getTransformList(selected);
+ if(!tlist) return 0; // <svg> elements have no tlist
+ var N = tlist.numberOfItems;
+ for (var i = 0; i < N; ++i) {
+ var xform = tlist.getItem(i);
+ if (xform.type == 4) {
+ return to_rad ? xform.angle * Math.PI / 180.0 : xform.angle;
+ }
+ }
+ return 0.0;
+};
+
+// Function: getElem
+// Get a DOM element by ID within the SVG root element.
+//
+// Parameters:
+// id - String with the element's new ID
+if (svgedit.browser.supportsSelectors()) {
+ svgedit.utilities.getElem = function(id) {
+ // querySelector lookup
+ return svgroot_.querySelector('#'+id);
+ };
+} else if (svgedit.browser.supportsXpath()) {
+ svgedit.utilities.getElem = function(id) {
+ // xpath lookup
+ return domdoc_.evaluate(
+ 'svg:svg[@id="svgroot"]//svg:*[@id="'+id+'"]',
+ domcontainer_,
+ function() { return "http://www.w3.org/2000/svg"; },
+ 9,
+ null).singleNodeValue;
+ };
+} else {
+ svgedit.utilities.getElem = function(id) {
+ // jQuery lookup: twice as slow as xpath in FF
+ return $(svgroot_).find('[id=' + id + ']')[0];
+ };
+}
+
+// Function: assignAttributes
+// Assigns multiple attributes to an element.
+//
+// Parameters:
+// node - DOM element to apply new attribute values to
+// attrs - Object with attribute keys/values
+// suspendLength - Optional integer of milliseconds to suspend redraw
+// unitCheck - Boolean to indicate the need to use svgedit.units.setUnitAttr
+svgedit.utilities.assignAttributes = function(node, attrs, suspendLength, unitCheck) {
+ if(!suspendLength) suspendLength = 0;
+ // Opera has a problem with suspendRedraw() apparently
+ var handle = null;
+ if (!svgedit.browser.isOpera()) svgroot_.suspendRedraw(suspendLength);
+
+ for (var i in attrs) {
+ var ns = (i.substr(0,4) === "xml:" ? XMLNS :
+ i.substr(0,6) === "xlink:" ? XLINKNS : null);
+
+ if(ns) {
+ node.setAttributeNS(ns, i, attrs[i]);
+ } else if(!unitCheck) {
+ node.setAttribute(i, attrs[i]);
+ } else {
+ svgedit.units.setUnitAttr(node, i, attrs[i]);
+ }
+
+ }
+
+ if (!svgedit.browser.isOpera()) svgroot_.unsuspendRedraw(handle);
+};
+
+// Function: cleanupElement
+// Remove unneeded (default) attributes, makes resulting SVG smaller
+//
+// Parameters:
+// element - DOM element to clean up
+svgedit.utilities.cleanupElement = function(element) {
+ var handle = svgroot_.suspendRedraw(60);
+ var defaults = {
+ 'fill-opacity':1,
+ 'stop-opacity':1,
+ 'opacity':1,
+ 'stroke':'none',
+ 'stroke-dasharray':'none',
+ 'stroke-linejoin':'miter',
+ 'stroke-linecap':'butt',
+ 'stroke-opacity':1,
+ 'stroke-width':1,
+ 'rx':0,
+ 'ry':0
+ }
+
+ for(var attr in defaults) {
+ var val = defaults[attr];
+ if(element.getAttribute(attr) == val) {
+ element.removeAttribute(attr);
+ }
+ }
+
+ svgroot_.unsuspendRedraw(handle);
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/.svn/text-base/units.js.svn-base b/files_svgedit/svg-edit/.svn/text-base/units.js.svn-base
new file mode 100644
index 000000000..8be858cb2
--- /dev/null
+++ b/files_svgedit/svg-edit/.svn/text-base/units.js.svn-base
@@ -0,0 +1,281 @@
+/**
+ * Package: svgedit.units
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.units) {
+ svgedit.units = {};
+}
+
+var w_attrs = ['x', 'x1', 'cx', 'rx', 'width'];
+var h_attrs = ['y', 'y1', 'cy', 'ry', 'height'];
+var unit_attrs = $.merge(['r','radius'], w_attrs);
+
+var unitNumMap = {
+ '%': 2,
+ 'em': 3,
+ 'ex': 4,
+ 'px': 5,
+ 'cm': 6,
+ 'mm': 7,
+ 'in': 8,
+ 'pt': 9,
+ 'pc': 10
+};
+
+$.merge(unit_attrs, h_attrs);
+
+// Container of elements.
+var elementContainer_;
+
+/**
+ * Stores mapping of unit type to user coordinates.
+ */
+var typeMap_ = {px: 1};
+
+/**
+ * ElementContainer interface
+ *
+ * function getBaseUnit() - returns a string of the base unit type of the container ("em")
+ * function getElement() - returns an element in the container given an id
+ * function getHeight() - returns the container's height
+ * function getWidth() - returns the container's width
+ * function getRoundDigits() - returns the number of digits number should be rounded to
+ */
+
+/**
+ * Function: svgedit.units.init()
+ * Initializes this module.
+ *
+ * Parameters:
+ * elementContainer - an object implementing the ElementContainer interface.
+ */
+svgedit.units.init = function(elementContainer) {
+ elementContainer_ = elementContainer;
+
+ var svgns = 'http://www.w3.org/2000/svg';
+
+ // Get correct em/ex values by creating a temporary SVG.
+ var svg = document.createElementNS(svgns, 'svg');
+ document.body.appendChild(svg);
+ var rect = document.createElementNS(svgns,'rect');
+ rect.setAttribute('width',"1em");
+ rect.setAttribute('height',"1ex");
+ rect.setAttribute('x',"1in");
+ svg.appendChild(rect);
+ var bb = rect.getBBox();
+ document.body.removeChild(svg);
+
+ var inch = bb.x;
+ typeMap_['em'] = bb.width;
+ typeMap_['ex'] = bb.height;
+ typeMap_['in'] = inch;
+ typeMap_['cm'] = inch / 2.54;
+ typeMap_['mm'] = inch / 25.4;
+ typeMap_['pt'] = inch / 72;
+ typeMap_['pc'] = inch / 6;
+ typeMap_['%'] = 0;
+};
+
+// Group: Unit conversion functions
+
+// Function: svgedit.units.getTypeMap
+// Returns the unit object with values for each unit
+svgedit.units.getTypeMap = function() {
+ return typeMap_;
+};
+
+// Function: svgedit.units.shortFloat
+// Rounds a given value to a float with number of digits defined in save_options
+//
+// Parameters:
+// val - The value as a String, Number or Array of two numbers to be rounded
+//
+// Returns:
+// If a string/number was given, returns a Float. If an array, return a string
+// with comma-seperated floats
+svgedit.units.shortFloat = function(val) {
+ var digits = elementContainer_.getRoundDigits();
+ if(!isNaN(val)) {
+ // Note that + converts to Number
+ return +((+val).toFixed(digits));
+ } else if($.isArray(val)) {
+ return svgedit.units.shortFloat(val[0]) + ',' + svgedit.units.shortFloat(val[1]);
+ }
+ return parseFloat(val).toFixed(digits) - 0;
+};
+
+// Function: svgedit.units.convertUnit
+// Converts the number to given unit or baseUnit
+svgedit.units.convertUnit = function(val, unit) {
+ unit = unit || elementContainer_.getBaseUnit();
+// baseVal.convertToSpecifiedUnits(unitNumMap[unit]);
+// var val = baseVal.valueInSpecifiedUnits;
+// baseVal.convertToSpecifiedUnits(1);
+ return svgedit.unit.shortFloat(val / typeMap_[unit]);
+};
+
+// Function: svgedit.units.setUnitAttr
+// Sets an element's attribute based on the unit in its current value.
+//
+// Parameters:
+// elem - DOM element to be changed
+// attr - String with the name of the attribute associated with the value
+// val - String with the attribute value to convert
+svgedit.units.setUnitAttr = function(elem, attr, val) {
+ if(!isNaN(val)) {
+ // New value is a number, so check currently used unit
+ var old_val = elem.getAttribute(attr);
+
+ // Enable this for alternate mode
+// if(old_val !== null && (isNaN(old_val) || elementContainer_.getBaseUnit() !== 'px')) {
+// // Old value was a number, so get unit, then convert
+// var unit;
+// if(old_val.substr(-1) === '%') {
+// var res = getResolution();
+// unit = '%';
+// val *= 100;
+// if(w_attrs.indexOf(attr) >= 0) {
+// val = val / res.w;
+// } else if(h_attrs.indexOf(attr) >= 0) {
+// val = val / res.h;
+// } else {
+// return val / Math.sqrt((res.w*res.w) + (res.h*res.h))/Math.sqrt(2);
+// }
+// } else {
+// if(elementContainer_.getBaseUnit() !== 'px') {
+// unit = elementContainer_.getBaseUnit();
+// } else {
+// unit = old_val.substr(-2);
+// }
+// val = val / typeMap_[unit];
+// }
+//
+// val += unit;
+// }
+ }
+ elem.setAttribute(attr, val);
+};
+
+var attrsToConvert = {
+ "line": ['x1', 'x2', 'y1', 'y2'],
+ "circle": ['cx', 'cy', 'r'],
+ "ellipse": ['cx', 'cy', 'rx', 'ry'],
+ "foreignObject": ['x', 'y', 'width', 'height'],
+ "rect": ['x', 'y', 'width', 'height'],
+ "image": ['x', 'y', 'width', 'height'],
+ "use": ['x', 'y', 'width', 'height'],
+ "text": ['x', 'y']
+};
+
+// Function: svgedit.units.convertAttrs
+// Converts all applicable attributes to the configured baseUnit
+//
+// Parameters:
+// element - a DOM element whose attributes should be converted
+svgedit.units.convertAttrs = function(element) {
+ var elName = element.tagName;
+ var unit = elementContainer_.getBaseUnit();
+ var attrs = attrsToConvert[elName];
+ if(!attrs) return;
+ var len = attrs.length
+ for(var i = 0; i < len; i++) {
+ var attr = attrs[i];
+ var cur = element.getAttribute(attr);
+ if(cur) {
+ if(!isNaN(cur)) {
+ element.setAttribute(attr, (cur / typeMap_[unit]) + unit);
+ } else {
+ // Convert existing?
+ }
+ }
+ }
+};
+
+// Function: svgedit.units.convertToNum
+// Converts given values to numbers. Attributes must be supplied in
+// case a percentage is given
+//
+// Parameters:
+// attr - String with the name of the attribute associated with the value
+// val - String with the attribute value to convert
+svgedit.units.convertToNum = function(attr, val) {
+ // Return a number if that's what it already is
+ if(!isNaN(val)) return val-0;
+
+ if(val.substr(-1) === '%') {
+ // Deal with percentage, depends on attribute
+ var num = val.substr(0, val.length-1)/100;
+ var width = elementContainer_.getWidth();
+ var height = elementContainer_.getHeight();
+
+ if(w_attrs.indexOf(attr) >= 0) {
+ return num * width;
+ } else if(h_attrs.indexOf(attr) >= 0) {
+ return num * height;
+ } else {
+ return num * Math.sqrt((width*width) + (height*height))/Math.sqrt(2);
+ }
+ } else {
+ var unit = val.substr(-2);
+ var num = val.substr(0, val.length-2);
+ // Note that this multiplication turns the string into a number
+ return num * typeMap_[unit];
+ }
+};
+
+// Function: svgedit.units.isValidUnit
+// Check if an attribute's value is in a valid format
+//
+// Parameters:
+// attr - String with the name of the attribute associated with the value
+// val - String with the attribute value to check
+svgedit.units.isValidUnit = function(attr, val) {
+ var valid = false;
+ if(unit_attrs.indexOf(attr) >= 0) {
+ // True if it's just a number
+ if(!isNaN(val)) {
+ valid = true;
+ } else {
+ // Not a number, check if it has a valid unit
+ val = val.toLowerCase();
+ $.each(typeMap_, function(unit) {
+ if(valid) return;
+ var re = new RegExp('^-?[\\d\\.]+' + unit + '$');
+ if(re.test(val)) valid = true;
+ });
+ }
+ } else if (attr == "id") {
+ // if we're trying to change the id, make sure it's not already present in the doc
+ // and the id value is valid.
+
+ var result = false;
+ // because getElem() can throw an exception in the case of an invalid id
+ // (according to http://www.w3.org/TR/xml-id/ IDs must be a NCName)
+ // we wrap it in an exception and only return true if the ID was valid and
+ // not already present
+ try {
+ var elem = elementContainer_.getElement(val);
+ result = (elem == null);
+ } catch(e) {}
+ return result;
+ } else {
+ valid = true;
+ }
+
+ return valid;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/browser-not-supported.html b/files_svgedit/svg-edit/browser-not-supported.html
new file mode 100644
index 000000000..3010fcf30
--- /dev/null
+++ b/files_svgedit/svg-edit/browser-not-supported.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
+<link rel="icon" type="image/png" href="images/logo.png"/>
+<link rel="stylesheet" href="svg-editor.css" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<title>Browser does not support SVG | SVG-edit</title>
+</head>
+<body>
+
+<div id="browser-not-supported">
+<img style="float:left;padding:10px;" src="images/logo.png" width="48" height="48" alt="SVG-edit logo" /><br />
+<p>Sorry, but your browser does not support SVG. Below is a list of alternate browsers and versions that support SVG and SVG-edit (from <a href="http://caniuse.com/#cats=SVG">caniuse.com</a>).</p>
+<p>Try the latest version of <a href="http://www.getfirefox.com">Firefox</a>, <a href="http://www.google.com/chrome/">Google Chrome</a>, <a href="http://www.apple.com/safari/download/">Safari</a>, <a href="http://www.opera.com/download/">Opera</a> or <a href="http://windows.microsoft.com/ie9">Internet Explorer<a/>.</p>
+<p>If you are unable to install one of these and must use an old version of Internet Explorer, you can install the <a href="http://code.google.com/chrome/chromeframe/">Google Chrome Frame plugin</a>.</p>
+
+<script type="text/javascript">
+var viewportHeight =(window.innerHeight ? window.innerHeight : $(window).height()) - 140;
+document.write('<iframe width="100%" height="'+viewportHeight+'" src="http://caniuse.com/#cats=SVG"></iframe>');
+</script>
+
+</div>
+
+</body>
+</html>
diff --git a/files_svgedit/svg-edit/browser.js b/files_svgedit/svg-edit/browser.js
new file mode 100644
index 000000000..ff9441ae3
--- /dev/null
+++ b/files_svgedit/svg-edit/browser.js
@@ -0,0 +1,178 @@
+/**
+ * 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 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 <a href='http://opera.com'>latest version</a> 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.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/files_svgedit/svg-edit/canvg/.svn/all-wcprops b/files_svgedit/svg-edit/canvg/.svn/all-wcprops
new file mode 100644
index 000000000..14054cd4e
--- /dev/null
+++ b/files_svgedit/svg-edit/canvg/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 37
+/svn/!svn/ver/2064/trunk/editor/canvg
+END
+rgbcolor.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1563/trunk/editor/canvg/rgbcolor.js
+END
+canvg.js
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/2064/trunk/editor/canvg/canvg.js
+END
diff --git a/files_svgedit/svg-edit/canvg/.svn/entries b/files_svgedit/svg-edit/canvg/.svn/entries
new file mode 100644
index 000000000..6a3391b56
--- /dev/null
+++ b/files_svgedit/svg-edit/canvg/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/canvg
+http://svg-edit.googlecode.com/svn
+
+
+
+2012-03-20T04:57:23.167453Z
+2064
+asyazwan@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+rgbcolor.js
+file
+
+
+
+
+2012-03-25T18:41:39.812317Z
+cf0b2072b7361395d5537e266b8333c0
+2010-05-03T23:29:13.086772Z
+1563
+rusnakp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8753
+
+canvg.js
+file
+
+
+
+
+2012-03-25T18:41:39.816317Z
+feff6e5b21c3177f5a0291b4593229d1
+2012-03-20T04:57:23.167453Z
+2064
+asyazwan@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+88319
+
diff --git a/files_svgedit/svg-edit/canvg/.svn/text-base/canvg.js.svn-base b/files_svgedit/svg-edit/canvg/.svn/text-base/canvg.js.svn-base
new file mode 100644
index 000000000..7b24a383f
--- /dev/null
+++ b/files_svgedit/svg-edit/canvg/.svn/text-base/canvg.js.svn-base
@@ -0,0 +1,2620 @@
+/*
+ * 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<this.length; i++){
+ if(this[i]==obj){
+ return i;
+ }
+ }
+ return -1;
+ }
+}
+
+(function(){
+ // canvg(target, s)
+ // empty parameters: replace all 'svg' elements on page with 'canvas' elements
+ // target: canvas element or the id of a canvas element
+ // s: svg string, url to svg file, or xml document
+ // opts: optional hash of options
+ // ignoreMouse: true => 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<svgTags.length; i++) {
+ var svgTag = svgTags[i];
+ var c = document.createElement('canvas');
+ c.width = svgTag.clientWidth;
+ c.height = svgTag.clientHeight;
+ svgTag.parentNode.insertBefore(c, svgTag);
+ svgTag.parentNode.removeChild(svgTag);
+ var div = document.createElement('div');
+ div.appendChild(svgTag);
+ canvg(c, div.innerHTML);
+ }
+ return;
+ }
+ opts = opts || {};
+
+ if (typeof target == 'string') {
+ target = document.getElementById(target);
+ }
+
+ // reuse class per canvas
+ var svg;
+ if (target.svg == null) {
+ svg = build();
+ target.svg = svg;
+ }
+ else {
+ svg = target.svg;
+ svg.stop();
+ }
+ svg.opts = opts;
+
+ var ctx = target.getContext('2d');
+ if (typeof(s.documentElement) != 'undefined') {
+ // load from xml doc
+ svg.loadXmlDoc(ctx, s);
+ }
+ else if (s.substr(0,1) == '<') {
+ // load from xml string
+ svg.loadXml(ctx, s);
+ }
+ else {
+ // load from url
+ svg.load(ctx, s);
+ }
+ }
+
+ function build() {
+ var svg = { };
+
+ svg.FRAMERATE = 30;
+ svg.MAX_VIRTUAL_PIXELS = 30000;
+
+ // globals
+ svg.init = function(ctx) {
+ svg.Definitions = {};
+ svg.Styles = {};
+ svg.Animations = [];
+ svg.Images = [];
+ svg.ctx = ctx;
+ svg.ViewPort = new (function () {
+ this.viewPorts = [];
+ this.Clear = function() { this.viewPorts = []; }
+ this.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); }
+ this.RemoveCurrent = function() { this.viewPorts.pop(); }
+ this.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; }
+ this.width = function() { return this.Current().width; }
+ this.height = function() { return this.Current().height; }
+ this.ComputeSize = function(d) {
+ if (d != null && typeof(d) == 'number') return d;
+ if (d == 'x') return this.width();
+ if (d == 'y') return this.height();
+ return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);
+ }
+ });
+ }
+ svg.init();
+
+ // images loaded
+ svg.ImagesLoaded = function() {
+ for (var i=0; i<svg.Images.length; i++) {
+ if (!svg.Images[i].loaded) return false;
+ }
+ return true;
+ }
+
+ // trim
+ svg.trim = function(s) { return s.replace(/^\s+|\s+$/g, ''); }
+
+ // compress spaces
+ svg.compressSpaces = function(s) { return s.replace(/[\s\r\t\n]+/gm,' '); }
+
+ // ajax
+ svg.ajax = function(url) {
+ var AJAX;
+ if(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}
+ else{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}
+ if(AJAX){
+ AJAX.open('GET',url,false);
+ AJAX.send(null);
+ return AJAX.responseText;
+ }
+ return null;
+ }
+
+ // parse xml
+ svg.parseXml = function(xml) {
+ if (window.DOMParser)
+ {
+ var parser = new DOMParser();
+ return parser.parseFromString(xml, 'text/xml');
+ }
+ else
+ {
+ xml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');
+ 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<d.length; i++) {
+ if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }
+ else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true; }
+ else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }
+ else if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }
+ else { if (d[i] != 'inherit') ff += d[i]; }
+ } if (ff != '') f.fontFamily = ff;
+ return f;
+ }
+ });
+
+ // points and paths
+ svg.ToNumberArray = function(s) {
+ var a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');
+ for (var i=0; i<a.length; i++) {
+ a[i] = parseFloat(a[i]);
+ }
+ return a;
+ }
+ svg.Point = function(x, y) {
+ this.x = x;
+ this.y = y;
+
+ this.angleTo = function(p) {
+ return Math.atan2(p.y - this.y, p.x - this.x);
+ }
+
+ this.applyTransform = function(v) {
+ var xp = this.x * v[0] + this.y * v[2] + v[4];
+ var yp = this.x * v[1] + this.y * v[3] + v[5];
+ this.x = xp;
+ this.y = yp;
+ }
+ }
+ svg.CreatePoint = function(s) {
+ var a = svg.ToNumberArray(s);
+ return new svg.Point(a[0], a[1]);
+ }
+ svg.CreatePath = function(s) {
+ var a = svg.ToNumberArray(s);
+ var path = [];
+ for (var i=0; i<a.length; i+=2) {
+ path.push(new svg.Point(a[i], a[i+1]));
+ }
+ return path;
+ }
+
+ // bounding box
+ svg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want
+ this.x1 = Number.NaN;
+ this.y1 = Number.NaN;
+ this.x2 = Number.NaN;
+ this.y2 = Number.NaN;
+
+ this.x = function() { return this.x1; }
+ this.y = function() { return this.y1; }
+ this.width = function() { return this.x2 - this.x1; }
+ this.height = function() { return this.y2 - this.y1; }
+
+ this.addPoint = function(x, y) {
+ if (x != null) {
+ if (isNaN(this.x1) || isNaN(this.x2)) {
+ this.x1 = x;
+ this.x2 = x;
+ }
+ if (x < this.x1) this.x1 = x;
+ if (x > 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.transforms.length; i++) {
+ this.transforms[i].apply(ctx);
+ }
+ }
+
+ this.applyToPoint = function(p) {
+ for (var i=0; i<this.transforms.length; i++) {
+ this.transforms[i].applyToPoint(p);
+ }
+ }
+
+ var data = svg.trim(svg.compressSpaces(v)).split(/\s(?=[a-z])/);
+ for (var i=0; i<data.length; i++) {
+ var type = data[i].split('(')[0];
+ var s = data[i].split('(')[1].replace(')','');
+ var transform = new this.Type[type](s);
+ this.transforms.push(transform);
+ }
+ }
+
+ // aspect ratio
+ svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {
+ // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute
+ aspectRatio = svg.compressSpaces(aspectRatio);
+ aspectRatio = aspectRatio.replace(/^defer\s/,''); // ignore defer
+ var align = aspectRatio.split(' ')[0] || 'xMidYMid';
+ var meetOrSlice = aspectRatio.split(' ')[1] || 'meet';
+
+ // calculate scale
+ var scaleX = width / desiredWidth;
+ var scaleY = height / desiredHeight;
+ var scaleMin = Math.min(scaleX, scaleY);
+ var scaleMax = Math.max(scaleX, scaleY);
+ if (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }
+ if (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }
+
+ refX = new svg.Property('refX', refX);
+ refY = new svg.Property('refY', refY);
+ if (refX.hasValue() && refY.hasValue()) {
+ ctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y'));
+ }
+ else {
+ // align
+ if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0);
+ if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0);
+ if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0);
+ if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight);
+ }
+
+ // scale
+ if (align == 'none') ctx.scale(scaleX, scaleY);
+ else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin);
+ else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax);
+
+ // translate
+ ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);
+ }
+
+ // elements
+ svg.Element = {}
+
+ svg.Element.ElementBase = function(node) {
+ this.attributes = {};
+ this.styles = {};
+ this.children = [];
+
+ // get or create attribute
+ this.attribute = function(name, createIfNotExists) {
+ var a = this.attributes[name];
+ if (a != null) return a;
+
+ a = new svg.Property(name, '');
+ if (createIfNotExists == true) this.attributes[name] = a;
+ return a;
+ }
+
+ // get or create style, crawls up node tree
+ this.style = function(name, createIfNotExists) {
+ var s = this.styles[name];
+ if (s != null) return s;
+
+ var a = this.attribute(name);
+ if (a != null && a.hasValue()) {
+ return a;
+ }
+
+ var p = this.parent;
+ if (p != null) {
+ var ps = p.style(name);
+ if (ps != null && ps.hasValue()) {
+ return ps;
+ }
+ }
+
+ s = new svg.Property(name, '');
+ if (createIfNotExists == true) this.styles[name] = s;
+ return s;
+ }
+
+ // base render
+ this.render = function(ctx) {
+ // don't render display=none
+ if (this.style('display').value == 'none') return;
+
+ // don't render visibility=hidden
+ if (this.attribute('visibility').value == 'hidden') return;
+
+ ctx.save();
+ this.setContext(ctx);
+ // mask
+ if (this.attribute('mask').hasValue()) {
+ var mask = this.attribute('mask').Definition.getDefinition();
+ if (mask != null) mask.apply(ctx, this);
+ }
+ else if (this.style('filter').hasValue()) {
+ var filter = this.style('filter').Definition.getDefinition();
+ if (filter != null) filter.apply(ctx, this);
+ }
+ else this.renderChildren(ctx);
+ this.clearContext(ctx);
+ ctx.restore();
+ }
+
+ // base set context
+ this.setContext = function(ctx) {
+ // OVERRIDE ME!
+ }
+
+ // base clear context
+ this.clearContext = function(ctx) {
+ // OVERRIDE ME!
+ }
+
+ // base render children
+ this.renderChildren = function(ctx) {
+ for (var i=0; i<this.children.length; i++) {
+ this.children[i].render(ctx);
+ }
+ }
+
+ this.addChild = function(childNode, create) {
+ var child = childNode;
+ if (create) child = svg.CreateElement(childNode);
+ child.parent = this;
+ this.children.push(child);
+ }
+
+ if (node != null && node.nodeType == 1) { //ELEMENT_NODE
+ // add children
+ for (var i=0; i<node.childNodes.length; i++) {
+ var childNode = node.childNodes[i];
+ if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE
+ }
+
+ // add attributes
+ for (var i=0; i<node.attributes.length; i++) {
+ var attribute = node.attributes[i];
+ this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue);
+ }
+
+ // add tag styles
+ var styles = svg.Styles[node.nodeName];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+
+ // add class styles
+ if (this.attribute('class').hasValue()) {
+ var classes = svg.compressSpaces(this.attribute('class').value).split(' ');
+ for (var j=0; j<classes.length; j++) {
+ styles = svg.Styles['.'+classes[j]];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+ styles = svg.Styles[node.nodeName+'.'+classes[j]];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+ }
+ }
+
+ // add inline styles
+ if (this.attribute('style').hasValue()) {
+ var styles = this.attribute('style').value.split(';');
+ for (var i=0; i<styles.length; i++) {
+ if (svg.trim(styles[i]) != '') {
+ var style = styles[i].split(':');
+ var name = svg.trim(style[0]);
+ var value = svg.trim(style[1]);
+ this.styles[name] = new svg.Property(name, value);
+ }
+ }
+ }
+
+ // add id
+ if (this.attribute('id').hasValue()) {
+ if (svg.Definitions[this.attribute('id').value] == null) {
+ svg.Definitions[this.attribute('id').value] = this;
+ }
+ }
+ }
+ }
+
+ svg.Element.RenderedElementBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.setContext = function(ctx) {
+ // fill
+ if (this.style('fill').Definition.isUrl()) {
+ var fs = this.style('fill').Definition.getFillStyle(this);
+ if (fs != null) ctx.fillStyle = fs;
+ }
+ else if (this.style('fill').hasValue()) {
+ var fillStyle = this.style('fill');
+ if (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value);
+ ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);
+ }
+
+ // stroke
+ if (this.style('stroke').Definition.isUrl()) {
+ var fs = this.style('stroke').Definition.getFillStyle(this);
+ if (fs != null) ctx.strokeStyle = fs;
+ }
+ else if (this.style('stroke').hasValue()) {
+ var strokeStyle = this.style('stroke');
+ if (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value);
+ ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);
+ }
+ if (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels();
+ if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;
+ if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;
+ if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;
+
+ // font
+ if (typeof(ctx.font) != 'undefined') {
+ ctx.font = svg.Font.CreateFont(
+ this.style('font-style').value,
+ this.style('font-variant').value,
+ this.style('font-weight').value,
+ this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '',
+ this.style('font-family').value).toString();
+ }
+
+ // transform
+ if (this.attribute('transform').hasValue()) {
+ var transform = new svg.Transform(this.attribute('transform').value);
+ transform.apply(ctx);
+ }
+
+ // clip
+ if (this.attribute('clip-path').hasValue()) {
+ var clip = this.attribute('clip-path').Definition.getDefinition();
+ if (clip != null) clip.apply(ctx);
+ }
+
+ // opacity
+ if (this.style('opacity').hasValue()) {
+ ctx.globalAlpha = this.style('opacity').numValue();
+ }
+ }
+ }
+ svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;
+
+ svg.Element.PathElementBase = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ if (ctx != null) ctx.beginPath();
+ return new svg.BoundingBox();
+ }
+
+ this.renderChildren = function(ctx) {
+ this.path(ctx);
+ svg.Mouse.checkPath(this, ctx);
+ if (ctx.fillStyle != '') ctx.fill();
+ if (ctx.strokeStyle != '') ctx.stroke();
+
+ var markers = this.getMarkers();
+ if (markers != null) {
+ if (this.style('marker-start').Definition.isUrl()) {
+ var marker = this.style('marker-start').Definition.getDefinition();
+ marker.render(ctx, markers[0][0], markers[0][1]);
+ }
+ if (this.style('marker-mid').Definition.isUrl()) {
+ var marker = this.style('marker-mid').Definition.getDefinition();
+ for (var i=1;i<markers.length-1;i++) {
+ marker.render(ctx, markers[i][0], markers[i][1]);
+ }
+ }
+ if (this.style('marker-end').Definition.isUrl()) {
+ var marker = this.style('marker-end').Definition.getDefinition();
+ marker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);
+ }
+ }
+ }
+
+ this.getBoundingBox = function() {
+ return this.path();
+ }
+
+ this.getMarkers = function() {
+ return null;
+ }
+ }
+ svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;
+
+ // svg element
+ svg.Element.svg = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseClearContext = this.clearContext;
+ this.clearContext = function(ctx) {
+ this.baseClearContext(ctx);
+ svg.ViewPort.RemoveCurrent();
+ }
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ // initial values
+ ctx.strokeStyle = 'rgba(0,0,0,0)';
+ ctx.lineCap = 'butt';
+ ctx.lineJoin = 'miter';
+ ctx.miterLimit = 4;
+
+ this.baseSetContext(ctx);
+
+ // create new view port
+ if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {
+ ctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y'));
+ }
+
+ var width = svg.ViewPort.width();
+ var height = svg.ViewPort.height();
+ if (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {
+ width = this.attribute('width').Length.toPixels('x');
+ height = this.attribute('height').Length.toPixels('y');
+
+ var x = 0;
+ var y = 0;
+ if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {
+ x = -this.attribute('refX').Length.toPixels('x');
+ y = -this.attribute('refY').Length.toPixels('y');
+ }
+
+ ctx.beginPath();
+ ctx.moveTo(x, y);
+ ctx.lineTo(width, y);
+ ctx.lineTo(width, height);
+ ctx.lineTo(x, height);
+ ctx.closePath();
+ ctx.clip();
+ }
+ svg.ViewPort.SetCurrent(width, height);
+
+ // viewbox
+ if (this.attribute('viewBox').hasValue()) {
+ var viewBox = svg.ToNumberArray(this.attribute('viewBox').value);
+ var minX = viewBox[0];
+ var minY = viewBox[1];
+ width = viewBox[2];
+ height = viewBox[3];
+
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ svg.ViewPort.width(),
+ width,
+ svg.ViewPort.height(),
+ height,
+ minX,
+ minY,
+ this.attribute('refX').value,
+ this.attribute('refY').value);
+
+ svg.ViewPort.RemoveCurrent();
+ svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);
+ }
+ }
+ }
+ svg.Element.svg.prototype = new svg.Element.RenderedElementBase;
+
+ // rect element
+ svg.Element.rect = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+ var rx = this.attribute('rx').Length.toPixels('x');
+ var ry = this.attribute('ry').Length.toPixels('y');
+ if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;
+ if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(x + rx, y);
+ ctx.lineTo(x + width - rx, y);
+ ctx.quadraticCurveTo(x + width, y, x + width, y + ry)
+ ctx.lineTo(x + width, y + height - ry);
+ ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)
+ ctx.lineTo(x + rx, y + height);
+ ctx.quadraticCurveTo(x, y + height, x, y + height - ry)
+ ctx.lineTo(x, y + ry);
+ ctx.quadraticCurveTo(x, y, x + rx, y)
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(x, y, x + width, y + height);
+ }
+ }
+ svg.Element.rect.prototype = new svg.Element.PathElementBase;
+
+ // circle element
+ svg.Element.circle = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var cx = this.attribute('cx').Length.toPixels('x');
+ var cy = this.attribute('cy').Length.toPixels('y');
+ var r = this.attribute('r').Length.toPixels();
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.arc(cx, cy, r, 0, Math.PI * 2, true);
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);
+ }
+ }
+ svg.Element.circle.prototype = new svg.Element.PathElementBase;
+
+ // ellipse element
+ svg.Element.ellipse = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);
+ var rx = this.attribute('rx').Length.toPixels('x');
+ var ry = this.attribute('ry').Length.toPixels('y');
+ var cx = this.attribute('cx').Length.toPixels('x');
+ var cy = this.attribute('cy').Length.toPixels('y');
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(cx, cy - ry);
+ ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy);
+ ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);
+ ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);
+ ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);
+ }
+ }
+ svg.Element.ellipse.prototype = new svg.Element.PathElementBase;
+
+ // line element
+ svg.Element.line = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.getPoints = function() {
+ return [
+ new svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')),
+ new svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))];
+ }
+
+ this.path = function(ctx) {
+ var points = this.getPoints();
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(points[0].x, points[0].y);
+ ctx.lineTo(points[1].x, points[1].y);
+ }
+
+ return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);
+ }
+
+ this.getMarkers = function() {
+ var points = this.getPoints();
+ var a = points[0].angleTo(points[1]);
+ return [[points[0], a], [points[1], a]];
+ }
+ }
+ svg.Element.line.prototype = new svg.Element.PathElementBase;
+
+ // polyline element
+ svg.Element.polyline = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.points = svg.CreatePath(this.attribute('points').value);
+ this.path = function(ctx) {
+ var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(this.points[0].x, this.points[0].y);
+ }
+ for (var i=1; i<this.points.length; i++) {
+ bb.addPoint(this.points[i].x, this.points[i].y);
+ if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);
+ }
+ return bb;
+ }
+
+ this.getMarkers = function() {
+ var markers = [];
+ for (var i=0; i<this.points.length - 1; i++) {
+ markers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);
+ }
+ markers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);
+ return markers;
+ }
+ }
+ svg.Element.polyline.prototype = new svg.Element.PathElementBase;
+
+ // polygon element
+ svg.Element.polygon = function(node) {
+ this.base = svg.Element.polyline;
+ this.base(node);
+
+ this.basePath = this.path;
+ this.path = function(ctx) {
+ var bb = this.basePath(ctx);
+ if (ctx != null) {
+ ctx.lineTo(this.points[0].x, this.points[0].y);
+ ctx.closePath();
+ }
+ return bb;
+ }
+ }
+ svg.Element.polygon.prototype = new svg.Element.polyline;
+
+ // path element
+ svg.Element.path = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ var d = this.attribute('d').value;
+ // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF
+ d = d.replace(/,/gm,' '); // get rid of all commas
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,'$1 $2'); // separate commands from points
+ d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points
+ d = d.replace(/([0-9])([+\-])/gm,'$1 $2'); // separate digits when no comma
+ d = d.replace(/(\.[0-9]*)(\.)/gm,'$1 $2'); // separate digits when no comma
+ d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax
+ d = svg.compressSpaces(d); // compress multiple spaces
+ d = svg.trim(d);
+ this.PathParser = new (function(d) {
+ this.tokens = d.split(' ');
+
+ this.reset = function() {
+ this.i = -1;
+ this.command = '';
+ this.previousCommand = '';
+ this.start = new svg.Point(0, 0);
+ this.control = new svg.Point(0, 0);
+ this.current = new svg.Point(0, 0);
+ this.points = [];
+ this.angles = [];
+ }
+
+ this.isEnd = function() {
+ return this.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<this.angles.length; i++) {
+ if (this.angles[i] == null) {
+ for (var j=i+1; j<this.angles.length; j++) {
+ if (this.angles[j] != null) {
+ this.angles[i] = this.angles[j];
+ break;
+ }
+ }
+ }
+ }
+ return this.angles;
+ }
+ })(d);
+
+ this.path = function(ctx) {
+ var pp = this.PathParser;
+ pp.reset();
+
+ var bb = new svg.BoundingBox();
+ if (ctx != null) ctx.beginPath();
+ while (!pp.isEnd()) {
+ pp.nextCommand();
+ switch (pp.command.toUpperCase()) {
+ case 'M':
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.moveTo(p.x, p.y);
+ pp.start = pp.current;
+ while (!pp.isCommandOrEnd()) {
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p, pp.start);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.lineTo(p.x, p.y);
+ }
+ break;
+ case 'L':
+ while (!pp.isCommandOrEnd()) {
+ var c = pp.current;
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p, c);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.lineTo(p.x, p.y);
+ }
+ break;
+ case 'H':
+ while (!pp.isCommandOrEnd()) {
+ var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);
+ pp.addMarker(newP, pp.current);
+ pp.current = newP;
+ bb.addPoint(pp.current.x, pp.current.y);
+ if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);
+ }
+ break;
+ case 'V':
+ while (!pp.isCommandOrEnd()) {
+ var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());
+ pp.addMarker(newP, pp.current);
+ pp.current = newP;
+ bb.addPoint(pp.current.x, pp.current.y);
+ if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);
+ }
+ break;
+ case 'C':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var p1 = pp.getPoint();
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, p1);
+ bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'S':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var p1 = pp.getReflectedControlPoint();
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, p1);
+ bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'Q':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, cntrl);
+ bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'T':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var cntrl = pp.getReflectedControlPoint();
+ pp.control = cntrl;
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, cntrl);
+ bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'A':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var rx = pp.getScalar();
+ var ry = pp.getScalar();
+ var xAxisRotation = pp.getScalar() * (Math.PI / 180.0);
+ var largeArcFlag = pp.getScalar();
+ var sweepFlag = pp.getScalar();
+ var cp = pp.getAsCurrentPoint();
+
+ // Conversion from endpoint to center parameterization
+ // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
+ // x1', y1'
+ var currp = new svg.Point(
+ Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,
+ -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0
+ );
+ // adjust radii
+ var l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);
+ if (l > 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<points.length; i++) {
+ markers.push([points[i], angles[i]]);
+ }
+ return markers;
+ }
+ }
+ svg.Element.path.prototype = new svg.Element.PathElementBase;
+
+ // pattern element
+ svg.Element.pattern = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.createPattern = function(ctx, element) {
+ // render me using a temporary svg element
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);
+ tempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value);
+ tempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value);
+ tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);
+ tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);
+ tempSvg.children = this.children;
+
+ var c = document.createElement('canvas');
+ c.width = this.attribute('width').Length.toPixels('x');
+ c.height = this.attribute('height').Length.toPixels('y');
+ tempSvg.render(c.getContext('2d'));
+ return ctx.createPattern(c, 'repeat');
+ }
+ }
+ svg.Element.pattern.prototype = new svg.Element.ElementBase;
+
+ // marker element
+ svg.Element.marker = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.baseRender = this.render;
+ this.render = function(ctx, point, angle) {
+ ctx.translate(point.x, point.y);
+ if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);
+ if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);
+ ctx.save();
+
+ // render me using a temporary svg element
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);
+ tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);
+ tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);
+ tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);
+ tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);
+ tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));
+ tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));
+ tempSvg.children = this.children;
+ tempSvg.render(ctx);
+
+ ctx.restore();
+ if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);
+ if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);
+ ctx.translate(-point.x, -point.y);
+ }
+ }
+ svg.Element.marker.prototype = new svg.Element.ElementBase;
+
+ // definitions element
+ svg.Element.defs = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.render = function(ctx) {
+ // NOOP
+ }
+ }
+ svg.Element.defs.prototype = new svg.Element.ElementBase;
+
+ // base for gradients
+ svg.Element.GradientBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');
+
+ this.stops = [];
+ for (var i=0; i<this.children.length; i++) {
+ var child = this.children[i];
+ this.stops.push(child);
+ }
+
+ this.getGradient = function() {
+ // OVERRIDE ME!
+ }
+
+ this.createGradient = function(ctx, element) {
+ var stopsContainer = this;
+ if (this.attribute('xlink:href').hasValue()) {
+ stopsContainer = this.attribute('xlink:href').Definition.getDefinition();
+ }
+
+ var g = this.getGradient(ctx, element);
+ for (var i=0; i<stopsContainer.stops.length; i++) {
+ g.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color);
+ }
+
+ if (this.attribute('gradientTransform').hasValue()) {
+ // render as transformed pattern on temporary canvas
+ var rootView = svg.ViewPort.viewPorts[0];
+
+ var rect = new svg.Element.rect();
+ rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);
+ rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);
+ rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);
+ rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);
+
+ var group = new svg.Element.g();
+ group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);
+ group.children = [ rect ];
+
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['x'] = new svg.Property('x', 0);
+ tempSvg.attributes['y'] = new svg.Property('y', 0);
+ tempSvg.attributes['width'] = new svg.Property('width', rootView.width);
+ tempSvg.attributes['height'] = new svg.Property('height', rootView.height);
+ tempSvg.children = [ group ];
+
+ var c = document.createElement('canvas');
+ c.width = rootView.width;
+ c.height = rootView.height;
+ var tempCtx = c.getContext('2d');
+ tempCtx.fillStyle = g;
+ tempSvg.render(tempCtx);
+ return tempCtx.createPattern(c, 'no-repeat');
+ }
+
+ return g;
+ }
+ }
+ svg.Element.GradientBase.prototype = new svg.Element.ElementBase;
+
+ // linear gradient element
+ svg.Element.linearGradient = function(node) {
+ this.base = svg.Element.GradientBase;
+ this.base(node);
+
+ this.getGradient = function(ctx, element) {
+ var bb = element.getBoundingBox();
+
+ var x1 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('x1').numValue()
+ : this.attribute('x1').Length.toPixels('x'));
+ var y1 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('y1').numValue()
+ : this.attribute('y1').Length.toPixels('y'));
+ var x2 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('x2').numValue()
+ : this.attribute('x2').Length.toPixels('x'));
+ var y2 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('y2').numValue()
+ : this.attribute('y2').Length.toPixels('y'));
+
+ return ctx.createLinearGradient(x1, y1, x2, y2);
+ }
+ }
+ svg.Element.linearGradient.prototype = new svg.Element.GradientBase;
+
+ // radial gradient element
+ svg.Element.radialGradient = function(node) {
+ this.base = svg.Element.GradientBase;
+ this.base(node);
+
+ this.getGradient = function(ctx, element) {
+ var bb = element.getBoundingBox();
+
+ var cx = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('cx').numValue()
+ : this.attribute('cx').Length.toPixels('x'));
+ var cy = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('cy').numValue()
+ : this.attribute('cy').Length.toPixels('y'));
+
+ var fx = cx;
+ var fy = cy;
+ if (this.attribute('fx').hasValue()) {
+ fx = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('fx').numValue()
+ : this.attribute('fx').Length.toPixels('x'));
+ }
+ if (this.attribute('fy').hasValue()) {
+ fy = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('fy').numValue()
+ : this.attribute('fy').Length.toPixels('y'));
+ }
+
+ var r = (this.gradientUnits == 'objectBoundingBox'
+ ? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()
+ : this.attribute('r').Length.toPixels());
+
+ return ctx.createRadialGradient(fx, fy, 0, cx, cy, r);
+ }
+ }
+ svg.Element.radialGradient.prototype = new svg.Element.GradientBase;
+
+ // gradient stop element
+ svg.Element.stop = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.offset = this.attribute('offset').numValue();
+
+ var stopColor = this.style('stop-color');
+ if (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value);
+ this.color = stopColor.value;
+ }
+ svg.Element.stop.prototype = new svg.Element.ElementBase;
+
+ // animation base element
+ svg.Element.AnimateBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ svg.Animations.push(this);
+
+ this.duration = 0.0;
+ this.begin = this.attribute('begin').Time.toMilliseconds();
+ this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds();
+
+ this.getProperty = function() {
+ var attributeType = this.attribute('attributeType').value;
+ var attributeName = this.attribute('attributeName').value;
+
+ if (attributeType == 'CSS') {
+ return this.parent.style(attributeName, true);
+ }
+ return this.parent.attribute(attributeName, true);
+ };
+
+ this.initialValue = null;
+ this.removed = false;
+
+ this.calcValue = function() {
+ // OVERRIDE ME!
+ return '';
+ }
+
+ this.update = function(delta) {
+ // set initial value
+ if (this.initialValue == null) {
+ this.initialValue = this.getProperty().value;
+ }
+
+ // if we're past the end time
+ if (this.duration > 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; i<this.children.length; i++) {
+ var child = this.children[i];
+ if (child.type == 'font-face') {
+ this.fontFace = child;
+ if (child.style('font-family').hasValue()) {
+ svg.Definitions[child.style('font-family').value] = this;
+ }
+ }
+ else if (child.type == 'missing-glyph') this.missingGlyph = child;
+ else if (child.type == 'glyph') {
+ if (child.arabicForm != '') {
+ this.isRTL = true;
+ this.isArabic = true;
+ if (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = [];
+ this.glyphs[child.unicode][child.arabicForm] = child;
+ }
+ else {
+ this.glyphs[child.unicode] = child;
+ }
+ }
+ }
+ }
+ svg.Element.font.prototype = new svg.Element.ElementBase;
+
+ // font-face element
+ svg.Element.fontface = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.ascent = this.attribute('ascent').value;
+ this.descent = this.attribute('descent').value;
+ this.unitsPerEm = this.attribute('units-per-em').numValue();
+ }
+ svg.Element.fontface.prototype = new svg.Element.ElementBase;
+
+ // missing-glyph element
+ svg.Element.missingglyph = function(node) {
+ this.base = svg.Element.path;
+ this.base(node);
+
+ this.horizAdvX = 0;
+ }
+ svg.Element.missingglyph.prototype = new svg.Element.path;
+
+ // glyph element
+ svg.Element.glyph = function(node) {
+ this.base = svg.Element.path;
+ this.base(node);
+
+ this.horizAdvX = this.attribute('horiz-adv-x').numValue();
+ this.unicode = this.attribute('unicode').value;
+ this.arabicForm = this.attribute('arabic-form').value;
+ }
+ svg.Element.glyph.prototype = new svg.Element.path;
+
+ // text element
+ svg.Element.text = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ if (node != null) {
+ // add children
+ this.children = [];
+ for (var i=0; i<node.childNodes.length; i++) {
+ var childNode = node.childNodes[i];
+ if (childNode.nodeType == 1) { // capture tspan and tref nodes
+ this.addChild(childNode, true);
+ }
+ else if (childNode.nodeType == 3) { // capture text
+ this.addChild(new svg.Element.tspan(childNode), false);
+ }
+ }
+ }
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+ if (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value;
+ if (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value;
+ }
+
+ this.renderChildren = function(ctx) {
+ var textAnchor = this.style('text-anchor').valueOrDefault('start');
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ for (var i=0; i<this.children.length; i++) {
+ var child = this.children[i];
+
+ if (child.attribute('x').hasValue()) {
+ child.x = child.attribute('x').Length.toPixels('x');
+ }
+ else {
+ if (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x');
+ child.x = x;
+ }
+
+ var childLength = child.measureText(ctx);
+ if (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group?
+ // loop through rest of children
+ var groupLength = childLength;
+ for (var j=i+1; j<this.children.length; j++) {
+ var childInGroup = this.children[j];
+ if (childInGroup.attribute('x').hasValue()) break; // new group
+ groupLength += childInGroup.measureText(ctx);
+ }
+ child.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0);
+ }
+ x = child.x + childLength;
+
+ if (child.attribute('y').hasValue()) {
+ child.y = child.attribute('y').Length.toPixels('y');
+ }
+ else {
+ if (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y');
+ child.y = y;
+ }
+ y = child.y;
+
+ child.render(ctx);
+ }
+ }
+ }
+ svg.Element.text.prototype = new svg.Element.RenderedElementBase;
+
+ // text base
+ svg.Element.TextElementBase = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.getGlyph = function(font, text, i) {
+ var c = text[i];
+ var glyph = null;
+ if (font.isArabic) {
+ var arabicForm = 'isolated';
+ if ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal';
+ if (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';
+ if (i>0 && 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<text.length; i++) {
+ var glyph = this.getGlyph(customFont, text, i);
+ var scale = fontSize / customFont.fontFace.unitsPerEm;
+ ctx.translate(this.x, this.y);
+ ctx.scale(scale, -scale);
+ var lw = ctx.lineWidth;
+ ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;
+ if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);
+ glyph.render(ctx);
+ if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);
+ ctx.lineWidth = lw;
+ ctx.scale(1/scale, -1/scale);
+ ctx.translate(-this.x, -this.y);
+
+ this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;
+ if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {
+ this.x += dx[i];
+ }
+ }
+ return;
+ }
+
+ if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);
+ if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);
+ }
+
+ this.getText = function() {
+ // OVERRIDE ME
+ }
+
+ this.measureText = 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 measure = 0;
+ 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<text.length; i++) {
+ var glyph = this.getGlyph(customFont, text, i);
+ measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;
+ if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {
+ measure += dx[i];
+ }
+ }
+ return measure;
+ }
+
+ var textToMeasure = svg.compressSpaces(this.getText());
+ if (!ctx.measureText) return textToMeasure.length * 10;
+
+ ctx.save();
+ this.setContext(ctx);
+ var width = ctx.measureText(textToMeasure).width;
+ ctx.restore();
+ return width;
+ }
+ }
+ svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;
+
+ // tspan
+ svg.Element.tspan = function(node) {
+ this.base = svg.Element.TextElementBase;
+ this.base(node);
+
+ this.text = node.nodeType == 3 ? node.nodeValue : // text
+ node.childNodes.length > 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<node.childNodes.length; i++) {
+ if (node.childNodes[i].nodeType != 3) this.hasText = false;
+ }
+
+ // this might contain text
+ this.text = this.hasText ? node.childNodes[0].nodeValue : '';
+ this.getText = function() {
+ return this.text;
+ }
+
+ this.baseRenderChildren = this.renderChildren;
+ this.renderChildren = function(ctx) {
+ if (this.hasText) {
+ // render as text element
+ this.baseRenderChildren(ctx);
+ var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);
+ svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y));
+ }
+ else {
+ // render as temporary group
+ var g = new svg.Element.g();
+ g.children = this.children;
+ g.parent = this;
+ g.render(ctx);
+ }
+ }
+
+ this.onclick = function() {
+ window.open(this.attribute('xlink:href').value);
+ }
+
+ this.onmousemove = function() {
+ svg.ctx.canvas.style.cursor = 'pointer';
+ }
+ }
+ svg.Element.a.prototype = new svg.Element.TextElementBase;
+
+ // image element
+ svg.Element.image = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ svg.Images.push(this);
+ this.img = document.createElement('img');
+ this.loaded = false;
+ var that = this;
+ this.img.onload = function() { that.loaded = true; }
+ this.img.src = this.attribute('xlink:href').value;
+
+ this.renderChildren = function(ctx) {
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+ if (width == 0 || height == 0) return;
+
+ ctx.save();
+ ctx.translate(x, y);
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ width,
+ this.img.width,
+ height,
+ this.img.height,
+ 0,
+ 0);
+ ctx.drawImage(this.img, 0, 0);
+ ctx.restore();
+ }
+ }
+ svg.Element.image.prototype = new svg.Element.RenderedElementBase;
+
+ // group element
+ svg.Element.g = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.getBoundingBox = function() {
+ var bb = new svg.BoundingBox();
+ for (var i=0; i<this.children.length; i++) {
+ bb.addBoundingBox(this.children[i].getBoundingBox());
+ }
+ return bb;
+ };
+ }
+ svg.Element.g.prototype = new svg.Element.RenderedElementBase;
+
+ // symbol element
+ svg.Element.symbol = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+
+ // viewbox
+ if (this.attribute('viewBox').hasValue()) {
+ var viewBox = svg.ToNumberArray(this.attribute('viewBox').value);
+ var minX = viewBox[0];
+ var minY = viewBox[1];
+ width = viewBox[2];
+ height = viewBox[3];
+
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ this.attribute('width').Length.toPixels('x'),
+ width,
+ this.attribute('height').Length.toPixels('y'),
+ height,
+ minX,
+ minY);
+
+ svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);
+ }
+ }
+ }
+ svg.Element.symbol.prototype = new svg.Element.RenderedElementBase;
+
+ // style element
+ svg.Element.style = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ // text, or spaces then CDATA
+ var css = node.childNodes[0].nodeValue + (node.childNodes.length > 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<cssDefs.length; i++) {
+ if (svg.trim(cssDefs[i]) != '') {
+ var cssDef = cssDefs[i].split('{');
+ var cssClasses = cssDef[0].split(',');
+ var cssProps = cssDef[1].split(';');
+ for (var j=0; j<cssClasses.length; j++) {
+ var cssClass = svg.trim(cssClasses[j]);
+ if (cssClass != '') {
+ var props = {};
+ for (var k=0; k<cssProps.length; k++) {
+ var prop = cssProps[k].indexOf(':');
+ var name = cssProps[k].substr(0, prop);
+ var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);
+ if (name != null && value != null) {
+ props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));
+ }
+ }
+ svg.Styles[cssClass] = props;
+ if (cssClass == '@font-face') {
+ var fontFamily = props['font-family'].value.replace(/"/g,'');
+ var srcs = props['src'].value.split(',');
+ for (var s=0; s<srcs.length; s++) {
+ if (srcs[s].indexOf('format("svg")') > 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<fonts.length; f++) {
+ var font = svg.CreateElement(fonts[f]);
+ svg.Definitions[fontFamily] = font;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ svg.Element.style.prototype = new svg.Element.ElementBase;
+
+ // use element
+ svg.Element.use = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+ if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0);
+ if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y'));
+ }
+
+ this.getDefinition = function() {
+ var element = this.attribute('xlink:href').Definition.getDefinition();
+ if (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value;
+ if (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value;
+ return element;
+ }
+
+ this.path = function(ctx) {
+ var element = this.getDefinition();
+ if (element != null) element.path(ctx);
+ }
+
+ this.renderChildren = function(ctx) {
+ var element = this.getDefinition();
+ if (element != null) element.render(ctx);
+ }
+ }
+ svg.Element.use.prototype = new svg.Element.RenderedElementBase;
+
+ // mask element
+ svg.Element.mask = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx, element) {
+ // render as temp svg
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+
+ // temporarily remove mask to avoid recursion
+ var mask = element.attribute('mask').value;
+ element.attribute('mask').value = '';
+
+ var cMask = document.createElement('canvas');
+ cMask.width = x + width;
+ cMask.height = y + height;
+ var maskCtx = cMask.getContext('2d');
+ this.renderChildren(maskCtx);
+
+ var c = document.createElement('canvas');
+ c.width = x + width;
+ c.height = y + height;
+ var tempCtx = c.getContext('2d');
+ element.render(tempCtx);
+ tempCtx.globalCompositeOperation = 'destination-in';
+ tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');
+ tempCtx.fillRect(0, 0, x + width, y + height);
+
+ ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');
+ ctx.fillRect(0, 0, x + width, y + height);
+
+ // reassign mask
+ element.attribute('mask').value = mask;
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.mask.prototype = new svg.Element.ElementBase;
+
+ // clip element
+ svg.Element.clipPath = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx) {
+ for (var i=0; i<this.children.length; i++) {
+ if (this.children[i].path) {
+ this.children[i].path(ctx);
+ ctx.clip();
+ }
+ }
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.clipPath.prototype = new svg.Element.ElementBase;
+
+ // filters
+ svg.Element.filter = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx, element) {
+ // render as temp svg
+ var bb = element.getBoundingBox();
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ if (x == 0 || y == 0) {
+ x = bb.x1;
+ y = bb.y1;
+ }
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+ if (width == 0 || height == 0) {
+ width = bb.width();
+ height = bb.height();
+ }
+
+ // temporarily remove filter to avoid recursion
+ var filter = element.style('filter').value;
+ element.style('filter').value = '';
+
+ // max filter distance
+ var extraPercent = .20;
+ var px = extraPercent * width;
+ var py = extraPercent * height;
+
+ var c = document.createElement('canvas');
+ c.width = width + 2*px;
+ c.height = height + 2*py;
+ var tempCtx = c.getContext('2d');
+ tempCtx.translate(-x + px, -y + py);
+ element.render(tempCtx);
+
+ // apply filters
+ for (var i=0; i<this.children.length; i++) {
+ this.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);
+ }
+
+ // render on me
+ ctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);
+
+ // reassign filter
+ element.style('filter', true).value = filter;
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.filter.prototype = new svg.Element.ElementBase;
+
+ svg.Element.feGaussianBlur = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ function make_fgauss(sigma) {
+ sigma = Math.max(sigma, 0.01);
+ var len = Math.ceil(sigma * 4.0) + 1;
+ mask = [];
+ for (var i = 0; i < len; i++) {
+ mask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma));
+ }
+ return mask;
+ }
+
+ function normalize(mask) {
+ var sum = 0;
+ for (var i = 1; i < mask.length; i++) {
+ sum += Math.abs(mask[i]);
+ }
+ sum = 2 * sum + Math.abs(mask[0]);
+ for (var i = 0; i < mask.length; i++) {
+ mask[i] /= sum;
+ }
+ return mask;
+ }
+
+ function convolve_even(src, dst, mask, width, height) {
+ for (var y = 0; y < height; y++) {
+ for (var x = 0; x < width; x++) {
+ var a = imGet(src, x, y, width, height, 3)/255;
+ for (var rgba = 0; rgba < 4; rgba++) {
+ var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a);
+ for (var i = 1; i < mask.length; i++) {
+ var a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255;
+ var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255;
+ sum += mask[i] *
+ ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) +
+ (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2));
+ }
+ imSet(dst, y, x, height, width, rgba, sum);
+ }
+ }
+ }
+ }
+
+ function imGet(img, x, y, width, height, rgba) {
+ return img[y*width*4 + x*4 + rgba];
+ }
+
+ function imSet(img, x, y, width, height, rgba, val) {
+ img[y*width*4 + x*4 + rgba] = val;
+ }
+
+ function blur(ctx, width, height, sigma)
+ {
+ var srcData = ctx.getImageData(0, 0, width, height);
+ var mask = make_fgauss(sigma);
+ mask = normalize(mask);
+ tmp = [];
+ convolve_even(srcData.data, tmp, mask, width, height);
+ convolve_even(tmp, srcData.data, mask, height, width);
+ ctx.clearRect(0, 0, width, height);
+ ctx.putImageData(srcData, 0, 0);
+ }
+
+ this.apply = function(ctx, x, y, width, height) {
+ // assuming x==0 && y==0 for now
+ blur(ctx, width, height, this.attribute('stdDeviation').numValue());
+ }
+ }
+ svg.Element.filter.prototype = new svg.Element.feGaussianBlur;
+
+ // title element, do nothing
+ svg.Element.title = function(node) {
+ }
+ svg.Element.title.prototype = new svg.Element.ElementBase;
+
+ // desc element, do nothing
+ svg.Element.desc = function(node) {
+ }
+ svg.Element.desc.prototype = new svg.Element.ElementBase;
+
+ svg.Element.MISSING = function(node) {
+ console.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.');
+ }
+ svg.Element.MISSING.prototype = new svg.Element.ElementBase;
+
+ // element factory
+ svg.CreateElement = function(node) {
+ var className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace
+ className = className.replace(/\-/g,''); // remove dashes
+ var e = null;
+ if (typeof(svg.Element[className]) != 'undefined') {
+ e = new svg.Element[className](node);
+ }
+ else {
+ e = new svg.Element.MISSING(node);
+ }
+
+ e.type = node.nodeName;
+ return e;
+ }
+
+ // load from url
+ svg.load = function(ctx, url) {
+ svg.loadXml(ctx, svg.ajax(url));
+ }
+
+ // load from xml
+ svg.loadXml = function(ctx, xml) {
+ svg.loadXmlDoc(ctx, svg.parseXml(xml));
+ }
+
+ svg.loadXmlDoc = function(ctx, dom) {
+ svg.init(ctx);
+
+ var mapXY = function(p) {
+ var e = ctx.canvas;
+ while (e) {
+ p.x -= e.offsetLeft;
+ p.y -= e.offsetTop;
+ e = e.offsetParent;
+ }
+ if (window.scrollX) p.x += window.scrollX;
+ if (window.scrollY) p.y += window.scrollY;
+ return p;
+ }
+
+ // bind mouse
+ if (svg.opts['ignoreMouse'] != true) {
+ ctx.canvas.onclick = function(e) {
+ var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));
+ svg.Mouse.onclick(p.x, p.y);
+ };
+ ctx.canvas.onmousemove = function(e) {
+ var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));
+ svg.Mouse.onmousemove(p.x, p.y);
+ };
+ }
+
+ var e = svg.CreateElement(dom.documentElement);
+ e.root = true;
+
+ // render loop
+ var isFirstRender = true;
+ var draw = function() {
+ svg.ViewPort.Clear();
+ if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);
+
+ if (svg.opts['ignoreDimensions'] != true) {
+ // set canvas size
+ if (e.style('width').hasValue()) {
+ ctx.canvas.width = e.style('width').Length.toPixels('x');
+ ctx.canvas.style.width = ctx.canvas.width + 'px';
+ }
+ if (e.style('height').hasValue()) {
+ ctx.canvas.height = e.style('height').Length.toPixels('y');
+ ctx.canvas.style.height = ctx.canvas.height + 'px';
+ }
+ }
+ var cWidth = ctx.canvas.clientWidth || ctx.canvas.width;
+ var cHeight = ctx.canvas.clientHeight || ctx.canvas.height;
+ svg.ViewPort.SetCurrent(cWidth, cHeight);
+
+ if (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];
+ if (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];
+ if (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) {
+ var xRatio = 1, yRatio = 1;
+ if (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth'];
+ if (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight'];
+
+ e.attribute('width', true).value = svg.opts['scaleWidth'];
+ e.attribute('height', true).value = svg.opts['scaleHeight'];
+ e.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio);
+ e.attribute('preserveAspectRatio', true).value = 'none';
+ }
+
+ // clear and render
+ if (svg.opts['ignoreClear'] != true) {
+ ctx.clearRect(0, 0, cWidth, cHeight);
+ }
+ e.render(ctx);
+ if (isFirstRender) {
+ isFirstRender = false;
+ if (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback']();
+ }
+ }
+
+ var waitingForImages = true;
+ if (svg.ImagesLoaded()) {
+ waitingForImages = false;
+ draw();
+ }
+ svg.intervalID = setInterval(function() {
+ var needUpdate = false;
+
+ if (waitingForImages && svg.ImagesLoaded()) {
+ waitingForImages = false;
+ needUpdate = true;
+ }
+
+ // need update from mouse events?
+ if (svg.opts['ignoreMouse'] != true) {
+ needUpdate = needUpdate | svg.Mouse.hasEvents();
+ }
+
+ // need update from animations?
+ if (svg.opts['ignoreAnimation'] != true) {
+ for (var i=0; i<svg.Animations.length; i++) {
+ needUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);
+ }
+ }
+
+ // need update from redraw?
+ if (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') {
+ if (svg.opts['forceRedraw']() == true) needUpdate = true;
+ }
+
+ // render if needed
+ if (needUpdate) {
+ draw();
+ svg.Mouse.runEvents(); // run and clear our events
+ }
+ }, 1000 / svg.FRAMERATE);
+ }
+
+ svg.stop = function() {
+ if (svg.intervalID) {
+ clearInterval(svg.intervalID);
+ }
+ }
+
+ svg.Mouse = new (function() {
+ this.events = [];
+ this.hasEvents = function() { return this.events.length != 0; }
+
+ this.onclick = function(x, y) {
+ this.events.push({ type: 'onclick', x: x, y: y,
+ run: function(e) { if (e.onclick) e.onclick(); }
+ });
+ }
+
+ this.onmousemove = function(x, y) {
+ this.events.push({ type: 'onmousemove', x: x, y: y,
+ run: function(e) { if (e.onmousemove) e.onmousemove(); }
+ });
+ }
+
+ this.eventElements = [];
+
+ this.checkPath = function(element, ctx) {
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;
+ }
+ }
+
+ this.checkBoundingBox = function(element, bb) {
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;
+ }
+ }
+
+ this.runEvents = function() {
+ svg.ctx.canvas.style.cursor = '';
+
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ var element = this.eventElements[i];
+ while (element) {
+ e.run(element);
+ element = element.parent;
+ }
+ }
+
+ // done running, clear
+ this.events = [];
+ this.eventElements = [];
+ }
+ });
+
+ return svg;
+ }
+})();
+
+if (CanvasRenderingContext2D) {
+ CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) {
+ canvg(this.canvas, s, {
+ ignoreMouse: true,
+ ignoreAnimation: true,
+ ignoreDimensions: true,
+ ignoreClear: true,
+ offsetX: dx,
+ offsetY: dy,
+ scaleWidth: dw,
+ scaleHeight: dh
+ });
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/canvg/.svn/text-base/rgbcolor.js.svn-base b/files_svgedit/svg-edit/canvg/.svn/text-base/rgbcolor.js.svn-base
new file mode 100644
index 000000000..108bbaea7
--- /dev/null
+++ b/files_svgedit/svg-edit/canvg/.svn/text-base/rgbcolor.js.svn-base
@@ -0,0 +1,287 @@
+/**
+ * A class to parse color values
+ * @author Stoyan Stefanov <sstoo@gmail.com>
+ * @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/files_svgedit/svg-edit/canvg/canvg.js b/files_svgedit/svg-edit/canvg/canvg.js
new file mode 100644
index 000000000..7b24a383f
--- /dev/null
+++ b/files_svgedit/svg-edit/canvg/canvg.js
@@ -0,0 +1,2620 @@
+/*
+ * 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<this.length; i++){
+ if(this[i]==obj){
+ return i;
+ }
+ }
+ return -1;
+ }
+}
+
+(function(){
+ // canvg(target, s)
+ // empty parameters: replace all 'svg' elements on page with 'canvas' elements
+ // target: canvas element or the id of a canvas element
+ // s: svg string, url to svg file, or xml document
+ // opts: optional hash of options
+ // ignoreMouse: true => 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<svgTags.length; i++) {
+ var svgTag = svgTags[i];
+ var c = document.createElement('canvas');
+ c.width = svgTag.clientWidth;
+ c.height = svgTag.clientHeight;
+ svgTag.parentNode.insertBefore(c, svgTag);
+ svgTag.parentNode.removeChild(svgTag);
+ var div = document.createElement('div');
+ div.appendChild(svgTag);
+ canvg(c, div.innerHTML);
+ }
+ return;
+ }
+ opts = opts || {};
+
+ if (typeof target == 'string') {
+ target = document.getElementById(target);
+ }
+
+ // reuse class per canvas
+ var svg;
+ if (target.svg == null) {
+ svg = build();
+ target.svg = svg;
+ }
+ else {
+ svg = target.svg;
+ svg.stop();
+ }
+ svg.opts = opts;
+
+ var ctx = target.getContext('2d');
+ if (typeof(s.documentElement) != 'undefined') {
+ // load from xml doc
+ svg.loadXmlDoc(ctx, s);
+ }
+ else if (s.substr(0,1) == '<') {
+ // load from xml string
+ svg.loadXml(ctx, s);
+ }
+ else {
+ // load from url
+ svg.load(ctx, s);
+ }
+ }
+
+ function build() {
+ var svg = { };
+
+ svg.FRAMERATE = 30;
+ svg.MAX_VIRTUAL_PIXELS = 30000;
+
+ // globals
+ svg.init = function(ctx) {
+ svg.Definitions = {};
+ svg.Styles = {};
+ svg.Animations = [];
+ svg.Images = [];
+ svg.ctx = ctx;
+ svg.ViewPort = new (function () {
+ this.viewPorts = [];
+ this.Clear = function() { this.viewPorts = []; }
+ this.SetCurrent = function(width, height) { this.viewPorts.push({ width: width, height: height }); }
+ this.RemoveCurrent = function() { this.viewPorts.pop(); }
+ this.Current = function() { return this.viewPorts[this.viewPorts.length - 1]; }
+ this.width = function() { return this.Current().width; }
+ this.height = function() { return this.Current().height; }
+ this.ComputeSize = function(d) {
+ if (d != null && typeof(d) == 'number') return d;
+ if (d == 'x') return this.width();
+ if (d == 'y') return this.height();
+ return Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2);
+ }
+ });
+ }
+ svg.init();
+
+ // images loaded
+ svg.ImagesLoaded = function() {
+ for (var i=0; i<svg.Images.length; i++) {
+ if (!svg.Images[i].loaded) return false;
+ }
+ return true;
+ }
+
+ // trim
+ svg.trim = function(s) { return s.replace(/^\s+|\s+$/g, ''); }
+
+ // compress spaces
+ svg.compressSpaces = function(s) { return s.replace(/[\s\r\t\n]+/gm,' '); }
+
+ // ajax
+ svg.ajax = function(url) {
+ var AJAX;
+ if(window.XMLHttpRequest){AJAX=new XMLHttpRequest();}
+ else{AJAX=new ActiveXObject('Microsoft.XMLHTTP');}
+ if(AJAX){
+ AJAX.open('GET',url,false);
+ AJAX.send(null);
+ return AJAX.responseText;
+ }
+ return null;
+ }
+
+ // parse xml
+ svg.parseXml = function(xml) {
+ if (window.DOMParser)
+ {
+ var parser = new DOMParser();
+ return parser.parseFromString(xml, 'text/xml');
+ }
+ else
+ {
+ xml = xml.replace(/<!DOCTYPE svg[^>]*>/, '');
+ 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<d.length; i++) {
+ if (!set.fontStyle && that.Styles.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontStyle = d[i]; set.fontStyle = true; }
+ else if (!set.fontVariant && that.Variants.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontVariant = d[i]; set.fontStyle = set.fontVariant = true; }
+ else if (!set.fontWeight && that.Weights.indexOf(d[i]) != -1) { if (d[i] != 'inherit') f.fontWeight = d[i]; set.fontStyle = set.fontVariant = set.fontWeight = true; }
+ else if (!set.fontSize) { if (d[i] != 'inherit') f.fontSize = d[i].split('/')[0]; set.fontStyle = set.fontVariant = set.fontWeight = set.fontSize = true; }
+ else { if (d[i] != 'inherit') ff += d[i]; }
+ } if (ff != '') f.fontFamily = ff;
+ return f;
+ }
+ });
+
+ // points and paths
+ svg.ToNumberArray = function(s) {
+ var a = svg.trim(svg.compressSpaces((s || '').replace(/,/g, ' '))).split(' ');
+ for (var i=0; i<a.length; i++) {
+ a[i] = parseFloat(a[i]);
+ }
+ return a;
+ }
+ svg.Point = function(x, y) {
+ this.x = x;
+ this.y = y;
+
+ this.angleTo = function(p) {
+ return Math.atan2(p.y - this.y, p.x - this.x);
+ }
+
+ this.applyTransform = function(v) {
+ var xp = this.x * v[0] + this.y * v[2] + v[4];
+ var yp = this.x * v[1] + this.y * v[3] + v[5];
+ this.x = xp;
+ this.y = yp;
+ }
+ }
+ svg.CreatePoint = function(s) {
+ var a = svg.ToNumberArray(s);
+ return new svg.Point(a[0], a[1]);
+ }
+ svg.CreatePath = function(s) {
+ var a = svg.ToNumberArray(s);
+ var path = [];
+ for (var i=0; i<a.length; i+=2) {
+ path.push(new svg.Point(a[i], a[i+1]));
+ }
+ return path;
+ }
+
+ // bounding box
+ svg.BoundingBox = function(x1, y1, x2, y2) { // pass in initial points if you want
+ this.x1 = Number.NaN;
+ this.y1 = Number.NaN;
+ this.x2 = Number.NaN;
+ this.y2 = Number.NaN;
+
+ this.x = function() { return this.x1; }
+ this.y = function() { return this.y1; }
+ this.width = function() { return this.x2 - this.x1; }
+ this.height = function() { return this.y2 - this.y1; }
+
+ this.addPoint = function(x, y) {
+ if (x != null) {
+ if (isNaN(this.x1) || isNaN(this.x2)) {
+ this.x1 = x;
+ this.x2 = x;
+ }
+ if (x < this.x1) this.x1 = x;
+ if (x > 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.transforms.length; i++) {
+ this.transforms[i].apply(ctx);
+ }
+ }
+
+ this.applyToPoint = function(p) {
+ for (var i=0; i<this.transforms.length; i++) {
+ this.transforms[i].applyToPoint(p);
+ }
+ }
+
+ var data = svg.trim(svg.compressSpaces(v)).split(/\s(?=[a-z])/);
+ for (var i=0; i<data.length; i++) {
+ var type = data[i].split('(')[0];
+ var s = data[i].split('(')[1].replace(')','');
+ var transform = new this.Type[type](s);
+ this.transforms.push(transform);
+ }
+ }
+
+ // aspect ratio
+ svg.AspectRatio = function(ctx, aspectRatio, width, desiredWidth, height, desiredHeight, minX, minY, refX, refY) {
+ // aspect ratio - http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute
+ aspectRatio = svg.compressSpaces(aspectRatio);
+ aspectRatio = aspectRatio.replace(/^defer\s/,''); // ignore defer
+ var align = aspectRatio.split(' ')[0] || 'xMidYMid';
+ var meetOrSlice = aspectRatio.split(' ')[1] || 'meet';
+
+ // calculate scale
+ var scaleX = width / desiredWidth;
+ var scaleY = height / desiredHeight;
+ var scaleMin = Math.min(scaleX, scaleY);
+ var scaleMax = Math.max(scaleX, scaleY);
+ if (meetOrSlice == 'meet') { desiredWidth *= scaleMin; desiredHeight *= scaleMin; }
+ if (meetOrSlice == 'slice') { desiredWidth *= scaleMax; desiredHeight *= scaleMax; }
+
+ refX = new svg.Property('refX', refX);
+ refY = new svg.Property('refY', refY);
+ if (refX.hasValue() && refY.hasValue()) {
+ ctx.translate(-scaleMin * refX.Length.toPixels('x'), -scaleMin * refY.Length.toPixels('y'));
+ }
+ else {
+ // align
+ if (align.match(/^xMid/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width / 2.0 - desiredWidth / 2.0, 0);
+ if (align.match(/YMid$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height / 2.0 - desiredHeight / 2.0);
+ if (align.match(/^xMax/) && ((meetOrSlice == 'meet' && scaleMin == scaleY) || (meetOrSlice == 'slice' && scaleMax == scaleY))) ctx.translate(width - desiredWidth, 0);
+ if (align.match(/YMax$/) && ((meetOrSlice == 'meet' && scaleMin == scaleX) || (meetOrSlice == 'slice' && scaleMax == scaleX))) ctx.translate(0, height - desiredHeight);
+ }
+
+ // scale
+ if (align == 'none') ctx.scale(scaleX, scaleY);
+ else if (meetOrSlice == 'meet') ctx.scale(scaleMin, scaleMin);
+ else if (meetOrSlice == 'slice') ctx.scale(scaleMax, scaleMax);
+
+ // translate
+ ctx.translate(minX == null ? 0 : -minX, minY == null ? 0 : -minY);
+ }
+
+ // elements
+ svg.Element = {}
+
+ svg.Element.ElementBase = function(node) {
+ this.attributes = {};
+ this.styles = {};
+ this.children = [];
+
+ // get or create attribute
+ this.attribute = function(name, createIfNotExists) {
+ var a = this.attributes[name];
+ if (a != null) return a;
+
+ a = new svg.Property(name, '');
+ if (createIfNotExists == true) this.attributes[name] = a;
+ return a;
+ }
+
+ // get or create style, crawls up node tree
+ this.style = function(name, createIfNotExists) {
+ var s = this.styles[name];
+ if (s != null) return s;
+
+ var a = this.attribute(name);
+ if (a != null && a.hasValue()) {
+ return a;
+ }
+
+ var p = this.parent;
+ if (p != null) {
+ var ps = p.style(name);
+ if (ps != null && ps.hasValue()) {
+ return ps;
+ }
+ }
+
+ s = new svg.Property(name, '');
+ if (createIfNotExists == true) this.styles[name] = s;
+ return s;
+ }
+
+ // base render
+ this.render = function(ctx) {
+ // don't render display=none
+ if (this.style('display').value == 'none') return;
+
+ // don't render visibility=hidden
+ if (this.attribute('visibility').value == 'hidden') return;
+
+ ctx.save();
+ this.setContext(ctx);
+ // mask
+ if (this.attribute('mask').hasValue()) {
+ var mask = this.attribute('mask').Definition.getDefinition();
+ if (mask != null) mask.apply(ctx, this);
+ }
+ else if (this.style('filter').hasValue()) {
+ var filter = this.style('filter').Definition.getDefinition();
+ if (filter != null) filter.apply(ctx, this);
+ }
+ else this.renderChildren(ctx);
+ this.clearContext(ctx);
+ ctx.restore();
+ }
+
+ // base set context
+ this.setContext = function(ctx) {
+ // OVERRIDE ME!
+ }
+
+ // base clear context
+ this.clearContext = function(ctx) {
+ // OVERRIDE ME!
+ }
+
+ // base render children
+ this.renderChildren = function(ctx) {
+ for (var i=0; i<this.children.length; i++) {
+ this.children[i].render(ctx);
+ }
+ }
+
+ this.addChild = function(childNode, create) {
+ var child = childNode;
+ if (create) child = svg.CreateElement(childNode);
+ child.parent = this;
+ this.children.push(child);
+ }
+
+ if (node != null && node.nodeType == 1) { //ELEMENT_NODE
+ // add children
+ for (var i=0; i<node.childNodes.length; i++) {
+ var childNode = node.childNodes[i];
+ if (childNode.nodeType == 1) this.addChild(childNode, true); //ELEMENT_NODE
+ }
+
+ // add attributes
+ for (var i=0; i<node.attributes.length; i++) {
+ var attribute = node.attributes[i];
+ this.attributes[attribute.nodeName] = new svg.Property(attribute.nodeName, attribute.nodeValue);
+ }
+
+ // add tag styles
+ var styles = svg.Styles[node.nodeName];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+
+ // add class styles
+ if (this.attribute('class').hasValue()) {
+ var classes = svg.compressSpaces(this.attribute('class').value).split(' ');
+ for (var j=0; j<classes.length; j++) {
+ styles = svg.Styles['.'+classes[j]];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+ styles = svg.Styles[node.nodeName+'.'+classes[j]];
+ if (styles != null) {
+ for (var name in styles) {
+ this.styles[name] = styles[name];
+ }
+ }
+ }
+ }
+
+ // add inline styles
+ if (this.attribute('style').hasValue()) {
+ var styles = this.attribute('style').value.split(';');
+ for (var i=0; i<styles.length; i++) {
+ if (svg.trim(styles[i]) != '') {
+ var style = styles[i].split(':');
+ var name = svg.trim(style[0]);
+ var value = svg.trim(style[1]);
+ this.styles[name] = new svg.Property(name, value);
+ }
+ }
+ }
+
+ // add id
+ if (this.attribute('id').hasValue()) {
+ if (svg.Definitions[this.attribute('id').value] == null) {
+ svg.Definitions[this.attribute('id').value] = this;
+ }
+ }
+ }
+ }
+
+ svg.Element.RenderedElementBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.setContext = function(ctx) {
+ // fill
+ if (this.style('fill').Definition.isUrl()) {
+ var fs = this.style('fill').Definition.getFillStyle(this);
+ if (fs != null) ctx.fillStyle = fs;
+ }
+ else if (this.style('fill').hasValue()) {
+ var fillStyle = this.style('fill');
+ if (this.style('fill-opacity').hasValue()) fillStyle = fillStyle.Color.addOpacity(this.style('fill-opacity').value);
+ ctx.fillStyle = (fillStyle.value == 'none' ? 'rgba(0,0,0,0)' : fillStyle.value);
+ }
+
+ // stroke
+ if (this.style('stroke').Definition.isUrl()) {
+ var fs = this.style('stroke').Definition.getFillStyle(this);
+ if (fs != null) ctx.strokeStyle = fs;
+ }
+ else if (this.style('stroke').hasValue()) {
+ var strokeStyle = this.style('stroke');
+ if (this.style('stroke-opacity').hasValue()) strokeStyle = strokeStyle.Color.addOpacity(this.style('stroke-opacity').value);
+ ctx.strokeStyle = (strokeStyle.value == 'none' ? 'rgba(0,0,0,0)' : strokeStyle.value);
+ }
+ if (this.style('stroke-width').hasValue()) ctx.lineWidth = this.style('stroke-width').Length.toPixels();
+ if (this.style('stroke-linecap').hasValue()) ctx.lineCap = this.style('stroke-linecap').value;
+ if (this.style('stroke-linejoin').hasValue()) ctx.lineJoin = this.style('stroke-linejoin').value;
+ if (this.style('stroke-miterlimit').hasValue()) ctx.miterLimit = this.style('stroke-miterlimit').value;
+
+ // font
+ if (typeof(ctx.font) != 'undefined') {
+ ctx.font = svg.Font.CreateFont(
+ this.style('font-style').value,
+ this.style('font-variant').value,
+ this.style('font-weight').value,
+ this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '',
+ this.style('font-family').value).toString();
+ }
+
+ // transform
+ if (this.attribute('transform').hasValue()) {
+ var transform = new svg.Transform(this.attribute('transform').value);
+ transform.apply(ctx);
+ }
+
+ // clip
+ if (this.attribute('clip-path').hasValue()) {
+ var clip = this.attribute('clip-path').Definition.getDefinition();
+ if (clip != null) clip.apply(ctx);
+ }
+
+ // opacity
+ if (this.style('opacity').hasValue()) {
+ ctx.globalAlpha = this.style('opacity').numValue();
+ }
+ }
+ }
+ svg.Element.RenderedElementBase.prototype = new svg.Element.ElementBase;
+
+ svg.Element.PathElementBase = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ if (ctx != null) ctx.beginPath();
+ return new svg.BoundingBox();
+ }
+
+ this.renderChildren = function(ctx) {
+ this.path(ctx);
+ svg.Mouse.checkPath(this, ctx);
+ if (ctx.fillStyle != '') ctx.fill();
+ if (ctx.strokeStyle != '') ctx.stroke();
+
+ var markers = this.getMarkers();
+ if (markers != null) {
+ if (this.style('marker-start').Definition.isUrl()) {
+ var marker = this.style('marker-start').Definition.getDefinition();
+ marker.render(ctx, markers[0][0], markers[0][1]);
+ }
+ if (this.style('marker-mid').Definition.isUrl()) {
+ var marker = this.style('marker-mid').Definition.getDefinition();
+ for (var i=1;i<markers.length-1;i++) {
+ marker.render(ctx, markers[i][0], markers[i][1]);
+ }
+ }
+ if (this.style('marker-end').Definition.isUrl()) {
+ var marker = this.style('marker-end').Definition.getDefinition();
+ marker.render(ctx, markers[markers.length-1][0], markers[markers.length-1][1]);
+ }
+ }
+ }
+
+ this.getBoundingBox = function() {
+ return this.path();
+ }
+
+ this.getMarkers = function() {
+ return null;
+ }
+ }
+ svg.Element.PathElementBase.prototype = new svg.Element.RenderedElementBase;
+
+ // svg element
+ svg.Element.svg = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseClearContext = this.clearContext;
+ this.clearContext = function(ctx) {
+ this.baseClearContext(ctx);
+ svg.ViewPort.RemoveCurrent();
+ }
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ // initial values
+ ctx.strokeStyle = 'rgba(0,0,0,0)';
+ ctx.lineCap = 'butt';
+ ctx.lineJoin = 'miter';
+ ctx.miterLimit = 4;
+
+ this.baseSetContext(ctx);
+
+ // create new view port
+ if (this.attribute('x').hasValue() && this.attribute('y').hasValue()) {
+ ctx.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y'));
+ }
+
+ var width = svg.ViewPort.width();
+ var height = svg.ViewPort.height();
+ if (typeof(this.root) == 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {
+ width = this.attribute('width').Length.toPixels('x');
+ height = this.attribute('height').Length.toPixels('y');
+
+ var x = 0;
+ var y = 0;
+ if (this.attribute('refX').hasValue() && this.attribute('refY').hasValue()) {
+ x = -this.attribute('refX').Length.toPixels('x');
+ y = -this.attribute('refY').Length.toPixels('y');
+ }
+
+ ctx.beginPath();
+ ctx.moveTo(x, y);
+ ctx.lineTo(width, y);
+ ctx.lineTo(width, height);
+ ctx.lineTo(x, height);
+ ctx.closePath();
+ ctx.clip();
+ }
+ svg.ViewPort.SetCurrent(width, height);
+
+ // viewbox
+ if (this.attribute('viewBox').hasValue()) {
+ var viewBox = svg.ToNumberArray(this.attribute('viewBox').value);
+ var minX = viewBox[0];
+ var minY = viewBox[1];
+ width = viewBox[2];
+ height = viewBox[3];
+
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ svg.ViewPort.width(),
+ width,
+ svg.ViewPort.height(),
+ height,
+ minX,
+ minY,
+ this.attribute('refX').value,
+ this.attribute('refY').value);
+
+ svg.ViewPort.RemoveCurrent();
+ svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);
+ }
+ }
+ }
+ svg.Element.svg.prototype = new svg.Element.RenderedElementBase;
+
+ // rect element
+ svg.Element.rect = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+ var rx = this.attribute('rx').Length.toPixels('x');
+ var ry = this.attribute('ry').Length.toPixels('y');
+ if (this.attribute('rx').hasValue() && !this.attribute('ry').hasValue()) ry = rx;
+ if (this.attribute('ry').hasValue() && !this.attribute('rx').hasValue()) rx = ry;
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(x + rx, y);
+ ctx.lineTo(x + width - rx, y);
+ ctx.quadraticCurveTo(x + width, y, x + width, y + ry)
+ ctx.lineTo(x + width, y + height - ry);
+ ctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height)
+ ctx.lineTo(x + rx, y + height);
+ ctx.quadraticCurveTo(x, y + height, x, y + height - ry)
+ ctx.lineTo(x, y + ry);
+ ctx.quadraticCurveTo(x, y, x + rx, y)
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(x, y, x + width, y + height);
+ }
+ }
+ svg.Element.rect.prototype = new svg.Element.PathElementBase;
+
+ // circle element
+ svg.Element.circle = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var cx = this.attribute('cx').Length.toPixels('x');
+ var cy = this.attribute('cy').Length.toPixels('y');
+ var r = this.attribute('r').Length.toPixels();
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.arc(cx, cy, r, 0, Math.PI * 2, true);
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(cx - r, cy - r, cx + r, cy + r);
+ }
+ }
+ svg.Element.circle.prototype = new svg.Element.PathElementBase;
+
+ // ellipse element
+ svg.Element.ellipse = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.path = function(ctx) {
+ var KAPPA = 4 * ((Math.sqrt(2) - 1) / 3);
+ var rx = this.attribute('rx').Length.toPixels('x');
+ var ry = this.attribute('ry').Length.toPixels('y');
+ var cx = this.attribute('cx').Length.toPixels('x');
+ var cy = this.attribute('cy').Length.toPixels('y');
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(cx, cy - ry);
+ ctx.bezierCurveTo(cx + (KAPPA * rx), cy - ry, cx + rx, cy - (KAPPA * ry), cx + rx, cy);
+ ctx.bezierCurveTo(cx + rx, cy + (KAPPA * ry), cx + (KAPPA * rx), cy + ry, cx, cy + ry);
+ ctx.bezierCurveTo(cx - (KAPPA * rx), cy + ry, cx - rx, cy + (KAPPA * ry), cx - rx, cy);
+ ctx.bezierCurveTo(cx - rx, cy - (KAPPA * ry), cx - (KAPPA * rx), cy - ry, cx, cy - ry);
+ ctx.closePath();
+ }
+
+ return new svg.BoundingBox(cx - rx, cy - ry, cx + rx, cy + ry);
+ }
+ }
+ svg.Element.ellipse.prototype = new svg.Element.PathElementBase;
+
+ // line element
+ svg.Element.line = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.getPoints = function() {
+ return [
+ new svg.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')),
+ new svg.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))];
+ }
+
+ this.path = function(ctx) {
+ var points = this.getPoints();
+
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(points[0].x, points[0].y);
+ ctx.lineTo(points[1].x, points[1].y);
+ }
+
+ return new svg.BoundingBox(points[0].x, points[0].y, points[1].x, points[1].y);
+ }
+
+ this.getMarkers = function() {
+ var points = this.getPoints();
+ var a = points[0].angleTo(points[1]);
+ return [[points[0], a], [points[1], a]];
+ }
+ }
+ svg.Element.line.prototype = new svg.Element.PathElementBase;
+
+ // polyline element
+ svg.Element.polyline = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ this.points = svg.CreatePath(this.attribute('points').value);
+ this.path = function(ctx) {
+ var bb = new svg.BoundingBox(this.points[0].x, this.points[0].y);
+ if (ctx != null) {
+ ctx.beginPath();
+ ctx.moveTo(this.points[0].x, this.points[0].y);
+ }
+ for (var i=1; i<this.points.length; i++) {
+ bb.addPoint(this.points[i].x, this.points[i].y);
+ if (ctx != null) ctx.lineTo(this.points[i].x, this.points[i].y);
+ }
+ return bb;
+ }
+
+ this.getMarkers = function() {
+ var markers = [];
+ for (var i=0; i<this.points.length - 1; i++) {
+ markers.push([this.points[i], this.points[i].angleTo(this.points[i+1])]);
+ }
+ markers.push([this.points[this.points.length-1], markers[markers.length-1][1]]);
+ return markers;
+ }
+ }
+ svg.Element.polyline.prototype = new svg.Element.PathElementBase;
+
+ // polygon element
+ svg.Element.polygon = function(node) {
+ this.base = svg.Element.polyline;
+ this.base(node);
+
+ this.basePath = this.path;
+ this.path = function(ctx) {
+ var bb = this.basePath(ctx);
+ if (ctx != null) {
+ ctx.lineTo(this.points[0].x, this.points[0].y);
+ ctx.closePath();
+ }
+ return bb;
+ }
+ }
+ svg.Element.polygon.prototype = new svg.Element.polyline;
+
+ // path element
+ svg.Element.path = function(node) {
+ this.base = svg.Element.PathElementBase;
+ this.base(node);
+
+ var d = this.attribute('d').value;
+ // TODO: convert to real lexer based on http://www.w3.org/TR/SVG11/paths.html#PathDataBNF
+ d = d.replace(/,/gm,' '); // get rid of all commas
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from commands
+ d = d.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm,'$1 $2'); // separate commands from points
+ d = d.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm,'$1 $2'); // separate commands from points
+ d = d.replace(/([0-9])([+\-])/gm,'$1 $2'); // separate digits when no comma
+ d = d.replace(/(\.[0-9]*)(\.)/gm,'$1 $2'); // separate digits when no comma
+ d = d.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm,'$1 $3 $4 '); // shorthand elliptical arc path syntax
+ d = svg.compressSpaces(d); // compress multiple spaces
+ d = svg.trim(d);
+ this.PathParser = new (function(d) {
+ this.tokens = d.split(' ');
+
+ this.reset = function() {
+ this.i = -1;
+ this.command = '';
+ this.previousCommand = '';
+ this.start = new svg.Point(0, 0);
+ this.control = new svg.Point(0, 0);
+ this.current = new svg.Point(0, 0);
+ this.points = [];
+ this.angles = [];
+ }
+
+ this.isEnd = function() {
+ return this.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<this.angles.length; i++) {
+ if (this.angles[i] == null) {
+ for (var j=i+1; j<this.angles.length; j++) {
+ if (this.angles[j] != null) {
+ this.angles[i] = this.angles[j];
+ break;
+ }
+ }
+ }
+ }
+ return this.angles;
+ }
+ })(d);
+
+ this.path = function(ctx) {
+ var pp = this.PathParser;
+ pp.reset();
+
+ var bb = new svg.BoundingBox();
+ if (ctx != null) ctx.beginPath();
+ while (!pp.isEnd()) {
+ pp.nextCommand();
+ switch (pp.command.toUpperCase()) {
+ case 'M':
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.moveTo(p.x, p.y);
+ pp.start = pp.current;
+ while (!pp.isCommandOrEnd()) {
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p, pp.start);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.lineTo(p.x, p.y);
+ }
+ break;
+ case 'L':
+ while (!pp.isCommandOrEnd()) {
+ var c = pp.current;
+ var p = pp.getAsCurrentPoint();
+ pp.addMarker(p, c);
+ bb.addPoint(p.x, p.y);
+ if (ctx != null) ctx.lineTo(p.x, p.y);
+ }
+ break;
+ case 'H':
+ while (!pp.isCommandOrEnd()) {
+ var newP = new svg.Point((pp.isRelativeCommand() ? pp.current.x : 0) + pp.getScalar(), pp.current.y);
+ pp.addMarker(newP, pp.current);
+ pp.current = newP;
+ bb.addPoint(pp.current.x, pp.current.y);
+ if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);
+ }
+ break;
+ case 'V':
+ while (!pp.isCommandOrEnd()) {
+ var newP = new svg.Point(pp.current.x, (pp.isRelativeCommand() ? pp.current.y : 0) + pp.getScalar());
+ pp.addMarker(newP, pp.current);
+ pp.current = newP;
+ bb.addPoint(pp.current.x, pp.current.y);
+ if (ctx != null) ctx.lineTo(pp.current.x, pp.current.y);
+ }
+ break;
+ case 'C':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var p1 = pp.getPoint();
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, p1);
+ bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'S':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var p1 = pp.getReflectedControlPoint();
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, p1);
+ bb.addBezierCurve(curr.x, curr.y, p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.bezierCurveTo(p1.x, p1.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'Q':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var cntrl = pp.getAsControlPoint();
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, cntrl);
+ bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'T':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var cntrl = pp.getReflectedControlPoint();
+ pp.control = cntrl;
+ var cp = pp.getAsCurrentPoint();
+ pp.addMarker(cp, cntrl, cntrl);
+ bb.addQuadraticCurve(curr.x, curr.y, cntrl.x, cntrl.y, cp.x, cp.y);
+ if (ctx != null) ctx.quadraticCurveTo(cntrl.x, cntrl.y, cp.x, cp.y);
+ }
+ break;
+ case 'A':
+ while (!pp.isCommandOrEnd()) {
+ var curr = pp.current;
+ var rx = pp.getScalar();
+ var ry = pp.getScalar();
+ var xAxisRotation = pp.getScalar() * (Math.PI / 180.0);
+ var largeArcFlag = pp.getScalar();
+ var sweepFlag = pp.getScalar();
+ var cp = pp.getAsCurrentPoint();
+
+ // Conversion from endpoint to center parameterization
+ // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
+ // x1', y1'
+ var currp = new svg.Point(
+ Math.cos(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.sin(xAxisRotation) * (curr.y - cp.y) / 2.0,
+ -Math.sin(xAxisRotation) * (curr.x - cp.x) / 2.0 + Math.cos(xAxisRotation) * (curr.y - cp.y) / 2.0
+ );
+ // adjust radii
+ var l = Math.pow(currp.x,2)/Math.pow(rx,2)+Math.pow(currp.y,2)/Math.pow(ry,2);
+ if (l > 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<points.length; i++) {
+ markers.push([points[i], angles[i]]);
+ }
+ return markers;
+ }
+ }
+ svg.Element.path.prototype = new svg.Element.PathElementBase;
+
+ // pattern element
+ svg.Element.pattern = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.createPattern = function(ctx, element) {
+ // render me using a temporary svg element
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);
+ tempSvg.attributes['x'] = new svg.Property('x', this.attribute('x').value);
+ tempSvg.attributes['y'] = new svg.Property('y', this.attribute('y').value);
+ tempSvg.attributes['width'] = new svg.Property('width', this.attribute('width').value);
+ tempSvg.attributes['height'] = new svg.Property('height', this.attribute('height').value);
+ tempSvg.children = this.children;
+
+ var c = document.createElement('canvas');
+ c.width = this.attribute('width').Length.toPixels('x');
+ c.height = this.attribute('height').Length.toPixels('y');
+ tempSvg.render(c.getContext('2d'));
+ return ctx.createPattern(c, 'repeat');
+ }
+ }
+ svg.Element.pattern.prototype = new svg.Element.ElementBase;
+
+ // marker element
+ svg.Element.marker = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.baseRender = this.render;
+ this.render = function(ctx, point, angle) {
+ ctx.translate(point.x, point.y);
+ if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(angle);
+ if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(ctx.lineWidth, ctx.lineWidth);
+ ctx.save();
+
+ // render me using a temporary svg element
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['viewBox'] = new svg.Property('viewBox', this.attribute('viewBox').value);
+ tempSvg.attributes['refX'] = new svg.Property('refX', this.attribute('refX').value);
+ tempSvg.attributes['refY'] = new svg.Property('refY', this.attribute('refY').value);
+ tempSvg.attributes['width'] = new svg.Property('width', this.attribute('markerWidth').value);
+ tempSvg.attributes['height'] = new svg.Property('height', this.attribute('markerHeight').value);
+ tempSvg.attributes['fill'] = new svg.Property('fill', this.attribute('fill').valueOrDefault('black'));
+ tempSvg.attributes['stroke'] = new svg.Property('stroke', this.attribute('stroke').valueOrDefault('none'));
+ tempSvg.children = this.children;
+ tempSvg.render(ctx);
+
+ ctx.restore();
+ if (this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth') ctx.scale(1/ctx.lineWidth, 1/ctx.lineWidth);
+ if (this.attribute('orient').valueOrDefault('auto') == 'auto') ctx.rotate(-angle);
+ ctx.translate(-point.x, -point.y);
+ }
+ }
+ svg.Element.marker.prototype = new svg.Element.ElementBase;
+
+ // definitions element
+ svg.Element.defs = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.render = function(ctx) {
+ // NOOP
+ }
+ }
+ svg.Element.defs.prototype = new svg.Element.ElementBase;
+
+ // base for gradients
+ svg.Element.GradientBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox');
+
+ this.stops = [];
+ for (var i=0; i<this.children.length; i++) {
+ var child = this.children[i];
+ this.stops.push(child);
+ }
+
+ this.getGradient = function() {
+ // OVERRIDE ME!
+ }
+
+ this.createGradient = function(ctx, element) {
+ var stopsContainer = this;
+ if (this.attribute('xlink:href').hasValue()) {
+ stopsContainer = this.attribute('xlink:href').Definition.getDefinition();
+ }
+
+ var g = this.getGradient(ctx, element);
+ for (var i=0; i<stopsContainer.stops.length; i++) {
+ g.addColorStop(stopsContainer.stops[i].offset, stopsContainer.stops[i].color);
+ }
+
+ if (this.attribute('gradientTransform').hasValue()) {
+ // render as transformed pattern on temporary canvas
+ var rootView = svg.ViewPort.viewPorts[0];
+
+ var rect = new svg.Element.rect();
+ rect.attributes['x'] = new svg.Property('x', -svg.MAX_VIRTUAL_PIXELS/3.0);
+ rect.attributes['y'] = new svg.Property('y', -svg.MAX_VIRTUAL_PIXELS/3.0);
+ rect.attributes['width'] = new svg.Property('width', svg.MAX_VIRTUAL_PIXELS);
+ rect.attributes['height'] = new svg.Property('height', svg.MAX_VIRTUAL_PIXELS);
+
+ var group = new svg.Element.g();
+ group.attributes['transform'] = new svg.Property('transform', this.attribute('gradientTransform').value);
+ group.children = [ rect ];
+
+ var tempSvg = new svg.Element.svg();
+ tempSvg.attributes['x'] = new svg.Property('x', 0);
+ tempSvg.attributes['y'] = new svg.Property('y', 0);
+ tempSvg.attributes['width'] = new svg.Property('width', rootView.width);
+ tempSvg.attributes['height'] = new svg.Property('height', rootView.height);
+ tempSvg.children = [ group ];
+
+ var c = document.createElement('canvas');
+ c.width = rootView.width;
+ c.height = rootView.height;
+ var tempCtx = c.getContext('2d');
+ tempCtx.fillStyle = g;
+ tempSvg.render(tempCtx);
+ return tempCtx.createPattern(c, 'no-repeat');
+ }
+
+ return g;
+ }
+ }
+ svg.Element.GradientBase.prototype = new svg.Element.ElementBase;
+
+ // linear gradient element
+ svg.Element.linearGradient = function(node) {
+ this.base = svg.Element.GradientBase;
+ this.base(node);
+
+ this.getGradient = function(ctx, element) {
+ var bb = element.getBoundingBox();
+
+ var x1 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('x1').numValue()
+ : this.attribute('x1').Length.toPixels('x'));
+ var y1 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('y1').numValue()
+ : this.attribute('y1').Length.toPixels('y'));
+ var x2 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('x2').numValue()
+ : this.attribute('x2').Length.toPixels('x'));
+ var y2 = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('y2').numValue()
+ : this.attribute('y2').Length.toPixels('y'));
+
+ return ctx.createLinearGradient(x1, y1, x2, y2);
+ }
+ }
+ svg.Element.linearGradient.prototype = new svg.Element.GradientBase;
+
+ // radial gradient element
+ svg.Element.radialGradient = function(node) {
+ this.base = svg.Element.GradientBase;
+ this.base(node);
+
+ this.getGradient = function(ctx, element) {
+ var bb = element.getBoundingBox();
+
+ var cx = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('cx').numValue()
+ : this.attribute('cx').Length.toPixels('x'));
+ var cy = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('cy').numValue()
+ : this.attribute('cy').Length.toPixels('y'));
+
+ var fx = cx;
+ var fy = cy;
+ if (this.attribute('fx').hasValue()) {
+ fx = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.x() + bb.width() * this.attribute('fx').numValue()
+ : this.attribute('fx').Length.toPixels('x'));
+ }
+ if (this.attribute('fy').hasValue()) {
+ fy = (this.gradientUnits == 'objectBoundingBox'
+ ? bb.y() + bb.height() * this.attribute('fy').numValue()
+ : this.attribute('fy').Length.toPixels('y'));
+ }
+
+ var r = (this.gradientUnits == 'objectBoundingBox'
+ ? (bb.width() + bb.height()) / 2.0 * this.attribute('r').numValue()
+ : this.attribute('r').Length.toPixels());
+
+ return ctx.createRadialGradient(fx, fy, 0, cx, cy, r);
+ }
+ }
+ svg.Element.radialGradient.prototype = new svg.Element.GradientBase;
+
+ // gradient stop element
+ svg.Element.stop = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.offset = this.attribute('offset').numValue();
+
+ var stopColor = this.style('stop-color');
+ if (this.style('stop-opacity').hasValue()) stopColor = stopColor.Color.addOpacity(this.style('stop-opacity').value);
+ this.color = stopColor.value;
+ }
+ svg.Element.stop.prototype = new svg.Element.ElementBase;
+
+ // animation base element
+ svg.Element.AnimateBase = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ svg.Animations.push(this);
+
+ this.duration = 0.0;
+ this.begin = this.attribute('begin').Time.toMilliseconds();
+ this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds();
+
+ this.getProperty = function() {
+ var attributeType = this.attribute('attributeType').value;
+ var attributeName = this.attribute('attributeName').value;
+
+ if (attributeType == 'CSS') {
+ return this.parent.style(attributeName, true);
+ }
+ return this.parent.attribute(attributeName, true);
+ };
+
+ this.initialValue = null;
+ this.removed = false;
+
+ this.calcValue = function() {
+ // OVERRIDE ME!
+ return '';
+ }
+
+ this.update = function(delta) {
+ // set initial value
+ if (this.initialValue == null) {
+ this.initialValue = this.getProperty().value;
+ }
+
+ // if we're past the end time
+ if (this.duration > 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; i<this.children.length; i++) {
+ var child = this.children[i];
+ if (child.type == 'font-face') {
+ this.fontFace = child;
+ if (child.style('font-family').hasValue()) {
+ svg.Definitions[child.style('font-family').value] = this;
+ }
+ }
+ else if (child.type == 'missing-glyph') this.missingGlyph = child;
+ else if (child.type == 'glyph') {
+ if (child.arabicForm != '') {
+ this.isRTL = true;
+ this.isArabic = true;
+ if (typeof(this.glyphs[child.unicode]) == 'undefined') this.glyphs[child.unicode] = [];
+ this.glyphs[child.unicode][child.arabicForm] = child;
+ }
+ else {
+ this.glyphs[child.unicode] = child;
+ }
+ }
+ }
+ }
+ svg.Element.font.prototype = new svg.Element.ElementBase;
+
+ // font-face element
+ svg.Element.fontface = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.ascent = this.attribute('ascent').value;
+ this.descent = this.attribute('descent').value;
+ this.unitsPerEm = this.attribute('units-per-em').numValue();
+ }
+ svg.Element.fontface.prototype = new svg.Element.ElementBase;
+
+ // missing-glyph element
+ svg.Element.missingglyph = function(node) {
+ this.base = svg.Element.path;
+ this.base(node);
+
+ this.horizAdvX = 0;
+ }
+ svg.Element.missingglyph.prototype = new svg.Element.path;
+
+ // glyph element
+ svg.Element.glyph = function(node) {
+ this.base = svg.Element.path;
+ this.base(node);
+
+ this.horizAdvX = this.attribute('horiz-adv-x').numValue();
+ this.unicode = this.attribute('unicode').value;
+ this.arabicForm = this.attribute('arabic-form').value;
+ }
+ svg.Element.glyph.prototype = new svg.Element.path;
+
+ // text element
+ svg.Element.text = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ if (node != null) {
+ // add children
+ this.children = [];
+ for (var i=0; i<node.childNodes.length; i++) {
+ var childNode = node.childNodes[i];
+ if (childNode.nodeType == 1) { // capture tspan and tref nodes
+ this.addChild(childNode, true);
+ }
+ else if (childNode.nodeType == 3) { // capture text
+ this.addChild(new svg.Element.tspan(childNode), false);
+ }
+ }
+ }
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+ if (this.style('dominant-baseline').hasValue()) ctx.textBaseline = this.style('dominant-baseline').value;
+ if (this.style('alignment-baseline').hasValue()) ctx.textBaseline = this.style('alignment-baseline').value;
+ }
+
+ this.renderChildren = function(ctx) {
+ var textAnchor = this.style('text-anchor').valueOrDefault('start');
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ for (var i=0; i<this.children.length; i++) {
+ var child = this.children[i];
+
+ if (child.attribute('x').hasValue()) {
+ child.x = child.attribute('x').Length.toPixels('x');
+ }
+ else {
+ if (child.attribute('dx').hasValue()) x += child.attribute('dx').Length.toPixels('x');
+ child.x = x;
+ }
+
+ var childLength = child.measureText(ctx);
+ if (textAnchor != 'start' && (i==0 || child.attribute('x').hasValue())) { // new group?
+ // loop through rest of children
+ var groupLength = childLength;
+ for (var j=i+1; j<this.children.length; j++) {
+ var childInGroup = this.children[j];
+ if (childInGroup.attribute('x').hasValue()) break; // new group
+ groupLength += childInGroup.measureText(ctx);
+ }
+ child.x -= (textAnchor == 'end' ? groupLength : groupLength / 2.0);
+ }
+ x = child.x + childLength;
+
+ if (child.attribute('y').hasValue()) {
+ child.y = child.attribute('y').Length.toPixels('y');
+ }
+ else {
+ if (child.attribute('dy').hasValue()) y += child.attribute('dy').Length.toPixels('y');
+ child.y = y;
+ }
+ y = child.y;
+
+ child.render(ctx);
+ }
+ }
+ }
+ svg.Element.text.prototype = new svg.Element.RenderedElementBase;
+
+ // text base
+ svg.Element.TextElementBase = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.getGlyph = function(font, text, i) {
+ var c = text[i];
+ var glyph = null;
+ if (font.isArabic) {
+ var arabicForm = 'isolated';
+ if ((i==0 || text[i-1]==' ') && i<text.length-2 && text[i+1]!=' ') arabicForm = 'terminal';
+ if (i>0 && text[i-1]!=' ' && i<text.length-2 && text[i+1]!=' ') arabicForm = 'medial';
+ if (i>0 && 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<text.length; i++) {
+ var glyph = this.getGlyph(customFont, text, i);
+ var scale = fontSize / customFont.fontFace.unitsPerEm;
+ ctx.translate(this.x, this.y);
+ ctx.scale(scale, -scale);
+ var lw = ctx.lineWidth;
+ ctx.lineWidth = ctx.lineWidth * customFont.fontFace.unitsPerEm / fontSize;
+ if (fontStyle == 'italic') ctx.transform(1, 0, .4, 1, 0, 0);
+ glyph.render(ctx);
+ if (fontStyle == 'italic') ctx.transform(1, 0, -.4, 1, 0, 0);
+ ctx.lineWidth = lw;
+ ctx.scale(1/scale, -1/scale);
+ ctx.translate(-this.x, -this.y);
+
+ this.x += fontSize * (glyph.horizAdvX || customFont.horizAdvX) / customFont.fontFace.unitsPerEm;
+ if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {
+ this.x += dx[i];
+ }
+ }
+ return;
+ }
+
+ if (ctx.strokeStyle != '') ctx.strokeText(svg.compressSpaces(this.getText()), this.x, this.y);
+ if (ctx.fillStyle != '') ctx.fillText(svg.compressSpaces(this.getText()), this.x, this.y);
+ }
+
+ this.getText = function() {
+ // OVERRIDE ME
+ }
+
+ this.measureText = 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 measure = 0;
+ 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<text.length; i++) {
+ var glyph = this.getGlyph(customFont, text, i);
+ measure += (glyph.horizAdvX || customFont.horizAdvX) * fontSize / customFont.fontFace.unitsPerEm;
+ if (typeof(dx[i]) != 'undefined' && !isNaN(dx[i])) {
+ measure += dx[i];
+ }
+ }
+ return measure;
+ }
+
+ var textToMeasure = svg.compressSpaces(this.getText());
+ if (!ctx.measureText) return textToMeasure.length * 10;
+
+ ctx.save();
+ this.setContext(ctx);
+ var width = ctx.measureText(textToMeasure).width;
+ ctx.restore();
+ return width;
+ }
+ }
+ svg.Element.TextElementBase.prototype = new svg.Element.RenderedElementBase;
+
+ // tspan
+ svg.Element.tspan = function(node) {
+ this.base = svg.Element.TextElementBase;
+ this.base(node);
+
+ this.text = node.nodeType == 3 ? node.nodeValue : // text
+ node.childNodes.length > 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<node.childNodes.length; i++) {
+ if (node.childNodes[i].nodeType != 3) this.hasText = false;
+ }
+
+ // this might contain text
+ this.text = this.hasText ? node.childNodes[0].nodeValue : '';
+ this.getText = function() {
+ return this.text;
+ }
+
+ this.baseRenderChildren = this.renderChildren;
+ this.renderChildren = function(ctx) {
+ if (this.hasText) {
+ // render as text element
+ this.baseRenderChildren(ctx);
+ var fontSize = new svg.Property('fontSize', svg.Font.Parse(svg.ctx.font).fontSize);
+ svg.Mouse.checkBoundingBox(this, new svg.BoundingBox(this.x, this.y - fontSize.Length.toPixels('y'), this.x + this.measureText(ctx), this.y));
+ }
+ else {
+ // render as temporary group
+ var g = new svg.Element.g();
+ g.children = this.children;
+ g.parent = this;
+ g.render(ctx);
+ }
+ }
+
+ this.onclick = function() {
+ window.open(this.attribute('xlink:href').value);
+ }
+
+ this.onmousemove = function() {
+ svg.ctx.canvas.style.cursor = 'pointer';
+ }
+ }
+ svg.Element.a.prototype = new svg.Element.TextElementBase;
+
+ // image element
+ svg.Element.image = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ svg.Images.push(this);
+ this.img = document.createElement('img');
+ this.loaded = false;
+ var that = this;
+ this.img.onload = function() { that.loaded = true; }
+ this.img.src = this.attribute('xlink:href').value;
+
+ this.renderChildren = function(ctx) {
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+ if (width == 0 || height == 0) return;
+
+ ctx.save();
+ ctx.translate(x, y);
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ width,
+ this.img.width,
+ height,
+ this.img.height,
+ 0,
+ 0);
+ ctx.drawImage(this.img, 0, 0);
+ ctx.restore();
+ }
+ }
+ svg.Element.image.prototype = new svg.Element.RenderedElementBase;
+
+ // group element
+ svg.Element.g = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.getBoundingBox = function() {
+ var bb = new svg.BoundingBox();
+ for (var i=0; i<this.children.length; i++) {
+ bb.addBoundingBox(this.children[i].getBoundingBox());
+ }
+ return bb;
+ };
+ }
+ svg.Element.g.prototype = new svg.Element.RenderedElementBase;
+
+ // symbol element
+ svg.Element.symbol = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+
+ // viewbox
+ if (this.attribute('viewBox').hasValue()) {
+ var viewBox = svg.ToNumberArray(this.attribute('viewBox').value);
+ var minX = viewBox[0];
+ var minY = viewBox[1];
+ width = viewBox[2];
+ height = viewBox[3];
+
+ svg.AspectRatio(ctx,
+ this.attribute('preserveAspectRatio').value,
+ this.attribute('width').Length.toPixels('x'),
+ width,
+ this.attribute('height').Length.toPixels('y'),
+ height,
+ minX,
+ minY);
+
+ svg.ViewPort.SetCurrent(viewBox[2], viewBox[3]);
+ }
+ }
+ }
+ svg.Element.symbol.prototype = new svg.Element.RenderedElementBase;
+
+ // style element
+ svg.Element.style = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ // text, or spaces then CDATA
+ var css = node.childNodes[0].nodeValue + (node.childNodes.length > 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<cssDefs.length; i++) {
+ if (svg.trim(cssDefs[i]) != '') {
+ var cssDef = cssDefs[i].split('{');
+ var cssClasses = cssDef[0].split(',');
+ var cssProps = cssDef[1].split(';');
+ for (var j=0; j<cssClasses.length; j++) {
+ var cssClass = svg.trim(cssClasses[j]);
+ if (cssClass != '') {
+ var props = {};
+ for (var k=0; k<cssProps.length; k++) {
+ var prop = cssProps[k].indexOf(':');
+ var name = cssProps[k].substr(0, prop);
+ var value = cssProps[k].substr(prop + 1, cssProps[k].length - prop);
+ if (name != null && value != null) {
+ props[svg.trim(name)] = new svg.Property(svg.trim(name), svg.trim(value));
+ }
+ }
+ svg.Styles[cssClass] = props;
+ if (cssClass == '@font-face') {
+ var fontFamily = props['font-family'].value.replace(/"/g,'');
+ var srcs = props['src'].value.split(',');
+ for (var s=0; s<srcs.length; s++) {
+ if (srcs[s].indexOf('format("svg")') > 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<fonts.length; f++) {
+ var font = svg.CreateElement(fonts[f]);
+ svg.Definitions[fontFamily] = font;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ svg.Element.style.prototype = new svg.Element.ElementBase;
+
+ // use element
+ svg.Element.use = function(node) {
+ this.base = svg.Element.RenderedElementBase;
+ this.base(node);
+
+ this.baseSetContext = this.setContext;
+ this.setContext = function(ctx) {
+ this.baseSetContext(ctx);
+ if (this.attribute('x').hasValue()) ctx.translate(this.attribute('x').Length.toPixels('x'), 0);
+ if (this.attribute('y').hasValue()) ctx.translate(0, this.attribute('y').Length.toPixels('y'));
+ }
+
+ this.getDefinition = function() {
+ var element = this.attribute('xlink:href').Definition.getDefinition();
+ if (this.attribute('width').hasValue()) element.attribute('width', true).value = this.attribute('width').value;
+ if (this.attribute('height').hasValue()) element.attribute('height', true).value = this.attribute('height').value;
+ return element;
+ }
+
+ this.path = function(ctx) {
+ var element = this.getDefinition();
+ if (element != null) element.path(ctx);
+ }
+
+ this.renderChildren = function(ctx) {
+ var element = this.getDefinition();
+ if (element != null) element.render(ctx);
+ }
+ }
+ svg.Element.use.prototype = new svg.Element.RenderedElementBase;
+
+ // mask element
+ svg.Element.mask = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx, element) {
+ // render as temp svg
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+
+ // temporarily remove mask to avoid recursion
+ var mask = element.attribute('mask').value;
+ element.attribute('mask').value = '';
+
+ var cMask = document.createElement('canvas');
+ cMask.width = x + width;
+ cMask.height = y + height;
+ var maskCtx = cMask.getContext('2d');
+ this.renderChildren(maskCtx);
+
+ var c = document.createElement('canvas');
+ c.width = x + width;
+ c.height = y + height;
+ var tempCtx = c.getContext('2d');
+ element.render(tempCtx);
+ tempCtx.globalCompositeOperation = 'destination-in';
+ tempCtx.fillStyle = maskCtx.createPattern(cMask, 'no-repeat');
+ tempCtx.fillRect(0, 0, x + width, y + height);
+
+ ctx.fillStyle = tempCtx.createPattern(c, 'no-repeat');
+ ctx.fillRect(0, 0, x + width, y + height);
+
+ // reassign mask
+ element.attribute('mask').value = mask;
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.mask.prototype = new svg.Element.ElementBase;
+
+ // clip element
+ svg.Element.clipPath = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx) {
+ for (var i=0; i<this.children.length; i++) {
+ if (this.children[i].path) {
+ this.children[i].path(ctx);
+ ctx.clip();
+ }
+ }
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.clipPath.prototype = new svg.Element.ElementBase;
+
+ // filters
+ svg.Element.filter = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ this.apply = function(ctx, element) {
+ // render as temp svg
+ var bb = element.getBoundingBox();
+ var x = this.attribute('x').Length.toPixels('x');
+ var y = this.attribute('y').Length.toPixels('y');
+ if (x == 0 || y == 0) {
+ x = bb.x1;
+ y = bb.y1;
+ }
+ var width = this.attribute('width').Length.toPixels('x');
+ var height = this.attribute('height').Length.toPixels('y');
+ if (width == 0 || height == 0) {
+ width = bb.width();
+ height = bb.height();
+ }
+
+ // temporarily remove filter to avoid recursion
+ var filter = element.style('filter').value;
+ element.style('filter').value = '';
+
+ // max filter distance
+ var extraPercent = .20;
+ var px = extraPercent * width;
+ var py = extraPercent * height;
+
+ var c = document.createElement('canvas');
+ c.width = width + 2*px;
+ c.height = height + 2*py;
+ var tempCtx = c.getContext('2d');
+ tempCtx.translate(-x + px, -y + py);
+ element.render(tempCtx);
+
+ // apply filters
+ for (var i=0; i<this.children.length; i++) {
+ this.children[i].apply(tempCtx, 0, 0, width + 2*px, height + 2*py);
+ }
+
+ // render on me
+ ctx.drawImage(c, 0, 0, width + 2*px, height + 2*py, x - px, y - py, width + 2*px, height + 2*py);
+
+ // reassign filter
+ element.style('filter', true).value = filter;
+ }
+
+ this.render = function(ctx) {
+ // NO RENDER
+ }
+ }
+ svg.Element.filter.prototype = new svg.Element.ElementBase;
+
+ svg.Element.feGaussianBlur = function(node) {
+ this.base = svg.Element.ElementBase;
+ this.base(node);
+
+ function make_fgauss(sigma) {
+ sigma = Math.max(sigma, 0.01);
+ var len = Math.ceil(sigma * 4.0) + 1;
+ mask = [];
+ for (var i = 0; i < len; i++) {
+ mask[i] = Math.exp(-0.5 * (i / sigma) * (i / sigma));
+ }
+ return mask;
+ }
+
+ function normalize(mask) {
+ var sum = 0;
+ for (var i = 1; i < mask.length; i++) {
+ sum += Math.abs(mask[i]);
+ }
+ sum = 2 * sum + Math.abs(mask[0]);
+ for (var i = 0; i < mask.length; i++) {
+ mask[i] /= sum;
+ }
+ return mask;
+ }
+
+ function convolve_even(src, dst, mask, width, height) {
+ for (var y = 0; y < height; y++) {
+ for (var x = 0; x < width; x++) {
+ var a = imGet(src, x, y, width, height, 3)/255;
+ for (var rgba = 0; rgba < 4; rgba++) {
+ var sum = mask[0] * (a==0?255:imGet(src, x, y, width, height, rgba)) * (a==0||rgba==3?1:a);
+ for (var i = 1; i < mask.length; i++) {
+ var a1 = imGet(src, Math.max(x-i,0), y, width, height, 3)/255;
+ var a2 = imGet(src, Math.min(x+i, width-1), y, width, height, 3)/255;
+ sum += mask[i] *
+ ((a1==0?255:imGet(src, Math.max(x-i,0), y, width, height, rgba)) * (a1==0||rgba==3?1:a1) +
+ (a2==0?255:imGet(src, Math.min(x+i, width-1), y, width, height, rgba)) * (a2==0||rgba==3?1:a2));
+ }
+ imSet(dst, y, x, height, width, rgba, sum);
+ }
+ }
+ }
+ }
+
+ function imGet(img, x, y, width, height, rgba) {
+ return img[y*width*4 + x*4 + rgba];
+ }
+
+ function imSet(img, x, y, width, height, rgba, val) {
+ img[y*width*4 + x*4 + rgba] = val;
+ }
+
+ function blur(ctx, width, height, sigma)
+ {
+ var srcData = ctx.getImageData(0, 0, width, height);
+ var mask = make_fgauss(sigma);
+ mask = normalize(mask);
+ tmp = [];
+ convolve_even(srcData.data, tmp, mask, width, height);
+ convolve_even(tmp, srcData.data, mask, height, width);
+ ctx.clearRect(0, 0, width, height);
+ ctx.putImageData(srcData, 0, 0);
+ }
+
+ this.apply = function(ctx, x, y, width, height) {
+ // assuming x==0 && y==0 for now
+ blur(ctx, width, height, this.attribute('stdDeviation').numValue());
+ }
+ }
+ svg.Element.filter.prototype = new svg.Element.feGaussianBlur;
+
+ // title element, do nothing
+ svg.Element.title = function(node) {
+ }
+ svg.Element.title.prototype = new svg.Element.ElementBase;
+
+ // desc element, do nothing
+ svg.Element.desc = function(node) {
+ }
+ svg.Element.desc.prototype = new svg.Element.ElementBase;
+
+ svg.Element.MISSING = function(node) {
+ console.log('ERROR: Element \'' + node.nodeName + '\' not yet implemented.');
+ }
+ svg.Element.MISSING.prototype = new svg.Element.ElementBase;
+
+ // element factory
+ svg.CreateElement = function(node) {
+ var className = node.nodeName.replace(/^[^:]+:/,''); // remove namespace
+ className = className.replace(/\-/g,''); // remove dashes
+ var e = null;
+ if (typeof(svg.Element[className]) != 'undefined') {
+ e = new svg.Element[className](node);
+ }
+ else {
+ e = new svg.Element.MISSING(node);
+ }
+
+ e.type = node.nodeName;
+ return e;
+ }
+
+ // load from url
+ svg.load = function(ctx, url) {
+ svg.loadXml(ctx, svg.ajax(url));
+ }
+
+ // load from xml
+ svg.loadXml = function(ctx, xml) {
+ svg.loadXmlDoc(ctx, svg.parseXml(xml));
+ }
+
+ svg.loadXmlDoc = function(ctx, dom) {
+ svg.init(ctx);
+
+ var mapXY = function(p) {
+ var e = ctx.canvas;
+ while (e) {
+ p.x -= e.offsetLeft;
+ p.y -= e.offsetTop;
+ e = e.offsetParent;
+ }
+ if (window.scrollX) p.x += window.scrollX;
+ if (window.scrollY) p.y += window.scrollY;
+ return p;
+ }
+
+ // bind mouse
+ if (svg.opts['ignoreMouse'] != true) {
+ ctx.canvas.onclick = function(e) {
+ var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));
+ svg.Mouse.onclick(p.x, p.y);
+ };
+ ctx.canvas.onmousemove = function(e) {
+ var p = mapXY(new svg.Point(e != null ? e.clientX : event.clientX, e != null ? e.clientY : event.clientY));
+ svg.Mouse.onmousemove(p.x, p.y);
+ };
+ }
+
+ var e = svg.CreateElement(dom.documentElement);
+ e.root = true;
+
+ // render loop
+ var isFirstRender = true;
+ var draw = function() {
+ svg.ViewPort.Clear();
+ if (ctx.canvas.parentNode) svg.ViewPort.SetCurrent(ctx.canvas.parentNode.clientWidth, ctx.canvas.parentNode.clientHeight);
+
+ if (svg.opts['ignoreDimensions'] != true) {
+ // set canvas size
+ if (e.style('width').hasValue()) {
+ ctx.canvas.width = e.style('width').Length.toPixels('x');
+ ctx.canvas.style.width = ctx.canvas.width + 'px';
+ }
+ if (e.style('height').hasValue()) {
+ ctx.canvas.height = e.style('height').Length.toPixels('y');
+ ctx.canvas.style.height = ctx.canvas.height + 'px';
+ }
+ }
+ var cWidth = ctx.canvas.clientWidth || ctx.canvas.width;
+ var cHeight = ctx.canvas.clientHeight || ctx.canvas.height;
+ svg.ViewPort.SetCurrent(cWidth, cHeight);
+
+ if (svg.opts != null && svg.opts['offsetX'] != null) e.attribute('x', true).value = svg.opts['offsetX'];
+ if (svg.opts != null && svg.opts['offsetY'] != null) e.attribute('y', true).value = svg.opts['offsetY'];
+ if (svg.opts != null && svg.opts['scaleWidth'] != null && svg.opts['scaleHeight'] != null) {
+ var xRatio = 1, yRatio = 1;
+ if (e.attribute('width').hasValue()) xRatio = e.attribute('width').Length.toPixels('x') / svg.opts['scaleWidth'];
+ if (e.attribute('height').hasValue()) yRatio = e.attribute('height').Length.toPixels('y') / svg.opts['scaleHeight'];
+
+ e.attribute('width', true).value = svg.opts['scaleWidth'];
+ e.attribute('height', true).value = svg.opts['scaleHeight'];
+ e.attribute('viewBox', true).value = '0 0 ' + (cWidth * xRatio) + ' ' + (cHeight * yRatio);
+ e.attribute('preserveAspectRatio', true).value = 'none';
+ }
+
+ // clear and render
+ if (svg.opts['ignoreClear'] != true) {
+ ctx.clearRect(0, 0, cWidth, cHeight);
+ }
+ e.render(ctx);
+ if (isFirstRender) {
+ isFirstRender = false;
+ if (svg.opts != null && typeof(svg.opts['renderCallback']) == 'function') svg.opts['renderCallback']();
+ }
+ }
+
+ var waitingForImages = true;
+ if (svg.ImagesLoaded()) {
+ waitingForImages = false;
+ draw();
+ }
+ svg.intervalID = setInterval(function() {
+ var needUpdate = false;
+
+ if (waitingForImages && svg.ImagesLoaded()) {
+ waitingForImages = false;
+ needUpdate = true;
+ }
+
+ // need update from mouse events?
+ if (svg.opts['ignoreMouse'] != true) {
+ needUpdate = needUpdate | svg.Mouse.hasEvents();
+ }
+
+ // need update from animations?
+ if (svg.opts['ignoreAnimation'] != true) {
+ for (var i=0; i<svg.Animations.length; i++) {
+ needUpdate = needUpdate | svg.Animations[i].update(1000 / svg.FRAMERATE);
+ }
+ }
+
+ // need update from redraw?
+ if (svg.opts != null && typeof(svg.opts['forceRedraw']) == 'function') {
+ if (svg.opts['forceRedraw']() == true) needUpdate = true;
+ }
+
+ // render if needed
+ if (needUpdate) {
+ draw();
+ svg.Mouse.runEvents(); // run and clear our events
+ }
+ }, 1000 / svg.FRAMERATE);
+ }
+
+ svg.stop = function() {
+ if (svg.intervalID) {
+ clearInterval(svg.intervalID);
+ }
+ }
+
+ svg.Mouse = new (function() {
+ this.events = [];
+ this.hasEvents = function() { return this.events.length != 0; }
+
+ this.onclick = function(x, y) {
+ this.events.push({ type: 'onclick', x: x, y: y,
+ run: function(e) { if (e.onclick) e.onclick(); }
+ });
+ }
+
+ this.onmousemove = function(x, y) {
+ this.events.push({ type: 'onmousemove', x: x, y: y,
+ run: function(e) { if (e.onmousemove) e.onmousemove(); }
+ });
+ }
+
+ this.eventElements = [];
+
+ this.checkPath = function(element, ctx) {
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ if (ctx.isPointInPath && ctx.isPointInPath(e.x, e.y)) this.eventElements[i] = element;
+ }
+ }
+
+ this.checkBoundingBox = function(element, bb) {
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ if (bb.isPointInBox(e.x, e.y)) this.eventElements[i] = element;
+ }
+ }
+
+ this.runEvents = function() {
+ svg.ctx.canvas.style.cursor = '';
+
+ for (var i=0; i<this.events.length; i++) {
+ var e = this.events[i];
+ var element = this.eventElements[i];
+ while (element) {
+ e.run(element);
+ element = element.parent;
+ }
+ }
+
+ // done running, clear
+ this.events = [];
+ this.eventElements = [];
+ }
+ });
+
+ return svg;
+ }
+})();
+
+if (CanvasRenderingContext2D) {
+ CanvasRenderingContext2D.prototype.drawSvg = function(s, dx, dy, dw, dh) {
+ canvg(this.canvas, s, {
+ ignoreMouse: true,
+ ignoreAnimation: true,
+ ignoreDimensions: true,
+ ignoreClear: true,
+ offsetX: dx,
+ offsetY: dy,
+ scaleWidth: dw,
+ scaleHeight: dh
+ });
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/canvg/rgbcolor.js b/files_svgedit/svg-edit/canvg/rgbcolor.js
new file mode 100644
index 000000000..108bbaea7
--- /dev/null
+++ b/files_svgedit/svg-edit/canvg/rgbcolor.js
@@ -0,0 +1,287 @@
+/**
+ * A class to parse color values
+ * @author Stoyan Stefanov <sstoo@gmail.com>
+ * @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/files_svgedit/svg-edit/contextmenu.js b/files_svgedit/svg-edit/contextmenu.js
new file mode 100644
index 000000000..0d5dd3439
--- /dev/null
+++ b/files_svgedit/svg-edit/contextmenu.js
@@ -0,0 +1,67 @@
+/**
+ * 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("<li class='separator'>");
+ }
+ var shortcut = menuItem.shortcut || "";
+ $("#cmenu_canvas").append("<li class='disabled'><a href='#" + menuItem.id + "'>"
+ + menuItem.label + "<span class='shortcut'>"
+ + shortcut + "</span></a></li>");
+ }
+
+ 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/files_svgedit/svg-edit/contextmenu/.svn/all-wcprops b/files_svgedit/svg-edit/contextmenu/.svn/all-wcprops
new file mode 100644
index 000000000..ba58a6ada
--- /dev/null
+++ b/files_svgedit/svg-edit/contextmenu/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/2065/trunk/editor/contextmenu
+END
+jquery.contextMenu.js
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/2065/trunk/editor/contextmenu/jquery.contextMenu.js
+END
diff --git a/files_svgedit/svg-edit/contextmenu/.svn/entries b/files_svgedit/svg-edit/contextmenu/.svn/entries
new file mode 100644
index 000000000..68310b4ea
--- /dev/null
+++ b/files_svgedit/svg-edit/contextmenu/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/contextmenu
+http://svg-edit.googlecode.com/svn
+
+
+
+2012-03-20T08:58:24.542557Z
+2065
+asyazwan@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jquery.contextMenu.js
+file
+
+
+
+
+2012-03-25T18:41:47.448355Z
+9dd37a7d16d1fbec5f7687de54f697ed
+2012-03-20T08:58:24.542557Z
+2065
+asyazwan@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6314
+
diff --git a/files_svgedit/svg-edit/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base b/files_svgedit/svg-edit/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base
new file mode 100644
index 000000000..931becff8
--- /dev/null
+++ b/files_svgedit/svg-edit/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base
@@ -0,0 +1,9 @@
+K 14
+svn:executable
+V 1
+*
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base b/files_svgedit/svg-edit/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base
new file mode 100644
index 000000000..76126019e
--- /dev/null
+++ b/files_svgedit/svg-edit/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base
@@ -0,0 +1,203 @@
+// 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');
+ if( evt.button === 2 || o.allowLeft || (evt.ctrlKey && svgedit.browser.isMac()) ) {
+ e.stopPropagation();
+ // Hide context menus that may be showing
+ $(".contextMenu").hide();
+ // 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/files_svgedit/svg-edit/contextmenu/jquery.contextMenu.js b/files_svgedit/svg-edit/contextmenu/jquery.contextMenu.js
new file mode 100755
index 000000000..76126019e
--- /dev/null
+++ b/files_svgedit/svg-edit/contextmenu/jquery.contextMenu.js
@@ -0,0 +1,203 @@
+// 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');
+ if( evt.button === 2 || o.allowLeft || (evt.ctrlKey && svgedit.browser.isMac()) ) {
+ e.stopPropagation();
+ // Hide context menus that may be showing
+ $(".contextMenu").hide();
+ // 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/files_svgedit/svg-edit/draw.js b/files_svgedit/svg-edit/draw.js
new file mode 100644
index 000000000..8db3138b0
--- /dev/null
+++ b/files_svgedit/svg-edit/draw.js
@@ -0,0 +1,528 @@
+/**
+ * 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 <svg> element";
+ }
+
+ /**
+ * The SVG DOM Element that represents this drawing.
+ * @type {SVGSVGElement}
+ */
+ this.svgElem_ = svgElem;
+
+ /**
+ * The latest object number used in this drawing.
+ * @type {number}
+ */
+ this.obj_num = 0;
+
+ /**
+ * The prefix to prepend to each element id in the drawing.
+ * @type {String}
+ */
+ this.idPrefix = opt_idPrefix || "svg_";
+
+ /**
+ * An array of released element ids to immediately reuse.
+ * @type {Array.<number>}
+ */
+ this.releasedNums = [];
+
+ /**
+ * The z-ordered array of tuples containing layer names and <g> elements.
+ * The first layer is the one at the bottom of the rendering.
+ * TODO: Turn this into an Array.<Layer>
+ * @type {Array.<Array.<String, SVGGElement>>}
+ */
+ this.all_layers = [];
+
+ /**
+ * The current layer being used.
+ * TODO: Make this a {Layer}.
+ * @type {SVGGElement}
+ */
+ this.current_layer = null;
+
+ /**
+ * The nonce to use to uniquely identify elements across drawings.
+ * @type {!String}
+ */
+ this.nonce_ = "";
+ var n = this.svgElem_.getAttributeNS(se_ns, 'nonce');
+ // If already set in the DOM, use the nonce throughout the document
+ // else, if randomizeIds(true) has been called, create and set the nonce.
+ if (!!n && randomize_ids != RandomizeModes.NEVER_RANDOMIZE) {
+ this.nonce_ = n;
+ } else if (randomize_ids == RandomizeModes.ALWAYS_RANDOMIZE) {
+ this.setNonce(Math.floor(Math.random() * 100001));
+ }
+};
+
+svgedit.draw.Drawing.prototype.getElem_ = function(id) {
+ if(this.svgElem_.querySelector) {
+ // querySelector lookup
+ return this.svgElem_.querySelector('#'+id);
+ } else {
+ // jQuery lookup: twice as slow as xpath in FF
+ return $(this.svgElem_).find('[id=' + id + ']')[0];
+ }
+};
+
+svgedit.draw.Drawing.prototype.getSvgElem = function() {
+ return this.svgElem_;
+};
+
+svgedit.draw.Drawing.prototype.getNonce = function() {
+ return this.nonce_;
+};
+
+svgedit.draw.Drawing.prototype.setNonce = function(n) {
+ this.svgElem_.setAttributeNS(xmlns_ns, 'xmlns:se', se_ns);
+ this.svgElem_.setAttributeNS(se_ns, 'se:nonce', n);
+ this.nonce_ = n;
+};
+
+svgedit.draw.Drawing.prototype.clearNonce = function() {
+ // We deliberately leave any se:nonce attributes alone,
+ // we just don't use it to randomize ids.
+ this.nonce_ = "";
+};
+
+/**
+ * Returns the latest object id as a string.
+ * @return {String} The latest object Id.
+ */
+svgedit.draw.Drawing.prototype.getId = function() {
+ return this.nonce_ ?
+ this.idPrefix + this.nonce_ +'_' + this.obj_num :
+ this.idPrefix + this.obj_num;
+};
+
+/**
+ * Returns the next object Id as a string.
+ * @return {String} The next object Id to use.
+ */
+svgedit.draw.Drawing.prototype.getNextId = function() {
+ var oldObjNum = this.obj_num;
+ var restoreOldObjNum = false;
+
+ // If there are any released numbers in the release stack,
+ // use the last one instead of the next obj_num.
+ // We need to temporarily use obj_num as that is what getId() depends on.
+ if (this.releasedNums.length > 0) {
+ this.obj_num = this.releasedNums.pop();
+ restoreOldObjNum = true;
+ } else {
+ // If we are not using a released id, then increment the obj_num.
+ this.obj_num++;
+ }
+
+ // Ensure the ID does not exist.
+ var id = this.getId();
+ while (this.getElem_(id)) {
+ if (restoreOldObjNum) {
+ this.obj_num = oldObjNum;
+ restoreOldObjNum = false;
+ }
+ this.obj_num++;
+ id = this.getId();
+ }
+ // Restore the old object number if required.
+ if (restoreOldObjNum) {
+ this.obj_num = oldObjNum;
+ }
+ return id;
+};
+
+// Function: svgedit.draw.Drawing.releaseId
+// Releases the object Id, letting it be used as the next id in getNextId().
+// This method DOES NOT remove any elements from the DOM, it is expected
+// that client code will do this.
+//
+// Parameters:
+// id - The id to release.
+//
+// Returns:
+// True if the id was valid to be released, false otherwise.
+svgedit.draw.Drawing.prototype.releaseId = function(id) {
+ // confirm if this is a valid id for this Document, else return false
+ var front = this.idPrefix + (this.nonce_ ? this.nonce_ +'_' : '');
+ if (typeof id != typeof '' || id.indexOf(front) != 0) {
+ return false;
+ }
+ // extract the obj_num of this id
+ var num = parseInt(id.substr(front.length));
+
+ // if we didn't get a positive number or we already released this number
+ // then return false.
+ if (typeof num != typeof 1 || num <= 0 || this.releasedNums.indexOf(num) != -1) {
+ return false;
+ }
+
+ // push the released number into the released queue
+ this.releasedNums.push(num);
+
+ return true;
+};
+
+// Function: svgedit.draw.Drawing.getNumLayers
+// Returns the number of layers in the current drawing.
+//
+// Returns:
+// The number of layers in the current drawing.
+svgedit.draw.Drawing.prototype.getNumLayers = function() {
+ return this.all_layers.length;
+};
+
+// Function: svgedit.draw.Drawing.hasLayer
+// Check if layer with given name already exists
+svgedit.draw.Drawing.prototype.hasLayer = function(name) {
+ for(var i = 0; i < this.getNumLayers(); i++) {
+ if(this.all_layers[i][0] == name) return true;
+ }
+ return false;
+};
+
+
+// Function: svgedit.draw.Drawing.getLayerName
+// Returns the name of the ith layer. If the index is out of range, an empty string is returned.
+//
+// Parameters:
+// i - the zero-based index of the layer you are querying.
+//
+// Returns:
+// The name of the ith layer
+svgedit.draw.Drawing.prototype.getLayerName = function(i) {
+ if (i >= 0 && i < this.getNumLayers()) {
+ return this.all_layers[i][0];
+ }
+ return "";
+};
+
+// Function: svgedit.draw.Drawing.getCurrentLayer
+// Returns:
+// The SVGGElement representing the current layer.
+svgedit.draw.Drawing.prototype.getCurrentLayer = function() {
+ return this.current_layer;
+};
+
+// Function: getCurrentLayerName
+// Returns the name of the currently selected layer. If an error occurs, an empty string
+// is returned.
+//
+// Returns:
+// The name of the currently active layer.
+svgedit.draw.Drawing.prototype.getCurrentLayerName = function() {
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.all_layers[i][1] == this.current_layer) {
+ return this.getLayerName(i);
+ }
+ }
+ return "";
+};
+
+// Function: setCurrentLayer
+// Sets the current layer. If the name is not a valid layer name, then this function returns
+// false. Otherwise it returns true. This is not an undo-able action.
+//
+// Parameters:
+// name - the name of the layer you want to switch to.
+//
+// Returns:
+// true if the current layer was switched, otherwise false
+svgedit.draw.Drawing.prototype.setCurrentLayer = function(name) {
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (name == this.getLayerName(i)) {
+ if (this.current_layer != this.all_layers[i][1]) {
+ this.current_layer.setAttribute("style", "pointer-events:none");
+ this.current_layer = this.all_layers[i][1];
+ this.current_layer.setAttribute("style", "pointer-events:all");
+ }
+ return true;
+ }
+ }
+ return false;
+};
+
+
+// Function: svgedit.draw.Drawing.deleteCurrentLayer
+// Deletes the current layer from the drawing and then clears the selection. This function
+// then calls the 'changed' handler. This is an undoable action.
+// Returns:
+// The SVGGElement of the layer removed or null.
+svgedit.draw.Drawing.prototype.deleteCurrentLayer = function() {
+ if (this.current_layer && this.getNumLayers() > 1) {
+ // actually delete from the DOM and return it
+ var parent = this.current_layer.parentNode;
+ var nextSibling = this.current_layer.nextSibling;
+ var oldLayerGroup = parent.removeChild(this.current_layer);
+ this.identifyLayers();
+ return oldLayerGroup;
+ }
+ return null;
+};
+
+// Function: svgedit.draw.Drawing.identifyLayers
+// Updates layer system and sets the current layer to the
+// top-most layer (last <g> child of this drawing).
+svgedit.draw.Drawing.prototype.identifyLayers = function() {
+ this.all_layers = [];
+ var numchildren = this.svgElem_.childNodes.length;
+ // loop through all children of SVG element
+ var orphans = [], layernames = [];
+ var a_layer = null;
+ var childgroups = false;
+ for (var i = 0; i < numchildren; ++i) {
+ var child = this.svgElem_.childNodes.item(i);
+ // for each g, find its layer name
+ if (child && child.nodeType == 1) {
+ if (child.tagName == "g") {
+ childgroups = true;
+ var name = $("title",child).text();
+
+ // Hack for Opera 10.60
+ if(!name && svgedit.browser.isOpera() && child.querySelectorAll) {
+ name = $(child.querySelectorAll('title')).text();
+ }
+
+ // store layer and name in global variable
+ if (name) {
+ layernames.push(name);
+ this.all_layers.push( [name,child] );
+ a_layer = child;
+ svgedit.utilities.walkTree(child, function(e){e.setAttribute("style", "pointer-events:inherit");});
+ a_layer.setAttribute("style", "pointer-events:none");
+ }
+ // if group did not have a name, it is an orphan
+ else {
+ orphans.push(child);
+ }
+ }
+ // if child has is "visible" (i.e. not a <title> or <defs> element), then it is an orphan
+ else if(~visElems_arr.indexOf(child.nodeName)) {
+ var bb = svgedit.utilities.getBBox(child);
+ orphans.push(child);
+ }
+ }
+ }
+
+ // create a new layer and add all the orphans to it
+ var svgdoc = this.svgElem_.ownerDocument;
+ if (orphans.length > 0 || !childgroups) {
+ var i = 1;
+ // TODO(codedread): What about internationalization of "Layer"?
+ while (layernames.indexOf(("Layer " + i)) >= 0) { i++; }
+ var newname = "Layer " + i;
+ a_layer = svgdoc.createElementNS(svg_ns, "g");
+ var layer_title = svgdoc.createElementNS(svg_ns, "title");
+ layer_title.textContent = newname;
+ a_layer.appendChild(layer_title);
+ for (var j = 0; j < orphans.length; ++j) {
+ a_layer.appendChild(orphans[j]);
+ }
+ this.svgElem_.appendChild(a_layer);
+ this.all_layers.push( [newname, a_layer] );
+ }
+ svgedit.utilities.walkTree(a_layer, function(e){e.setAttribute("style","pointer-events:inherit");});
+ this.current_layer = a_layer;
+ this.current_layer.setAttribute("style","pointer-events:all");
+};
+
+// Function: svgedit.draw.Drawing.createLayer
+// Creates a new top-level layer in the drawing with the given name and
+// sets the current layer to it.
+//
+// Parameters:
+// name - The given name
+//
+// Returns:
+// The SVGGElement of the new layer, which is also the current layer
+// of this drawing.
+svgedit.draw.Drawing.prototype.createLayer = function(name) {
+ var svgdoc = this.svgElem_.ownerDocument;
+ var new_layer = svgdoc.createElementNS(svg_ns, "g");
+ var layer_title = svgdoc.createElementNS(svg_ns, "title");
+ layer_title.textContent = name;
+ new_layer.appendChild(layer_title);
+ this.svgElem_.appendChild(new_layer);
+ this.identifyLayers();
+ return new_layer;
+};
+
+// Function: svgedit.draw.Drawing.getLayerVisibility
+// Returns whether the layer is visible. If the layer name is not valid, then this function
+// returns false.
+//
+// Parameters:
+// layername - the name of the layer which you want to query.
+//
+// Returns:
+// The visibility state of the layer, or false if the layer name was invalid.
+svgedit.draw.Drawing.prototype.getLayerVisibility = function(layername) {
+ // find the layer
+ var layer = null;
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ layer = this.all_layers[i][1];
+ break;
+ }
+ }
+ if (!layer) return false;
+ return (layer.getAttribute('display') != 'none');
+};
+
+// Function: svgedit.draw.Drawing.setLayerVisibility
+// Sets the visibility of the layer. If the layer name is not valid, this function return
+// false, otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// layername - the name of the layer to change the visibility
+// bVisible - true/false, whether the layer should be visible
+//
+// Returns:
+// The SVGGElement representing the layer if the layername was valid, otherwise null.
+svgedit.draw.Drawing.prototype.setLayerVisibility = function(layername, bVisible) {
+ if (typeof bVisible != typeof true) {
+ return null;
+ }
+ // find the layer
+ var layer = null;
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ layer = this.all_layers[i][1];
+ break;
+ }
+ }
+ if (!layer) return null;
+
+ var oldDisplay = layer.getAttribute("display");
+ if (!oldDisplay) oldDisplay = "inline";
+ layer.setAttribute("display", bVisible ? "inline" : "none");
+ return layer;
+};
+
+
+// Function: svgedit.draw.Drawing.getLayerOpacity
+// Returns the opacity of the given layer. If the input name is not a layer, null is returned.
+//
+// Parameters:
+// layername - name of the layer on which to get the opacity
+//
+// Returns:
+// The opacity value of the given layer. This will be a value between 0.0 and 1.0, or null
+// if layername is not a valid layer
+svgedit.draw.Drawing.prototype.getLayerOpacity = function(layername) {
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ var g = this.all_layers[i][1];
+ var opacity = g.getAttribute('opacity');
+ if (!opacity) {
+ opacity = '1.0';
+ }
+ return parseFloat(opacity);
+ }
+ }
+ return null;
+};
+
+// Function: svgedit.draw.Drawing.setLayerOpacity
+// Sets the opacity of the given layer. If the input name is not a layer, nothing happens.
+// If opacity is not a value between 0.0 and 1.0, then nothing happens.
+//
+// Parameters:
+// layername - name of the layer on which to set the opacity
+// opacity - a float value in the range 0.0-1.0
+svgedit.draw.Drawing.prototype.setLayerOpacity = function(layername, opacity) {
+ if (typeof opacity != typeof 1.0 || opacity < 0.0 || opacity > 1.0) {
+ return;
+ }
+ for (var i = 0; i < this.getNumLayers(); ++i) {
+ if (this.getLayerName(i) == layername) {
+ var g = this.all_layers[i][1];
+ g.setAttribute("opacity", opacity);
+ break;
+ }
+ }
+};
+
+})();
diff --git a/files_svgedit/svg-edit/embedapi.html b/files_svgedit/svg-edit/embedapi.html
new file mode 100644
index 000000000..3db036406
--- /dev/null
+++ b/files_svgedit/svg-edit/embedapi.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" >
+<head>
+ <title></title>
+</head>
+<body>
+
+ <script type="text/javascript" src="embedapi.js"></script>
+ <script type="text/javascript">
+ var svgCanvas = null;
+
+ function init_embed() {
+ var frame = document.getElementById('svgedit');
+ svgCanvas = new embedded_svg_edit(frame);
+
+ // Hide main button, as we will be controlling new/load/save etc from the host document
+ var doc;
+ doc = frame.contentDocument;
+ if (!doc)
+ {
+ doc = frame.contentWindow.document;
+ }
+
+ var mainButton = doc.getElementById('main_button');
+ mainButton.style.display = 'none';
+ }
+
+ function handleSvgData(data, error) {
+ if (error)
+ {
+ alert('error ' + error);
+ }
+ else
+ {
+ alert('Congratulations. Your SVG string is back in the host page, do with it what you will\n\n' + data);
+ }
+ }
+
+ function loadSvg() {
+ var svgexample = '<svg width="640" height="480" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><g><title>Layer 1</title><rect stroke-width="5" stroke="#000000" fill="#FF0000" id="svg_1" height="35" width="51" y="35" x="32"/><ellipse ry="15" rx="24" stroke-width="5" stroke="#000000" fill="#0000ff" id="svg_2" cy="60" cx="66"/></g></svg>';
+ svgCanvas.setSvgString(svgexample);
+ }
+
+ function saveSvg() {
+ svgCanvas.getSvgString()(handleSvgData);
+ }
+ </script>
+
+
+ <button onclick="loadSvg();">Load example</button>
+ <button onclick="saveSvg();">Save data</button>
+ <br/>
+
+ <iframe src="svg-editor.html" width="900px" height="600px" id="svgedit" onload="init_embed()"></iframe>
+</body>
+</html>
diff --git a/files_svgedit/svg-edit/embedapi.js b/files_svgedit/svg-edit/embedapi.js
new file mode 100644
index 000000000..8debfd6da
--- /dev/null
+++ b/files_svgedit/svg-edit/embedapi.js
@@ -0,0 +1,173 @@
+/*
+function embedded_svg_edit(frame){
+ //initialize communication
+ this.frame = frame;
+ this.stack = []; //callback stack
+
+ var editapi = this;
+
+ window.addEventListener("message", function(e){
+ if(e.data.substr(0,5) == "ERROR"){
+ editapi.stack.splice(0,1)[0](e.data,"error")
+ }else{
+ editapi.stack.splice(0,1)[0](e.data)
+ }
+ }, false)
+}
+
+embedded_svg_edit.prototype.call = function(code, callback){
+ this.stack.push(callback);
+ this.frame.contentWindow.postMessage(code,"*");
+}
+
+embedded_svg_edit.prototype.getSvgString = function(callback){
+ this.call("svgCanvas.getSvgString()",callback)
+}
+
+embedded_svg_edit.prototype.setSvgString = function(svg){
+ this.call("svgCanvas.setSvgString('"+svg.replace(/'/g, "\\'")+"')");
+}
+*/
+
+
+/*
+Embedded SVG-edit API
+
+General usage:
+- Have an iframe somewhere pointing to a version of svg-edit > r1000
+- Initialize the magic with:
+var svgCanvas = new embedded_svg_edit(window.frames['svgedit']);
+- Pass functions in this format:
+svgCanvas.setSvgString("string")
+- Or if a callback is needed:
+svgCanvas.setSvgString("string")(function(data, error){
+ if(error){
+ //there was an error
+ }else{
+ //handle data
+ }
+})
+
+Everything is done with the same API as the real svg-edit,
+and all documentation is unchanged. The only difference is
+when handling returns, the callback notation is used instead.
+
+var blah = new embedded_svg_edit(window.frames['svgedit']);
+blah.clearSelection("woot","blah",1337,[1,2,3,4,5,"moo"],-42,{a: "tree",b:6, c: 9})(function(){console.log("GET DATA",arguments)})
+*/
+
+function embedded_svg_edit(frame){
+ //initialize communication
+ this.frame = frame;
+ //this.stack = [] //callback stack
+ this.callbacks = {}; //successor to stack
+ this.encode = embedded_svg_edit.encode;
+ //List of functions extracted with this:
+ //Run in firebug on http://svg-edit.googlecode.com/svn/trunk/docs/files/svgcanvas-js.html
+
+ //for(var i=0,q=[],f = document.querySelectorAll("div.CFunction h3.CTitle a");i<f.length;i++){q.push(f[i].name)};q
+ //var functions = ["clearSelection", "addToSelection", "removeFromSelection", "open", "save", "getSvgString", "setSvgString",
+ //"createLayer", "deleteCurrentLayer", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition", "setLayerVisibility",
+ //"moveSelectedToLayer", "clear"];
+
+
+ //Newer, well, it extracts things that aren't documented as well. All functions accessible through the normal thingy can now be accessed though the API
+ //var l=[];for(var i in svgCanvas){if(typeof svgCanvas[i] == "function"){l.push(i)}};
+ //run in svgedit itself
+ var functions = ["updateElementFromJson", "embedImage", "fixOperaXML", "clearSelection", "addToSelection",
+ "removeFromSelection", "addNodeToSelection", "open", "save", "getSvgString", "setSvgString", "createLayer",
+ "deleteCurrentLayer", "getCurrentDrawing", "setCurrentLayer", "renameCurrentLayer", "setCurrentLayerPosition",
+ "setLayerVisibility", "moveSelectedToLayer", "clear", "clearPath", "getNodePoint", "clonePathNode", "deletePathNode",
+ "getResolution", "getImageTitle", "setImageTitle", "setResolution", "setBBoxZoom", "setZoom", "getMode", "setMode",
+ "getStrokeColor", "setStrokeColor", "getFillColor", "setFillColor", "setStrokePaint", "setFillPaint", "getStrokeWidth",
+ "setStrokeWidth", "getStrokeStyle", "setStrokeStyle", "getOpacity", "setOpacity", "getFillOpacity", "setFillOpacity",
+ "getStrokeOpacity", "setStrokeOpacity", "getTransformList", "getBBox", "getRotationAngle", "setRotationAngle", "each",
+ "bind", "setIdPrefix", "getBold", "setBold", "getItalic", "setItalic", "getFontFamily", "setFontFamily", "getFontSize",
+ "setFontSize", "getText", "setTextContent", "setImageURL", "setRectRadius", "setSegType", "quickClone",
+ "changeSelectedAttributeNoUndo", "changeSelectedAttribute", "deleteSelectedElements", "groupSelectedElements",
+ "ungroupSelectedElement", "moveToTopSelectedElement", "moveToBottomSelectedElement", "moveSelectedElements",
+ "getStrokedBBox", "getVisibleElements", "cycleElement", "getUndoStackSize", "getRedoStackSize", "getNextUndoCommandText",
+ "getNextRedoCommandText", "undo", "redo", "cloneSelectedElements", "alignSelectedElements", "getZoom", "getVersion",
+ "setIconSize", "setLang", "setCustomHandlers"];
+
+ //TODO: rewrite the following, it's pretty scary.
+ for(var i = 0; i < functions.length; i++){
+ this[functions[i]] = (function(d){
+ return function(){
+ var t = this //new callback
+ for(var g = 0, args = []; g < arguments.length; g++){
+ args.push(arguments[g]);
+ }
+ var cbid = t.send(d,args, function(){}) //the callback (currently it's nothing, but will be set later
+
+ return function(newcallback){
+ t.callbacks[cbid] = newcallback; //set callback
+ }
+ }
+ })(functions[i])
+ }
+ //TODO: use AddEvent for Trident browsers, currently they dont support SVG, but they do support onmessage
+ var t = this;
+ window.addEventListener("message", function(e){
+ if(e.data.substr(0,4)=="SVGe"){ //because svg-edit is too longish
+ var data = e.data.substr(4);
+ var cbid = data.substr(0, data.indexOf(";"));
+ if(t.callbacks[cbid]){
+ if(data.substr(0,6) != "error:"){
+ t.callbacks[cbid](eval("("+data.substr(cbid.length+1)+")"))
+ }else{
+ t.callbacks[cbid](data, "error");
+ }
+ }
+ }
+ //this.stack.shift()[0](e.data,e.data.substr(0,5) == "ERROR"?'error':null) //replace with shift
+ }, false)
+}
+
+embedded_svg_edit.encode = function(obj){
+ //simple partial JSON encoder implementation
+ if(window.JSON && JSON.stringify) return JSON.stringify(obj);
+ var enc = arguments.callee; //for purposes of recursion
+
+ if(typeof obj == "boolean" || typeof obj == "number"){
+ return obj+'' //should work...
+ }else if(typeof obj == "string"){
+ //a large portion of this is stolen from Douglas Crockford's json2.js
+ return '"'+
+ obj.replace(
+ /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g
+ , function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ })
+ +'"'; //note that this isn't quite as purtyful as the usualness
+ }else if(obj.length){ //simple hackish test for arrayish-ness
+ for(var i = 0; i < obj.length; i++){
+ obj[i] = enc(obj[i]); //encode every sub-thingy on top
+ }
+ return "["+obj.join(",")+"]";
+ }else{
+ var pairs = []; //pairs will be stored here
+ for(var k in obj){ //loop through thingys
+ pairs.push(enc(k)+":"+enc(obj[k])); //key: value
+ }
+ return "{"+pairs.join(",")+"}" //wrap in the braces
+ }
+}
+
+embedded_svg_edit.prototype.send = function(name, args, callback){
+ var cbid = Math.floor(Math.random()*31776352877+993577).toString();
+ //this.stack.push(callback);
+ this.callbacks[cbid] = callback;
+ for(var argstr = [], i = 0; i < args.length; i++){
+ argstr.push(this.encode(args[i]))
+ }
+ var t = this;
+ setTimeout(function(){//delay for the callback to be set in case its synchronous
+ t.frame.contentWindow.postMessage(cbid+";svgCanvas['"+name+"']("+argstr.join(",")+")","*");
+ }, 0);
+ return cbid;
+ //this.stack.shift()("svgCanvas['"+name+"']("+argstr.join(",")+")")
+}
+
+
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/all-wcprops b/files_svgedit/svg-edit/extensions/.svn/all-wcprops
new file mode 100644
index 000000000..ec28efa3c
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/all-wcprops
@@ -0,0 +1,143 @@
+K 25
+svn:wc:ra_dav:version-url
+V 42
+/svn/!svn/ver/2038/trunk/editor/extensions
+END
+ext-server_opensave.js
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/1695/trunk/editor/extensions/ext-server_opensave.js
+END
+ext-shapes.xml
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1627/trunk/editor/extensions/ext-shapes.xml
+END
+ext-server_moinsave.js
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/2038/trunk/editor/extensions/ext-server_moinsave.js
+END
+ext-imagelib.js
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/1897/trunk/editor/extensions/ext-imagelib.js
+END
+ext-helloworld.js
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/1458/trunk/editor/extensions/ext-helloworld.js
+END
+filesave.php
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/1625/trunk/editor/extensions/filesave.php
+END
+ext-arrows.js
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1962/trunk/editor/extensions/ext-arrows.js
+END
+ext-eyedropper.js
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/1955/trunk/editor/extensions/ext-eyedropper.js
+END
+fileopen.php
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/1625/trunk/editor/extensions/fileopen.php
+END
+foreignobject-icons.xml
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/1395/trunk/editor/extensions/foreignobject-icons.xml
+END
+ext-foreignobject.js
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1458/trunk/editor/extensions/ext-foreignobject.js
+END
+ext-closepath.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/1458/trunk/editor/extensions/ext-closepath.js
+END
+ext-shapes.js
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1959/trunk/editor/extensions/ext-shapes.js
+END
+ext-grid.js
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/1955/trunk/editor/extensions/ext-grid.js
+END
+helloworld-icon.xml
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1489/trunk/editor/extensions/helloworld-icon.xml
+END
+eyedropper.png
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1486/trunk/editor/extensions/eyedropper.png
+END
+eyedropper-icon.xml
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1486/trunk/editor/extensions/eyedropper-icon.xml
+END
+ext-connector.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/1955/trunk/editor/extensions/ext-connector.js
+END
+ext-imagelib.xml
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/1695/trunk/editor/extensions/ext-imagelib.xml
+END
+grid-icon.xml
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1700/trunk/editor/extensions/grid-icon.xml
+END
+closepath_icons.svg
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1418/trunk/editor/extensions/closepath_icons.svg
+END
+markers-icons.xml
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/1590/trunk/editor/extensions/markers-icons.xml
+END
+ext-markers.js
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1602/trunk/editor/extensions/ext-markers.js
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/entries b/files_svgedit/svg-edit/extensions/.svn/entries
new file mode 100644
index 000000000..5c89baa01
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/entries
@@ -0,0 +1,816 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/extensions
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-07-27T15:39:43.344436Z
+2038
+rusnakp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+ext-server_opensave.js
+file
+
+
+
+
+2012-03-25T18:41:41.004323Z
+e69dd55aaab1e5af99c5c99d665a2757
+2010-08-31T20:31:58.323788Z
+1695
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4797
+
+ext-shapes.xml
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+c8e9db99c7ae79c87a598e70bf09e958
+2010-07-09T19:12:30.540956Z
+1627
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1309
+
+ext-server_moinsave.js
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+4789dec74e5fcd6444d8611995d9481a
+2011-07-27T15:39:43.344436Z
+2038
+rusnakp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1904
+
+ext-imagelib.js
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+ebe71921273a1ff964b9227416e76201
+2011-01-04T21:12:00.201364Z
+1897
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10859
+
+ext-helloworld.js
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+56c4292130f2faa311462f934dfa4281
+2010-03-12T16:42:15.633913Z
+1458
+jacques.distler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2173
+
+filesave.php
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+825e8078b607c05589a894363462a15a
+2010-07-06T13:57:05.603104Z
+1625
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+994
+
+ext-arrows.js
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+c1787399306899c2d7c18a2ee0aa3870
+2011-02-01T07:22:18.410641Z
+1962
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7012
+
+ext-eyedropper.js
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+87dfbb341a3bb3e00764977f17bb9349
+2011-01-30T20:03:09.804905Z
+1955
+adrianbjones@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3843
+
+fileopen.php
+file
+
+
+
+
+2012-03-25T18:41:41.008323Z
+66b5d3047a1433afd1d15521220fd0f9
+2010-07-06T13:57:05.603104Z
+1625
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+722
+
+shapelib
+dir
+
+foreignobject-icons.xml
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+e388f2f9bfe836cdf3ca883435e4ca54
+2010-02-16T21:07:13.931777Z
+1395
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8310
+
+ext-foreignobject.js
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+d344273f989aa9fec4ee3526b06f0b42
+2010-03-12T16:42:15.633913Z
+1458
+jacques.distler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7242
+
+ext-closepath.js
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+29a6df6f9b83a5fe00c3a9766c38ae73
+2010-03-12T16:42:15.633913Z
+1458
+jacques.distler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2106
+
+ext-shapes.js
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+a76a151f4ad1ffcb175040dc93232212
+2011-01-31T19:15:24.407588Z
+1959
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+17402
+
+ext-grid.js
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+e0cd9e78b7b5ee5d5b239e85b6fad806
+2011-01-30T20:03:09.804905Z
+1955
+adrianbjones@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5183
+
+helloworld-icon.xml
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+29c6ce270b601a6e8f6cd8c0c5b7b486
+2010-03-30T15:28:57.570101Z
+1489
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1175
+
+eyedropper.png
+file
+
+
+
+
+2012-03-25T18:41:41.012323Z
+363cccac8ec7c7643155071b121f74be
+2010-03-29T03:22:42.888655Z
+1486
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+718
+
+eyedropper-icon.xml
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+2eaae1095de257f84f89f55fa1c572aa
+2010-03-29T03:22:42.888655Z
+1486
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2374
+
+ext-connector.js
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+87ec7e8fe4725526da90a599f96a600f
+2011-01-30T20:03:09.804905Z
+1955
+adrianbjones@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15865
+
+ext-imagelib.xml
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+2ccb5de1a1633ff722367053e31b1641
+2010-08-31T20:31:58.323788Z
+1695
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1669
+
+imagelib
+dir
+
+grid-icon.xml
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+ca861b3ee775245ba733d003e50ec8be
+2010-09-09T12:46:02.410793Z
+1700
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2045
+
+closepath_icons.svg
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+09120b11642af2a7673340f21c10a4d3
+2010-02-20T16:43:52.567537Z
+1418
+jacques.distler
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1507
+
+markers-icons.xml
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+40150c1095334bca44b22c5a86199332
+2010-06-08T18:40:13.061681Z
+1590
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5441
+
+ext-markers.js
+file
+
+
+
+
+2012-03-25T18:41:41.016323Z
+6fed1d40c72d96b7442b659d2e0d34cb
+2010-06-17T17:57:24.714677Z
+1602
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+16220
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/closepath_icons.svg.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/closepath_icons.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/closepath_icons.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/ext-imagelib.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/ext-imagelib.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/ext-imagelib.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/ext-shapes.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/ext-shapes.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/ext-shapes.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper.png.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/eyedropper.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/grid-icon.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/grid-icon.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/grid-icon.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/helloworld-icon.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/helloworld-icon.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/helloworld-icon.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/prop-base/markers-icons.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/prop-base/markers-icons.xml.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/prop-base/markers-icons.xml.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/closepath_icons.svg.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/closepath_icons.svg.svn-base
new file mode 100644
index 000000000..7294f5ead
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/closepath_icons.svg.svn-base
@@ -0,0 +1,41 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<g id="tool_closepath">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <title>Layer 1</title>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
+ <line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
+ <path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ </g>
+</svg>
+</g>
+<g id="tool_openpath">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <title>Layer 1</title>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
+ <line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ <g stroke="#A00" stroke-width="15" fill="none">
+ <line x1="168" y1="24" x2="210" y2="150"/>
+ <line x1="210" y1="24" x2="168" y2="150"/>
+ </g>
+ </g>
+</svg>
+</g>
+
+<g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-arrows.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-arrows.js.svn-base
new file mode 100644
index 000000000..4bb5cd25d
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-arrows.js.svn-base
@@ -0,0 +1,298 @@
+/*
+ * ext-arrows.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+
+svgEditor.addExtension("Arrows", function(S) {
+ var svgcontent = S.svgcontent,
+ addElem = S.addSvgElementFromJson,
+ nonce = S.nonce,
+ randomize_ids = S.randomize_ids,
+ selElems;
+
+ svgCanvas.bind('setnonce', setArrowNonce);
+ svgCanvas.bind('unsetnonce', unsetArrowNonce);
+
+ var lang_list = {
+ "en":[
+ {"id": "arrow_none", "textContent": "No arrow" }
+ ],
+ "fr":[
+ {"id": "arrow_none", "textContent": "Sans flèche" }
+ ]
+ };
+
+ var prefix = 'se_arrow_';
+ if (randomize_ids) {
+ var arrowprefix = prefix + nonce + '_';
+ } else {
+ var arrowprefix = prefix;
+ }
+
+ var pathdata = {
+ fw: {d:"m0,0l10,5l-10,5l5,-5l-5,-5z", refx:8, id: arrowprefix + 'fw'},
+ bk: {d:"m10,0l-10,5l10,5l-5,-5l5,-5z", refx:2, id: arrowprefix + 'bk'}
+ }
+
+ function setArrowNonce(window, n) {
+ randomize_ids = true;
+ arrowprefix = prefix + n + '_';
+ pathdata.fw.id = arrowprefix + 'fw';
+ pathdata.bk.id = arrowprefix + 'bk';
+ }
+
+ function unsetArrowNonce(window) {
+ randomize_ids = false;
+ arrowprefix = prefix;
+ pathdata.fw.id = arrowprefix + 'fw';
+ pathdata.bk.id = arrowprefix + 'bk';
+ }
+
+ function getLinked(elem, attr) {
+ var str = elem.getAttribute(attr);
+ if(!str) return null;
+ var m = str.match(/\(\#(.*)\)/);
+ if(!m || m.length !== 2) {
+ return null;
+ }
+ return S.getElem(m[1]);
+ }
+
+ function showPanel(on) {
+ $('#arrow_panel').toggle(on);
+
+ if(on) {
+ var el = selElems[0];
+ var end = el.getAttribute("marker-end");
+ var start = el.getAttribute("marker-start");
+ var mid = el.getAttribute("marker-mid");
+ var val;
+
+ if(end && start) {
+ val = "both";
+ } else if(end) {
+ val = "end";
+ } else if(start) {
+ val = "start";
+ } else if(mid) {
+ val = "mid";
+ if(mid.indexOf("bk") != -1) {
+ val = "mid_bk";
+ }
+ }
+
+ if(!start && !mid && !end) {
+ val = "none";
+ }
+
+ $("#arrow_list").val(val);
+ }
+ }
+
+ function resetMarker() {
+ var el = selElems[0];
+ el.removeAttribute("marker-start");
+ el.removeAttribute("marker-mid");
+ el.removeAttribute("marker-end");
+ }
+
+ function addMarker(dir, type, id) {
+ // TODO: Make marker (or use?) per arrow type, since refX can be different
+ id = id || arrowprefix + dir;
+
+ var marker = S.getElem(id);
+
+ var data = pathdata[dir];
+
+ if(type == "mid") {
+ data.refx = 5;
+ }
+
+ if(!marker) {
+ marker = addElem({
+ "element": "marker",
+ "attr": {
+ "viewBox": "0 0 10 10",
+ "id": id,
+ "refY": 5,
+ "markerUnits": "strokeWidth",
+ "markerWidth": 5,
+ "markerHeight": 5,
+ "orient": "auto",
+ "style": "pointer-events:none" // Currently needed for Opera
+ }
+ });
+ var arrow = addElem({
+ "element": "path",
+ "attr": {
+ "d": data.d,
+ "fill": "#000000"
+ }
+ });
+ marker.appendChild(arrow);
+ S.findDefs().appendChild(marker);
+ }
+
+ marker.setAttribute('refX', data.refx);
+
+ return marker;
+ }
+
+ function setArrow() {
+ var type = this.value;
+ resetMarker();
+
+ if(type == "none") {
+ return;
+ }
+
+ // Set marker on element
+ var dir = "fw";
+ if(type == "mid_bk") {
+ type = "mid";
+ dir = "bk";
+ } else if(type == "both") {
+ addMarker("bk", type);
+ svgCanvas.changeSelectedAttribute("marker-start", "url(#" + pathdata.bk.id + ")");
+ type = "end";
+ dir = "fw";
+ } else if (type == "start") {
+ dir = "bk";
+ }
+
+ addMarker(dir, type);
+ svgCanvas.changeSelectedAttribute("marker-"+type, "url(#" + pathdata[dir].id + ")");
+ S.call("changed", selElems);
+ }
+
+ function colorChanged(elem) {
+ var color = elem.getAttribute('stroke');
+
+ var mtypes = ['start','mid','end'];
+ var defs = S.findDefs();
+
+ $.each(mtypes, function(i, type) {
+ var marker = getLinked(elem, 'marker-'+type);
+ if(!marker) return;
+
+ var cur_color = $(marker).children().attr('fill');
+ var cur_d = $(marker).children().attr('d');
+ var new_marker = null;
+ if(cur_color === color) return;
+
+ var all_markers = $(defs).find('marker');
+ // Different color, check if already made
+ all_markers.each(function() {
+ var attrs = $(this).children().attr(['fill', 'd']);
+ if(attrs.fill === color && attrs.d === cur_d) {
+ // Found another marker with this color and this path
+ new_marker = this;
+ }
+ });
+
+ if(!new_marker) {
+ // Create a new marker with this color
+ var last_id = marker.id;
+ var dir = last_id.indexOf('_fw') !== -1?'fw':'bk';
+
+ new_marker = addMarker(dir, type, arrowprefix + dir + all_markers.length);
+
+ $(new_marker).children().attr('fill', color);
+ }
+
+ $(elem).attr('marker-'+type, "url(#" + new_marker.id + ")");
+
+ // Check if last marker can be removed
+ var remove = true;
+ $(S.svgcontent).find('line, polyline, path, polygon').each(function() {
+ var elem = this;
+ $.each(mtypes, function(j, mtype) {
+ if($(elem).attr('marker-' + mtype) === "url(#" + marker.id + ")") {
+ return remove = false;
+ }
+ });
+ if(!remove) return false;
+ });
+
+ // Not found, so can safely remove
+ if(remove) {
+ $(marker).remove();
+ }
+
+ });
+
+ }
+
+ return {
+ name: "Arrows",
+ context_tools: [{
+ type: "select",
+ panel: "arrow_panel",
+ title: "Select arrow type",
+ id: "arrow_list",
+ options: {
+ none: "No arrow",
+ end: "----&gt;",
+ start: "&lt;----",
+ both: "&lt;---&gt;",
+ mid: "--&gt;--",
+ mid_bk: "--&lt;--"
+ },
+ defval: "none",
+ events: {
+ change: setArrow
+ }
+ }],
+ callback: function() {
+ $('#arrow_panel').hide();
+ // Set ID so it can be translated in locale file
+ $('#arrow_list option')[0].id = 'connector_no_arrow';
+ },
+ addLangData: function(lang) {
+ return {
+ data: lang_list[lang]
+ };
+ },
+ selectedChanged: function(opts) {
+
+ // Use this to update the current selected elements
+ selElems = opts.elems;
+
+ var i = selElems.length;
+ var marker_elems = ['line','path','polyline','polygon'];
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
+ if(opts.selectedElement && !opts.multiselected) {
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ },
+ elementChanged: function(opts) {
+ var elem = opts.elems[0];
+ if(elem && (
+ elem.getAttribute("marker-start") ||
+ elem.getAttribute("marker-mid") ||
+ elem.getAttribute("marker-end")
+ )) {
+ // var start = elem.getAttribute("marker-start");
+ // var mid = elem.getAttribute("marker-mid");
+ // var end = elem.getAttribute("marker-end");
+ // Has marker, so see if it should match color
+ colorChanged(elem);
+ }
+
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-closepath.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-closepath.js.svn-base
new file mode 100644
index 000000000..bf8e72c94
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-closepath.js.svn-base
@@ -0,0 +1,92 @@
+/*
+ * ext-closepath.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jeff Schiller
+ *
+ */
+
+// This extension adds a simple button to the contextual panel for paths
+// The button toggles whether the path is open or closed
+svgEditor.addExtension("ClosePath", function(S) {
+ var selElems,
+ updateButton = function(path) {
+ var seglist = path.pathSegList,
+ closed = seglist.getItem(seglist.numberOfItems - 1).pathSegType==1,
+ showbutton = closed ? '#tool_openpath' : '#tool_closepath',
+ hidebutton = closed ? '#tool_closepath' : '#tool_openpath';
+ $(hidebutton).hide();
+ $(showbutton).show();
+ },
+ showPanel = function(on) {
+ $('#closepath_panel').toggle(on);
+ if (on) {
+ var path = selElems[0];
+ if (path) updateButton(path);
+ }
+ },
+
+ toggleClosed = function() {
+ var path = selElems[0];
+ if (path) {
+ var seglist = path.pathSegList,
+ last = seglist.numberOfItems - 1;
+ // is closed
+ if(seglist.getItem(last).pathSegType == 1) {
+ seglist.removeItem(last);
+ }
+ else {
+ seglist.appendItem(path.createSVGPathSegClosePath());
+ }
+ updateButton(path);
+ }
+ };
+
+ return {
+ name: "ClosePath",
+ svgicons: "extensions/closepath_icons.svg",
+ buttons: [{
+ id: "tool_openpath",
+ type: "context",
+ panel: "closepath_panel",
+ title: "Open path",
+ events: {
+ 'click': function() {
+ toggleClosed();
+ }
+ }
+ },
+ {
+ id: "tool_closepath",
+ type: "context",
+ panel: "closepath_panel",
+ title: "Close path",
+ events: {
+ 'click': function() {
+ toggleClosed();
+ }
+ }
+ }],
+ callback: function() {
+ $('#closepath_panel').hide();
+ },
+ selectedChanged: function(opts) {
+ selElems = opts.elems;
+ var i = selElems.length;
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && elem.tagName == 'path') {
+ if(opts.selectedElement && !opts.multiselected) {
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-connector.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-connector.js.svn-base
new file mode 100644
index 000000000..3498c7f43
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-connector.js.svn-base
@@ -0,0 +1,587 @@
+/*
+ * ext-connector.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("Connector", function(S) {
+ var svgcontent = S.svgcontent,
+ svgroot = S.svgroot,
+ getNextId = S.getNextId,
+ getElem = S.getElem,
+ addElem = S.addSvgElementFromJson,
+ selManager = S.selectorManager,
+ curConfig = svgEditor.curConfig,
+ started = false,
+ start_x,
+ start_y,
+ cur_line,
+ start_elem,
+ end_elem,
+ connections = [],
+ conn_sel = ".se_connector",
+ se_ns,
+// connect_str = "-SE_CONNECT-",
+ selElems = [];
+
+ elData = $.data;
+
+ var lang_list = {
+ "en":[
+ {"id": "mode_connect", "title": "Connect two objects" }
+ ],
+ "fr":[
+ {"id": "mode_connect", "title": "Connecter deux objets"}
+ ]
+ };
+
+ function getOffset(side, line) {
+ var give_offset = !!line.getAttribute('marker-' + side);
+// var give_offset = $(line).data(side+'_off');
+
+ // TODO: Make this number (5) be based on marker width/height
+ var size = line.getAttribute('stroke-width') * 5;
+ return give_offset ? size : 0;
+ }
+
+ function showPanel(on) {
+ var conn_rules = $('#connector_rules');
+ if(!conn_rules.length) {
+ conn_rules = $('<style id="connector_rules"><\/style>').appendTo('head');
+ }
+ conn_rules.text(!on?"":"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }");
+ $('#connector_panel').toggle(on);
+ }
+
+ function setPoint(elem, pos, x, y, setMid) {
+ var pts = elem.points;
+ var pt = svgroot.createSVGPoint();
+ pt.x = x;
+ pt.y = y;
+ if(pos === 'end') pos = pts.numberOfItems-1;
+ // TODO: Test for this on init, then use alt only if needed
+ try {
+ pts.replaceItem(pt, pos);
+ } catch(err) {
+ // Should only occur in FF which formats points attr as "n,n n,n", so just split
+ var pt_arr = elem.getAttribute("points").split(" ");
+ for(var i=0; i< pt_arr.length; i++) {
+ if(i == pos) {
+ pt_arr[i] = x + ',' + y;
+ }
+ }
+ elem.setAttribute("points",pt_arr.join(" "));
+ }
+
+ if(setMid) {
+ // Add center point
+ var pt_start = pts.getItem(0);
+ var pt_end = pts.getItem(pts.numberOfItems-1);
+ setPoint(elem, 1, (pt_end.x + pt_start.x)/2, (pt_end.y + pt_start.y)/2);
+ }
+ }
+
+ function updateLine(diff_x, diff_y) {
+ // Update line with element
+ var i = connections.length;
+ while(i--) {
+ var conn = connections[i];
+ var line = conn.connector;
+ var elem = conn.elem;
+
+ var pre = conn.is_start?'start':'end';
+// var sw = line.getAttribute('stroke-width') * 5;
+
+ // Update bbox for this element
+ var bb = elData(line, pre+'_bb');
+ bb.x = conn.start_x + diff_x;
+ bb.y = conn.start_y + diff_y;
+ elData(line, pre+'_bb', bb);
+
+ var alt_pre = conn.is_start?'end':'start';
+
+ // Get center pt of connected element
+ var bb2 = elData(line, alt_pre+'_bb');
+ var src_x = bb2.x + bb2.width/2;
+ var src_y = bb2.y + bb2.height/2;
+
+ // Set point of element being moved
+ var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0
+ setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true);
+
+ // Set point of connected element
+ var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line));
+ setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true);
+
+ }
+ }
+
+ function findConnectors(elems) {
+ if(!elems) elems = selElems;
+ var connectors = $(svgcontent).find(conn_sel);
+ connections = [];
+
+ // Loop through connectors to see if one is connected to the element
+ connectors.each(function() {
+ var start = elData(this, "c_start");
+ var end = elData(this, "c_end");
+
+ var parts = [getElem(start), getElem(end)];
+ for(var i=0; i<2; i++) {
+ var c_elem = parts[i];
+ var add_this = false;
+ // The connected element might be part of a selected group
+ $(c_elem).parents().each(function() {
+ if($.inArray(this, elems) !== -1) {
+ // Pretend this element is selected
+ add_this = true;
+ }
+ });
+
+ if(!c_elem || !c_elem.parentNode) {
+ $(this).remove();
+ continue;
+ }
+ if($.inArray(c_elem, elems) !== -1 || add_this) {
+ var bb = svgCanvas.getStrokedBBox([c_elem]);
+ connections.push({
+ elem: c_elem,
+ connector: this,
+ is_start: (i === 0),
+ start_x: bb.x,
+ start_y: bb.y
+ });
+ }
+ }
+ });
+ }
+
+ function updateConnectors(elems) {
+ // Updates connector lines based on selected elements
+ // Is not used on mousemove, as it runs getStrokedBBox every time,
+ // which isn't necessary there.
+ findConnectors(elems);
+ if(connections.length) {
+ // Update line with element
+ var i = connections.length;
+ while(i--) {
+ var conn = connections[i];
+ var line = conn.connector;
+ var elem = conn.elem;
+
+ var sw = line.getAttribute('stroke-width') * 5;
+ var pre = conn.is_start?'start':'end';
+
+ // Update bbox for this element
+ var bb = svgCanvas.getStrokedBBox([elem]);
+ bb.x = conn.start_x;
+ bb.y = conn.start_y;
+ elData(line, pre+'_bb', bb);
+ var add_offset = elData(line, pre+'_off');
+
+ var alt_pre = conn.is_start?'end':'start';
+
+ // Get center pt of connected element
+ var bb2 = elData(line, alt_pre+'_bb');
+ var src_x = bb2.x + bb2.width/2;
+ var src_y = bb2.y + bb2.height/2;
+
+ // Set point of element being moved
+ var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line));
+ setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true);
+
+ // Set point of connected element
+ var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line));
+ setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true);
+
+ // Update points attribute manually for webkit
+ if(navigator.userAgent.indexOf('AppleWebKit') != -1) {
+ var pts = line.points;
+ var len = pts.numberOfItems;
+ var pt_arr = Array(len);
+ for(var j=0; j< len; j++) {
+ var pt = pts.getItem(j);
+ pt_arr[j] = pt.x + ',' + pt.y;
+ }
+ line.setAttribute("points",pt_arr.join(" "));
+ }
+
+ }
+ }
+ }
+
+ function getBBintersect(x, y, bb, offset) {
+ if(offset) {
+ offset -= 0;
+ bb = $.extend({}, bb);
+ bb.width += offset;
+ bb.height += offset;
+ bb.x -= offset/2;
+ bb.y -= offset/2;
+ }
+
+ var mid_x = bb.x + bb.width/2;
+ var mid_y = bb.y + bb.height/2;
+ var len_x = x - mid_x;
+ var len_y = y - mid_y;
+
+ var slope = Math.abs(len_y/len_x);
+
+ var ratio;
+
+ if(slope < bb.height/bb.width) {
+ ratio = (bb.width/2) / Math.abs(len_x);
+ } else {
+ ratio = (bb.height/2) / Math.abs(len_y);
+ }
+
+
+ return {
+ x: mid_x + len_x * ratio,
+ y: mid_y + len_y * ratio
+ }
+ }
+
+ // Do once
+ (function() {
+ var gse = svgCanvas.groupSelectedElements;
+
+ svgCanvas.groupSelectedElements = function() {
+ svgCanvas.removeFromSelection($(conn_sel).toArray());
+ return gse.apply(this, arguments);
+ }
+
+ var mse = svgCanvas.moveSelectedElements;
+
+ svgCanvas.moveSelectedElements = function() {
+ svgCanvas.removeFromSelection($(conn_sel).toArray());
+ var cmd = mse.apply(this, arguments);
+ updateConnectors();
+ return cmd;
+ }
+
+ se_ns = svgCanvas.getEditorNS();
+ }());
+
+ // Do on reset
+ function init() {
+ // Make sure all connectors have data set
+ $(svgcontent).find('*').each(function() {
+ var conn = this.getAttributeNS(se_ns, "connector");
+ if(conn) {
+ this.setAttribute('class', conn_sel.substr(1));
+ var conn_data = conn.split(' ');
+ var sbb = svgCanvas.getStrokedBBox([getElem(conn_data[0])]);
+ var ebb = svgCanvas.getStrokedBBox([getElem(conn_data[1])]);
+ $(this).data('c_start',conn_data[0])
+ .data('c_end',conn_data[1])
+ .data('start_bb', sbb)
+ .data('end_bb', ebb);
+ svgCanvas.getEditorNS(true);
+ }
+ });
+// updateConnectors();
+ }
+
+// $(svgroot).parent().mousemove(function(e) {
+// // if(started
+// // || svgCanvas.getMode() != "connector"
+// // || e.target.parentNode.parentNode != svgcontent) return;
+//
+// console.log('y')
+// // if(e.target.parentNode.parentNode === svgcontent) {
+// //
+// // }
+// });
+
+ return {
+ name: "Connector",
+ svgicons: "images/conn.svg",
+ buttons: [{
+ id: "mode_connect",
+ type: "mode",
+ icon: "images/cut.png",
+ title: "Connect two objects",
+ includeWith: {
+ button: '#tool_line',
+ isDefault: false,
+ position: 1
+ },
+ events: {
+ 'click': function() {
+ svgCanvas.setMode("connector");
+ }
+ }
+ }],
+ addLangData: function(lang) {
+ return {
+ data: lang_list[lang]
+ };
+ },
+ mouseDown: function(opts) {
+ var e = opts.event;
+ start_x = opts.start_x,
+ start_y = opts.start_y;
+ var mode = svgCanvas.getMode();
+
+ if(mode == "connector") {
+
+ if(started) return;
+
+ var mouse_target = e.target;
+
+ var parents = $(mouse_target).parents();
+
+ if($.inArray(svgcontent, parents) != -1) {
+ // Connectable element
+
+ // If child of foreignObject, use parent
+ var fo = $(mouse_target).closest("foreignObject");
+ start_elem = fo.length ? fo[0] : mouse_target;
+
+ // Get center of source element
+ var bb = svgCanvas.getStrokedBBox([start_elem]);
+ var x = bb.x + bb.width/2;
+ var y = bb.y + bb.height/2;
+
+ started = true;
+ cur_line = addElem({
+ "element": "polyline",
+ "attr": {
+ "id": getNextId(),
+ "points": (x+','+y+' '+x+','+y+' '+start_x+','+start_y),
+ "stroke": '#' + curConfig.initStroke.color,
+ "stroke-width": (!start_elem.stroke_width || start_elem.stroke_width == 0) ? curConfig.initStroke.width : start_elem.stroke_width,
+ "fill": "none",
+ "opacity": curConfig.initStroke.opacity,
+ "style": "pointer-events:none"
+ }
+ });
+ elData(cur_line, 'start_bb', bb);
+ }
+ return {
+ started: true
+ };
+ } else if(mode == "select") {
+ findConnectors();
+ }
+ },
+ mouseMove: function(opts) {
+ var zoom = svgCanvas.getZoom();
+ var e = opts.event;
+ var x = opts.mouse_x/zoom;
+ var y = opts.mouse_y/zoom;
+
+ var diff_x = x - start_x,
+ diff_y = y - start_y;
+
+ var mode = svgCanvas.getMode();
+
+ if(mode == "connector" && started) {
+
+ var sw = cur_line.getAttribute('stroke-width') * 3;
+ // Set start point (adjusts based on bb)
+ var pt = getBBintersect(x, y, elData(cur_line, 'start_bb'), getOffset('start', cur_line));
+ start_x = pt.x;
+ start_y = pt.y;
+
+ setPoint(cur_line, 0, pt.x, pt.y, true);
+
+ // Set end point
+ setPoint(cur_line, 'end', x, y, true);
+ } else if(mode == "select") {
+ var slen = selElems.length;
+
+ while(slen--) {
+ var elem = selElems[slen];
+ // Look for selected connector elements
+ if(elem && elData(elem, 'c_start')) {
+ // Remove the "translate" transform given to move
+ svgCanvas.removeFromSelection([elem]);
+ svgCanvas.getTransformList(elem).clear();
+
+ }
+ }
+ if(connections.length) {
+ updateLine(diff_x, diff_y);
+
+
+ }
+ }
+ },
+ mouseUp: function(opts) {
+ var zoom = svgCanvas.getZoom();
+ var e = opts.event,
+ x = opts.mouse_x/zoom,
+ y = opts.mouse_y/zoom,
+ mouse_target = e.target;
+
+ if(svgCanvas.getMode() == "connector") {
+ var fo = $(mouse_target).closest("foreignObject");
+ if(fo.length) mouse_target = fo[0];
+
+ var parents = $(mouse_target).parents();
+
+ if(mouse_target == start_elem) {
+ // Start line through click
+ started = true;
+ return {
+ keep: true,
+ element: null,
+ started: started
+ }
+ } else if($.inArray(svgcontent, parents) === -1) {
+ // Not a valid target element, so remove line
+ $(cur_line).remove();
+ started = false;
+ return {
+ keep: false,
+ element: null,
+ started: started
+ }
+ } else {
+ // Valid end element
+ end_elem = mouse_target;
+
+ var start_id = start_elem.id, end_id = end_elem.id;
+ var conn_str = start_id + " " + end_id;
+ var alt_str = end_id + " " + start_id;
+ // Don't create connector if one already exists
+ var dupe = $(svgcontent).find(conn_sel).filter(function() {
+ var conn = this.getAttributeNS(se_ns, "connector");
+ if(conn == conn_str || conn == alt_str) return true;
+ });
+ if(dupe.length) {
+ $(cur_line).remove();
+ return {
+ keep: false,
+ element: null,
+ started: false
+ }
+ }
+
+ var bb = svgCanvas.getStrokedBBox([end_elem]);
+
+ var pt = getBBintersect(start_x, start_y, bb, getOffset('start', cur_line));
+ setPoint(cur_line, 'end', pt.x, pt.y, true);
+ $(cur_line)
+ .data("c_start", start_id)
+ .data("c_end", end_id)
+ .data("end_bb", bb);
+ se_ns = svgCanvas.getEditorNS(true);
+ cur_line.setAttributeNS(se_ns, "se:connector", conn_str);
+ cur_line.setAttribute('class', conn_sel.substr(1));
+ cur_line.setAttribute('opacity', 1);
+ svgCanvas.addToSelection([cur_line]);
+ svgCanvas.moveToBottomSelectedElement();
+ selManager.requestSelector(cur_line).showGrips(false);
+ started = false;
+ return {
+ keep: true,
+ element: cur_line,
+ started: started
+ }
+ }
+ }
+ },
+ selectedChanged: function(opts) {
+ // TODO: Find better way to skip operations if no connectors are in use
+ if(!$(svgcontent).find(conn_sel).length) return;
+
+ if(svgCanvas.getMode() == 'connector') {
+ svgCanvas.setMode('select');
+ }
+
+ // Use this to update the current selected elements
+ selElems = opts.elems;
+
+ var i = selElems.length;
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && elData(elem, 'c_start')) {
+ selManager.requestSelector(elem).showGrips(false);
+ if(opts.selectedElement && !opts.multiselected) {
+ // TODO: Set up context tools and hide most regular line tools
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ updateConnectors();
+ },
+ elementChanged: function(opts) {
+ var elem = opts.elems[0];
+ if (elem && elem.tagName == 'svg' && elem.id == "svgcontent") {
+ // Update svgcontent (can change on import)
+ svgcontent = elem;
+ init();
+ }
+
+ // Has marker, so change offset
+ if(elem && (
+ elem.getAttribute("marker-start") ||
+ elem.getAttribute("marker-mid") ||
+ elem.getAttribute("marker-end")
+ )) {
+ var start = elem.getAttribute("marker-start");
+ var mid = elem.getAttribute("marker-mid");
+ var end = elem.getAttribute("marker-end");
+ cur_line = elem;
+ $(elem)
+ .data("start_off", !!start)
+ .data("end_off", !!end);
+
+ if(elem.tagName == "line" && mid) {
+ // Convert to polyline to accept mid-arrow
+
+ var x1 = elem.getAttribute('x1')-0;
+ var x2 = elem.getAttribute('x2')-0;
+ var y1 = elem.getAttribute('y1')-0;
+ var y2 = elem.getAttribute('y2')-0;
+ var id = elem.id;
+
+ var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
+ var pline = addElem({
+ "element": "polyline",
+ "attr": {
+ "points": (x1+','+y1+ mid_pt +x2+','+y2),
+ "stroke": elem.getAttribute('stroke'),
+ "stroke-width": elem.getAttribute('stroke-width'),
+ "marker-mid": mid,
+ "fill": "none",
+ "opacity": elem.getAttribute('opacity') || 1
+ }
+ });
+ $(elem).after(pline).remove();
+ svgCanvas.clearSelection();
+ pline.id = id;
+ svgCanvas.addToSelection([pline]);
+ elem = pline;
+ }
+ }
+ // Update line if it's a connector
+ if(elem.getAttribute('class') == conn_sel.substr(1)) {
+ var start = getElem(elData(elem, 'c_start'));
+ updateConnectors([start]);
+ } else {
+ updateConnectors();
+ }
+ },
+ toolButtonStateUpdate: function(opts) {
+ if(opts.nostroke) {
+ if ($('#mode_connect').hasClass('tool_button_current')) {
+ clickSelect();
+ }
+ }
+ $('#mode_connect')
+ .toggleClass('disabled',opts.nostroke);
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-eyedropper.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-eyedropper.js.svn-base
new file mode 100644
index 000000000..a475a0f98
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-eyedropper.js.svn-base
@@ -0,0 +1,109 @@
+/*
+ * ext-eyedropper.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jeff Schiller
+ *
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) history.js
+// 3) svg_editor.js
+// 4) svgcanvas.js
+
+svgEditor.addExtension("eyedropper", function(S) {
+ var svgcontent = S.svgcontent,
+ svgns = "http://www.w3.org/2000/svg",
+ svgdoc = S.svgroot.parentNode.ownerDocument,
+ svgCanvas = svgEditor.canvas,
+ ChangeElementCommand = svgedit.history.ChangeElementCommand,
+ addToHistory = function(cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); },
+ currentStyle = {fillPaint: "red", fillOpacity: 1.0,
+ strokePaint: "black", strokeOpacity: 1.0,
+ strokeWidth: 5, strokeDashArray: null,
+ opacity: 1.0,
+ strokeLinecap: 'butt',
+ strokeLinejoin: 'miter',
+ };
+
+ function getStyle(opts) {
+ // if we are in eyedropper mode, we don't want to disable the eye-dropper tool
+ var mode = svgCanvas.getMode();
+ if (mode == "eyedropper") return;
+
+ var elem = null;
+ var tool = $('#tool_eyedropper');
+ // enable-eye-dropper if one element is selected
+ if (!opts.multiselected && opts.elems[0] &&
+ $.inArray(opts.elems[0].nodeName, ['svg', 'g', 'use']) == -1)
+ {
+ elem = opts.elems[0];
+ tool.removeClass('disabled');
+ // grab the current style
+ currentStyle.fillPaint = elem.getAttribute("fill") || "black";
+ currentStyle.fillOpacity = elem.getAttribute("fill-opacity") || 1.0;
+ currentStyle.strokePaint = elem.getAttribute("stroke");
+ currentStyle.strokeOpacity = elem.getAttribute("stroke-opacity") || 1.0;
+ currentStyle.strokeWidth = elem.getAttribute("stroke-width");
+ currentStyle.strokeDashArray = elem.getAttribute("stroke-dasharray");
+ currentStyle.strokeLinecap = elem.getAttribute("stroke-linecap");
+ currentStyle.strokeLinejoin = elem.getAttribute("stroke-linejoin");
+ currentStyle.opacity = elem.getAttribute("opacity") || 1.0;
+ }
+ // disable eye-dropper tool
+ else {
+ tool.addClass('disabled');
+ }
+
+ }
+
+ return {
+ name: "eyedropper",
+ svgicons: "extensions/eyedropper-icon.xml",
+ buttons: [{
+ id: "tool_eyedropper",
+ type: "mode",
+ title: "Eye Dropper Tool",
+ key: "I",
+ events: {
+ "click": function() {
+ svgCanvas.setMode("eyedropper");
+ }
+ }
+ }],
+
+ // if we have selected an element, grab its paint and enable the eye dropper button
+ selectedChanged: getStyle,
+ elementChanged: getStyle,
+
+ mouseDown: function(opts) {
+ var mode = svgCanvas.getMode();
+ if (mode == "eyedropper") {
+ var e = opts.event;
+ var target = e.target;
+ if ($.inArray(target.nodeName, ['svg', 'g', 'use']) == -1) {
+ var changes = {};
+
+ var change = function(elem, attrname, newvalue) {
+ changes[attrname] = elem.getAttribute(attrname);
+ elem.setAttribute(attrname, newvalue);
+ };
+
+ if (currentStyle.fillPaint) change(target, "fill", currentStyle.fillPaint);
+ if (currentStyle.fillOpacity) change(target, "fill-opacity", currentStyle.fillOpacity);
+ if (currentStyle.strokePaint) change(target, "stroke", currentStyle.strokePaint);
+ if (currentStyle.strokeOpacity) change(target, "stroke-opacity", currentStyle.strokeOpacity);
+ if (currentStyle.strokeWidth) change(target, "stroke-width", currentStyle.strokeWidth);
+ if (currentStyle.strokeDashArray) change(target, "stroke-dasharray", currentStyle.strokeDashArray);
+ if (currentStyle.opacity) change(target, "opacity", currentStyle.opacity);
+ if (currentStyle.strokeLinecap) change(target, "stroke-linecap", currentStyle.strokeLinecap);
+ if (currentStyle.strokeLinejoin) change(target, "stroke-linejoin", currentStyle.strokeLinejoin);
+
+ addToHistory(new ChangeElementCommand(target, changes));
+ }
+ }
+ },
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-foreignobject.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-foreignobject.js.svn-base
new file mode 100644
index 000000000..9d401825a
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-foreignobject.js.svn-base
@@ -0,0 +1,277 @@
+/*
+ * ext-foreignobject.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jacques Distler
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("foreignObject", function(S) {
+ var svgcontent = S.svgcontent,
+ addElem = S.addSvgElementFromJson,
+ selElems,
+ svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ xmlns = "http://www.w3.org/XML/1998/namespace",
+ xmlnsns = "http://www.w3.org/2000/xmlns/",
+ se_ns = "http://svg-edit.googlecode.com",
+ htmlns = "http://www.w3.org/1999/xhtml",
+ mathns = "http://www.w3.org/1998/Math/MathML",
+ editingforeign = false,
+ svgdoc = S.svgroot.parentNode.ownerDocument,
+ started,
+ newFO;
+
+
+ var properlySourceSizeTextArea = function(){
+ // TODO: remove magic numbers here and get values from CSS
+ var height = $('#svg_source_container').height() - 80;
+ $('#svg_source_textarea').css('height', height);
+ };
+
+ function showPanel(on) {
+ var fc_rules = $('#fc_rules');
+ if(!fc_rules.length) {
+ fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head');
+ }
+ fc_rules.text(!on?"":" #tool_topath { display: none !important; }");
+ $('#foreignObject_panel').toggle(on);
+ }
+
+ function toggleSourceButtons(on) {
+ $('#tool_source_save, #tool_source_cancel').toggle(!on);
+ $('#foreign_save, #foreign_cancel').toggle(on);
+ }
+
+
+ // Function: setForeignString(xmlString, elt)
+ // This function sets the content of element elt to the input XML.
+ //
+ // Parameters:
+ // xmlString - The XML text.
+ // elt - the parent element to append to
+ //
+ // Returns:
+ // This function returns false if the set was unsuccessful, true otherwise.
+ function setForeignString(xmlString) {
+ var elt = selElems[0];
+ try {
+ // convert string into XML document
+ var newDoc = Utils.text2xml('<svg xmlns="'+svgns+'" xmlns:xlink="'+xlinkns+'">'+xmlString+'</svg>');
+ // run it through our sanitizer to remove anything we do not support
+ S.sanitizeSvg(newDoc.documentElement);
+ elt.parentNode.replaceChild(svgdoc.importNode(newDoc.documentElement.firstChild, true), elt);
+ S.call("changed", [elt]);
+ svgCanvas.clearSelection();
+ } catch(e) {
+ console.log(e);
+ return false;
+ }
+
+ return true;
+ };
+
+ function showForeignEditor() {
+ var elt = selElems[0];
+ if (!elt || editingforeign) return;
+ editingforeign = true;
+ toggleSourceButtons(true);
+ elt.removeAttribute('fill');
+
+ var str = S.svgToString(elt, 0);
+ $('#svg_source_textarea').val(str);
+ $('#svg_source_editor').fadeIn();
+ properlySourceSizeTextArea();
+ $('#svg_source_textarea').focus();
+ }
+
+ function setAttr(attr, val) {
+ svgCanvas.changeSelectedAttribute(attr, val);
+ S.call("changed", selElems);
+ }
+
+
+ return {
+ name: "foreignObject",
+ svgicons: "extensions/foreignobject-icons.xml",
+ buttons: [{
+ id: "tool_foreign",
+ type: "mode",
+ title: "Foreign Object Tool",
+ events: {
+ 'click': function() {
+ svgCanvas.setMode('foreign')
+ }
+ }
+ },{
+ id: "edit_foreign",
+ type: "context",
+ panel: "foreignObject_panel",
+ title: "Edit ForeignObject Content",
+ events: {
+ 'click': function() {
+ showForeignEditor();
+ }
+ }
+ }],
+
+ context_tools: [{
+ type: "input",
+ panel: "foreignObject_panel",
+ title: "Change foreignObject's width",
+ id: "foreign_width",
+ label: "w",
+ size: 3,
+ events: {
+ change: function() {
+ setAttr('width', this.value);
+ }
+ }
+ },{
+ type: "input",
+ panel: "foreignObject_panel",
+ title: "Change foreignObject's height",
+ id: "foreign_height",
+ label: "h",
+ events: {
+ change: function() {
+ setAttr('height', this.value);
+ }
+ }
+ }, {
+ type: "input",
+ panel: "foreignObject_panel",
+ title: "Change foreignObject's font size",
+ id: "foreign_font_size",
+ label: "font-size",
+ size: 2,
+ defval: 16,
+ events: {
+ change: function() {
+ setAttr('font-size', this.value);
+ }
+ }
+ }
+
+
+ ],
+ callback: function() {
+ $('#foreignObject_panel').hide();
+
+ var endChanges = function() {
+ $('#svg_source_editor').hide();
+ editingforeign = false;
+ $('#svg_source_textarea').blur();
+ toggleSourceButtons(false);
+ }
+
+ // TODO: Needs to be done after orig icon loads
+ setTimeout(function() {
+ // Create source save/cancel buttons
+ var save = $('#tool_source_save').clone()
+ .hide().attr('id', 'foreign_save').unbind()
+ .appendTo("#tool_source_back").click(function() {
+
+ if (!editingforeign) return;
+
+ if (!setForeignString($('#svg_source_textarea').val())) {
+ $.confirm("Errors found. Revert to original?", function(ok) {
+ if(!ok) return false;
+ endChanges();
+ });
+ } else {
+ endChanges();
+ }
+ // setSelectMode();
+ });
+
+ var cancel = $('#tool_source_cancel').clone()
+ .hide().attr('id', 'foreign_cancel').unbind()
+ .appendTo("#tool_source_back").click(function() {
+ endChanges();
+ });
+
+ }, 3000);
+ },
+ mouseDown: function(opts) {
+ var e = opts.event;
+
+ if(svgCanvas.getMode() == "foreign") {
+
+ started = true;
+ newFO = S.addSvgElementFromJson({
+ "element": "foreignObject",
+ "attr": {
+ "x": opts.start_x,
+ "y": opts.start_y,
+ "id": S.getNextId(),
+ "font-size": 16, //cur_text.font_size,
+ "width": "48",
+ "height": "20",
+ "style": "pointer-events:inherit"
+ }
+ });
+ var m = svgdoc.createElementNS(mathns, 'math');
+ m.setAttributeNS(xmlnsns, 'xmlns', mathns);
+ m.setAttribute('display', 'inline');
+ var mi = svgdoc.createElementNS(mathns, 'mi');
+ mi.setAttribute('mathvariant', 'normal');
+ mi.textContent = "\u03A6";
+ var mo = svgdoc.createElementNS(mathns, 'mo');
+ mo.textContent = "\u222A";
+ var mi2 = svgdoc.createElementNS(mathns, 'mi');
+ mi2.textContent = "\u2133";
+ m.appendChild(mi);
+ m.appendChild(mo);
+ m.appendChild(mi2);
+ newFO.appendChild(m);
+ return {
+ started: true
+ }
+ }
+ },
+ mouseUp: function(opts) {
+ var e = opts.event;
+ if(svgCanvas.getMode() == "foreign" && started) {
+ var attrs = $(newFO).attr(["width", "height"]);
+ keep = (attrs.width != 0 || attrs.height != 0);
+ svgCanvas.addToSelection([newFO], true);
+
+ return {
+ keep: keep,
+ element: newFO
+ }
+
+ }
+
+ },
+ selectedChanged: function(opts) {
+ // Use this to update the current selected elements
+ selElems = opts.elems;
+
+ var i = selElems.length;
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && elem.tagName == "foreignObject") {
+ if(opts.selectedElement && !opts.multiselected) {
+ $('#foreign_font_size').val(elem.getAttribute("font-size"));
+ $('#foreign_width').val(elem.getAttribute("width"));
+ $('#foreign_height').val(elem.getAttribute("height"));
+
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ },
+ elementChanged: function(opts) {
+ var elem = opts.elems[0];
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-grid.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-grid.js.svn-base
new file mode 100644
index 000000000..c6f79e66f
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-grid.js.svn-base
@@ -0,0 +1,184 @@
+/*
+ * ext-grid.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Redou Mine
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+// Dependencies:
+// 1) units.js
+// 2) everything else
+
+svgEditor.addExtension("view_grid", function(s) {
+
+ var svgdoc = document.getElementById("svgcanvas").ownerDocument,
+ svgns = "http://www.w3.org/2000/svg",
+ dims = svgEditor.curConfig.dimensions,
+ svgroot = s.svgroot;
+
+ var showGrid = false;
+ var assignAttributes = svgCanvas.assignAttributes;
+
+ var hcanvas = document.createElement('canvas');
+ $(hcanvas).hide().appendTo('body');
+
+ var canvasgrid = svgdoc.createElementNS(svgns, "svg");
+ assignAttributes(canvasgrid, {
+ 'id': 'canvasGrid',
+ 'width': '100%',
+ 'height': '100%',
+ 'x': 0,
+ 'y': 0,
+ 'overflow': 'visible',
+ 'display': 'none'
+ });
+
+ var canvBG = $('#canvasBackground');
+ canvBG.append(canvasgrid);
+
+ // grid-pattern
+ var gridPattern = svgdoc.createElementNS(svgns, "pattern");
+ assignAttributes(gridPattern, {
+ 'id': 'gridpattern',
+ 'patternUnits': 'userSpaceOnUse',
+ 'x': 0, //-(value.strokeWidth / 2), // position for strokewidth
+ 'y': 0, //-(value.strokeWidth / 2), // position for strokewidth
+ 'width': 100,
+ 'height': 100
+ });
+
+ var gridimg = svgdoc.createElementNS(svgns, "image");
+ assignAttributes(gridimg, {
+ 'x': 0,
+ 'y': 0,
+ 'width': 100,
+ 'height': 100
+ });
+
+ gridPattern.appendChild(gridimg);
+ $('#svgroot defs').append(gridPattern);
+
+ // grid-box
+ var gridBox = svgdoc.createElementNS(svgns, "rect");
+ assignAttributes(gridBox, {
+ 'width': '100%',
+ 'height': '100%',
+ 'x': 0,
+ 'y': 0,
+ 'stroke-width': 0,
+ 'stroke': 'none',
+ 'fill': 'url(#gridpattern)',
+ 'style': 'pointer-events: none; display:visible;'
+ });
+ $('#canvasGrid').append(gridBox);
+// });
+
+ function updateGrid(zoom) {
+ // TODO: Try this with <line> elements, then compare performance difference
+
+ var bgwidth = +canvBG.attr('width');
+ var bgheight = +canvBG.attr('height');
+
+ var units = svgedit.units.getTypeMap();
+ var unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px
+ var r_intervals = [.01, .1, 1, 10, 100, 1000];
+
+ var d = 0;
+ var is_x = (d === 0);
+ var dim = is_x ? 'x' : 'y';
+ var lentype = is_x?'width':'height';
+ var c_elem = svgCanvas.getContentElem();
+ var content_d = c_elem.getAttribute(dim)-0;
+
+ var hcanv = hcanvas;
+
+ var u_multi = unit * zoom;
+
+ // Calculate the main number interval
+ var raw_m = 100 / u_multi;
+ var multi = 1;
+ for(var i = 0; i < r_intervals.length; i++) {
+ var num = r_intervals[i];
+ multi = num;
+ if(raw_m <= num) {
+ break;
+ }
+ }
+
+ var big_int = multi * u_multi;
+
+ // Set the canvas size to the width of the container
+ hcanv.width = big_int;
+ hcanv.height = big_int;
+ var ctx = hcanv.getContext("2d");
+
+ var ruler_d = 0;
+ var cur_d = .5;
+
+ var part = big_int / 10;
+
+ ctx.globalAlpha = 0.2;
+ ctx.strokeStyle = "#000";
+ for(var i = 1; i < 10; i++) {
+ var sub_d = Math.round(part * i) + .5;
+// var line_num = (i % 2)?12:10;
+ var line_num = 0;
+ ctx.moveTo(sub_d, big_int);
+ ctx.lineTo(sub_d, line_num);
+ ctx.moveTo(big_int, sub_d);
+ ctx.lineTo(line_num ,sub_d);
+ }
+ ctx.stroke();
+ ctx.beginPath();
+ ctx.globalAlpha = 0.5;
+ ctx.moveTo(cur_d, big_int);
+ ctx.lineTo(cur_d, 0);
+
+ ctx.moveTo(big_int, cur_d);
+ ctx.lineTo(0, cur_d);
+ ctx.stroke();
+
+ var datauri = hcanv.toDataURL('image/png');
+ gridimg.setAttribute('width', big_int);
+ gridimg.setAttribute('height', big_int);
+ gridimg.parentNode.setAttribute('width', big_int);
+ gridimg.parentNode.setAttribute('height', big_int);
+ svgCanvas.setHref(gridimg, datauri);
+ }
+
+ return {
+ name: "view_grid",
+ svgicons: "extensions/grid-icon.xml",
+
+ zoomChanged: function(zoom) {
+ // update size
+ if(showGrid) updateGrid(zoom);
+ },
+
+ buttons: [{
+ id: "view_grid",
+ type: "context",
+ panel: "editor_panel",
+ title: "Show/Hide Grid",
+ events: {
+ 'click': function() {
+ var gr = !$('#view_grid').hasClass('push_button_pressed');
+ if (gr) {
+ svgEditor.curConfig.showGrid = showGrid = true;
+ $('#view_grid').addClass('push_button_pressed').removeClass('tool_button');
+ $('#canvasGrid').attr('display', 'normal');
+ updateGrid(svgCanvas.getZoom());
+ }
+ else {
+ svgEditor.curConfig.showGrid = showGrid = false;
+ $('#view_grid').removeClass('push_button_pressed').addClass('tool_button');
+ $('#canvasGrid').attr('display', 'none');
+ }
+ }
+ }
+}]
+ };
+ });
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-helloworld.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-helloworld.js.svn-base
new file mode 100644
index 000000000..a35c24107
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-helloworld.js.svn-base
@@ -0,0 +1,78 @@
+/*
+ * ext-helloworld.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+/*
+ This is a very basic SVG-Edit extension. It adds a "Hello World" button in
+ the left panel. Clicking on the button, and then the canvas will show the
+ user the point on the canvas that was clicked on.
+*/
+
+svgEditor.addExtension("Hello World", function() {
+
+ return {
+ name: "Hello World",
+ // For more notes on how to make an icon file, see the source of
+ // the hellorworld-icon.xml
+ svgicons: "extensions/helloworld-icon.xml",
+
+ // Multiple buttons can be added in this array
+ buttons: [{
+ // Must match the icon ID in helloworld-icon.xml
+ id: "hello_world",
+
+ // This indicates that the button will be added to the "mode"
+ // button panel on the left side
+ type: "mode",
+
+ // Tooltip text
+ title: "Say 'Hello World'",
+
+ // Events
+ events: {
+ 'click': function() {
+ // The action taken when the button is clicked on.
+ // For "mode" buttons, any other button will
+ // automatically be de-pressed.
+ svgCanvas.setMode("hello_world");
+ }
+ }
+ }],
+ // This is triggered when the main mouse button is pressed down
+ // on the editor canvas (not the tool panels)
+ mouseDown: function() {
+ // Check the mode on mousedown
+ if(svgCanvas.getMode() == "hello_world") {
+
+ // The returned object must include "started" with
+ // a value of true in order for mouseUp to be triggered
+ return {started: true};
+ }
+ },
+
+ // This is triggered from anywhere, but "started" must have been set
+ // to true (see above). Note that "opts" is an object with event info
+ mouseUp: function(opts) {
+ // Check the mode on mouseup
+ if(svgCanvas.getMode() == "hello_world") {
+ var zoom = svgCanvas.getZoom();
+
+ // Get the actual coordinate by dividing by the zoom value
+ var x = opts.mouse_x / zoom;
+ var y = opts.mouse_y / zoom;
+
+ var text = "Hello World!\n\nYou clicked here: "
+ + x + ", " + y;
+
+ // Show the text using the custom alert function
+ $.alert(text);
+ }
+ }
+ };
+});
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.js.svn-base
new file mode 100644
index 000000000..2c3dc4226
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.js.svn-base
@@ -0,0 +1,444 @@
+/*
+ * ext-imagelib.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("imagelib", function() {
+
+ var uiStrings = svgEditor.uiStrings;
+
+ $.extend(uiStrings, {
+ imagelib: {
+ select_lib: 'Select an image library',
+ show_list: 'Show library list',
+ import_single: 'Import single',
+ import_multi: 'Import multiple',
+ open: 'Open as new document'
+ }
+ });
+
+ var img_libs = [{
+ name: 'Demo library (local)',
+ url: 'extensions/imagelib/index.html',
+ description: 'Demonstration library for SVG-edit on this server'
+ },
+ {
+ name: 'IAN Symbol Libraries',
+ url: 'http://ian.umces.edu/symbols/catalog/svgedit/album_chooser.php',
+ description: 'Free library of illustrations'
+ }
+ ];
+
+ var xlinkns = "http://www.w3.org/1999/xlink";
+
+ function closeBrowser() {
+ $('#imgbrowse_holder').hide();
+ }
+
+ function importImage(url) {
+ var newImage = svgCanvas.addSvgElementFromJson({
+ "element": "image",
+ "attr": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0,
+ "id": svgCanvas.getNextId(),
+ "style": "pointer-events:inherit"
+ }
+ });
+ svgCanvas.clearSelection();
+ svgCanvas.addToSelection([newImage]);
+ svgCanvas.setImageURL(url);
+ }
+
+ var mode = 's';
+ var multi_arr = [];
+ var cur_meta;
+ var tranfer_stopped = false;
+ var pending = {};
+
+ window.addEventListener("message", function(evt) {
+ // Receive postMessage data
+ var response = evt.data;
+
+ if(!response) {
+ // Do nothing
+ return;
+ }
+
+ var char1 = response.charAt(0);
+
+ var svg_str;
+ var img_str;
+
+ if(char1 != "{" && tranfer_stopped) {
+ tranfer_stopped = false;
+ return;
+ }
+
+ if(char1 == '|') {
+ var secondpos = response.indexOf('|', 1);
+ var id = response.substr(1, secondpos-1);
+ response = response.substr(secondpos+1);
+ char1 = response.charAt(0);
+
+ }
+
+
+ // Hide possible transfer dialog box
+ $('#dialog_box').hide();
+
+ switch (char1) {
+ case '{':
+ // Metadata
+ tranfer_stopped = false;
+ var cur_meta = JSON.parse(response);
+
+ pending[cur_meta.id] = cur_meta;
+
+ var name = (cur_meta.name || 'file');
+
+ var message = uiStrings.notification.retrieving.replace('%s', name);
+
+ if(mode != 'm') {
+ $.process_cancel(message, function() {
+ tranfer_stopped = true;
+ // Should a message be sent back to the frame?
+
+ $('#dialog_box').hide();
+ });
+ } else {
+ var entry = $('<div>' + message + '</div>').data('id', cur_meta.id);
+ preview.append(entry);
+ cur_meta.entry = entry;
+ }
+
+ return;
+ case '<':
+ svg_str = true;
+ break;
+ case 'd':
+ if(response.indexOf('data:image/svg+xml') === 0) {
+ var pre = 'data:image/svg+xml;base64,';
+ var src = response.substring(pre.length);
+ response = svgCanvas.Utils.decode64(src);
+ svg_str = true;
+ break;
+ } else if(response.indexOf('data:image/') === 0) {
+ img_str = true;
+ break;
+ }
+ // Else fall through
+ default:
+ // TODO: See if there's a way to base64 encode the binary data stream
+// var str = 'data:;base64,' + svgCanvas.Utils.encode64(response, true);
+
+ // Assume it's raw image data
+// importImage(str);
+
+ // Don't give warning as postMessage may have been used by something else
+ if(mode !== 'm') {
+ closeBrowser();
+ } else {
+ pending[id].entry.remove();
+ }
+// $.alert('Unexpected data was returned: ' + response, function() {
+// if(mode !== 'm') {
+// closeBrowser();
+// } else {
+// pending[id].entry.remove();
+// }
+// });
+ return;
+ }
+
+ switch (mode) {
+ case 's':
+ // Import one
+ if(svg_str) {
+ svgCanvas.importSvgString(response);
+ } else if(img_str) {
+ importImage(response);
+ }
+ closeBrowser();
+ break;
+ case 'm':
+ // Import multiple
+ multi_arr.push([(svg_str ? 'svg' : 'img'), response]);
+ var cur_meta = pending[id];
+ if(svg_str) {
+ if(cur_meta && cur_meta.name) {
+ var title = cur_meta.name;
+ } else {
+ // Try to find a title
+ var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement;
+ var title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')';
+ }
+ if(cur_meta) {
+ preview.children().each(function() {
+ if($(this).data('id') == id) {
+ if(cur_meta.preview_url) {
+ $(this).html('<img src="' + cur_meta.preview_url + '">' + title);
+ } else {
+ $(this).text(title);
+ }
+ submit.removeAttr('disabled');
+ }
+ });
+ } else {
+ preview.append('<div>'+title+'</div>');
+ submit.removeAttr('disabled');
+ }
+ } else {
+ if(cur_meta && cur_meta.preview_url) {
+ var title = cur_meta.name || '';
+ }
+ if(cur_meta && cur_meta.preview_url) {
+ var entry = '<img src="' + cur_meta.preview_url + '">' + title;
+ } else {
+ var entry = '<img src="' + response + '">';
+ }
+
+ if(cur_meta) {
+ preview.children().each(function() {
+ if($(this).data('id') == id) {
+ $(this).html(entry);
+ submit.removeAttr('disabled');
+ }
+ });
+ } else {
+ preview.append($('<div>').append(entry));
+ submit.removeAttr('disabled');
+ }
+
+ }
+ break;
+ case 'o':
+ // Open
+ if(!svg_str) break;
+ svgEditor.openPrep(function(ok) {
+ if(!ok) return;
+ svgCanvas.clear();
+ svgCanvas.setSvgString(response);
+ // updateCanvas();
+ });
+ closeBrowser();
+ break;
+ }
+ }, true);
+
+ var preview, submit;
+
+ function toggleMulti(show) {
+
+ $('#lib_framewrap, #imglib_opts').css({right: (show ? 200 : 10)});
+ if(!preview) {
+ preview = $('<div id=imglib_preview>').css({
+ position: 'absolute',
+ top: 45,
+ right: 10,
+ width: 180,
+ bottom: 45,
+ background: '#fff',
+ overflow: 'auto'
+ }).insertAfter('#lib_framewrap');
+
+ submit = $('<button disabled>Import selected</button>').appendTo('#imgbrowse').click(function() {
+ $.each(multi_arr, function(i) {
+ var type = this[0];
+ var data = this[1];
+ if(type == 'svg') {
+ svgCanvas.importSvgString(data);
+ } else {
+ importImage(data);
+ }
+ svgCanvas.moveSelectedElements(i*20, i*20, false);
+ });
+ preview.empty();
+ multi_arr = [];
+ $('#imgbrowse_holder').hide();
+ }).css({
+ position: 'absolute',
+ bottom: 10,
+ right: -10
+ });
+
+ }
+
+ preview.toggle(show);
+ submit.toggle(show);
+ }
+
+ function showBrowser() {
+
+ var browser = $('#imgbrowse');
+ if(!browser.length) {
+ $('<div id=imgbrowse_holder><div id=imgbrowse class=toolbar_button>\
+ </div></div>').insertAfter('#svg_docprops');
+ browser = $('#imgbrowse');
+
+ var all_libs = uiStrings.imagelib.select_lib;
+
+ var lib_opts = $('<ul id=imglib_opts>').appendTo(browser);
+ var frame = $('<iframe/>').prependTo(browser).hide().wrap('<div id=lib_framewrap>');
+
+ var header = $('<h1>').prependTo(browser).text(all_libs).css({
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ width: '100%'
+ });
+
+ var cancel = $('<button>' + uiStrings.common.cancel + '</button>').appendTo(browser).click(function() {
+ $('#imgbrowse_holder').hide();
+ }).css({
+ position: 'absolute',
+ top: 5,
+ right: -10
+ });
+
+ var leftBlock = $('<span>').css({position:'absolute',top:5,left:10}).appendTo(browser);
+
+ var back = $('<button hidden>' + uiStrings.imagelib.show_list + '</button>').appendTo(leftBlock).click(function() {
+ frame.attr('src', 'about:blank').hide();
+ lib_opts.show();
+ header.text(all_libs);
+ back.hide();
+ }).css({
+ 'margin-right': 5
+ }).hide();
+
+ var type = $('<select><option value=s>' +
+ uiStrings.imagelib.import_single + '</option><option value=m>' +
+ uiStrings.imagelib.import_multi + '</option><option value=o>' +
+ uiStrings.imagelib.open + '</option></select>').appendTo(leftBlock).change(function() {
+ mode = $(this).val();
+ switch (mode) {
+ case 's':
+ case 'o':
+ toggleMulti(false);
+ break;
+
+ case 'm':
+ // Import multiple
+ toggleMulti(true);
+ }
+ }).css({
+ 'margin-top': 10
+ });
+
+ cancel.prepend($.getSvgIcon('cancel', true));
+ back.prepend($.getSvgIcon('tool_imagelib', true));
+
+ $.each(img_libs, function(i, opts) {
+ $('<li>').appendTo(lib_opts).text(opts.name).click(function() {
+ frame.attr('src', opts.url).show();
+ header.text(opts.name);
+ lib_opts.hide();
+ back.show();
+ }).append('<span>' + opts.description + '</span>');
+ });
+
+ } else {
+ $('#imgbrowse_holder').show();
+ }
+ }
+
+ return {
+ svgicons: "extensions/ext-imagelib.xml",
+ buttons: [{
+ id: "tool_imagelib",
+ type: "app_menu", // _flyout
+ position: 4,
+ title: "Image library",
+ events: {
+ "mouseup": showBrowser
+ }
+ }],
+ callback: function() {
+
+ $('<style>').text('\
+ #imgbrowse_holder {\
+ position: absolute;\
+ top: 0;\
+ left: 0;\
+ width: 100%;\
+ height: 100%;\
+ background-color: rgba(0, 0, 0, .5);\
+ z-index: 5;\
+ }\
+ \
+ #imgbrowse {\
+ position: absolute;\
+ top: 25px;\
+ left: 25px;\
+ right: 25px;\
+ bottom: 25px;\
+ min-width: 300px;\
+ min-height: 200px;\
+ background: #B0B0B0;\
+ border: 1px outset #777;\
+ }\
+ #imgbrowse h1 {\
+ font-size: 20px;\
+ margin: .4em;\
+ text-align: center;\
+ }\
+ #lib_framewrap,\
+ #imgbrowse > ul {\
+ position: absolute;\
+ top: 45px;\
+ left: 10px;\
+ right: 10px;\
+ bottom: 10px;\
+ background: white;\
+ margin: 0;\
+ padding: 0;\
+ }\
+ #imgbrowse > ul {\
+ overflow: auto;\
+ }\
+ #imgbrowse > div {\
+ border: 1px solid #666;\
+ }\
+ #imglib_preview > div {\
+ padding: 5px;\
+ font-size: 12px;\
+ }\
+ #imglib_preview img {\
+ display: block;\
+ margin: 0 auto;\
+ max-height: 100px;\
+ }\
+ #imgbrowse li {\
+ list-style: none;\
+ padding: .5em;\
+ background: #E8E8E8;\
+ border-bottom: 1px solid #B0B0B0;\
+ line-height: 1.2em;\
+ font-style: sans-serif;\
+ }\
+ #imgbrowse li > span {\
+ color: #666;\
+ font-size: 15px;\
+ display: block;\
+ }\
+ #imgbrowse li:hover {\
+ background: #FFC;\
+ cursor: pointer;\
+ }\
+ #imgbrowse iframe {\
+ width: 100%;\
+ height: 100%;\
+ border: 0;\
+ }\
+ ').appendTo('head');
+ }
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.xml.svn-base
new file mode 100644
index 000000000..936578c05
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-imagelib.xml.svn-base
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="tool_imagelib">
+<svg width="201" height="211" xmlns="http://www.w3.org/2000/svg">
+ <g>
+ <path fill="#efe8b8" stroke="#d6c47c" stroke-linecap="round" d="m2.75,49.51761l56.56,-46.26761c12.73,8.25 25.71001,7 46.44,0.75l-56.03999,47.23944l-22.72002,25.01056l-24.23999,-26.73239z" id="svg_2" stroke-width="7"/>
+ <path fill="#a03333" stroke="#3f3f3f" d="m3.75,203.25002c14.33301,7 30.66699,7 46,0l0,-152.00002c-14.66699,8 -32.33301,8 -47,0l1,152.00002zm45.75,-152.25002l56.25,-46.75l0,151l-56,48.00002m-47.25,-154.25002l57.25,-46.5" id="svg_1" stroke-width="7" stroke-linecap="round"/>
+ <path fill="#efe8b8" stroke="#d6c47c" stroke-linecap="round" d="m49.75,49.51801l56.56,-46.26801c12.72998,8.25 25.71002,7 46.44,0.75l-56.03998,47.239l-22.72003,25.011l-24.23999,-26.73199z" stroke-width="7" id="svg_5"/>
+ <path fill="#2f8e2f" stroke="#3f3f3f" d="m50.75,202.25c14.33301,7 30.66699,7.04253 46,0.04253l0,-151.04253c-14.66699,8 -32.33301,8 -47,0l1,151zm45.75,-151.25l56.25,-46.75l0,144.01219l-56,51.98782m-47.25,-151.25002l57.25,-46.5" stroke-width="7" stroke-linecap="round" id="svg_6"/>
+ <path fill="#efe8b8" stroke="#d6c47c" stroke-linecap="round" d="m95.75,49.51801l56.56,-46.26801c12.72998,8.25 25.71002,7 46.44,0.75l-56.03998,47.239l-22.72003,25.011l-24.23999,-26.73199z" stroke-width="7" id="svg_10"/>
+ <path fill="#336393" stroke="#3f3f3f" d="m96.75,200.29445c14.33301,7 30.66699,7 46,0l0,-149.04445c-14.66699,8 -32.33301,8 -47,0l1,149.04445zm45.75,-149.29445l56.25,-46.75l0,148.04445l-56,48m-47.25,-151.29445l57.25,-46.5" stroke-width="7" stroke-linecap="round" id="svg_11"/>
+ </g>
+</svg>
+ </g>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-markers.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-markers.js.svn-base
new file mode 100644
index 000000000..25b08be9c
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-markers.js.svn-base
@@ -0,0 +1,572 @@
+/*
+ * ext-markers.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Will Schleter
+ * based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria
+ *
+ * This extension provides for the addition of markers to the either end
+ * or the middle of a line, polyline, path, polygon.
+ *
+ * Markers may be either a graphic or arbitary text
+ *
+ * to simplify the coding and make the implementation as robust as possible,
+ * markers are not shared - every object has its own set of markers.
+ * this relationship is maintained by a naming convention between the
+ * ids of the markers and the ids of the object
+ *
+ * The following restrictions exist for simplicty of use and programming
+ * objects and their markers to have the same color
+ * marker size is fixed
+ * text marker font, size, and attributes are fixed
+ * an application specific attribute - se_type - is added to each marker element
+ * to store the type of marker
+ *
+ * TODO:
+ * remove some of the restrictions above
+ * add option for keeping text aligned to horizontal
+ * add support for dimension extension lines
+ *
+ */
+
+svgEditor.addExtension("Markers", function(S) {
+ var svgcontent = S.svgcontent,
+ addElem = S.addSvgElementFromJson,
+ selElems;
+
+ var mtypes = ['start','mid','end'];
+
+ var marker_prefix = 'se_marker_';
+ var id_prefix = 'mkr_';
+
+ // note - to add additional marker types add them below with a unique id
+ // and add the associated icon(s) to marker-icons.svg
+ // the geometry is normallized to a 100x100 box with the origin at lower left
+ // Safari did not like negative values for low left of viewBox
+ // remember that the coordinate system has +y downward
+ var marker_types = {
+ nomarker: {},
+ leftarrow:
+ {element:'path', attr:{d:'M0,50 L100,90 L70,50 L100,10 Z'}},
+ rightarrow:
+ {element:'path', attr:{d:'M100,50 L0,90 L30,50 L0,10 Z'}},
+ textmarker:
+ {element:'text', attr: {x:0, y:0,'stroke-width':0,'stroke':'none','font-size':75,'font-family':'serif','text-anchor':'left',
+ 'xml:space': 'preserve'}},
+ forwardslash:
+ {element:'path', attr:{d:'M30,100 L70,0'}},
+ reverseslash:
+ {element:'path', attr:{d:'M30,0 L70,100'}},
+ verticalslash:
+ {element:'path', attr:{d:'M50,0 L50,100'}},
+ box:
+ {element:'path', attr:{d:'M20,20 L20,80 L80,80 L80,20 Z'}},
+ star:
+ {element:'path', attr:{d:'M10,30 L90,30 L20,90 L50,10 L80,90 Z'}},
+ xmark:
+ {element:'path', attr:{d:'M20,80 L80,20 M80,80 L20,20'}},
+ triangle:
+ {element:'path', attr:{d:'M10,80 L50,20 L80,80 Z'}},
+ mcircle:
+ {element:'circle', attr:{r:30, cx:50, cy:50}},
+ }
+
+
+ var lang_list = {
+ "en":[
+ {id: "start_marker_list", title: "Select start marker type" },
+ {id: "mid_marker_list", title: "Select mid marker type" },
+ {id: "end_marker_list", title: "Select end marker type" },
+ {id: "nomarker", title: "No Marker" },
+ {id: "leftarrow", title: "Left Arrow" },
+ {id: "rightarrow", title: "Right Arrow" },
+ {id: "textmarker", title: "Text Marker" },
+ {id: "forwardslash", title: "Forward Slash" },
+ {id: "reverseslash", title: "Reverse Slash" },
+ {id: "verticalslash", title: "Vertical Slash" },
+ {id: "box", title: "Box" },
+ {id: "star", title: "Star" },
+ {id: "xmark", title: "X" },
+ {id: "triangle", title: "Triangle" },
+ {id: "mcircle", title: "Circle" },
+ {id: "leftarrow_o", title: "Open Left Arrow" },
+ {id: "rightarrow_o", title: "Open Right Arrow" },
+ {id: "box_o", title: "Open Box" },
+ {id: "star_o", title: "Open Star" },
+ {id: "triangle_o", title: "Open Triangle" },
+ {id: "mcircle_o", title: "Open Circle" },
+ ]
+ };
+
+
+ // duplicate shapes to support unfilled (open) marker types with an _o suffix
+ $.each(['leftarrow','rightarrow','box','star','mcircle','triangle'],function(i,v) {
+ marker_types[v+'_o'] = marker_types[v];
+ });
+
+ // elem = a graphic element will have an attribute like marker-start
+ // attr - marker-start, marker-mid, or marker-end
+ // returns the marker element that is linked to the graphic element
+ function getLinked(elem, attr) {
+ var str = elem.getAttribute(attr);
+ if(!str) return null;
+ var m = str.match(/\(\#(.*)\)/);
+ if(!m || m.length !== 2) {
+ return null;
+ }
+ return S.getElem(m[1]);
+ }
+
+ //toggles context tool panel off/on
+ //sets the controls with the selected element's settings
+ function showPanel(on) {
+ $('#marker_panel').toggle(on);
+
+ if(on) {
+ var el = selElems[0];
+ var val;
+ var ci;
+
+ $.each(mtypes, function(i, pos) {
+ var m=getLinked(el,"marker-"+pos);
+ var txtbox = $('#'+pos+'_marker');
+ if (!m) {
+ val='\\nomarker';
+ ci=val;
+ txtbox.hide() // hide text box
+ } else {
+ if (!m.attributes.se_type) return; // not created by this extension
+ val='\\'+m.attributes.se_type.textContent;
+ ci=val;
+ if (val=='\\textmarker') {
+ val=m.lastChild.textContent;
+ //txtbox.show(); // show text box
+ } else {
+ txtbox.hide() // hide text box
+ }
+ }
+ txtbox.val(val);
+ setIcon(pos,ci);
+ })
+ }
+ }
+
+ function addMarker(id, val) {
+ var txt_box_bg = '#ffffff';
+ var txt_box_border = 'none';
+ var txt_box_stroke_width = 0;
+
+ var marker = S.getElem(id);
+
+ if (marker) return;
+
+ if (val=='' || val=='\\nomarker') return;
+
+ var el = selElems[0];
+ var color = el.getAttribute('stroke');
+ //NOTE: Safari didn't like a negative value in viewBox
+ //so we use a standardized 0 0 100 100
+ //with 50 50 being mapped to the marker position
+ var refX = 50;
+ var refY = 50;
+ var viewBox = "0 0 100 100";
+ var markerWidth = 5;
+ var markerHeight = 5;
+ var strokeWidth = 10;
+ if (val.substr(0,1)=='\\') se_type=val.substr(1);
+ else se_type='textmarker';
+
+ if (!marker_types[se_type]) return; // an unknown type!
+
+ // create a generic marker
+ marker = addElem({
+ "element": "marker",
+ "attr": {
+ "id": id,
+ "markerUnits": "strokeWidth",
+ "orient": "auto",
+ "style": "pointer-events:none",
+ "se_type": se_type
+ }
+ });
+
+ if (se_type!='textmarker') {
+ var mel = addElem(marker_types[se_type]);
+ var fillcolor = color;
+ if (se_type.substr(-2)=='_o') fillcolor='none';
+ mel.setAttribute('fill',fillcolor);
+ mel.setAttribute('stroke',color);
+ mel.setAttribute('stroke-width',strokeWidth);
+ marker.appendChild(mel);
+ } else {
+ var text = addElem(marker_types[se_type]);
+ // have to add text to get bounding box
+ text.textContent = val;
+ var tb=text.getBBox();
+ //alert( tb.x + " " + tb.y + " " + tb.width + " " + tb.height);
+ var pad=1;
+ var bb = tb;
+ bb.x = 0;
+ bb.y = 0;
+ bb.width += pad*2;
+ bb.height += pad*2;
+ // shift text according to its size
+ text.setAttribute('x', pad);
+ text.setAttribute('y', bb.height - pad - tb.height/4); // kludge?
+ text.setAttribute('fill',color);
+ refX = bb.width/2+pad;
+ refY = bb.height/2+pad;
+ viewBox = bb.x + " " + bb.y + " " + bb.width + " " + bb.height;
+ markerWidth =bb.width/10;
+ markerHeight = bb.height/10;
+
+ var box = addElem({
+ "element": "rect",
+ "attr": {
+ "x": bb.x,
+ "y": bb.y,
+ "width": bb.width,
+ "height": bb.height,
+ "fill": txt_box_bg,
+ "stroke": txt_box_border,
+ "stroke-width": txt_box_stroke_width
+ }
+ });
+ marker.setAttribute("orient",0);
+ marker.appendChild(box);
+ marker.appendChild(text);
+ }
+
+ marker.setAttribute("viewBox",viewBox);
+ marker.setAttribute("markerWidth", markerWidth);
+ marker.setAttribute("markerHeight", markerHeight);
+ marker.setAttribute("refX", refX);
+ marker.setAttribute("refY", refY);
+ S.findDefs().appendChild(marker);
+
+ return marker;
+ }
+
+
+ function setMarker() {
+ var poslist={'start_marker':'start','mid_marker':'mid','end_marker':'end'};
+ var pos = poslist[this.id];
+ var marker_name = 'marker-'+pos;
+ var val = this.value;
+ var el = selElems[0];
+ var marker = getLinked(el, marker_name);
+ if (marker) $(marker).remove();
+ el.removeAttribute(marker_name);
+ if (val=='') val='\\nomarker';
+ if (val=='\\nomarker') {
+ setIcon(pos,val);
+ S.call("changed", selElems);
+ return;
+ }
+ // Set marker on element
+ var id = marker_prefix + pos + '_' + el.id;
+ addMarker(id, val);
+ svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")");
+ if (el.tagName == "line" && pos=='mid') el=convertline(el);
+ S.call("changed", selElems);
+ setIcon(pos,val);
+ }
+
+ function convertline(elem) {
+ // this routine came from the connectors extension
+ // it is needed because midpoint markers don't work with line elements
+ if (!(elem.tagName == "line")) return elem;
+
+ // Convert to polyline to accept mid-arrow
+
+ var x1 = elem.getAttribute('x1')-0;
+ var x2 = elem.getAttribute('x2')-0;
+ var y1 = elem.getAttribute('y1')-0;
+ var y2 = elem.getAttribute('y2')-0;
+ var id = elem.id;
+
+ var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
+ var pline = addElem({
+ "element": "polyline",
+ "attr": {
+ "points": (x1+','+y1+ mid_pt +x2+','+y2),
+ "stroke": elem.getAttribute('stroke'),
+ "stroke-width": elem.getAttribute('stroke-width'),
+ "fill": "none",
+ "opacity": elem.getAttribute('opacity') || 1
+ }
+ });
+ $.each(mtypes, function(i, pos) { // get any existing marker definitions
+ var nam = 'marker-'+pos;
+ var m = elem.getAttribute(nam);
+ if (m) pline.setAttribute(nam,elem.getAttribute(nam));
+ });
+
+ var batchCmd = new S.BatchCommand();
+ batchCmd.addSubCommand(new S.RemoveElementCommand(elem, elem.parentNode));
+ batchCmd.addSubCommand(new S.InsertElementCommand(pline));
+
+ $(elem).after(pline).remove();
+ svgCanvas.clearSelection();
+ pline.id = id;
+ svgCanvas.addToSelection([pline]);
+ S.addCommandToHistory(batchCmd);
+ return pline;
+ }
+
+ // called when the main system modifies an object
+ // this routine changes the associated markers to be the same color
+ function colorChanged(elem) {
+ var color = elem.getAttribute('stroke');
+
+ $.each(mtypes, function(i, pos) {
+ var marker = getLinked(elem, 'marker-'+pos);
+ if (!marker) return;
+ if (!marker.attributes.se_type) return; //not created by this extension
+ var ch = marker.lastElementChild;
+ if (!ch) return;
+ var curfill = ch.getAttribute("fill");
+ var curstroke = ch.getAttribute("stroke")
+ if (curfill && curfill!='none') ch.setAttribute("fill",color);
+ if (curstroke && curstroke!='none') ch.setAttribute("stroke",color);
+ });
+ }
+
+ // called when the main system creates or modifies an object
+ // primary purpose is create new markers for cloned objects
+ function updateReferences(el) {
+ $.each(mtypes, function (i,pos) {
+ var id = marker_prefix + pos + '_' + el.id;
+ var marker_name = 'marker-'+pos;
+ var marker = getLinked(el, marker_name);
+ if (!marker || !marker.attributes.se_type) return; //not created by this extension
+ var url = el.getAttribute(marker_name);
+ if (url) {
+ var len = el.id.length;
+ var linkid = url.substr(-len-1,len);
+ if (el.id != linkid) {
+ var val = $('#'+pos+'_marker').attr('value');
+ addMarker(id, val);
+ svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")");
+ if (el.tagName == "line" && pos=='mid') el=convertline(el);
+ S.call("changed", selElems);
+ }
+ }
+ });
+ }
+
+ // simulate a change event a text box that stores the current element's marker type
+ function triggerTextEntry(pos,val) {
+ $('#'+pos+'_marker').val(val);
+ $('#'+pos+'_marker').change();
+ var txtbox = $('#'+pos+'_marker');
+ //if (val.substr(0,1)=='\\') txtbox.hide();
+ //else txtbox.show();
+ }
+
+ function setIcon(pos,id) {
+ if (id.substr(0,1)!='\\') id='\\textmarker'
+ var ci = '#'+id_prefix+pos+'_'+id.substr(1);
+ svgEditor.setIcon('#cur_' + pos +'_marker_list', $(ci).children());
+ $(ci).addClass('current').siblings().removeClass('current');
+ }
+
+ function setMarkerSet(obj) {
+ var parts = this.id.split('_');
+ var set = parts[2];
+ switch (set) {
+ case 'off':
+ triggerTextEntry('start','\\nomarker');
+ triggerTextEntry('mid','\\nomarker');
+ triggerTextEntry('end','\\nomarker');
+ break;
+ case 'dimension':
+ triggerTextEntry('start','\\leftarrow');
+ triggerTextEntry('end','\\rightarrow');
+ showTextPrompt('mid');
+ break;
+ case 'label':
+ triggerTextEntry('mid','\\nomarker');
+ triggerTextEntry('end','\\rightarrow');
+ showTextPrompt('start');
+ break;
+ }
+ }
+
+ function showTextPrompt(pos) {
+ var def = $('#'+pos+'_marker').val();
+ if (def.substr(0,1)=='\\') def='';
+ $.prompt('Enter text for ' + pos + ' marker', def , function(txt) { if (txt) triggerTextEntry(pos,txt); });
+ }
+
+ // callback function for a toolbar button click
+ function setArrowFromButton(obj) {
+
+ var parts = this.id.split('_');
+ var pos = parts[1];
+ var val = parts[2];
+ if (parts[3]) val+='_'+parts[3];
+
+ if (val!='textmarker') {
+ triggerTextEntry(pos,'\\'+val);
+ } else {
+ showTextPrompt(pos);
+ }
+ }
+
+ function getTitle(lang,id) {
+ var list = lang_list[lang];
+ for (var i in list) {
+ if (list[i].id==id) return list[i].title;
+ }
+ return id;
+ }
+
+
+ // build the toolbar button array from the marker definitions
+ // TODO: need to incorporate language specific titles
+ function buildButtonList() {
+ var buttons=[];
+ var i=0;
+/*
+ buttons.push({
+ id:id_prefix + 'markers_off',
+ title:'Turn off all markers',
+ type:'context',
+ events: { 'click': setMarkerSet },
+ panel: 'marker_panel'
+ });
+ buttons.push({
+ id:id_prefix + 'markers_dimension',
+ title:'Dimension',
+ type:'context',
+ events: { 'click': setMarkerSet },
+ panel: 'marker_panel'
+ });
+ buttons.push({
+ id:id_prefix + 'markers_label',
+ title:'Label',
+ type:'context',
+ events: { 'click': setMarkerSet },
+ panel: 'marker_panel'
+ });
+*/
+ $.each(mtypes,function(k,pos) {
+ var listname = pos + "_marker_list";
+ var def = true;
+ $.each(marker_types,function(id,v) {
+ var title = getTitle('en',id);
+ buttons.push({
+ id:id_prefix + pos + "_" + id,
+ svgicon:id,
+ title:title,
+ type:'context',
+ events: { 'click': setArrowFromButton },
+ panel:'marker_panel',
+ list: listname,
+ isDefault: def
+ });
+ def = false;
+ });
+ });
+ return buttons;
+ }
+
+ return {
+ name: "Markers",
+ svgicons: "extensions/markers-icons.xml",
+ buttons: buildButtonList(),
+ context_tools: [
+ {
+ type: "input",
+ panel: "marker_panel",
+ title: "Start marker",
+ id: "start_marker",
+ label: "s",
+ size: 3,
+ events: { change: setMarker }
+ },{
+ type: "button-select",
+ panel: "marker_panel",
+ title: getTitle('en','start_marker_list'),
+ id: "start_marker_list",
+ colnum: 3,
+ events: { change: setArrowFromButton }
+ },{
+ type: "input",
+ panel: "marker_panel",
+ title: "Middle marker",
+ id: "mid_marker",
+ label: "m",
+ defval: "",
+ size: 3,
+ events: { change: setMarker }
+ },{
+ type: "button-select",
+ panel: "marker_panel",
+ title: getTitle('en','mid_marker_list'),
+ id: "mid_marker_list",
+ colnum: 3,
+ events: { change: setArrowFromButton }
+ },{
+ type: "input",
+ panel: "marker_panel",
+ title: "End marker",
+ id: "end_marker",
+ label: "e",
+ size: 3,
+ events: { change: setMarker }
+ },{
+ type: "button-select",
+ panel: "marker_panel",
+ title: getTitle('en','end_marker_list'),
+ id: "end_marker_list",
+ colnum: 3,
+ events: { change: setArrowFromButton }
+ } ],
+ callback: function() {
+ $('#marker_panel').addClass('toolset').hide();
+
+ },
+ addLangData: function(lang) {
+ return { data: lang_list[lang] };
+ },
+
+ selectedChanged: function(opts) {
+ // Use this to update the current selected elements
+ //console.log('selectChanged',opts);
+ selElems = opts.elems;
+
+ var i = selElems.length;
+ var marker_elems = ['line','path','polyline','polygon'];
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
+ if(opts.selectedElement && !opts.multiselected) {
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ },
+
+ elementChanged: function(opts) {
+ //console.log('elementChanged',opts);
+ var elem = opts.elems[0];
+ if(elem && (
+ elem.getAttribute("marker-start") ||
+ elem.getAttribute("marker-mid") ||
+ elem.getAttribute("marker-end")
+ )) {
+ colorChanged(elem);
+ updateReferences(elem);
+ }
+ changing_flag = false;
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_moinsave.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_moinsave.js.svn-base
new file mode 100644
index 000000000..e12c88da7
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_moinsave.js.svn-base
@@ -0,0 +1,56 @@
+/*
+ * ext-server_moinsave.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * 2011 MoinMoin:ReimarBauer
+ * adopted for moinmoins item storage. it sends in one post png and svg data
+ * (I agree to dual license my work to additional GPLv2 or later)
+ *
+ */
+
+svgEditor.addExtension("server_opensave", {
+ callback: function() {
+
+ var save_svg_action = '/+modify';
+
+ // Create upload target (hidden iframe)
+ var target = $('<iframe name="output_frame" src="#"/>').hide().appendTo('body');
+
+ svgEditor.setCustomHandlers({
+ save: function(win, data) {
+ var svg = "<?xml version=\"1.0\"?>\n" + data;
+ var qstr = $.param.querystring();
+ var name = qstr.substr(9).split('/+get/')[1];
+ var svg_data = svgedit.utilities.encode64(svg);
+ if(!$('#export_canvas').length) {
+ $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
+ }
+ var c = $('#export_canvas')[0];
+ c.width = svgCanvas.contentW;
+ c.height = svgCanvas.contentH;
+ $.getScript('canvg/canvg.js', function() {
+ canvg(c, svg, {renderCallback: function() {
+ var datauri = c.toDataURL('image/png');
+ var uiStrings = svgEditor.uiStrings;
+ var png_data = svgedit.utilities.encode64(datauri);
+ var form = $('<form>').attr({
+ method: 'post',
+ action: save_svg_action + '/' + name,
+ target: 'output_frame'
+ }) .append('<input type="hidden" name="png_data" value="' + png_data + '">')
+ .append('<input type="hidden" name="filepath" value="' + svg_data + '">')
+ .append('<input type="hidden" name="filename" value="' + 'drawing.svg">')
+ .append('<input type="hidden" name="contenttype" value="application/x-svgdraw">')
+ .appendTo('body')
+ .submit().remove();
+ }})});
+ alert("Saved! Return to Item View!");
+ top.window.location = '/'+name;
+ },
+ });
+
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_opensave.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_opensave.js.svn-base
new file mode 100644
index 000000000..278d9e5b2
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-server_opensave.js.svn-base
@@ -0,0 +1,180 @@
+/*
+ * ext-server_opensave.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("server_opensave", {
+ callback: function() {
+
+ var save_svg_action = 'extensions/filesave.php';
+ var save_png_action = 'extensions/filesave.php';
+
+ // Create upload target (hidden iframe)
+ var target = $('<iframe name="output_frame" src="#"/>').hide().appendTo('body');
+
+ svgEditor.setCustomHandlers({
+ save: function(win, data) {
+ var svg = "<?xml version=\"1.0\"?>\n" + data;
+
+ var title = svgCanvas.getDocumentTitle();
+ var filename = title.replace(/[^a-z0-9\.\_\-]+/gi, '_');
+
+ var form = $('<form>').attr({
+ method: 'post',
+ action: save_svg_action,
+ target: 'output_frame'
+ }) .append('<input type="hidden" name="output_svg" value="' + encodeURI(svg) + '">')
+ .append('<input type="hidden" name="filename" value="' + filename + '">')
+ .appendTo('body')
+ .submit().remove();
+ },
+ pngsave: function(win, data) {
+ var issues = data.issues;
+
+ if(!$('#export_canvas').length) {
+ $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
+ }
+ var c = $('#export_canvas')[0];
+
+ c.width = svgCanvas.contentW;
+ c.height = svgCanvas.contentH;
+ canvg(c, data.svg, {renderCallback: function() {
+ var datauri = c.toDataURL('image/png');
+
+ var uiStrings = svgEditor.uiStrings;
+ var note = '';
+
+ // Check if there's issues
+ if(issues.length) {
+ var pre = "\n \u2022 ";
+ note += ("\n\n" + pre + issues.join(pre));
+ }
+
+ if(note.length) {
+ alert(note);
+ }
+
+ var title = svgCanvas.getDocumentTitle();
+ var filename = title.replace(/[^a-z0-9\.\_\-]+/gi, '_');
+
+ var form = $('<form>').attr({
+ method: 'post',
+ action: save_png_action,
+ target: 'output_frame'
+ }) .append('<input type="hidden" name="output_png" value="' + datauri + '">')
+ .append('<input type="hidden" name="filename" value="' + filename + '">')
+ .appendTo('body')
+ .submit().remove();
+ }});
+
+
+ }
+ });
+
+ // Do nothing if client support is found
+ if(window.FileReader) return;
+
+ var cancelled = false;
+
+ // Change these to appropriate script file
+ var open_svg_action = 'extensions/fileopen.php?type=load_svg';
+ var import_svg_action = 'extensions/fileopen.php?type=import_svg';
+ var import_img_action = 'extensions/fileopen.php?type=import_img';
+
+ // Set up function for PHP uploader to use
+ svgEditor.processFile = function(str64, type) {
+ if(cancelled) {
+ cancelled = false;
+ return;
+ }
+
+ $('#dialog_box').hide();
+
+ if(type != 'import_img') {
+ var xmlstr = svgCanvas.Utils.decode64(str64);
+ }
+
+ switch ( type ) {
+ case 'load_svg':
+ svgCanvas.clear();
+ svgCanvas.setSvgString(xmlstr);
+ svgEditor.updateCanvas();
+ break;
+ case 'import_svg':
+ svgCanvas.importSvgString(xmlstr);
+ svgEditor.updateCanvas();
+ break;
+ case 'import_img':
+ svgCanvas.setGoodImage(str64);
+ break;
+ }
+ }
+
+ // Create upload form
+ var open_svg_form = $('<form>');
+ open_svg_form.attr({
+ enctype: 'multipart/form-data',
+ method: 'post',
+ action: open_svg_action,
+ target: 'output_frame'
+ });
+
+ // Create import form
+ var import_svg_form = open_svg_form.clone().attr('action', import_svg_action);
+
+ // Create image form
+ var import_img_form = open_svg_form.clone().attr('action', import_img_action);
+
+ // It appears necessory to rebuild this input every time a file is
+ // selected so the same file can be picked and the change event can fire.
+ function rebuildInput(form) {
+ form.empty();
+ var inp = $('<input type="file" name="svg_file">').appendTo(form);
+
+
+ function submit() {
+ // This submits the form, which returns the file data using svgEditor.uploadSVG
+ form.submit();
+
+ rebuildInput(form);
+ $.process_cancel("Uploading...", function() {
+ cancelled = true;
+ $('#dialog_box').hide();
+ });
+ }
+
+ if(form[0] == open_svg_form[0]) {
+ inp.change(function() {
+ // This takes care of the "are you sure" dialog box
+ svgEditor.openPrep(function(ok) {
+ if(!ok) {
+ rebuildInput(form);
+ return;
+ }
+ submit();
+ });
+ });
+ } else {
+ inp.change(function() {
+ // This submits the form, which returns the file data using svgEditor.uploadSVG
+ submit();
+ });
+ }
+ }
+
+ // Create the input elements
+ rebuildInput(open_svg_form);
+ rebuildInput(import_svg_form);
+ rebuildInput(import_img_form);
+
+ // Add forms to buttons
+ $("#tool_open").show().prepend(open_svg_form);
+ $("#tool_import").show().prepend(import_svg_form);
+ $("#tool_image").prepend(import_img_form);
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.js.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.js.svn-base
new file mode 100644
index 000000000..92f5db99f
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.js.svn-base
@@ -0,0 +1,387 @@
+/*
+ * ext-shapes.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Christian Tzurcanu
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("shapes", function() {
+
+
+ var current_d, cur_shape_id;
+ var canv = svgEditor.canvas;
+ var cur_shape;
+ var start_x, start_y;
+ var svgroot = canv.getRootElem();
+ var lastBBox = {};
+
+ // This populates the category list
+ var categories = {
+ basic: 'Basic',
+ object: 'Objects',
+ symbol: 'Symbols',
+ arrow: 'Arrows',
+ flowchart: 'Flowchart',
+ animal: 'Animals',
+ game: 'Cards & Chess',
+ dialog_balloon: 'Dialog balloons',
+ electronics: 'Electronics',
+ math: 'Mathematical',
+ music: 'Music',
+ misc: 'Miscellaneous',
+ raphael_1: 'raphaeljs.com set 1',
+ raphael_2: 'raphaeljs.com set 2'
+ };
+
+ var library = {
+ 'basic': {
+ data: {
+ 'heart': 'm150,73c61,-175 300,0 0,225c-300,-225 -61,-400 0,-225z',
+ 'frame': 'm0,0l300,0l0,300l-300,0zm35,-265l0,230l230,0l0,-230z',
+ 'donut': 'm1,150l0,0c0,-82.29042 66.70958,-149 149,-149l0,0c39.51724,0 77.41599,15.69816 105.35889,43.64108c27.94293,27.94293 43.64111,65.84165 43.64111,105.35892l0,0c0,82.29041 -66.70958,149 -149,149l0,0c-82.29041,0 -149,-66.70959 -149,-149zm74.5,0l0,0c0,41.1452 33.35481,74.5 74.5,74.5c41.14522,0 74.5,-33.3548 74.5,-74.5c0,-41.1452 -33.3548,-74.5 -74.5,-74.5l0,0c-41.14519,0 -74.5,33.35481 -74.5,74.5z',
+ "triangle": "m1,280.375l149,-260.75l149,260.75z",
+ "right_triangle": "m1,299l0,-298l298,298z",
+ "diamond": "m1,150l149,-149l149,149l-149,149l-149,-149z",
+ "pentagon": "m1.00035,116.97758l148.99963,-108.4053l148.99998,108.4053l-56.91267,175.4042l-184.1741,0l-56.91284,-175.4042z",
+ "hexagon": "m1,149.99944l63.85715,-127.71428l170.28572,0l63.85713,127.71428l-63.85713,127.71428l-170.28572,0l-63.85715,-127.71428z",
+ "septagon1": "m0.99917,191.06511l29.51249,-127.7108l119.48833,-56.83673l119.48836,56.83673l29.51303,127.7108l-82.69087,102.41679l-132.62103,0l-82.69031,-102.41679z",
+ "heptagon": "m1,88.28171l87.28172,-87.28171l123.43653,0l87.28172,87.28171l0,123.43654l-87.28172,87.28172l-123.43653,0l-87.28172,-87.28172l0,-123.43654z",
+ "decagon": "m1,150.00093l28.45646,-88.40318l74.49956,-54.63682l92.08794,0l74.50002,54.63682l28.45599,88.40318l-28.45599,88.40318l-74.50002,54.63681l-92.08794,0l-74.49956,-54.63681l-28.45646,-88.40318z",
+ "dodecagon": "m1,110.07421l39.92579,-69.14842l69.14842,-39.92579l79.85159,0l69.14842,39.92579l39.92578,69.14842l0,79.85159l-39.92578,69.14842l-69.14842,39.92578l-79.85159,0l-69.14842,-39.92578l-39.92579,-69.14842l0,-79.85159z",
+ "star_points_5": "m1,116.58409l113.82668,0l35.17332,-108.13487l35.17334,108.13487l113.82666,0l-92.08755,66.83026l35.17514,108.13487l-92.08759,-66.83208l-92.08757,66.83208l35.17515,-108.13487l-92.08758,-66.83026z",
+ "trapezoid": "m1,299l55.875,-298l186.25001,0l55.87498,298z",
+ "arrow_up": "m1.49805,149.64304l148.50121,-148.00241l148.50121,148.00241l-74.25061,0l0,148.71457l-148.5012,0l0,-148.71457z",
+ "vertical_scrool": "m37.375,261.625l0,-242.9375l0,0c0,-10.32083 8.36669,-18.6875 18.6875,-18.6875l224.25,0c10.32083,0 18.6875,8.36667 18.6875,18.6875c0,10.32081 -8.36667,18.6875 -18.6875,18.6875l-18.6875,0l0,242.9375c0,10.32083 -8.36668,18.6875 -18.6875,18.6875l-224.25,0l0,0c-10.32083,0 -18.6875,-8.36667 -18.6875,-18.6875c0,-10.32083 8.36667,-18.6875 18.6875,-18.6875zm37.375,-261.625l0,0c10.32081,0 18.6875,8.36667 18.6875,18.6875c0,10.32081 -8.36669,18.6875 -18.6875,18.6875c-5.1604,0 -9.34375,-4.18335 -9.34375,-9.34375c0,-5.16041 4.18335,-9.34375 9.34375,-9.34375l18.6875,0m186.875,18.6875l-205.5625,0m-37.375,224.25l0,0c5.1604,0 9.34375,4.18335 9.34375,9.34375c0,5.1604 -4.18335,9.34375 -9.34375,9.34375l18.6875,0m-18.6875,18.6875l0,0c10.32081,0 18.6875,-8.36667 18.6875,-18.6875l0,-18.6875",
+ "smiley": "m68.49886,214.78838q81.06408,55.67332 161.93891,0m-144.36983,-109.9558c0,-8.60432 6.97517,-15.57949 15.57948,-15.57949c8.60431,0 15.57948,6.97517 15.57948,15.57949c0,8.60431 -6.97517,15.57947 -15.57948,15.57947c-8.60431,0 -15.57948,-6.97516 -15.57948,-15.57947m95.83109,0c0,-8.60432 6.97517,-15.57949 15.57948,-15.57949c8.60431,0 15.57947,6.97517 15.57947,15.57949c0,8.60431 -6.97516,15.57947 -15.57947,15.57947c-8.60429,0 -15.57948,-6.97516 -15.57948,-15.57947m-181.89903,44.73038l0,0c0,-82.60133 66.96162,-149.56296 149.56296,-149.56296c82.60135,0 149.56296,66.96162 149.56296,149.56296c0,82.60135 -66.96161,149.56296 -149.56296,149.56296c-82.60133,0 -149.56296,-66.96161 -149.56296,-149.56296zm0,0l0,0c0,-82.60133 66.96162,-149.56296 149.56296,-149.56296c82.60135,0 149.56296,66.96162 149.56296,149.56296c0,82.60135 -66.96161,149.56296 -149.56296,149.56296c-82.60133,0 -149.56296,-66.96161 -149.56296,-149.56296z",
+ "left_braket": "m174.24565,298.5c-13.39009,0 -24.24489,-1.80908 -24.24489,-4.04065l0,-140.4187c0,-2.23158 -10.85481,-4.04065 -24.2449,-4.04065l0,0c13.39009,0 24.2449,-1.80907 24.2449,-4.04065l0,-140.4187l0,0c0,-2.23159 10.8548,-4.04066 24.24489,-4.04066",
+ "uml_actor": "m40.5,100l219,0m-108.99991,94.00006l107,105m-107.00009,-106.00006l-100,106m99.5,-231l0,125m33.24219,-158.75781c0,18.35916 -14.88303,33.24219 -33.24219,33.24219c-18.35916,0 -33.2422,-14.88303 -33.2422,-33.24219c0.00002,-18.35915 14.88304,-33.24219 33.2422,-33.24219c18.35916,0 33.24219,14.88304 33.24219,33.24219z",
+ "dialog_balloon_1": "m0.99786,35.96579l0,0c0,-19.31077 15.28761,-34.96524 34.14583,-34.96524l15.52084,0l0,0l74.50001,0l139.68748,0c9.05606,0 17.74118,3.68382 24.14478,10.24108c6.40356,6.55726 10.00107,15.45081 10.00107,24.72416l0,87.41311l0,0l0,52.44785l0,0c0,19.31078 -15.2876,34.96524 -34.14584,34.96524l-139.68748,0l-97.32507,88.90848l22.82506,-88.90848l-15.52084,0c-18.85822,0 -34.14583,-15.65446 -34.14583,-34.96524l0,0l0,-52.44785l0,0z",
+ "cloud": "m182.05086,34.31005c-0.64743,0.02048 -1.27309,0.07504 -1.92319,0.13979c-10.40161,1.03605 -19.58215,7.63722 -24.24597,17.4734l-2.47269,7.44367c0.53346,-2.57959 1.35258,-5.08134 2.47269,-7.44367c-8.31731,-8.61741 -19.99149,-12.59487 -31.52664,-10.72866c-11.53516,1.8662 -21.55294,9.3505 -27.02773,20.19925c-15.45544,-9.51897 -34.72095,-8.94245 -49.62526,1.50272c-14.90431,10.44516 -22.84828,28.93916 -20.43393,47.59753l1.57977,7.58346c-0.71388,-2.48442 -1.24701,-5.01186 -1.57977,-7.58346l-0.2404,0.69894c-12.95573,1.4119 -23.58103,11.46413 -26.34088,24.91708c-2.75985,13.45294 2.9789,27.25658 14.21789,34.21291l17.54914,4.26352c-6.1277,0.50439 -12.24542,-0.9808 -17.54914,-4.26352c-8.66903,9.71078 -10.6639,24.08736 -4.94535,35.96027c5.71854,11.87289 17.93128,18.70935 30.53069,17.15887l7.65843,-2.02692c-2.46413,1.0314 -5.02329,1.70264 -7.65843,2.02692c7.15259,13.16728 19.01251,22.77237 32.93468,26.5945c13.92217,3.82214 28.70987,1.56322 41.03957,-6.25546c10.05858,15.86252 27.91113,24.19412 45.81322,21.38742c17.90208,-2.8067 32.66954,-16.26563 37.91438,-34.52742l1.82016,-10.20447c-0.27254,3.46677 -0.86394,6.87508 -1.82016,10.20447c12.31329,8.07489 27.80199,8.52994 40.52443,1.18819c12.72244,-7.34175 20.6609,-21.34155 20.77736,-36.58929l-4.56108,-22.7823l-17.96776,-15.41455c13.89359,8.70317 22.6528,21.96329 22.52884,38.19685c16.5202,0.17313 30.55292,-13.98268 36.84976,-30.22897c6.29684,-16.24631 3.91486,-34.76801 -6.2504,-48.68089c4.21637,-10.35873 3.96622,-22.14172 -0.68683,-32.29084c-4.65308,-10.14912 -13.23602,-17.69244 -23.55914,-20.65356c-2.31018,-13.45141 -11.83276,-24.27162 -24.41768,-27.81765c-12.58492,-3.54603 -25.98557,0.82654 -34.41142,11.25287l-5.11707,8.63186c1.30753,-3.12148 3.01521,-6.03101 5.11707,-8.63186c-5.93959,-8.19432 -15.2556,-12.8181 -24.96718,-12.51096z",
+ "cylinder": "m299.0007,83.77844c0,18.28676 -66.70958,33.11111 -149.00002,33.11111m149.00002,-33.11111l0,0c0,18.28676 -66.70958,33.11111 -149.00002,33.11111c-82.29041,0 -148.99997,-14.82432 -148.99997,-33.11111m0,0l0,0c0,-18.28674 66.70956,-33.1111 148.99997,-33.1111c82.29044,0 149.00002,14.82436 149.00002,33.1111l0,132.44449c0,18.28674 -66.70958,33.11105 -149.00002,33.11105c-82.29041,0 -148.99997,-14.82431 -148.99997,-33.11105z",
+ "arrow_u_turn": "m1.00059,299.00055l0,-167.62497l0,0c0,-72.00411 58.37087,-130.37499 130.375,-130.37499l0,0l0,0c34.57759,0 67.73898,13.7359 92.18906,38.18595c24.45006,24.45005 38.18593,57.61144 38.18593,92.18904l0,18.625l37.24997,0l-74.49995,74.50002l-74.50002,-74.50002l37.25,0l0,-18.625c0,-30.8589 -25.0161,-55.87498 -55.87498,-55.87498l0,0l0,0c-30.85892,0 -55.875,25.01608 -55.875,55.87498l0,167.62497z",
+ "arrow_left_up": "m0.99865,224.5l74.50004,-74.5l0,37.25l111.74991,0l0,-111.75l-37.25,0l74.5,-74.5l74.5,74.5l-37.25,0l0,186.25l-186.24989,0l0,37.25l-74.50005,-74.5z",
+ "maximize": "m1.00037,150.34581l55.30305,-55.30267l0,27.65093l22.17356,0l0,-44.21833l44.21825,0l0,-22.17357l-27.65095,0l55.30267,-55.30292l55.3035,55.30292l-27.65175,0l0,22.17357l44.21835,0l0,44.21833l22.17357,0l0,-27.65093l55.30345,55.30267l-55.30345,55.3035l0,-27.65175l-22.17357,0l0,44.21834l-44.21835,0l0,22.17355l27.65175,0l-55.3035,55.30348l-55.30267,-55.30348l27.65095,0l0,-22.17355l-44.21825,0l0,-44.21834l-22.17356,0l0,27.65175l-55.30305,-55.3035z",
+ "cross": "m0.99844,99.71339l98.71494,0l0,-98.71495l101.26279,0l0,98.71495l98.71495,0l0,101.2628l-98.71495,0l0,98.71494l-101.26279,0l0,-98.71494l-98.71494,0z",
+ "plaque": "m-0.00197,49.94376l0,0c27.5829,0 49.94327,-22.36036 49.94327,-49.94327l199.76709,0l0,0c0,27.5829 22.36037,49.94327 49.94325,49.94327l0,199.7671l0,0c-27.58289,0 -49.94325,22.36034 -49.94325,49.94325l-199.76709,0c0,-27.58292 -22.36037,-49.94325 -49.94327,-49.94325z",
+ "page": "m249.3298,298.99744l9.9335,-39.73413l39.73413,-9.93355l-49.66763,49.66768l-248.33237,0l0,-298.00001l298.00001,0l0,248.33234"
+
+ },
+ buttons: []
+ }
+ };
+
+ var cur_lib = library.basic;
+
+ var mode_id = 'shapelib';
+
+ function loadIcons() {
+ $('#shape_buttons').empty();
+
+ // Show lib ones
+ $('#shape_buttons').append(cur_lib.buttons);
+ }
+
+ function loadLibrary(cat_id) {
+
+ var lib = library[cat_id];
+
+ if(!lib) {
+ $('#shape_buttons').html('Loading...');
+ $.getJSON('extensions/shapelib/' + cat_id + '.json', function(result, textStatus) {
+ cur_lib = library[cat_id] = {
+ data: result.data,
+ size: result.size,
+ fill: result.fill
+ }
+ makeButtons(cat_id, result);
+ loadIcons();
+ });
+ return;
+ }
+
+ cur_lib = lib;
+ if(!lib.buttons.length) makeButtons(cat_id, lib);
+ loadIcons();
+ }
+
+ function makeButtons(cat, shapes) {
+ var size = cur_lib.size || 300;
+ var fill = cur_lib.fill || false;
+ var off = size * .05;
+ var vb = [-off, -off, size + off*2, size + off*2].join(' ');
+ var stroke = fill ? 0: (size/30);
+
+ var shape_icon = new DOMParser().parseFromString(
+ '<svg xmlns="http://www.w3.org/2000/svg"><svg viewBox="' + vb + '"><path fill="'+(fill?'#333':'none')+'" stroke="#000000" stroke-width="' + stroke + '" /><\/svg><\/svg>',
+ 'text/xml');
+
+ var width = 24;
+ var height = 24;
+ shape_icon.documentElement.setAttribute('width', width);
+ shape_icon.documentElement.setAttribute('height', height);
+ var svg_elem = $(document.importNode(shape_icon.documentElement,true));
+
+ var data = shapes.data;
+
+ cur_lib.buttons = [];
+
+ for(var id in data) {
+ var path_d = data[id];
+ var icon = svg_elem.clone();
+ icon.find('path').attr('d', path_d);
+
+ var icon_btn = icon.wrap('<div class="tool_button">').parent().attr({
+ id: mode_id + '_' + id,
+ title: id
+ });
+
+
+ // Store for later use
+ cur_lib.buttons.push(icon_btn[0]);
+ }
+
+ }
+
+
+ return {
+ svgicons: "extensions/ext-shapes.xml",
+ buttons: [{
+ id: "tool_shapelib",
+ type: "mode_flyout", // _flyout
+ position: 6,
+ title: "Shape library",
+ events: {
+ "click": function() {
+ canv.setMode(mode_id);
+ }
+ }
+ }],
+ callback: function() {
+
+ $('<style>').text('\
+ #shape_buttons {\
+ overflow: auto;\
+ width: 180px;\
+ max-height: 300px;\
+ display: table-cell;\
+ vertical-align: middle;\
+ }\
+ \
+ #shape_cats {\
+ min-width: 110px;\
+ display: table-cell;\
+ vertical-align: middle;\
+ height: 300px;\
+ }\
+ #shape_cats > div {\
+ line-height: 1em;\
+ padding: .5em;\
+ border:1px solid #B0B0B0;\
+ background: #E8E8E8;\
+ margin-bottom: -1px;\
+ }\
+ #shape_cats div:hover {\
+ background: #FFFFCC;\
+ }\
+ #shape_cats div.current {\
+ font-weight: bold;\
+ }').appendTo('head');
+
+
+ var btn_div = $('<div id="shape_buttons">');
+ $('#tools_shapelib > *').wrapAll(btn_div);
+
+ var shower = $('#tools_shapelib_show');
+
+
+ loadLibrary('basic');
+
+ // Do mouseup on parent element rather than each button
+ $('#shape_buttons').mouseup(function(evt) {
+ var btn = $(evt.target).closest('div.tool_button');
+
+ if(!btn.length) return;
+
+ var copy = btn.children().clone();
+ shower.children(':not(.flyout_arrow_horiz)').remove();
+ shower
+ .append(copy)
+ .attr('data-curopt', '#' + btn[0].id) // This sets the current mode
+ .mouseup();
+ canv.setMode(mode_id);
+
+ cur_shape_id = btn[0].id.substr((mode_id+'_').length);
+ current_d = cur_lib.data[cur_shape_id];
+
+ $('.tools_flyout').fadeOut();
+
+ });
+
+//
+ var shape_cats = $('<div id="shape_cats">');
+
+ var cat_str = '';
+
+ $.each(categories, function(id, label) {
+ cat_str += '<div data-cat=' + id + '>' + label + '</div>';
+ });
+
+ shape_cats.html(cat_str).children().bind('mouseup', function() {
+ var catlink = $(this);
+ catlink.siblings().removeClass('current');
+ catlink.addClass('current');
+
+ loadLibrary(catlink.attr('data-cat'));
+ // Get stuff
+
+ return false;
+ });
+
+ shape_cats.children().eq(0).addClass('current');
+
+ $('#tools_shapelib').append(shape_cats);
+
+ shower.mouseup(function() {
+ canv.setMode(current_d ? mode_id : 'select');
+ });
+
+
+ $('#tool_shapelib').remove();
+
+ var h = $('#tools_shapelib').height();
+ $('#tools_shapelib').css({
+ 'margin-top': -(h/2 - 15),
+ 'margin-left': 3
+ });
+
+
+ },
+ mouseDown: function(opts) {
+ var mode = canv.getMode();
+ if(mode !== mode_id) return;
+
+ var e = opts.event;
+ var x = start_x = opts.start_x;
+ var y = start_y = opts.start_y;
+ var cur_style = canv.getStyle();
+
+ cur_shape = canv.addSvgElementFromJson({
+ "element": "path",
+ "curStyles": true,
+ "attr": {
+ "d": current_d,
+ "id": canv.getNextId(),
+ "opacity": cur_style.opacity / 2,
+ "style": "pointer-events:none"
+ }
+ });
+
+ // Make sure shape uses absolute values
+ if(/[a-z]/.test(current_d)) {
+ current_d = cur_lib.data[cur_shape_id] = canv.pathActions.convertPath(cur_shape);
+ cur_shape.setAttribute('d', current_d);
+ canv.pathActions.fixEnd(cur_shape);
+ }
+
+ cur_shape.setAttribute('transform', "translate(" + x + "," + y + ") scale(0.005) translate(" + -x + "," + -y + ")");
+
+// console.time('b');
+ canv.recalculateDimensions(cur_shape);
+
+ var tlist = canv.getTransformList(cur_shape);
+
+ lastBBox = cur_shape.getBBox();
+
+ return {
+ started: true
+ }
+ // current_d
+ },
+ mouseMove: function(opts) {
+ var mode = canv.getMode();
+ if(mode !== mode_id) return;
+
+ var zoom = canv.getZoom();
+ var evt = opts.event
+
+ var x = opts.mouse_x/zoom;
+ var y = opts.mouse_y/zoom;
+
+ var tlist = canv.getTransformList(cur_shape),
+ box = cur_shape.getBBox(),
+ left = box.x, top = box.y, width = box.width,
+ height = box.height;
+ var dx = (x-start_x), dy = (y-start_y);
+
+ var newbox = {
+ 'x': Math.min(start_x,x),
+ 'y': Math.min(start_y,y),
+ 'width': Math.abs(x-start_x),
+ 'height': Math.abs(y-start_y)
+ };
+
+ var ts = null,
+ tx = 0, ty = 0,
+ sy = height ? (height+dy)/height : 1,
+ sx = width ? (width+dx)/width : 1;
+
+ var sx = newbox.width / lastBBox.width;
+ var sy = newbox.height / lastBBox.height;
+
+ sx = sx || 1;
+ sy = sy || 1;
+
+ // Not perfect, but mostly works...
+ if(x < start_x) {
+ tx = lastBBox.width;
+ }
+ if(y < start_y) ty = lastBBox.height;
+
+ // update the transform list with translate,scale,translate
+ var translateOrigin = svgroot.createSVGTransform(),
+ scale = svgroot.createSVGTransform(),
+ translateBack = svgroot.createSVGTransform();
+
+ translateOrigin.setTranslate(-(left+tx), -(top+ty));
+ if(!evt.shiftKey) {
+ var max = Math.min(Math.abs(sx), Math.abs(sy));
+
+ sx = max * (sx < 0 ? -1 : 1);
+ sy = max * (sy < 0 ? -1 : 1);
+ }
+ scale.setScale(sx,sy);
+
+ translateBack.setTranslate(left+tx, top+ty);
+ var N = tlist.numberOfItems;
+ tlist.appendItem(translateBack);
+ tlist.appendItem(scale);
+ tlist.appendItem(translateOrigin);
+
+ canv.recalculateDimensions(cur_shape);
+
+ lastBBox = cur_shape.getBBox();
+ },
+ mouseUp: function(opts) {
+ var mode = canv.getMode();
+ if(mode !== mode_id) return;
+
+ if(opts.mouse_x == start_x && opts.mouse_y == start_y) {
+ return {
+ keep: false,
+ element: cur_shape,
+ started: false
+ }
+ }
+
+ return {
+ keep: true,
+ element: cur_shape,
+ started: false
+ }
+ }
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.xml.svn-base
new file mode 100644
index 000000000..92b0090ae
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/ext-shapes.xml.svn-base
@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="tool_shapelib">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
+ <path fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m70,194.72501l0,0c0,-10.30901 35.8172,-18.666 80,-18.666c44.18298,0 80,8.35699 80,18.666l0,74.66699c0,10.30899 -35.81702,18.66699 -80,18.66699c-44.1828,0 -80,-8.358 -80,-18.66699l0,-74.66699z"/>
+ <path fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m70,114.608l0,0c0,-10.309 35.8172,-18.6668 80,-18.6668c44.18298,0 80,8.3578 80,18.6668l0,74.66699c0,10.30901 -35.81702,18.666 -80,18.666c-44.1828,0 -80,-8.35699 -80,-18.666l0,-74.66699z"/>
+ <path fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m70,33.6667l0,0c0,-10.3094 35.8172,-18.6667 80,-18.6667c44.18298,0 80,8.3573 80,18.6667l0,74.6663c0,10.31 -35.81702,18.667 -80,18.667c-44.1828,0 -80,-8.357 -80,-18.667l0,-74.6663z"/>
+ <path id="svg_1" fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m230,32.33334c0,10.30931 -35.81726,18.66666 -80,18.66666c-44.1828,0 -80,-8.35735 -80,-18.66666"/>
+ </svg>
+ </g>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper-icon.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper-icon.xml.svn-base
new file mode 100644
index 000000000..c05576aa2
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper-icon.xml.svn-base
@@ -0,0 +1,34 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+
+<g id="tool_eyedropper">
+<svg viewBox="0 0 320 320" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <radialGradient id="eyedropper_svg_6" cx="0.5" cy="0.5" r="0.5">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#e5e5e5" stop-opacity="0.38"/>
+ </radialGradient>
+ <linearGradient id="eyedropper_svg_15" x1="0" y1="0" x2="0.58594" y2="0.55078">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="0.57"/>
+ <stop offset="1" stop-color="#000056" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="eyedropper_svg_19" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffffff" stop-opacity="0"/>
+ </linearGradient>
+ </defs>
+ <g display="inline">
+ <title>Layer 1</title>
+ <path d="m193.899994,73l-119.899979,118l-15,39.5l10.25,4.5l43.750015,-20l108.999969,-112l-28.100006,-30z" id="svg_3" fill="none" stroke="#000000" stroke-width="5"/>
+ <path d="m58.649994,232c-2.75,28.200012 -26.399994,28.950012 -21.899994,59c4.5,30.049988 55,28 55.5,-1.25c0.5,-29.25 -20.25,-28.75 -22.25,-54.75l-11.350006,-3z" id="svg_4" fill="#aa56ff" stroke="#000000" stroke-width="7"/>
+ <path d="m45.474976,269.275024l13.775024,0.474976l-0.75,16.75l-14.25,-1.25l1.224976,-15.974976z" id="svg_5" fill="url(#eyedropper_svg_6)" stroke-width="5" fill-opacity="0.73"/>
+ <path d="m217.899994,46c21.5,-101.549999 141.600006,20.449997 28.100006,33l-5,44l-63,-66l39.899994,-11z" id="svg_2" fill="#000000" stroke-width="5"/>
+ <path d="m206.825012,61.075008c3.712494,-2.46249 7.637482,-3.53751 14.424988,-5.575008c10.125,-16.5 32.875,-41.5 40.5,-35c7.625,6.5 -21.25,35.625 -37.5,39.25c-5.5,10.125 -8,13.875 -17.25,16.5c-2.837494,-8.162514 -4.262482,-12.337486 -0.174988,-15.174992z" id="svg_7" fill="url(#eyedropper_svg_15)" stroke-width="5"/>
+ <path d="m133.049988,134.75l46.950012,9.25l-66,70l-42.5,20.5l-11.5,-5l14,-37.5l59.049988,-57.25z" id="svg_11" fill="#aa56ff" stroke="#000000" stroke-width="7"/>
+ <path d="m71.425034,212.350006l9.050888,-20.022537l51.516724,-49.327469l8.507355,0.97197l-69.074966,68.378036z" id="svg_16" fill="url(#eyedropper_svg_19)" stroke-width="5"/>
+ </g>
+</svg>
+</g>
+
+ <g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper.png.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper.png.svn-base
new file mode 100644
index 000000000..61987c4bd
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/eyedropper.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/fileopen.php.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/fileopen.php.svn-base
new file mode 100644
index 000000000..a6661e5cd
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/fileopen.php.svn-base
@@ -0,0 +1,31 @@
+<!doctype html>
+<?php
+/*
+ * fileopen.php
+ * To be used with ext-server_opensave.js for SVG-edit
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+ // Very minimal PHP file, all we do is Base64 encode the uploaded file and
+ // return it to the editor
+
+ $file = $_FILES['svg_file']['tmp_name'];
+
+ $output = file_get_contents($file);
+
+ $type = $_REQUEST['type'];
+
+ $prefix = '';
+
+ // Make Data URL prefix for import image
+ if($type == 'import_img') {
+ $info = getimagesize($file);
+ $prefix = 'data:' . $info['mime'] . ';base64,';
+ }
+?>
+<script>
+window.top.window.svgEditor.processFile("<?php echo $prefix . base64_encode($output); ?>", "<?php echo $type ?>");
+</script> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/filesave.php.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/filesave.php.svn-base
new file mode 100644
index 000000000..77414b807
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/filesave.php.svn-base
@@ -0,0 +1,44 @@
+<?php
+/*
+ * filesave.php
+ * To be used with ext-server_opensave.js for SVG-edit
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+if(!isset($_POST['output_svg']) && !isset($_POST['output_png'])) {
+ die('post fail');
+}
+
+$file = '';
+
+$suffix = isset($_POST['output_svg'])?'.svg':'.png';
+
+if(isset($_POST['filename']) && strlen($_POST['filename']) > 0) {
+ $file = $_POST['filename'] . $suffix;
+} else {
+ $file = 'image' . $suffix;
+}
+
+if($suffix == '.svg') {
+ $mime = 'image/svg+xml';
+ $contents = rawurldecode($_POST['output_svg']);
+} else {
+ $mime = 'image/png';
+ $contents = $_POST['output_png'];
+ $pos = (strpos($contents, 'base64,') + 7);
+ $contents = base64_decode(substr($contents, $pos));
+}
+
+ header("Cache-Control: public");
+ header("Content-Description: File Transfer");
+ header("Content-Disposition: attachment; filename=" . $file);
+ header("Content-Type: " . $mime);
+ header("Content-Transfer-Encoding: binary");
+
+ echo $contents;
+
+?> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/foreignobject-icons.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/foreignobject-icons.xml.svn-base
new file mode 100644
index 000000000..0d34654a7
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/foreignobject-icons.xml.svn-base
@@ -0,0 +1,96 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="tool_foreign">
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 84 84">
+ <g fill="#444" opacity="0.2" transform="translate(6,6)">
+ <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ <g fill="#444" opacity="0.3" transform="translate(4,4)">
+ <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ <g fill="#444" opacity="0.5" transform="translate(2,2)">
+ <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ <g fill="#0000CC">
+ <path id="xyz321" d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ </svg>
+ </g>
+
+ <g id="edit_foreign">
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="34 38 170 170" overflow="hidden">
+ <g fill="#000088">
+ <path d="M30.1,63.9v-4.3l30.2-14.9V50L36.5,61.7l23.8,11.7v5.3L30.1,63.9z"/>
+ <path d="M106.1,79.7v-1.1c4.2-0.5,4.8-1.1,4.8-5.2V58.2c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
+ c0,4.5,1.1,5.7,5.2,5.8v1.1H86.8v-1.1c4.1-0.3,4.9-1.1,4.9-5.1V57.9c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
+ c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5V55.4c0-3.5-0.6-4.6-2.5-4.6
+ c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
+ c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H106.1z"/>
+ <path d="M147.3,80.5c-3,0-4.2-1.4-4.6-5.3c-4.4,3.7-7.3,5.3-10.5,5.3c-4.5,0-7.6-3.2-7.6-7.7c0-2.4,1-4.8,2.6-6.3
+ c3.1-2.7,4.3-3.3,15.4-7.8v-4.4c0-3.9-1.9-6-5.5-6c-2.9,0-5.2,1.6-5.2,3.5c0,0.5,0.1,1.1,0.2,1.7c0.1,0.5,0.1,0.9,0.1,1.2
+ c0,1.6-1.5,3-3.2,3s-3.1-1.4-3.1-3.1c0-1.8,1.2-3.9,3-5.4c2-1.7,5.5-2.7,9.1-2.7c4.4,0,7.5,1.4,9,4.2c1,1.7,1.4,3.7,1.4,7.3v14
+ c0,3.2,0.5,4.2,2.2,4.2c1.1,0,1.9-0.4,3.2-1.4v1.9C151.3,79.6,149.8,80.5,147.3,80.5z M142.6,60.5c-8.7,3.2-11.7,5.8-11.7,10v0.3
+ c0,3.1,2,5.5,4.5,5.5c1.5,0,3.5-0.6,5.3-1.6c1.5-0.9,1.9-1.6,1.9-3.8V60.5z"/>
+ <path d="M165.3,80.5c-4.2,0-6.3-3.1-6.3-9.1V49.7h-3.8c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.4,0.4-0.9,1.2-1.4
+ c1.9-1.1,4.3-3.7,7-7.7c0.5-0.6,1-1.3,1.4-2c0.4,0,0.5,0.2,0.5,0.9v8.4h7.3v2.3h-7.3v20.6c0,4.6,1.1,6.5,3.7,6.5
+ c1.6,0,2.7-0.6,4.3-2.5l0.9,0.8C171.8,78.7,169,80.5,165.3,80.5z"/>
+ <path d="M193.8,79.7v-1.1c4.1-0.4,4.9-1.3,4.9-6.2V58.1c0-5-1.8-7.6-5.4-7.6c-2.8,0-5,1.2-8,4.5v17.4
+ c0,5,0.7,5.8,4.9,6.3v1.1h-15.6v-1.1c4.2-0.6,4.6-1.2,4.6-6.3V38.5c0-3.1-0.6-3.7-3.7-3.7c-0.4,0-0.6,0-0.9,0.1v-1.2l1.9-0.6
+ c4-1.2,5.8-1.7,8.3-2.6l0.4,0.2v21.9c3.3-4.3,6.3-6,10.6-6c5.9,0,8.9,3.9,8.9,11.5v14.3c0,5,0.4,5.5,4.3,6.3v1.1h-15.2V79.7z"/>
+ <path d="M59.1,116.1v-4.3l30.2-14.9v5.3l-23.8,11.7l23.8,11.7v5.3L59.1,116.1z"/>
+ <path d="M135.1,131.9v-1.1c4.2-0.5,4.8-1.1,4.8-5.2v-15.1c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
+ c0,4.5,1.1,5.7,5.2,5.8v1.1h-16.1v-1.1c4.1-0.3,4.9-1.1,4.9-5.1v-15.7c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
+ c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5v-18.2c0-3.5-0.6-4.6-2.5-4.6
+ c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
+ c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H135.1z"/>
+ <path d="M152.1,131.9v-1.1c5-0.3,5.7-1.1,5.7-6.3v-16.6c0-3.2-0.6-4.3-2.4-4.3c-0.6,0-1.6,0.1-2.4,0.2l-0.6,0.1v-1.1
+ l11.2-4L164,99v25.6c0,5.2,0.6,5.9,5.3,6.3v1.1L152.1,131.9L152.1,131.9z M160.8,93.1c-2,0-3.7-1.6-3.7-3.7c0-2,1.7-3.7,3.7-3.7
+ c2.1,0,3.7,1.7,3.7,3.7C164.6,91.6,163,93.1,160.8,93.1z"/>
+ <path d="M175.8,131v-5.3l23.7-11.8l-23.7-11.7v-5.3l30.1,14.9v4.3L175.8,131z"/>
+ <path d="M31.1,169.5v-4.3l30.2-14.9v5.3l-23.8,11.7L61.3,179v5.3L31.1,169.5z"/>
+ <path d="M71.3,186.4h-4.9l16.5-49.7h4.8L71.3,186.4z"/>
+ <path d="M127.1,185.3v-1.1c4.2-0.5,4.8-1.1,4.8-5.2v-15.2c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
+ c0,4.5,1.1,5.7,5.2,5.8v1.1h-16.1v-1.1c4.1-0.3,4.9-1.1,4.9-5.1v-15.6c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
+ c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5V161c0-3.5-0.6-4.6-2.5-4.6
+ c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
+ c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H127.1L127.1,185.3z"/>
+ <path d="M168.3,186.1c-3,0-4.2-1.4-4.6-5.3c-4.4,3.7-7.3,5.3-10.5,5.3c-4.5,0-7.6-3.2-7.6-7.7c0-2.4,1-4.8,2.6-6.3
+ c3.1-2.7,4.3-3.3,15.4-7.8v-4.4c0-3.9-1.9-6-5.5-6c-2.9,0-5.2,1.6-5.2,3.5c0,0.5,0.1,1.1,0.2,1.7c0.1,0.5,0.1,0.9,0.1,1.2
+ c0,1.6-1.5,3-3.2,3s-3.1-1.4-3.1-3.1c0-1.8,1.2-3.9,3-5.4c2-1.7,5.5-2.7,9.1-2.7c4.4,0,7.5,1.4,9,4.2c1,1.7,1.4,3.7,1.4,7.3v14
+ c0,3.2,0.5,4.2,2.2,4.2c1.1,0,1.9-0.4,3.2-1.4v1.9C172.3,185.2,170.8,186.1,168.3,186.1z M163.8,166.1c-8.7,3.2-11.7,5.8-11.7,10
+ v0.3c0,3.1,2,5.5,4.5,5.5c1.5,0,3.5-0.6,5.3-1.6c1.5-0.9,1.9-1.6,1.9-3.8V166.1z"/>
+ <path d="M186.3,186.1c-4.2,0-6.3-3.1-6.3-9.1v-21.7h-3.8c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.4,0.4-0.9,1.2-1.4
+ c1.9-1.1,4.3-3.7,7-7.7c0.5-0.6,1-1.3,1.4-2c0.4,0,0.5,0.2,0.5,0.9v8.4h7.3v2.3h-7.3v20.6c0,4.6,1.1,6.5,3.7,6.5
+ c1.6,0,2.7-0.6,4.3-2.5l0.9,0.8C192.8,184.3,190,186.1,186.3,186.1z"/>
+ <path d="M209.1,185.3h-13.4v-1.1c4.2-0.6,4.6-1.2,4.6-6.3V144c0-3.1-0.6-3.7-3.7-3.7c-0.4,0-0.6,0-0.9,0.1v-1.2
+ l1.9-0.6c4-1.2,5.8-1.7,8.3-2.6l0.4,0.2v21.9c0.9-1.2,1.9-2.2,2.8-3.1"/>
+ <path d="M209.1,157.9c-0.8,0.7-1.7,1.5-2.7,2.6v17.4c0,4,0.4,5.3,2.7,5.9"/>
+ </g>
+ <g>
+ <polyline opacity="0.2" fill="#231F20" points="209.1,76.4 118.7,186.5 139.1,186.4 209.1,121 209.1,76.4 "/>
+ <polyline opacity="0.4" fill="#231F20" points="209.1,76.2 118.5,186.5 129.7,186.4 200.2,120.3 209.1,100.8 209.1,76.4 "/>
+ <path fill="#FFD761" d="M121.6,88.7l0.8,87.5l62.3-56.7c0,0-15.3-25.8-24.8-30C151.1,85.6,121.6,88.7,121.6,88.7z"/>
+ <path fill="#FEA01E" d="M209.1,19.5h-54l-33.5,69.2c0,0,29.7-3.4,38.3,0.8c8.9,4.4,25,30.8,25,30.8l24.2-50V19.5z"/>
+ <path d="M120.4,153.7l-0.6,25l23.8-16.9c0,0-8-7-11.2-8.1C129.4,152.8,120.4,153.7,120.4,153.7z"/>
+ <polyline fill="none" stroke="#231F20" stroke-width="5" points="153.9,19.5 121.6,88.7 120.7,181.2 186.6,120.3 209.1,70.3 "/>
+ </g>
+ </svg>
+ </g>
+
+ <g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/grid-icon.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/grid-icon.xml.svn-base
new file mode 100644
index 000000000..d34eb9d02
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/grid-icon.xml.svn-base
@@ -0,0 +1,30 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<!--
+ Sample icons file. This file looks like an SVG file with groups as its
+ children. Each group element has an ID that must match the ID of the button given
+ in the extension. The SVG inside the group makes up the actual icon, and
+ needs use a viewBox instead of width/height for it to scale properly.
+
+ Multiple icons can be included, each within their own group.
+-->
+ <g id="view_grid">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <g>
+ <rect fill="#ffffff" stroke="#848484" x="2" y="2" width="20" height="20"/>
+ <line fill="none" stroke="#848484" x1="11.84375" y1="-1.53125" x2="11.84375" y2="18.46875" transform="rotate(90, 11.8429, 8.46955)"/>
+ <line fill="none" stroke="#848484" x1="11.90625" y1="5.21875" x2="11.90625" y2="25.21875" transform="rotate(90, 11.9054, 15.2196)"/>
+ <line fill="none" stroke="#848484" x1="8.5" y1="2.03125" x2="8.5" y2="22.03125"/>
+ <line fill="none" stroke="#848484" x1="15.5" y1="2.03125" x2="15.5" y2="22.03125"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="3.25" y="3.28125" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="10" y="3.28125" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="16.75" y="3.28125" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="3.28125" y="9.75" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="10.03125" y="9.75" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="16.78125" y="9.75" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="3.3125" y="16.59375" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="10.0625" y="16.59375" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="16.8125" y="16.59375" width="4" height="4"/>
+ </g>
+ </svg>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/helloworld-icon.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/helloworld-icon.xml.svn-base
new file mode 100644
index 000000000..0b1ba1a04
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/helloworld-icon.xml.svn-base
@@ -0,0 +1,21 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<!--
+ Sample icons file. This file looks like an SVG file with groups as its
+ children. Each group element has an ID that must match the ID of the button given
+ in the extension. The SVG inside the group makes up the actual icon, and
+ needs use a viewBox instead of width/height for it to scale properly.
+
+ Multiple icons can be included, each within their own group.
+-->
+ <g id="hello_world">
+ <svg width="102" height="102" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <g>
+ <title>Layer 1</title>
+ <rect ry="30" rx="30" x="2.5" y="2.5" width="97" height="97" id="svg_3" fill="#008000" stroke="#000000" stroke-width="5"/>
+ <text x="52.668" y="42.5" id="svg_1" fill="#ffffff" stroke="#000000" stroke-width="0" font-size="24" font-family="Monospace" text-anchor="middle" xml:space="preserve">Hello</text>
+ <text x="52.668" y="71.5" fill="#ffffff" stroke="#000000" stroke-width="0" font-size="24" font-family="Monospace" text-anchor="middle" xml:space="preserve" id="svg_2">World!</text>
+ </g>
+ </svg>
+ </g>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/.svn/text-base/markers-icons.xml.svn-base b/files_svgedit/svg-edit/extensions/.svn/text-base/markers-icons.xml.svn-base
new file mode 100644
index 000000000..6d122b051
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/.svn/text-base/markers-icons.xml.svn-base
@@ -0,0 +1,115 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <g id="nomarker">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-50,0l100,0"/>
+ </svg>
+ </g>
+ <g id="leftarrow">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-50,0l100,40l-30,-40l30,-40z"/>
+ </svg>
+ </g>
+ <g id="rightarrow">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m50,0l-100,40l30,-40l-30,-40z"/>
+ </svg>
+ </g>
+ <g id="leftarrow_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-50,0l100,40l-30,-40l30,-40z"/>
+ </svg>
+ </g>
+ <g id="rightarrow_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m50,0l-100,40l30,-40l-30,-40z"/>
+ </svg>
+ </g>
+ <g id="forwardslash">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-20,50l40,-100"/>
+ </svg>
+ </g>
+ <g id="reverseslash">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-20,-50l40,100"/>
+ </svg>
+ </g>
+ <g id="verticalslash">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m0,-50l0,100"/>
+ </svg>
+ </g>
+ <g id="mcircle">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <circle stroke-width="10" stroke="#ff7f00" fill="#ff7f00" cy="0" cx="0" r="30"/>
+ </svg>
+ </g>
+ <g id="mcircle_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <circle stroke-width="10" stroke="#ff7f00" fill="none" cy="0" cx="0" r="30"/>
+ </svg>
+ </g>
+ <g id="xmark">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-30,30l60,-60m0,60l-60,-60"/>
+ </svg>
+ </g>
+ <g id="box">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-30,-30l0,60l60,0l0,-60z"/>
+ </svg>
+ </g>
+ <g id="star">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-40,-20l80,0l-70,60l30,-80l30,80z"/>
+ </svg>
+ </g>
+ <g id="box_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-30,-30l0,60l60,0l0,-60z"/>
+ </svg>
+ </g>
+ <g id="star_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-40,-20l80,0l-70,60l30,-80l30,80z"/>
+ </svg>
+ </g>
+ <g id="triangle_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="M-30,30 L0,-30 L30,30 Z"/>
+ </svg>
+ </g>
+ <g id="triangle">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="M-30,30 L0,-30 L30,30 Z"/>
+ </svg>
+ </g>
+ <g id="textmarker">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <text xml:space="preserve" text-anchor="middle" font-family="serif" font-size="120" y="40" x="0" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
+ </svg>
+ </g>
+ <g id="mkr_markers_off">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <line y2="0" x2="50" y1="0" x1="-50" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ </svg>
+ </g>
+ <g id="mkr_markers_dimension">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <line y2="0" x2="40" y1="0" x1="20" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ <line y2="0" x2="-40" y1="0" x1="-20" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ <text text-anchor="middle" font-family="serif" font-size="80" y="20" x="0" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
+ <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M-50,0 L-30,-15 L-30,15 Z"/>
+ <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M50,0 L30,-15 L30,15 Z"/>
+ </svg>
+ </g>
+ <g id="mkr_markers_label">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <line y2="0" x2="40" y1="0" x1="-20" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ <text text-anchor="middle" font-family="serif" font-size="80" y="20" x="-40" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
+ <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M50,0 L30,-15 L30,15 Z"/>
+ </svg>
+ </g>
+ <g id="svg_eof"/>
+</svg>
diff --git a/files_svgedit/svg-edit/extensions/closepath_icons.svg b/files_svgedit/svg-edit/extensions/closepath_icons.svg
new file mode 100644
index 000000000..7294f5ead
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/closepath_icons.svg
@@ -0,0 +1,41 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<g id="tool_closepath">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <title>Layer 1</title>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
+ <line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
+ <path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ </g>
+</svg>
+</g>
+<g id="tool_openpath">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <title>Layer 1</title>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
+ <line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ <g stroke="#A00" stroke-width="15" fill="none">
+ <line x1="168" y1="24" x2="210" y2="150"/>
+ <line x1="210" y1="24" x2="168" y2="150"/>
+ </g>
+ </g>
+</svg>
+</g>
+
+<g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/ext-arrows.js b/files_svgedit/svg-edit/extensions/ext-arrows.js
new file mode 100644
index 000000000..4bb5cd25d
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-arrows.js
@@ -0,0 +1,298 @@
+/*
+ * ext-arrows.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+
+svgEditor.addExtension("Arrows", function(S) {
+ var svgcontent = S.svgcontent,
+ addElem = S.addSvgElementFromJson,
+ nonce = S.nonce,
+ randomize_ids = S.randomize_ids,
+ selElems;
+
+ svgCanvas.bind('setnonce', setArrowNonce);
+ svgCanvas.bind('unsetnonce', unsetArrowNonce);
+
+ var lang_list = {
+ "en":[
+ {"id": "arrow_none", "textContent": "No arrow" }
+ ],
+ "fr":[
+ {"id": "arrow_none", "textContent": "Sans flèche" }
+ ]
+ };
+
+ var prefix = 'se_arrow_';
+ if (randomize_ids) {
+ var arrowprefix = prefix + nonce + '_';
+ } else {
+ var arrowprefix = prefix;
+ }
+
+ var pathdata = {
+ fw: {d:"m0,0l10,5l-10,5l5,-5l-5,-5z", refx:8, id: arrowprefix + 'fw'},
+ bk: {d:"m10,0l-10,5l10,5l-5,-5l5,-5z", refx:2, id: arrowprefix + 'bk'}
+ }
+
+ function setArrowNonce(window, n) {
+ randomize_ids = true;
+ arrowprefix = prefix + n + '_';
+ pathdata.fw.id = arrowprefix + 'fw';
+ pathdata.bk.id = arrowprefix + 'bk';
+ }
+
+ function unsetArrowNonce(window) {
+ randomize_ids = false;
+ arrowprefix = prefix;
+ pathdata.fw.id = arrowprefix + 'fw';
+ pathdata.bk.id = arrowprefix + 'bk';
+ }
+
+ function getLinked(elem, attr) {
+ var str = elem.getAttribute(attr);
+ if(!str) return null;
+ var m = str.match(/\(\#(.*)\)/);
+ if(!m || m.length !== 2) {
+ return null;
+ }
+ return S.getElem(m[1]);
+ }
+
+ function showPanel(on) {
+ $('#arrow_panel').toggle(on);
+
+ if(on) {
+ var el = selElems[0];
+ var end = el.getAttribute("marker-end");
+ var start = el.getAttribute("marker-start");
+ var mid = el.getAttribute("marker-mid");
+ var val;
+
+ if(end && start) {
+ val = "both";
+ } else if(end) {
+ val = "end";
+ } else if(start) {
+ val = "start";
+ } else if(mid) {
+ val = "mid";
+ if(mid.indexOf("bk") != -1) {
+ val = "mid_bk";
+ }
+ }
+
+ if(!start && !mid && !end) {
+ val = "none";
+ }
+
+ $("#arrow_list").val(val);
+ }
+ }
+
+ function resetMarker() {
+ var el = selElems[0];
+ el.removeAttribute("marker-start");
+ el.removeAttribute("marker-mid");
+ el.removeAttribute("marker-end");
+ }
+
+ function addMarker(dir, type, id) {
+ // TODO: Make marker (or use?) per arrow type, since refX can be different
+ id = id || arrowprefix + dir;
+
+ var marker = S.getElem(id);
+
+ var data = pathdata[dir];
+
+ if(type == "mid") {
+ data.refx = 5;
+ }
+
+ if(!marker) {
+ marker = addElem({
+ "element": "marker",
+ "attr": {
+ "viewBox": "0 0 10 10",
+ "id": id,
+ "refY": 5,
+ "markerUnits": "strokeWidth",
+ "markerWidth": 5,
+ "markerHeight": 5,
+ "orient": "auto",
+ "style": "pointer-events:none" // Currently needed for Opera
+ }
+ });
+ var arrow = addElem({
+ "element": "path",
+ "attr": {
+ "d": data.d,
+ "fill": "#000000"
+ }
+ });
+ marker.appendChild(arrow);
+ S.findDefs().appendChild(marker);
+ }
+
+ marker.setAttribute('refX', data.refx);
+
+ return marker;
+ }
+
+ function setArrow() {
+ var type = this.value;
+ resetMarker();
+
+ if(type == "none") {
+ return;
+ }
+
+ // Set marker on element
+ var dir = "fw";
+ if(type == "mid_bk") {
+ type = "mid";
+ dir = "bk";
+ } else if(type == "both") {
+ addMarker("bk", type);
+ svgCanvas.changeSelectedAttribute("marker-start", "url(#" + pathdata.bk.id + ")");
+ type = "end";
+ dir = "fw";
+ } else if (type == "start") {
+ dir = "bk";
+ }
+
+ addMarker(dir, type);
+ svgCanvas.changeSelectedAttribute("marker-"+type, "url(#" + pathdata[dir].id + ")");
+ S.call("changed", selElems);
+ }
+
+ function colorChanged(elem) {
+ var color = elem.getAttribute('stroke');
+
+ var mtypes = ['start','mid','end'];
+ var defs = S.findDefs();
+
+ $.each(mtypes, function(i, type) {
+ var marker = getLinked(elem, 'marker-'+type);
+ if(!marker) return;
+
+ var cur_color = $(marker).children().attr('fill');
+ var cur_d = $(marker).children().attr('d');
+ var new_marker = null;
+ if(cur_color === color) return;
+
+ var all_markers = $(defs).find('marker');
+ // Different color, check if already made
+ all_markers.each(function() {
+ var attrs = $(this).children().attr(['fill', 'd']);
+ if(attrs.fill === color && attrs.d === cur_d) {
+ // Found another marker with this color and this path
+ new_marker = this;
+ }
+ });
+
+ if(!new_marker) {
+ // Create a new marker with this color
+ var last_id = marker.id;
+ var dir = last_id.indexOf('_fw') !== -1?'fw':'bk';
+
+ new_marker = addMarker(dir, type, arrowprefix + dir + all_markers.length);
+
+ $(new_marker).children().attr('fill', color);
+ }
+
+ $(elem).attr('marker-'+type, "url(#" + new_marker.id + ")");
+
+ // Check if last marker can be removed
+ var remove = true;
+ $(S.svgcontent).find('line, polyline, path, polygon').each(function() {
+ var elem = this;
+ $.each(mtypes, function(j, mtype) {
+ if($(elem).attr('marker-' + mtype) === "url(#" + marker.id + ")") {
+ return remove = false;
+ }
+ });
+ if(!remove) return false;
+ });
+
+ // Not found, so can safely remove
+ if(remove) {
+ $(marker).remove();
+ }
+
+ });
+
+ }
+
+ return {
+ name: "Arrows",
+ context_tools: [{
+ type: "select",
+ panel: "arrow_panel",
+ title: "Select arrow type",
+ id: "arrow_list",
+ options: {
+ none: "No arrow",
+ end: "----&gt;",
+ start: "&lt;----",
+ both: "&lt;---&gt;",
+ mid: "--&gt;--",
+ mid_bk: "--&lt;--"
+ },
+ defval: "none",
+ events: {
+ change: setArrow
+ }
+ }],
+ callback: function() {
+ $('#arrow_panel').hide();
+ // Set ID so it can be translated in locale file
+ $('#arrow_list option')[0].id = 'connector_no_arrow';
+ },
+ addLangData: function(lang) {
+ return {
+ data: lang_list[lang]
+ };
+ },
+ selectedChanged: function(opts) {
+
+ // Use this to update the current selected elements
+ selElems = opts.elems;
+
+ var i = selElems.length;
+ var marker_elems = ['line','path','polyline','polygon'];
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
+ if(opts.selectedElement && !opts.multiselected) {
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ },
+ elementChanged: function(opts) {
+ var elem = opts.elems[0];
+ if(elem && (
+ elem.getAttribute("marker-start") ||
+ elem.getAttribute("marker-mid") ||
+ elem.getAttribute("marker-end")
+ )) {
+ // var start = elem.getAttribute("marker-start");
+ // var mid = elem.getAttribute("marker-mid");
+ // var end = elem.getAttribute("marker-end");
+ // Has marker, so see if it should match color
+ colorChanged(elem);
+ }
+
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/ext-closepath.js b/files_svgedit/svg-edit/extensions/ext-closepath.js
new file mode 100644
index 000000000..bf8e72c94
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-closepath.js
@@ -0,0 +1,92 @@
+/*
+ * ext-closepath.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jeff Schiller
+ *
+ */
+
+// This extension adds a simple button to the contextual panel for paths
+// The button toggles whether the path is open or closed
+svgEditor.addExtension("ClosePath", function(S) {
+ var selElems,
+ updateButton = function(path) {
+ var seglist = path.pathSegList,
+ closed = seglist.getItem(seglist.numberOfItems - 1).pathSegType==1,
+ showbutton = closed ? '#tool_openpath' : '#tool_closepath',
+ hidebutton = closed ? '#tool_closepath' : '#tool_openpath';
+ $(hidebutton).hide();
+ $(showbutton).show();
+ },
+ showPanel = function(on) {
+ $('#closepath_panel').toggle(on);
+ if (on) {
+ var path = selElems[0];
+ if (path) updateButton(path);
+ }
+ },
+
+ toggleClosed = function() {
+ var path = selElems[0];
+ if (path) {
+ var seglist = path.pathSegList,
+ last = seglist.numberOfItems - 1;
+ // is closed
+ if(seglist.getItem(last).pathSegType == 1) {
+ seglist.removeItem(last);
+ }
+ else {
+ seglist.appendItem(path.createSVGPathSegClosePath());
+ }
+ updateButton(path);
+ }
+ };
+
+ return {
+ name: "ClosePath",
+ svgicons: "extensions/closepath_icons.svg",
+ buttons: [{
+ id: "tool_openpath",
+ type: "context",
+ panel: "closepath_panel",
+ title: "Open path",
+ events: {
+ 'click': function() {
+ toggleClosed();
+ }
+ }
+ },
+ {
+ id: "tool_closepath",
+ type: "context",
+ panel: "closepath_panel",
+ title: "Close path",
+ events: {
+ 'click': function() {
+ toggleClosed();
+ }
+ }
+ }],
+ callback: function() {
+ $('#closepath_panel').hide();
+ },
+ selectedChanged: function(opts) {
+ selElems = opts.elems;
+ var i = selElems.length;
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && elem.tagName == 'path') {
+ if(opts.selectedElement && !opts.multiselected) {
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/ext-connector.js b/files_svgedit/svg-edit/extensions/ext-connector.js
new file mode 100644
index 000000000..3498c7f43
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-connector.js
@@ -0,0 +1,587 @@
+/*
+ * ext-connector.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("Connector", function(S) {
+ var svgcontent = S.svgcontent,
+ svgroot = S.svgroot,
+ getNextId = S.getNextId,
+ getElem = S.getElem,
+ addElem = S.addSvgElementFromJson,
+ selManager = S.selectorManager,
+ curConfig = svgEditor.curConfig,
+ started = false,
+ start_x,
+ start_y,
+ cur_line,
+ start_elem,
+ end_elem,
+ connections = [],
+ conn_sel = ".se_connector",
+ se_ns,
+// connect_str = "-SE_CONNECT-",
+ selElems = [];
+
+ elData = $.data;
+
+ var lang_list = {
+ "en":[
+ {"id": "mode_connect", "title": "Connect two objects" }
+ ],
+ "fr":[
+ {"id": "mode_connect", "title": "Connecter deux objets"}
+ ]
+ };
+
+ function getOffset(side, line) {
+ var give_offset = !!line.getAttribute('marker-' + side);
+// var give_offset = $(line).data(side+'_off');
+
+ // TODO: Make this number (5) be based on marker width/height
+ var size = line.getAttribute('stroke-width') * 5;
+ return give_offset ? size : 0;
+ }
+
+ function showPanel(on) {
+ var conn_rules = $('#connector_rules');
+ if(!conn_rules.length) {
+ conn_rules = $('<style id="connector_rules"><\/style>').appendTo('head');
+ }
+ conn_rules.text(!on?"":"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }");
+ $('#connector_panel').toggle(on);
+ }
+
+ function setPoint(elem, pos, x, y, setMid) {
+ var pts = elem.points;
+ var pt = svgroot.createSVGPoint();
+ pt.x = x;
+ pt.y = y;
+ if(pos === 'end') pos = pts.numberOfItems-1;
+ // TODO: Test for this on init, then use alt only if needed
+ try {
+ pts.replaceItem(pt, pos);
+ } catch(err) {
+ // Should only occur in FF which formats points attr as "n,n n,n", so just split
+ var pt_arr = elem.getAttribute("points").split(" ");
+ for(var i=0; i< pt_arr.length; i++) {
+ if(i == pos) {
+ pt_arr[i] = x + ',' + y;
+ }
+ }
+ elem.setAttribute("points",pt_arr.join(" "));
+ }
+
+ if(setMid) {
+ // Add center point
+ var pt_start = pts.getItem(0);
+ var pt_end = pts.getItem(pts.numberOfItems-1);
+ setPoint(elem, 1, (pt_end.x + pt_start.x)/2, (pt_end.y + pt_start.y)/2);
+ }
+ }
+
+ function updateLine(diff_x, diff_y) {
+ // Update line with element
+ var i = connections.length;
+ while(i--) {
+ var conn = connections[i];
+ var line = conn.connector;
+ var elem = conn.elem;
+
+ var pre = conn.is_start?'start':'end';
+// var sw = line.getAttribute('stroke-width') * 5;
+
+ // Update bbox for this element
+ var bb = elData(line, pre+'_bb');
+ bb.x = conn.start_x + diff_x;
+ bb.y = conn.start_y + diff_y;
+ elData(line, pre+'_bb', bb);
+
+ var alt_pre = conn.is_start?'end':'start';
+
+ // Get center pt of connected element
+ var bb2 = elData(line, alt_pre+'_bb');
+ var src_x = bb2.x + bb2.width/2;
+ var src_y = bb2.y + bb2.height/2;
+
+ // Set point of element being moved
+ var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0
+ setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true);
+
+ // Set point of connected element
+ var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line));
+ setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true);
+
+ }
+ }
+
+ function findConnectors(elems) {
+ if(!elems) elems = selElems;
+ var connectors = $(svgcontent).find(conn_sel);
+ connections = [];
+
+ // Loop through connectors to see if one is connected to the element
+ connectors.each(function() {
+ var start = elData(this, "c_start");
+ var end = elData(this, "c_end");
+
+ var parts = [getElem(start), getElem(end)];
+ for(var i=0; i<2; i++) {
+ var c_elem = parts[i];
+ var add_this = false;
+ // The connected element might be part of a selected group
+ $(c_elem).parents().each(function() {
+ if($.inArray(this, elems) !== -1) {
+ // Pretend this element is selected
+ add_this = true;
+ }
+ });
+
+ if(!c_elem || !c_elem.parentNode) {
+ $(this).remove();
+ continue;
+ }
+ if($.inArray(c_elem, elems) !== -1 || add_this) {
+ var bb = svgCanvas.getStrokedBBox([c_elem]);
+ connections.push({
+ elem: c_elem,
+ connector: this,
+ is_start: (i === 0),
+ start_x: bb.x,
+ start_y: bb.y
+ });
+ }
+ }
+ });
+ }
+
+ function updateConnectors(elems) {
+ // Updates connector lines based on selected elements
+ // Is not used on mousemove, as it runs getStrokedBBox every time,
+ // which isn't necessary there.
+ findConnectors(elems);
+ if(connections.length) {
+ // Update line with element
+ var i = connections.length;
+ while(i--) {
+ var conn = connections[i];
+ var line = conn.connector;
+ var elem = conn.elem;
+
+ var sw = line.getAttribute('stroke-width') * 5;
+ var pre = conn.is_start?'start':'end';
+
+ // Update bbox for this element
+ var bb = svgCanvas.getStrokedBBox([elem]);
+ bb.x = conn.start_x;
+ bb.y = conn.start_y;
+ elData(line, pre+'_bb', bb);
+ var add_offset = elData(line, pre+'_off');
+
+ var alt_pre = conn.is_start?'end':'start';
+
+ // Get center pt of connected element
+ var bb2 = elData(line, alt_pre+'_bb');
+ var src_x = bb2.x + bb2.width/2;
+ var src_y = bb2.y + bb2.height/2;
+
+ // Set point of element being moved
+ var pt = getBBintersect(src_x, src_y, bb, getOffset(pre, line));
+ setPoint(line, conn.is_start?0:'end', pt.x, pt.y, true);
+
+ // Set point of connected element
+ var pt2 = getBBintersect(pt.x, pt.y, elData(line, alt_pre + '_bb'), getOffset(alt_pre, line));
+ setPoint(line, conn.is_start?'end':0, pt2.x, pt2.y, true);
+
+ // Update points attribute manually for webkit
+ if(navigator.userAgent.indexOf('AppleWebKit') != -1) {
+ var pts = line.points;
+ var len = pts.numberOfItems;
+ var pt_arr = Array(len);
+ for(var j=0; j< len; j++) {
+ var pt = pts.getItem(j);
+ pt_arr[j] = pt.x + ',' + pt.y;
+ }
+ line.setAttribute("points",pt_arr.join(" "));
+ }
+
+ }
+ }
+ }
+
+ function getBBintersect(x, y, bb, offset) {
+ if(offset) {
+ offset -= 0;
+ bb = $.extend({}, bb);
+ bb.width += offset;
+ bb.height += offset;
+ bb.x -= offset/2;
+ bb.y -= offset/2;
+ }
+
+ var mid_x = bb.x + bb.width/2;
+ var mid_y = bb.y + bb.height/2;
+ var len_x = x - mid_x;
+ var len_y = y - mid_y;
+
+ var slope = Math.abs(len_y/len_x);
+
+ var ratio;
+
+ if(slope < bb.height/bb.width) {
+ ratio = (bb.width/2) / Math.abs(len_x);
+ } else {
+ ratio = (bb.height/2) / Math.abs(len_y);
+ }
+
+
+ return {
+ x: mid_x + len_x * ratio,
+ y: mid_y + len_y * ratio
+ }
+ }
+
+ // Do once
+ (function() {
+ var gse = svgCanvas.groupSelectedElements;
+
+ svgCanvas.groupSelectedElements = function() {
+ svgCanvas.removeFromSelection($(conn_sel).toArray());
+ return gse.apply(this, arguments);
+ }
+
+ var mse = svgCanvas.moveSelectedElements;
+
+ svgCanvas.moveSelectedElements = function() {
+ svgCanvas.removeFromSelection($(conn_sel).toArray());
+ var cmd = mse.apply(this, arguments);
+ updateConnectors();
+ return cmd;
+ }
+
+ se_ns = svgCanvas.getEditorNS();
+ }());
+
+ // Do on reset
+ function init() {
+ // Make sure all connectors have data set
+ $(svgcontent).find('*').each(function() {
+ var conn = this.getAttributeNS(se_ns, "connector");
+ if(conn) {
+ this.setAttribute('class', conn_sel.substr(1));
+ var conn_data = conn.split(' ');
+ var sbb = svgCanvas.getStrokedBBox([getElem(conn_data[0])]);
+ var ebb = svgCanvas.getStrokedBBox([getElem(conn_data[1])]);
+ $(this).data('c_start',conn_data[0])
+ .data('c_end',conn_data[1])
+ .data('start_bb', sbb)
+ .data('end_bb', ebb);
+ svgCanvas.getEditorNS(true);
+ }
+ });
+// updateConnectors();
+ }
+
+// $(svgroot).parent().mousemove(function(e) {
+// // if(started
+// // || svgCanvas.getMode() != "connector"
+// // || e.target.parentNode.parentNode != svgcontent) return;
+//
+// console.log('y')
+// // if(e.target.parentNode.parentNode === svgcontent) {
+// //
+// // }
+// });
+
+ return {
+ name: "Connector",
+ svgicons: "images/conn.svg",
+ buttons: [{
+ id: "mode_connect",
+ type: "mode",
+ icon: "images/cut.png",
+ title: "Connect two objects",
+ includeWith: {
+ button: '#tool_line',
+ isDefault: false,
+ position: 1
+ },
+ events: {
+ 'click': function() {
+ svgCanvas.setMode("connector");
+ }
+ }
+ }],
+ addLangData: function(lang) {
+ return {
+ data: lang_list[lang]
+ };
+ },
+ mouseDown: function(opts) {
+ var e = opts.event;
+ start_x = opts.start_x,
+ start_y = opts.start_y;
+ var mode = svgCanvas.getMode();
+
+ if(mode == "connector") {
+
+ if(started) return;
+
+ var mouse_target = e.target;
+
+ var parents = $(mouse_target).parents();
+
+ if($.inArray(svgcontent, parents) != -1) {
+ // Connectable element
+
+ // If child of foreignObject, use parent
+ var fo = $(mouse_target).closest("foreignObject");
+ start_elem = fo.length ? fo[0] : mouse_target;
+
+ // Get center of source element
+ var bb = svgCanvas.getStrokedBBox([start_elem]);
+ var x = bb.x + bb.width/2;
+ var y = bb.y + bb.height/2;
+
+ started = true;
+ cur_line = addElem({
+ "element": "polyline",
+ "attr": {
+ "id": getNextId(),
+ "points": (x+','+y+' '+x+','+y+' '+start_x+','+start_y),
+ "stroke": '#' + curConfig.initStroke.color,
+ "stroke-width": (!start_elem.stroke_width || start_elem.stroke_width == 0) ? curConfig.initStroke.width : start_elem.stroke_width,
+ "fill": "none",
+ "opacity": curConfig.initStroke.opacity,
+ "style": "pointer-events:none"
+ }
+ });
+ elData(cur_line, 'start_bb', bb);
+ }
+ return {
+ started: true
+ };
+ } else if(mode == "select") {
+ findConnectors();
+ }
+ },
+ mouseMove: function(opts) {
+ var zoom = svgCanvas.getZoom();
+ var e = opts.event;
+ var x = opts.mouse_x/zoom;
+ var y = opts.mouse_y/zoom;
+
+ var diff_x = x - start_x,
+ diff_y = y - start_y;
+
+ var mode = svgCanvas.getMode();
+
+ if(mode == "connector" && started) {
+
+ var sw = cur_line.getAttribute('stroke-width') * 3;
+ // Set start point (adjusts based on bb)
+ var pt = getBBintersect(x, y, elData(cur_line, 'start_bb'), getOffset('start', cur_line));
+ start_x = pt.x;
+ start_y = pt.y;
+
+ setPoint(cur_line, 0, pt.x, pt.y, true);
+
+ // Set end point
+ setPoint(cur_line, 'end', x, y, true);
+ } else if(mode == "select") {
+ var slen = selElems.length;
+
+ while(slen--) {
+ var elem = selElems[slen];
+ // Look for selected connector elements
+ if(elem && elData(elem, 'c_start')) {
+ // Remove the "translate" transform given to move
+ svgCanvas.removeFromSelection([elem]);
+ svgCanvas.getTransformList(elem).clear();
+
+ }
+ }
+ if(connections.length) {
+ updateLine(diff_x, diff_y);
+
+
+ }
+ }
+ },
+ mouseUp: function(opts) {
+ var zoom = svgCanvas.getZoom();
+ var e = opts.event,
+ x = opts.mouse_x/zoom,
+ y = opts.mouse_y/zoom,
+ mouse_target = e.target;
+
+ if(svgCanvas.getMode() == "connector") {
+ var fo = $(mouse_target).closest("foreignObject");
+ if(fo.length) mouse_target = fo[0];
+
+ var parents = $(mouse_target).parents();
+
+ if(mouse_target == start_elem) {
+ // Start line through click
+ started = true;
+ return {
+ keep: true,
+ element: null,
+ started: started
+ }
+ } else if($.inArray(svgcontent, parents) === -1) {
+ // Not a valid target element, so remove line
+ $(cur_line).remove();
+ started = false;
+ return {
+ keep: false,
+ element: null,
+ started: started
+ }
+ } else {
+ // Valid end element
+ end_elem = mouse_target;
+
+ var start_id = start_elem.id, end_id = end_elem.id;
+ var conn_str = start_id + " " + end_id;
+ var alt_str = end_id + " " + start_id;
+ // Don't create connector if one already exists
+ var dupe = $(svgcontent).find(conn_sel).filter(function() {
+ var conn = this.getAttributeNS(se_ns, "connector");
+ if(conn == conn_str || conn == alt_str) return true;
+ });
+ if(dupe.length) {
+ $(cur_line).remove();
+ return {
+ keep: false,
+ element: null,
+ started: false
+ }
+ }
+
+ var bb = svgCanvas.getStrokedBBox([end_elem]);
+
+ var pt = getBBintersect(start_x, start_y, bb, getOffset('start', cur_line));
+ setPoint(cur_line, 'end', pt.x, pt.y, true);
+ $(cur_line)
+ .data("c_start", start_id)
+ .data("c_end", end_id)
+ .data("end_bb", bb);
+ se_ns = svgCanvas.getEditorNS(true);
+ cur_line.setAttributeNS(se_ns, "se:connector", conn_str);
+ cur_line.setAttribute('class', conn_sel.substr(1));
+ cur_line.setAttribute('opacity', 1);
+ svgCanvas.addToSelection([cur_line]);
+ svgCanvas.moveToBottomSelectedElement();
+ selManager.requestSelector(cur_line).showGrips(false);
+ started = false;
+ return {
+ keep: true,
+ element: cur_line,
+ started: started
+ }
+ }
+ }
+ },
+ selectedChanged: function(opts) {
+ // TODO: Find better way to skip operations if no connectors are in use
+ if(!$(svgcontent).find(conn_sel).length) return;
+
+ if(svgCanvas.getMode() == 'connector') {
+ svgCanvas.setMode('select');
+ }
+
+ // Use this to update the current selected elements
+ selElems = opts.elems;
+
+ var i = selElems.length;
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && elData(elem, 'c_start')) {
+ selManager.requestSelector(elem).showGrips(false);
+ if(opts.selectedElement && !opts.multiselected) {
+ // TODO: Set up context tools and hide most regular line tools
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ updateConnectors();
+ },
+ elementChanged: function(opts) {
+ var elem = opts.elems[0];
+ if (elem && elem.tagName == 'svg' && elem.id == "svgcontent") {
+ // Update svgcontent (can change on import)
+ svgcontent = elem;
+ init();
+ }
+
+ // Has marker, so change offset
+ if(elem && (
+ elem.getAttribute("marker-start") ||
+ elem.getAttribute("marker-mid") ||
+ elem.getAttribute("marker-end")
+ )) {
+ var start = elem.getAttribute("marker-start");
+ var mid = elem.getAttribute("marker-mid");
+ var end = elem.getAttribute("marker-end");
+ cur_line = elem;
+ $(elem)
+ .data("start_off", !!start)
+ .data("end_off", !!end);
+
+ if(elem.tagName == "line" && mid) {
+ // Convert to polyline to accept mid-arrow
+
+ var x1 = elem.getAttribute('x1')-0;
+ var x2 = elem.getAttribute('x2')-0;
+ var y1 = elem.getAttribute('y1')-0;
+ var y2 = elem.getAttribute('y2')-0;
+ var id = elem.id;
+
+ var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
+ var pline = addElem({
+ "element": "polyline",
+ "attr": {
+ "points": (x1+','+y1+ mid_pt +x2+','+y2),
+ "stroke": elem.getAttribute('stroke'),
+ "stroke-width": elem.getAttribute('stroke-width'),
+ "marker-mid": mid,
+ "fill": "none",
+ "opacity": elem.getAttribute('opacity') || 1
+ }
+ });
+ $(elem).after(pline).remove();
+ svgCanvas.clearSelection();
+ pline.id = id;
+ svgCanvas.addToSelection([pline]);
+ elem = pline;
+ }
+ }
+ // Update line if it's a connector
+ if(elem.getAttribute('class') == conn_sel.substr(1)) {
+ var start = getElem(elData(elem, 'c_start'));
+ updateConnectors([start]);
+ } else {
+ updateConnectors();
+ }
+ },
+ toolButtonStateUpdate: function(opts) {
+ if(opts.nostroke) {
+ if ($('#mode_connect').hasClass('tool_button_current')) {
+ clickSelect();
+ }
+ }
+ $('#mode_connect')
+ .toggleClass('disabled',opts.nostroke);
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/ext-eyedropper.js b/files_svgedit/svg-edit/extensions/ext-eyedropper.js
new file mode 100644
index 000000000..a475a0f98
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-eyedropper.js
@@ -0,0 +1,109 @@
+/*
+ * ext-eyedropper.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jeff Schiller
+ *
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) history.js
+// 3) svg_editor.js
+// 4) svgcanvas.js
+
+svgEditor.addExtension("eyedropper", function(S) {
+ var svgcontent = S.svgcontent,
+ svgns = "http://www.w3.org/2000/svg",
+ svgdoc = S.svgroot.parentNode.ownerDocument,
+ svgCanvas = svgEditor.canvas,
+ ChangeElementCommand = svgedit.history.ChangeElementCommand,
+ addToHistory = function(cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); },
+ currentStyle = {fillPaint: "red", fillOpacity: 1.0,
+ strokePaint: "black", strokeOpacity: 1.0,
+ strokeWidth: 5, strokeDashArray: null,
+ opacity: 1.0,
+ strokeLinecap: 'butt',
+ strokeLinejoin: 'miter',
+ };
+
+ function getStyle(opts) {
+ // if we are in eyedropper mode, we don't want to disable the eye-dropper tool
+ var mode = svgCanvas.getMode();
+ if (mode == "eyedropper") return;
+
+ var elem = null;
+ var tool = $('#tool_eyedropper');
+ // enable-eye-dropper if one element is selected
+ if (!opts.multiselected && opts.elems[0] &&
+ $.inArray(opts.elems[0].nodeName, ['svg', 'g', 'use']) == -1)
+ {
+ elem = opts.elems[0];
+ tool.removeClass('disabled');
+ // grab the current style
+ currentStyle.fillPaint = elem.getAttribute("fill") || "black";
+ currentStyle.fillOpacity = elem.getAttribute("fill-opacity") || 1.0;
+ currentStyle.strokePaint = elem.getAttribute("stroke");
+ currentStyle.strokeOpacity = elem.getAttribute("stroke-opacity") || 1.0;
+ currentStyle.strokeWidth = elem.getAttribute("stroke-width");
+ currentStyle.strokeDashArray = elem.getAttribute("stroke-dasharray");
+ currentStyle.strokeLinecap = elem.getAttribute("stroke-linecap");
+ currentStyle.strokeLinejoin = elem.getAttribute("stroke-linejoin");
+ currentStyle.opacity = elem.getAttribute("opacity") || 1.0;
+ }
+ // disable eye-dropper tool
+ else {
+ tool.addClass('disabled');
+ }
+
+ }
+
+ return {
+ name: "eyedropper",
+ svgicons: "extensions/eyedropper-icon.xml",
+ buttons: [{
+ id: "tool_eyedropper",
+ type: "mode",
+ title: "Eye Dropper Tool",
+ key: "I",
+ events: {
+ "click": function() {
+ svgCanvas.setMode("eyedropper");
+ }
+ }
+ }],
+
+ // if we have selected an element, grab its paint and enable the eye dropper button
+ selectedChanged: getStyle,
+ elementChanged: getStyle,
+
+ mouseDown: function(opts) {
+ var mode = svgCanvas.getMode();
+ if (mode == "eyedropper") {
+ var e = opts.event;
+ var target = e.target;
+ if ($.inArray(target.nodeName, ['svg', 'g', 'use']) == -1) {
+ var changes = {};
+
+ var change = function(elem, attrname, newvalue) {
+ changes[attrname] = elem.getAttribute(attrname);
+ elem.setAttribute(attrname, newvalue);
+ };
+
+ if (currentStyle.fillPaint) change(target, "fill", currentStyle.fillPaint);
+ if (currentStyle.fillOpacity) change(target, "fill-opacity", currentStyle.fillOpacity);
+ if (currentStyle.strokePaint) change(target, "stroke", currentStyle.strokePaint);
+ if (currentStyle.strokeOpacity) change(target, "stroke-opacity", currentStyle.strokeOpacity);
+ if (currentStyle.strokeWidth) change(target, "stroke-width", currentStyle.strokeWidth);
+ if (currentStyle.strokeDashArray) change(target, "stroke-dasharray", currentStyle.strokeDashArray);
+ if (currentStyle.opacity) change(target, "opacity", currentStyle.opacity);
+ if (currentStyle.strokeLinecap) change(target, "stroke-linecap", currentStyle.strokeLinecap);
+ if (currentStyle.strokeLinejoin) change(target, "stroke-linejoin", currentStyle.strokeLinejoin);
+
+ addToHistory(new ChangeElementCommand(target, changes));
+ }
+ }
+ },
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/ext-foreignobject.js b/files_svgedit/svg-edit/extensions/ext-foreignobject.js
new file mode 100644
index 000000000..9d401825a
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-foreignobject.js
@@ -0,0 +1,277 @@
+/*
+ * ext-foreignobject.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jacques Distler
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("foreignObject", function(S) {
+ var svgcontent = S.svgcontent,
+ addElem = S.addSvgElementFromJson,
+ selElems,
+ svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ xmlns = "http://www.w3.org/XML/1998/namespace",
+ xmlnsns = "http://www.w3.org/2000/xmlns/",
+ se_ns = "http://svg-edit.googlecode.com",
+ htmlns = "http://www.w3.org/1999/xhtml",
+ mathns = "http://www.w3.org/1998/Math/MathML",
+ editingforeign = false,
+ svgdoc = S.svgroot.parentNode.ownerDocument,
+ started,
+ newFO;
+
+
+ var properlySourceSizeTextArea = function(){
+ // TODO: remove magic numbers here and get values from CSS
+ var height = $('#svg_source_container').height() - 80;
+ $('#svg_source_textarea').css('height', height);
+ };
+
+ function showPanel(on) {
+ var fc_rules = $('#fc_rules');
+ if(!fc_rules.length) {
+ fc_rules = $('<style id="fc_rules"><\/style>').appendTo('head');
+ }
+ fc_rules.text(!on?"":" #tool_topath { display: none !important; }");
+ $('#foreignObject_panel').toggle(on);
+ }
+
+ function toggleSourceButtons(on) {
+ $('#tool_source_save, #tool_source_cancel').toggle(!on);
+ $('#foreign_save, #foreign_cancel').toggle(on);
+ }
+
+
+ // Function: setForeignString(xmlString, elt)
+ // This function sets the content of element elt to the input XML.
+ //
+ // Parameters:
+ // xmlString - The XML text.
+ // elt - the parent element to append to
+ //
+ // Returns:
+ // This function returns false if the set was unsuccessful, true otherwise.
+ function setForeignString(xmlString) {
+ var elt = selElems[0];
+ try {
+ // convert string into XML document
+ var newDoc = Utils.text2xml('<svg xmlns="'+svgns+'" xmlns:xlink="'+xlinkns+'">'+xmlString+'</svg>');
+ // run it through our sanitizer to remove anything we do not support
+ S.sanitizeSvg(newDoc.documentElement);
+ elt.parentNode.replaceChild(svgdoc.importNode(newDoc.documentElement.firstChild, true), elt);
+ S.call("changed", [elt]);
+ svgCanvas.clearSelection();
+ } catch(e) {
+ console.log(e);
+ return false;
+ }
+
+ return true;
+ };
+
+ function showForeignEditor() {
+ var elt = selElems[0];
+ if (!elt || editingforeign) return;
+ editingforeign = true;
+ toggleSourceButtons(true);
+ elt.removeAttribute('fill');
+
+ var str = S.svgToString(elt, 0);
+ $('#svg_source_textarea').val(str);
+ $('#svg_source_editor').fadeIn();
+ properlySourceSizeTextArea();
+ $('#svg_source_textarea').focus();
+ }
+
+ function setAttr(attr, val) {
+ svgCanvas.changeSelectedAttribute(attr, val);
+ S.call("changed", selElems);
+ }
+
+
+ return {
+ name: "foreignObject",
+ svgicons: "extensions/foreignobject-icons.xml",
+ buttons: [{
+ id: "tool_foreign",
+ type: "mode",
+ title: "Foreign Object Tool",
+ events: {
+ 'click': function() {
+ svgCanvas.setMode('foreign')
+ }
+ }
+ },{
+ id: "edit_foreign",
+ type: "context",
+ panel: "foreignObject_panel",
+ title: "Edit ForeignObject Content",
+ events: {
+ 'click': function() {
+ showForeignEditor();
+ }
+ }
+ }],
+
+ context_tools: [{
+ type: "input",
+ panel: "foreignObject_panel",
+ title: "Change foreignObject's width",
+ id: "foreign_width",
+ label: "w",
+ size: 3,
+ events: {
+ change: function() {
+ setAttr('width', this.value);
+ }
+ }
+ },{
+ type: "input",
+ panel: "foreignObject_panel",
+ title: "Change foreignObject's height",
+ id: "foreign_height",
+ label: "h",
+ events: {
+ change: function() {
+ setAttr('height', this.value);
+ }
+ }
+ }, {
+ type: "input",
+ panel: "foreignObject_panel",
+ title: "Change foreignObject's font size",
+ id: "foreign_font_size",
+ label: "font-size",
+ size: 2,
+ defval: 16,
+ events: {
+ change: function() {
+ setAttr('font-size', this.value);
+ }
+ }
+ }
+
+
+ ],
+ callback: function() {
+ $('#foreignObject_panel').hide();
+
+ var endChanges = function() {
+ $('#svg_source_editor').hide();
+ editingforeign = false;
+ $('#svg_source_textarea').blur();
+ toggleSourceButtons(false);
+ }
+
+ // TODO: Needs to be done after orig icon loads
+ setTimeout(function() {
+ // Create source save/cancel buttons
+ var save = $('#tool_source_save').clone()
+ .hide().attr('id', 'foreign_save').unbind()
+ .appendTo("#tool_source_back").click(function() {
+
+ if (!editingforeign) return;
+
+ if (!setForeignString($('#svg_source_textarea').val())) {
+ $.confirm("Errors found. Revert to original?", function(ok) {
+ if(!ok) return false;
+ endChanges();
+ });
+ } else {
+ endChanges();
+ }
+ // setSelectMode();
+ });
+
+ var cancel = $('#tool_source_cancel').clone()
+ .hide().attr('id', 'foreign_cancel').unbind()
+ .appendTo("#tool_source_back").click(function() {
+ endChanges();
+ });
+
+ }, 3000);
+ },
+ mouseDown: function(opts) {
+ var e = opts.event;
+
+ if(svgCanvas.getMode() == "foreign") {
+
+ started = true;
+ newFO = S.addSvgElementFromJson({
+ "element": "foreignObject",
+ "attr": {
+ "x": opts.start_x,
+ "y": opts.start_y,
+ "id": S.getNextId(),
+ "font-size": 16, //cur_text.font_size,
+ "width": "48",
+ "height": "20",
+ "style": "pointer-events:inherit"
+ }
+ });
+ var m = svgdoc.createElementNS(mathns, 'math');
+ m.setAttributeNS(xmlnsns, 'xmlns', mathns);
+ m.setAttribute('display', 'inline');
+ var mi = svgdoc.createElementNS(mathns, 'mi');
+ mi.setAttribute('mathvariant', 'normal');
+ mi.textContent = "\u03A6";
+ var mo = svgdoc.createElementNS(mathns, 'mo');
+ mo.textContent = "\u222A";
+ var mi2 = svgdoc.createElementNS(mathns, 'mi');
+ mi2.textContent = "\u2133";
+ m.appendChild(mi);
+ m.appendChild(mo);
+ m.appendChild(mi2);
+ newFO.appendChild(m);
+ return {
+ started: true
+ }
+ }
+ },
+ mouseUp: function(opts) {
+ var e = opts.event;
+ if(svgCanvas.getMode() == "foreign" && started) {
+ var attrs = $(newFO).attr(["width", "height"]);
+ keep = (attrs.width != 0 || attrs.height != 0);
+ svgCanvas.addToSelection([newFO], true);
+
+ return {
+ keep: keep,
+ element: newFO
+ }
+
+ }
+
+ },
+ selectedChanged: function(opts) {
+ // Use this to update the current selected elements
+ selElems = opts.elems;
+
+ var i = selElems.length;
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && elem.tagName == "foreignObject") {
+ if(opts.selectedElement && !opts.multiselected) {
+ $('#foreign_font_size').val(elem.getAttribute("font-size"));
+ $('#foreign_width').val(elem.getAttribute("width"));
+ $('#foreign_height').val(elem.getAttribute("height"));
+
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ },
+ elementChanged: function(opts) {
+ var elem = opts.elems[0];
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/ext-grid.js b/files_svgedit/svg-edit/extensions/ext-grid.js
new file mode 100644
index 000000000..c6f79e66f
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-grid.js
@@ -0,0 +1,184 @@
+/*
+ * ext-grid.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Redou Mine
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+// Dependencies:
+// 1) units.js
+// 2) everything else
+
+svgEditor.addExtension("view_grid", function(s) {
+
+ var svgdoc = document.getElementById("svgcanvas").ownerDocument,
+ svgns = "http://www.w3.org/2000/svg",
+ dims = svgEditor.curConfig.dimensions,
+ svgroot = s.svgroot;
+
+ var showGrid = false;
+ var assignAttributes = svgCanvas.assignAttributes;
+
+ var hcanvas = document.createElement('canvas');
+ $(hcanvas).hide().appendTo('body');
+
+ var canvasgrid = svgdoc.createElementNS(svgns, "svg");
+ assignAttributes(canvasgrid, {
+ 'id': 'canvasGrid',
+ 'width': '100%',
+ 'height': '100%',
+ 'x': 0,
+ 'y': 0,
+ 'overflow': 'visible',
+ 'display': 'none'
+ });
+
+ var canvBG = $('#canvasBackground');
+ canvBG.append(canvasgrid);
+
+ // grid-pattern
+ var gridPattern = svgdoc.createElementNS(svgns, "pattern");
+ assignAttributes(gridPattern, {
+ 'id': 'gridpattern',
+ 'patternUnits': 'userSpaceOnUse',
+ 'x': 0, //-(value.strokeWidth / 2), // position for strokewidth
+ 'y': 0, //-(value.strokeWidth / 2), // position for strokewidth
+ 'width': 100,
+ 'height': 100
+ });
+
+ var gridimg = svgdoc.createElementNS(svgns, "image");
+ assignAttributes(gridimg, {
+ 'x': 0,
+ 'y': 0,
+ 'width': 100,
+ 'height': 100
+ });
+
+ gridPattern.appendChild(gridimg);
+ $('#svgroot defs').append(gridPattern);
+
+ // grid-box
+ var gridBox = svgdoc.createElementNS(svgns, "rect");
+ assignAttributes(gridBox, {
+ 'width': '100%',
+ 'height': '100%',
+ 'x': 0,
+ 'y': 0,
+ 'stroke-width': 0,
+ 'stroke': 'none',
+ 'fill': 'url(#gridpattern)',
+ 'style': 'pointer-events: none; display:visible;'
+ });
+ $('#canvasGrid').append(gridBox);
+// });
+
+ function updateGrid(zoom) {
+ // TODO: Try this with <line> elements, then compare performance difference
+
+ var bgwidth = +canvBG.attr('width');
+ var bgheight = +canvBG.attr('height');
+
+ var units = svgedit.units.getTypeMap();
+ var unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px
+ var r_intervals = [.01, .1, 1, 10, 100, 1000];
+
+ var d = 0;
+ var is_x = (d === 0);
+ var dim = is_x ? 'x' : 'y';
+ var lentype = is_x?'width':'height';
+ var c_elem = svgCanvas.getContentElem();
+ var content_d = c_elem.getAttribute(dim)-0;
+
+ var hcanv = hcanvas;
+
+ var u_multi = unit * zoom;
+
+ // Calculate the main number interval
+ var raw_m = 100 / u_multi;
+ var multi = 1;
+ for(var i = 0; i < r_intervals.length; i++) {
+ var num = r_intervals[i];
+ multi = num;
+ if(raw_m <= num) {
+ break;
+ }
+ }
+
+ var big_int = multi * u_multi;
+
+ // Set the canvas size to the width of the container
+ hcanv.width = big_int;
+ hcanv.height = big_int;
+ var ctx = hcanv.getContext("2d");
+
+ var ruler_d = 0;
+ var cur_d = .5;
+
+ var part = big_int / 10;
+
+ ctx.globalAlpha = 0.2;
+ ctx.strokeStyle = "#000";
+ for(var i = 1; i < 10; i++) {
+ var sub_d = Math.round(part * i) + .5;
+// var line_num = (i % 2)?12:10;
+ var line_num = 0;
+ ctx.moveTo(sub_d, big_int);
+ ctx.lineTo(sub_d, line_num);
+ ctx.moveTo(big_int, sub_d);
+ ctx.lineTo(line_num ,sub_d);
+ }
+ ctx.stroke();
+ ctx.beginPath();
+ ctx.globalAlpha = 0.5;
+ ctx.moveTo(cur_d, big_int);
+ ctx.lineTo(cur_d, 0);
+
+ ctx.moveTo(big_int, cur_d);
+ ctx.lineTo(0, cur_d);
+ ctx.stroke();
+
+ var datauri = hcanv.toDataURL('image/png');
+ gridimg.setAttribute('width', big_int);
+ gridimg.setAttribute('height', big_int);
+ gridimg.parentNode.setAttribute('width', big_int);
+ gridimg.parentNode.setAttribute('height', big_int);
+ svgCanvas.setHref(gridimg, datauri);
+ }
+
+ return {
+ name: "view_grid",
+ svgicons: "extensions/grid-icon.xml",
+
+ zoomChanged: function(zoom) {
+ // update size
+ if(showGrid) updateGrid(zoom);
+ },
+
+ buttons: [{
+ id: "view_grid",
+ type: "context",
+ panel: "editor_panel",
+ title: "Show/Hide Grid",
+ events: {
+ 'click': function() {
+ var gr = !$('#view_grid').hasClass('push_button_pressed');
+ if (gr) {
+ svgEditor.curConfig.showGrid = showGrid = true;
+ $('#view_grid').addClass('push_button_pressed').removeClass('tool_button');
+ $('#canvasGrid').attr('display', 'normal');
+ updateGrid(svgCanvas.getZoom());
+ }
+ else {
+ svgEditor.curConfig.showGrid = showGrid = false;
+ $('#view_grid').removeClass('push_button_pressed').addClass('tool_button');
+ $('#canvasGrid').attr('display', 'none');
+ }
+ }
+ }
+}]
+ };
+ });
diff --git a/files_svgedit/svg-edit/extensions/ext-helloworld.js b/files_svgedit/svg-edit/extensions/ext-helloworld.js
new file mode 100644
index 000000000..a35c24107
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-helloworld.js
@@ -0,0 +1,78 @@
+/*
+ * ext-helloworld.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+/*
+ This is a very basic SVG-Edit extension. It adds a "Hello World" button in
+ the left panel. Clicking on the button, and then the canvas will show the
+ user the point on the canvas that was clicked on.
+*/
+
+svgEditor.addExtension("Hello World", function() {
+
+ return {
+ name: "Hello World",
+ // For more notes on how to make an icon file, see the source of
+ // the hellorworld-icon.xml
+ svgicons: "extensions/helloworld-icon.xml",
+
+ // Multiple buttons can be added in this array
+ buttons: [{
+ // Must match the icon ID in helloworld-icon.xml
+ id: "hello_world",
+
+ // This indicates that the button will be added to the "mode"
+ // button panel on the left side
+ type: "mode",
+
+ // Tooltip text
+ title: "Say 'Hello World'",
+
+ // Events
+ events: {
+ 'click': function() {
+ // The action taken when the button is clicked on.
+ // For "mode" buttons, any other button will
+ // automatically be de-pressed.
+ svgCanvas.setMode("hello_world");
+ }
+ }
+ }],
+ // This is triggered when the main mouse button is pressed down
+ // on the editor canvas (not the tool panels)
+ mouseDown: function() {
+ // Check the mode on mousedown
+ if(svgCanvas.getMode() == "hello_world") {
+
+ // The returned object must include "started" with
+ // a value of true in order for mouseUp to be triggered
+ return {started: true};
+ }
+ },
+
+ // This is triggered from anywhere, but "started" must have been set
+ // to true (see above). Note that "opts" is an object with event info
+ mouseUp: function(opts) {
+ // Check the mode on mouseup
+ if(svgCanvas.getMode() == "hello_world") {
+ var zoom = svgCanvas.getZoom();
+
+ // Get the actual coordinate by dividing by the zoom value
+ var x = opts.mouse_x / zoom;
+ var y = opts.mouse_y / zoom;
+
+ var text = "Hello World!\n\nYou clicked here: "
+ + x + ", " + y;
+
+ // Show the text using the custom alert function
+ $.alert(text);
+ }
+ }
+ };
+});
+
diff --git a/files_svgedit/svg-edit/extensions/ext-imagelib.js b/files_svgedit/svg-edit/extensions/ext-imagelib.js
new file mode 100644
index 000000000..2c3dc4226
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-imagelib.js
@@ -0,0 +1,444 @@
+/*
+ * ext-imagelib.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("imagelib", function() {
+
+ var uiStrings = svgEditor.uiStrings;
+
+ $.extend(uiStrings, {
+ imagelib: {
+ select_lib: 'Select an image library',
+ show_list: 'Show library list',
+ import_single: 'Import single',
+ import_multi: 'Import multiple',
+ open: 'Open as new document'
+ }
+ });
+
+ var img_libs = [{
+ name: 'Demo library (local)',
+ url: 'extensions/imagelib/index.html',
+ description: 'Demonstration library for SVG-edit on this server'
+ },
+ {
+ name: 'IAN Symbol Libraries',
+ url: 'http://ian.umces.edu/symbols/catalog/svgedit/album_chooser.php',
+ description: 'Free library of illustrations'
+ }
+ ];
+
+ var xlinkns = "http://www.w3.org/1999/xlink";
+
+ function closeBrowser() {
+ $('#imgbrowse_holder').hide();
+ }
+
+ function importImage(url) {
+ var newImage = svgCanvas.addSvgElementFromJson({
+ "element": "image",
+ "attr": {
+ "x": 0,
+ "y": 0,
+ "width": 0,
+ "height": 0,
+ "id": svgCanvas.getNextId(),
+ "style": "pointer-events:inherit"
+ }
+ });
+ svgCanvas.clearSelection();
+ svgCanvas.addToSelection([newImage]);
+ svgCanvas.setImageURL(url);
+ }
+
+ var mode = 's';
+ var multi_arr = [];
+ var cur_meta;
+ var tranfer_stopped = false;
+ var pending = {};
+
+ window.addEventListener("message", function(evt) {
+ // Receive postMessage data
+ var response = evt.data;
+
+ if(!response) {
+ // Do nothing
+ return;
+ }
+
+ var char1 = response.charAt(0);
+
+ var svg_str;
+ var img_str;
+
+ if(char1 != "{" && tranfer_stopped) {
+ tranfer_stopped = false;
+ return;
+ }
+
+ if(char1 == '|') {
+ var secondpos = response.indexOf('|', 1);
+ var id = response.substr(1, secondpos-1);
+ response = response.substr(secondpos+1);
+ char1 = response.charAt(0);
+
+ }
+
+
+ // Hide possible transfer dialog box
+ $('#dialog_box').hide();
+
+ switch (char1) {
+ case '{':
+ // Metadata
+ tranfer_stopped = false;
+ var cur_meta = JSON.parse(response);
+
+ pending[cur_meta.id] = cur_meta;
+
+ var name = (cur_meta.name || 'file');
+
+ var message = uiStrings.notification.retrieving.replace('%s', name);
+
+ if(mode != 'm') {
+ $.process_cancel(message, function() {
+ tranfer_stopped = true;
+ // Should a message be sent back to the frame?
+
+ $('#dialog_box').hide();
+ });
+ } else {
+ var entry = $('<div>' + message + '</div>').data('id', cur_meta.id);
+ preview.append(entry);
+ cur_meta.entry = entry;
+ }
+
+ return;
+ case '<':
+ svg_str = true;
+ break;
+ case 'd':
+ if(response.indexOf('data:image/svg+xml') === 0) {
+ var pre = 'data:image/svg+xml;base64,';
+ var src = response.substring(pre.length);
+ response = svgCanvas.Utils.decode64(src);
+ svg_str = true;
+ break;
+ } else if(response.indexOf('data:image/') === 0) {
+ img_str = true;
+ break;
+ }
+ // Else fall through
+ default:
+ // TODO: See if there's a way to base64 encode the binary data stream
+// var str = 'data:;base64,' + svgCanvas.Utils.encode64(response, true);
+
+ // Assume it's raw image data
+// importImage(str);
+
+ // Don't give warning as postMessage may have been used by something else
+ if(mode !== 'm') {
+ closeBrowser();
+ } else {
+ pending[id].entry.remove();
+ }
+// $.alert('Unexpected data was returned: ' + response, function() {
+// if(mode !== 'm') {
+// closeBrowser();
+// } else {
+// pending[id].entry.remove();
+// }
+// });
+ return;
+ }
+
+ switch (mode) {
+ case 's':
+ // Import one
+ if(svg_str) {
+ svgCanvas.importSvgString(response);
+ } else if(img_str) {
+ importImage(response);
+ }
+ closeBrowser();
+ break;
+ case 'm':
+ // Import multiple
+ multi_arr.push([(svg_str ? 'svg' : 'img'), response]);
+ var cur_meta = pending[id];
+ if(svg_str) {
+ if(cur_meta && cur_meta.name) {
+ var title = cur_meta.name;
+ } else {
+ // Try to find a title
+ var xml = new DOMParser().parseFromString(response, 'text/xml').documentElement;
+ var title = $(xml).children('title').first().text() || '(SVG #' + response.length + ')';
+ }
+ if(cur_meta) {
+ preview.children().each(function() {
+ if($(this).data('id') == id) {
+ if(cur_meta.preview_url) {
+ $(this).html('<img src="' + cur_meta.preview_url + '">' + title);
+ } else {
+ $(this).text(title);
+ }
+ submit.removeAttr('disabled');
+ }
+ });
+ } else {
+ preview.append('<div>'+title+'</div>');
+ submit.removeAttr('disabled');
+ }
+ } else {
+ if(cur_meta && cur_meta.preview_url) {
+ var title = cur_meta.name || '';
+ }
+ if(cur_meta && cur_meta.preview_url) {
+ var entry = '<img src="' + cur_meta.preview_url + '">' + title;
+ } else {
+ var entry = '<img src="' + response + '">';
+ }
+
+ if(cur_meta) {
+ preview.children().each(function() {
+ if($(this).data('id') == id) {
+ $(this).html(entry);
+ submit.removeAttr('disabled');
+ }
+ });
+ } else {
+ preview.append($('<div>').append(entry));
+ submit.removeAttr('disabled');
+ }
+
+ }
+ break;
+ case 'o':
+ // Open
+ if(!svg_str) break;
+ svgEditor.openPrep(function(ok) {
+ if(!ok) return;
+ svgCanvas.clear();
+ svgCanvas.setSvgString(response);
+ // updateCanvas();
+ });
+ closeBrowser();
+ break;
+ }
+ }, true);
+
+ var preview, submit;
+
+ function toggleMulti(show) {
+
+ $('#lib_framewrap, #imglib_opts').css({right: (show ? 200 : 10)});
+ if(!preview) {
+ preview = $('<div id=imglib_preview>').css({
+ position: 'absolute',
+ top: 45,
+ right: 10,
+ width: 180,
+ bottom: 45,
+ background: '#fff',
+ overflow: 'auto'
+ }).insertAfter('#lib_framewrap');
+
+ submit = $('<button disabled>Import selected</button>').appendTo('#imgbrowse').click(function() {
+ $.each(multi_arr, function(i) {
+ var type = this[0];
+ var data = this[1];
+ if(type == 'svg') {
+ svgCanvas.importSvgString(data);
+ } else {
+ importImage(data);
+ }
+ svgCanvas.moveSelectedElements(i*20, i*20, false);
+ });
+ preview.empty();
+ multi_arr = [];
+ $('#imgbrowse_holder').hide();
+ }).css({
+ position: 'absolute',
+ bottom: 10,
+ right: -10
+ });
+
+ }
+
+ preview.toggle(show);
+ submit.toggle(show);
+ }
+
+ function showBrowser() {
+
+ var browser = $('#imgbrowse');
+ if(!browser.length) {
+ $('<div id=imgbrowse_holder><div id=imgbrowse class=toolbar_button>\
+ </div></div>').insertAfter('#svg_docprops');
+ browser = $('#imgbrowse');
+
+ var all_libs = uiStrings.imagelib.select_lib;
+
+ var lib_opts = $('<ul id=imglib_opts>').appendTo(browser);
+ var frame = $('<iframe/>').prependTo(browser).hide().wrap('<div id=lib_framewrap>');
+
+ var header = $('<h1>').prependTo(browser).text(all_libs).css({
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ width: '100%'
+ });
+
+ var cancel = $('<button>' + uiStrings.common.cancel + '</button>').appendTo(browser).click(function() {
+ $('#imgbrowse_holder').hide();
+ }).css({
+ position: 'absolute',
+ top: 5,
+ right: -10
+ });
+
+ var leftBlock = $('<span>').css({position:'absolute',top:5,left:10}).appendTo(browser);
+
+ var back = $('<button hidden>' + uiStrings.imagelib.show_list + '</button>').appendTo(leftBlock).click(function() {
+ frame.attr('src', 'about:blank').hide();
+ lib_opts.show();
+ header.text(all_libs);
+ back.hide();
+ }).css({
+ 'margin-right': 5
+ }).hide();
+
+ var type = $('<select><option value=s>' +
+ uiStrings.imagelib.import_single + '</option><option value=m>' +
+ uiStrings.imagelib.import_multi + '</option><option value=o>' +
+ uiStrings.imagelib.open + '</option></select>').appendTo(leftBlock).change(function() {
+ mode = $(this).val();
+ switch (mode) {
+ case 's':
+ case 'o':
+ toggleMulti(false);
+ break;
+
+ case 'm':
+ // Import multiple
+ toggleMulti(true);
+ }
+ }).css({
+ 'margin-top': 10
+ });
+
+ cancel.prepend($.getSvgIcon('cancel', true));
+ back.prepend($.getSvgIcon('tool_imagelib', true));
+
+ $.each(img_libs, function(i, opts) {
+ $('<li>').appendTo(lib_opts).text(opts.name).click(function() {
+ frame.attr('src', opts.url).show();
+ header.text(opts.name);
+ lib_opts.hide();
+ back.show();
+ }).append('<span>' + opts.description + '</span>');
+ });
+
+ } else {
+ $('#imgbrowse_holder').show();
+ }
+ }
+
+ return {
+ svgicons: "extensions/ext-imagelib.xml",
+ buttons: [{
+ id: "tool_imagelib",
+ type: "app_menu", // _flyout
+ position: 4,
+ title: "Image library",
+ events: {
+ "mouseup": showBrowser
+ }
+ }],
+ callback: function() {
+
+ $('<style>').text('\
+ #imgbrowse_holder {\
+ position: absolute;\
+ top: 0;\
+ left: 0;\
+ width: 100%;\
+ height: 100%;\
+ background-color: rgba(0, 0, 0, .5);\
+ z-index: 5;\
+ }\
+ \
+ #imgbrowse {\
+ position: absolute;\
+ top: 25px;\
+ left: 25px;\
+ right: 25px;\
+ bottom: 25px;\
+ min-width: 300px;\
+ min-height: 200px;\
+ background: #B0B0B0;\
+ border: 1px outset #777;\
+ }\
+ #imgbrowse h1 {\
+ font-size: 20px;\
+ margin: .4em;\
+ text-align: center;\
+ }\
+ #lib_framewrap,\
+ #imgbrowse > ul {\
+ position: absolute;\
+ top: 45px;\
+ left: 10px;\
+ right: 10px;\
+ bottom: 10px;\
+ background: white;\
+ margin: 0;\
+ padding: 0;\
+ }\
+ #imgbrowse > ul {\
+ overflow: auto;\
+ }\
+ #imgbrowse > div {\
+ border: 1px solid #666;\
+ }\
+ #imglib_preview > div {\
+ padding: 5px;\
+ font-size: 12px;\
+ }\
+ #imglib_preview img {\
+ display: block;\
+ margin: 0 auto;\
+ max-height: 100px;\
+ }\
+ #imgbrowse li {\
+ list-style: none;\
+ padding: .5em;\
+ background: #E8E8E8;\
+ border-bottom: 1px solid #B0B0B0;\
+ line-height: 1.2em;\
+ font-style: sans-serif;\
+ }\
+ #imgbrowse li > span {\
+ color: #666;\
+ font-size: 15px;\
+ display: block;\
+ }\
+ #imgbrowse li:hover {\
+ background: #FFC;\
+ cursor: pointer;\
+ }\
+ #imgbrowse iframe {\
+ width: 100%;\
+ height: 100%;\
+ border: 0;\
+ }\
+ ').appendTo('head');
+ }
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/ext-imagelib.xml b/files_svgedit/svg-edit/extensions/ext-imagelib.xml
new file mode 100644
index 000000000..936578c05
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-imagelib.xml
@@ -0,0 +1,14 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="tool_imagelib">
+<svg width="201" height="211" xmlns="http://www.w3.org/2000/svg">
+ <g>
+ <path fill="#efe8b8" stroke="#d6c47c" stroke-linecap="round" d="m2.75,49.51761l56.56,-46.26761c12.73,8.25 25.71001,7 46.44,0.75l-56.03999,47.23944l-22.72002,25.01056l-24.23999,-26.73239z" id="svg_2" stroke-width="7"/>
+ <path fill="#a03333" stroke="#3f3f3f" d="m3.75,203.25002c14.33301,7 30.66699,7 46,0l0,-152.00002c-14.66699,8 -32.33301,8 -47,0l1,152.00002zm45.75,-152.25002l56.25,-46.75l0,151l-56,48.00002m-47.25,-154.25002l57.25,-46.5" id="svg_1" stroke-width="7" stroke-linecap="round"/>
+ <path fill="#efe8b8" stroke="#d6c47c" stroke-linecap="round" d="m49.75,49.51801l56.56,-46.26801c12.72998,8.25 25.71002,7 46.44,0.75l-56.03998,47.239l-22.72003,25.011l-24.23999,-26.73199z" stroke-width="7" id="svg_5"/>
+ <path fill="#2f8e2f" stroke="#3f3f3f" d="m50.75,202.25c14.33301,7 30.66699,7.04253 46,0.04253l0,-151.04253c-14.66699,8 -32.33301,8 -47,0l1,151zm45.75,-151.25l56.25,-46.75l0,144.01219l-56,51.98782m-47.25,-151.25002l57.25,-46.5" stroke-width="7" stroke-linecap="round" id="svg_6"/>
+ <path fill="#efe8b8" stroke="#d6c47c" stroke-linecap="round" d="m95.75,49.51801l56.56,-46.26801c12.72998,8.25 25.71002,7 46.44,0.75l-56.03998,47.239l-22.72003,25.011l-24.23999,-26.73199z" stroke-width="7" id="svg_10"/>
+ <path fill="#336393" stroke="#3f3f3f" d="m96.75,200.29445c14.33301,7 30.66699,7 46,0l0,-149.04445c-14.66699,8 -32.33301,8 -47,0l1,149.04445zm45.75,-149.29445l56.25,-46.75l0,148.04445l-56,48m-47.25,-151.29445l57.25,-46.5" stroke-width="7" stroke-linecap="round" id="svg_11"/>
+ </g>
+</svg>
+ </g>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/ext-markers.js b/files_svgedit/svg-edit/extensions/ext-markers.js
new file mode 100644
index 000000000..25b08be9c
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-markers.js
@@ -0,0 +1,572 @@
+/*
+ * ext-markers.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Will Schleter
+ * based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria
+ *
+ * This extension provides for the addition of markers to the either end
+ * or the middle of a line, polyline, path, polygon.
+ *
+ * Markers may be either a graphic or arbitary text
+ *
+ * to simplify the coding and make the implementation as robust as possible,
+ * markers are not shared - every object has its own set of markers.
+ * this relationship is maintained by a naming convention between the
+ * ids of the markers and the ids of the object
+ *
+ * The following restrictions exist for simplicty of use and programming
+ * objects and their markers to have the same color
+ * marker size is fixed
+ * text marker font, size, and attributes are fixed
+ * an application specific attribute - se_type - is added to each marker element
+ * to store the type of marker
+ *
+ * TODO:
+ * remove some of the restrictions above
+ * add option for keeping text aligned to horizontal
+ * add support for dimension extension lines
+ *
+ */
+
+svgEditor.addExtension("Markers", function(S) {
+ var svgcontent = S.svgcontent,
+ addElem = S.addSvgElementFromJson,
+ selElems;
+
+ var mtypes = ['start','mid','end'];
+
+ var marker_prefix = 'se_marker_';
+ var id_prefix = 'mkr_';
+
+ // note - to add additional marker types add them below with a unique id
+ // and add the associated icon(s) to marker-icons.svg
+ // the geometry is normallized to a 100x100 box with the origin at lower left
+ // Safari did not like negative values for low left of viewBox
+ // remember that the coordinate system has +y downward
+ var marker_types = {
+ nomarker: {},
+ leftarrow:
+ {element:'path', attr:{d:'M0,50 L100,90 L70,50 L100,10 Z'}},
+ rightarrow:
+ {element:'path', attr:{d:'M100,50 L0,90 L30,50 L0,10 Z'}},
+ textmarker:
+ {element:'text', attr: {x:0, y:0,'stroke-width':0,'stroke':'none','font-size':75,'font-family':'serif','text-anchor':'left',
+ 'xml:space': 'preserve'}},
+ forwardslash:
+ {element:'path', attr:{d:'M30,100 L70,0'}},
+ reverseslash:
+ {element:'path', attr:{d:'M30,0 L70,100'}},
+ verticalslash:
+ {element:'path', attr:{d:'M50,0 L50,100'}},
+ box:
+ {element:'path', attr:{d:'M20,20 L20,80 L80,80 L80,20 Z'}},
+ star:
+ {element:'path', attr:{d:'M10,30 L90,30 L20,90 L50,10 L80,90 Z'}},
+ xmark:
+ {element:'path', attr:{d:'M20,80 L80,20 M80,80 L20,20'}},
+ triangle:
+ {element:'path', attr:{d:'M10,80 L50,20 L80,80 Z'}},
+ mcircle:
+ {element:'circle', attr:{r:30, cx:50, cy:50}},
+ }
+
+
+ var lang_list = {
+ "en":[
+ {id: "start_marker_list", title: "Select start marker type" },
+ {id: "mid_marker_list", title: "Select mid marker type" },
+ {id: "end_marker_list", title: "Select end marker type" },
+ {id: "nomarker", title: "No Marker" },
+ {id: "leftarrow", title: "Left Arrow" },
+ {id: "rightarrow", title: "Right Arrow" },
+ {id: "textmarker", title: "Text Marker" },
+ {id: "forwardslash", title: "Forward Slash" },
+ {id: "reverseslash", title: "Reverse Slash" },
+ {id: "verticalslash", title: "Vertical Slash" },
+ {id: "box", title: "Box" },
+ {id: "star", title: "Star" },
+ {id: "xmark", title: "X" },
+ {id: "triangle", title: "Triangle" },
+ {id: "mcircle", title: "Circle" },
+ {id: "leftarrow_o", title: "Open Left Arrow" },
+ {id: "rightarrow_o", title: "Open Right Arrow" },
+ {id: "box_o", title: "Open Box" },
+ {id: "star_o", title: "Open Star" },
+ {id: "triangle_o", title: "Open Triangle" },
+ {id: "mcircle_o", title: "Open Circle" },
+ ]
+ };
+
+
+ // duplicate shapes to support unfilled (open) marker types with an _o suffix
+ $.each(['leftarrow','rightarrow','box','star','mcircle','triangle'],function(i,v) {
+ marker_types[v+'_o'] = marker_types[v];
+ });
+
+ // elem = a graphic element will have an attribute like marker-start
+ // attr - marker-start, marker-mid, or marker-end
+ // returns the marker element that is linked to the graphic element
+ function getLinked(elem, attr) {
+ var str = elem.getAttribute(attr);
+ if(!str) return null;
+ var m = str.match(/\(\#(.*)\)/);
+ if(!m || m.length !== 2) {
+ return null;
+ }
+ return S.getElem(m[1]);
+ }
+
+ //toggles context tool panel off/on
+ //sets the controls with the selected element's settings
+ function showPanel(on) {
+ $('#marker_panel').toggle(on);
+
+ if(on) {
+ var el = selElems[0];
+ var val;
+ var ci;
+
+ $.each(mtypes, function(i, pos) {
+ var m=getLinked(el,"marker-"+pos);
+ var txtbox = $('#'+pos+'_marker');
+ if (!m) {
+ val='\\nomarker';
+ ci=val;
+ txtbox.hide() // hide text box
+ } else {
+ if (!m.attributes.se_type) return; // not created by this extension
+ val='\\'+m.attributes.se_type.textContent;
+ ci=val;
+ if (val=='\\textmarker') {
+ val=m.lastChild.textContent;
+ //txtbox.show(); // show text box
+ } else {
+ txtbox.hide() // hide text box
+ }
+ }
+ txtbox.val(val);
+ setIcon(pos,ci);
+ })
+ }
+ }
+
+ function addMarker(id, val) {
+ var txt_box_bg = '#ffffff';
+ var txt_box_border = 'none';
+ var txt_box_stroke_width = 0;
+
+ var marker = S.getElem(id);
+
+ if (marker) return;
+
+ if (val=='' || val=='\\nomarker') return;
+
+ var el = selElems[0];
+ var color = el.getAttribute('stroke');
+ //NOTE: Safari didn't like a negative value in viewBox
+ //so we use a standardized 0 0 100 100
+ //with 50 50 being mapped to the marker position
+ var refX = 50;
+ var refY = 50;
+ var viewBox = "0 0 100 100";
+ var markerWidth = 5;
+ var markerHeight = 5;
+ var strokeWidth = 10;
+ if (val.substr(0,1)=='\\') se_type=val.substr(1);
+ else se_type='textmarker';
+
+ if (!marker_types[se_type]) return; // an unknown type!
+
+ // create a generic marker
+ marker = addElem({
+ "element": "marker",
+ "attr": {
+ "id": id,
+ "markerUnits": "strokeWidth",
+ "orient": "auto",
+ "style": "pointer-events:none",
+ "se_type": se_type
+ }
+ });
+
+ if (se_type!='textmarker') {
+ var mel = addElem(marker_types[se_type]);
+ var fillcolor = color;
+ if (se_type.substr(-2)=='_o') fillcolor='none';
+ mel.setAttribute('fill',fillcolor);
+ mel.setAttribute('stroke',color);
+ mel.setAttribute('stroke-width',strokeWidth);
+ marker.appendChild(mel);
+ } else {
+ var text = addElem(marker_types[se_type]);
+ // have to add text to get bounding box
+ text.textContent = val;
+ var tb=text.getBBox();
+ //alert( tb.x + " " + tb.y + " " + tb.width + " " + tb.height);
+ var pad=1;
+ var bb = tb;
+ bb.x = 0;
+ bb.y = 0;
+ bb.width += pad*2;
+ bb.height += pad*2;
+ // shift text according to its size
+ text.setAttribute('x', pad);
+ text.setAttribute('y', bb.height - pad - tb.height/4); // kludge?
+ text.setAttribute('fill',color);
+ refX = bb.width/2+pad;
+ refY = bb.height/2+pad;
+ viewBox = bb.x + " " + bb.y + " " + bb.width + " " + bb.height;
+ markerWidth =bb.width/10;
+ markerHeight = bb.height/10;
+
+ var box = addElem({
+ "element": "rect",
+ "attr": {
+ "x": bb.x,
+ "y": bb.y,
+ "width": bb.width,
+ "height": bb.height,
+ "fill": txt_box_bg,
+ "stroke": txt_box_border,
+ "stroke-width": txt_box_stroke_width
+ }
+ });
+ marker.setAttribute("orient",0);
+ marker.appendChild(box);
+ marker.appendChild(text);
+ }
+
+ marker.setAttribute("viewBox",viewBox);
+ marker.setAttribute("markerWidth", markerWidth);
+ marker.setAttribute("markerHeight", markerHeight);
+ marker.setAttribute("refX", refX);
+ marker.setAttribute("refY", refY);
+ S.findDefs().appendChild(marker);
+
+ return marker;
+ }
+
+
+ function setMarker() {
+ var poslist={'start_marker':'start','mid_marker':'mid','end_marker':'end'};
+ var pos = poslist[this.id];
+ var marker_name = 'marker-'+pos;
+ var val = this.value;
+ var el = selElems[0];
+ var marker = getLinked(el, marker_name);
+ if (marker) $(marker).remove();
+ el.removeAttribute(marker_name);
+ if (val=='') val='\\nomarker';
+ if (val=='\\nomarker') {
+ setIcon(pos,val);
+ S.call("changed", selElems);
+ return;
+ }
+ // Set marker on element
+ var id = marker_prefix + pos + '_' + el.id;
+ addMarker(id, val);
+ svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")");
+ if (el.tagName == "line" && pos=='mid') el=convertline(el);
+ S.call("changed", selElems);
+ setIcon(pos,val);
+ }
+
+ function convertline(elem) {
+ // this routine came from the connectors extension
+ // it is needed because midpoint markers don't work with line elements
+ if (!(elem.tagName == "line")) return elem;
+
+ // Convert to polyline to accept mid-arrow
+
+ var x1 = elem.getAttribute('x1')-0;
+ var x2 = elem.getAttribute('x2')-0;
+ var y1 = elem.getAttribute('y1')-0;
+ var y2 = elem.getAttribute('y2')-0;
+ var id = elem.id;
+
+ var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
+ var pline = addElem({
+ "element": "polyline",
+ "attr": {
+ "points": (x1+','+y1+ mid_pt +x2+','+y2),
+ "stroke": elem.getAttribute('stroke'),
+ "stroke-width": elem.getAttribute('stroke-width'),
+ "fill": "none",
+ "opacity": elem.getAttribute('opacity') || 1
+ }
+ });
+ $.each(mtypes, function(i, pos) { // get any existing marker definitions
+ var nam = 'marker-'+pos;
+ var m = elem.getAttribute(nam);
+ if (m) pline.setAttribute(nam,elem.getAttribute(nam));
+ });
+
+ var batchCmd = new S.BatchCommand();
+ batchCmd.addSubCommand(new S.RemoveElementCommand(elem, elem.parentNode));
+ batchCmd.addSubCommand(new S.InsertElementCommand(pline));
+
+ $(elem).after(pline).remove();
+ svgCanvas.clearSelection();
+ pline.id = id;
+ svgCanvas.addToSelection([pline]);
+ S.addCommandToHistory(batchCmd);
+ return pline;
+ }
+
+ // called when the main system modifies an object
+ // this routine changes the associated markers to be the same color
+ function colorChanged(elem) {
+ var color = elem.getAttribute('stroke');
+
+ $.each(mtypes, function(i, pos) {
+ var marker = getLinked(elem, 'marker-'+pos);
+ if (!marker) return;
+ if (!marker.attributes.se_type) return; //not created by this extension
+ var ch = marker.lastElementChild;
+ if (!ch) return;
+ var curfill = ch.getAttribute("fill");
+ var curstroke = ch.getAttribute("stroke")
+ if (curfill && curfill!='none') ch.setAttribute("fill",color);
+ if (curstroke && curstroke!='none') ch.setAttribute("stroke",color);
+ });
+ }
+
+ // called when the main system creates or modifies an object
+ // primary purpose is create new markers for cloned objects
+ function updateReferences(el) {
+ $.each(mtypes, function (i,pos) {
+ var id = marker_prefix + pos + '_' + el.id;
+ var marker_name = 'marker-'+pos;
+ var marker = getLinked(el, marker_name);
+ if (!marker || !marker.attributes.se_type) return; //not created by this extension
+ var url = el.getAttribute(marker_name);
+ if (url) {
+ var len = el.id.length;
+ var linkid = url.substr(-len-1,len);
+ if (el.id != linkid) {
+ var val = $('#'+pos+'_marker').attr('value');
+ addMarker(id, val);
+ svgCanvas.changeSelectedAttribute(marker_name, "url(#" + id + ")");
+ if (el.tagName == "line" && pos=='mid') el=convertline(el);
+ S.call("changed", selElems);
+ }
+ }
+ });
+ }
+
+ // simulate a change event a text box that stores the current element's marker type
+ function triggerTextEntry(pos,val) {
+ $('#'+pos+'_marker').val(val);
+ $('#'+pos+'_marker').change();
+ var txtbox = $('#'+pos+'_marker');
+ //if (val.substr(0,1)=='\\') txtbox.hide();
+ //else txtbox.show();
+ }
+
+ function setIcon(pos,id) {
+ if (id.substr(0,1)!='\\') id='\\textmarker'
+ var ci = '#'+id_prefix+pos+'_'+id.substr(1);
+ svgEditor.setIcon('#cur_' + pos +'_marker_list', $(ci).children());
+ $(ci).addClass('current').siblings().removeClass('current');
+ }
+
+ function setMarkerSet(obj) {
+ var parts = this.id.split('_');
+ var set = parts[2];
+ switch (set) {
+ case 'off':
+ triggerTextEntry('start','\\nomarker');
+ triggerTextEntry('mid','\\nomarker');
+ triggerTextEntry('end','\\nomarker');
+ break;
+ case 'dimension':
+ triggerTextEntry('start','\\leftarrow');
+ triggerTextEntry('end','\\rightarrow');
+ showTextPrompt('mid');
+ break;
+ case 'label':
+ triggerTextEntry('mid','\\nomarker');
+ triggerTextEntry('end','\\rightarrow');
+ showTextPrompt('start');
+ break;
+ }
+ }
+
+ function showTextPrompt(pos) {
+ var def = $('#'+pos+'_marker').val();
+ if (def.substr(0,1)=='\\') def='';
+ $.prompt('Enter text for ' + pos + ' marker', def , function(txt) { if (txt) triggerTextEntry(pos,txt); });
+ }
+
+ // callback function for a toolbar button click
+ function setArrowFromButton(obj) {
+
+ var parts = this.id.split('_');
+ var pos = parts[1];
+ var val = parts[2];
+ if (parts[3]) val+='_'+parts[3];
+
+ if (val!='textmarker') {
+ triggerTextEntry(pos,'\\'+val);
+ } else {
+ showTextPrompt(pos);
+ }
+ }
+
+ function getTitle(lang,id) {
+ var list = lang_list[lang];
+ for (var i in list) {
+ if (list[i].id==id) return list[i].title;
+ }
+ return id;
+ }
+
+
+ // build the toolbar button array from the marker definitions
+ // TODO: need to incorporate language specific titles
+ function buildButtonList() {
+ var buttons=[];
+ var i=0;
+/*
+ buttons.push({
+ id:id_prefix + 'markers_off',
+ title:'Turn off all markers',
+ type:'context',
+ events: { 'click': setMarkerSet },
+ panel: 'marker_panel'
+ });
+ buttons.push({
+ id:id_prefix + 'markers_dimension',
+ title:'Dimension',
+ type:'context',
+ events: { 'click': setMarkerSet },
+ panel: 'marker_panel'
+ });
+ buttons.push({
+ id:id_prefix + 'markers_label',
+ title:'Label',
+ type:'context',
+ events: { 'click': setMarkerSet },
+ panel: 'marker_panel'
+ });
+*/
+ $.each(mtypes,function(k,pos) {
+ var listname = pos + "_marker_list";
+ var def = true;
+ $.each(marker_types,function(id,v) {
+ var title = getTitle('en',id);
+ buttons.push({
+ id:id_prefix + pos + "_" + id,
+ svgicon:id,
+ title:title,
+ type:'context',
+ events: { 'click': setArrowFromButton },
+ panel:'marker_panel',
+ list: listname,
+ isDefault: def
+ });
+ def = false;
+ });
+ });
+ return buttons;
+ }
+
+ return {
+ name: "Markers",
+ svgicons: "extensions/markers-icons.xml",
+ buttons: buildButtonList(),
+ context_tools: [
+ {
+ type: "input",
+ panel: "marker_panel",
+ title: "Start marker",
+ id: "start_marker",
+ label: "s",
+ size: 3,
+ events: { change: setMarker }
+ },{
+ type: "button-select",
+ panel: "marker_panel",
+ title: getTitle('en','start_marker_list'),
+ id: "start_marker_list",
+ colnum: 3,
+ events: { change: setArrowFromButton }
+ },{
+ type: "input",
+ panel: "marker_panel",
+ title: "Middle marker",
+ id: "mid_marker",
+ label: "m",
+ defval: "",
+ size: 3,
+ events: { change: setMarker }
+ },{
+ type: "button-select",
+ panel: "marker_panel",
+ title: getTitle('en','mid_marker_list'),
+ id: "mid_marker_list",
+ colnum: 3,
+ events: { change: setArrowFromButton }
+ },{
+ type: "input",
+ panel: "marker_panel",
+ title: "End marker",
+ id: "end_marker",
+ label: "e",
+ size: 3,
+ events: { change: setMarker }
+ },{
+ type: "button-select",
+ panel: "marker_panel",
+ title: getTitle('en','end_marker_list'),
+ id: "end_marker_list",
+ colnum: 3,
+ events: { change: setArrowFromButton }
+ } ],
+ callback: function() {
+ $('#marker_panel').addClass('toolset').hide();
+
+ },
+ addLangData: function(lang) {
+ return { data: lang_list[lang] };
+ },
+
+ selectedChanged: function(opts) {
+ // Use this to update the current selected elements
+ //console.log('selectChanged',opts);
+ selElems = opts.elems;
+
+ var i = selElems.length;
+ var marker_elems = ['line','path','polyline','polygon'];
+
+ while(i--) {
+ var elem = selElems[i];
+ if(elem && $.inArray(elem.tagName, marker_elems) != -1) {
+ if(opts.selectedElement && !opts.multiselected) {
+ showPanel(true);
+ } else {
+ showPanel(false);
+ }
+ } else {
+ showPanel(false);
+ }
+ }
+ },
+
+ elementChanged: function(opts) {
+ //console.log('elementChanged',opts);
+ var elem = opts.elems[0];
+ if(elem && (
+ elem.getAttribute("marker-start") ||
+ elem.getAttribute("marker-mid") ||
+ elem.getAttribute("marker-end")
+ )) {
+ colorChanged(elem);
+ updateReferences(elem);
+ }
+ changing_flag = false;
+ }
+ };
+});
diff --git a/files_svgedit/svg-edit/extensions/ext-server_moinsave.js b/files_svgedit/svg-edit/extensions/ext-server_moinsave.js
new file mode 100644
index 000000000..e12c88da7
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-server_moinsave.js
@@ -0,0 +1,56 @@
+/*
+ * ext-server_moinsave.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * 2011 MoinMoin:ReimarBauer
+ * adopted for moinmoins item storage. it sends in one post png and svg data
+ * (I agree to dual license my work to additional GPLv2 or later)
+ *
+ */
+
+svgEditor.addExtension("server_opensave", {
+ callback: function() {
+
+ var save_svg_action = '/+modify';
+
+ // Create upload target (hidden iframe)
+ var target = $('<iframe name="output_frame" src="#"/>').hide().appendTo('body');
+
+ svgEditor.setCustomHandlers({
+ save: function(win, data) {
+ var svg = "<?xml version=\"1.0\"?>\n" + data;
+ var qstr = $.param.querystring();
+ var name = qstr.substr(9).split('/+get/')[1];
+ var svg_data = svgedit.utilities.encode64(svg);
+ if(!$('#export_canvas').length) {
+ $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
+ }
+ var c = $('#export_canvas')[0];
+ c.width = svgCanvas.contentW;
+ c.height = svgCanvas.contentH;
+ $.getScript('canvg/canvg.js', function() {
+ canvg(c, svg, {renderCallback: function() {
+ var datauri = c.toDataURL('image/png');
+ var uiStrings = svgEditor.uiStrings;
+ var png_data = svgedit.utilities.encode64(datauri);
+ var form = $('<form>').attr({
+ method: 'post',
+ action: save_svg_action + '/' + name,
+ target: 'output_frame'
+ }) .append('<input type="hidden" name="png_data" value="' + png_data + '">')
+ .append('<input type="hidden" name="filepath" value="' + svg_data + '">')
+ .append('<input type="hidden" name="filename" value="' + 'drawing.svg">')
+ .append('<input type="hidden" name="contenttype" value="application/x-svgdraw">')
+ .appendTo('body')
+ .submit().remove();
+ }})});
+ alert("Saved! Return to Item View!");
+ top.window.location = '/'+name;
+ },
+ });
+
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/ext-server_opensave.js b/files_svgedit/svg-edit/extensions/ext-server_opensave.js
new file mode 100644
index 000000000..278d9e5b2
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-server_opensave.js
@@ -0,0 +1,180 @@
+/*
+ * ext-server_opensave.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("server_opensave", {
+ callback: function() {
+
+ var save_svg_action = 'extensions/filesave.php';
+ var save_png_action = 'extensions/filesave.php';
+
+ // Create upload target (hidden iframe)
+ var target = $('<iframe name="output_frame" src="#"/>').hide().appendTo('body');
+
+ svgEditor.setCustomHandlers({
+ save: function(win, data) {
+ var svg = "<?xml version=\"1.0\"?>\n" + data;
+
+ var title = svgCanvas.getDocumentTitle();
+ var filename = title.replace(/[^a-z0-9\.\_\-]+/gi, '_');
+
+ var form = $('<form>').attr({
+ method: 'post',
+ action: save_svg_action,
+ target: 'output_frame'
+ }) .append('<input type="hidden" name="output_svg" value="' + encodeURI(svg) + '">')
+ .append('<input type="hidden" name="filename" value="' + filename + '">')
+ .appendTo('body')
+ .submit().remove();
+ },
+ pngsave: function(win, data) {
+ var issues = data.issues;
+
+ if(!$('#export_canvas').length) {
+ $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
+ }
+ var c = $('#export_canvas')[0];
+
+ c.width = svgCanvas.contentW;
+ c.height = svgCanvas.contentH;
+ canvg(c, data.svg, {renderCallback: function() {
+ var datauri = c.toDataURL('image/png');
+
+ var uiStrings = svgEditor.uiStrings;
+ var note = '';
+
+ // Check if there's issues
+ if(issues.length) {
+ var pre = "\n \u2022 ";
+ note += ("\n\n" + pre + issues.join(pre));
+ }
+
+ if(note.length) {
+ alert(note);
+ }
+
+ var title = svgCanvas.getDocumentTitle();
+ var filename = title.replace(/[^a-z0-9\.\_\-]+/gi, '_');
+
+ var form = $('<form>').attr({
+ method: 'post',
+ action: save_png_action,
+ target: 'output_frame'
+ }) .append('<input type="hidden" name="output_png" value="' + datauri + '">')
+ .append('<input type="hidden" name="filename" value="' + filename + '">')
+ .appendTo('body')
+ .submit().remove();
+ }});
+
+
+ }
+ });
+
+ // Do nothing if client support is found
+ if(window.FileReader) return;
+
+ var cancelled = false;
+
+ // Change these to appropriate script file
+ var open_svg_action = 'extensions/fileopen.php?type=load_svg';
+ var import_svg_action = 'extensions/fileopen.php?type=import_svg';
+ var import_img_action = 'extensions/fileopen.php?type=import_img';
+
+ // Set up function for PHP uploader to use
+ svgEditor.processFile = function(str64, type) {
+ if(cancelled) {
+ cancelled = false;
+ return;
+ }
+
+ $('#dialog_box').hide();
+
+ if(type != 'import_img') {
+ var xmlstr = svgCanvas.Utils.decode64(str64);
+ }
+
+ switch ( type ) {
+ case 'load_svg':
+ svgCanvas.clear();
+ svgCanvas.setSvgString(xmlstr);
+ svgEditor.updateCanvas();
+ break;
+ case 'import_svg':
+ svgCanvas.importSvgString(xmlstr);
+ svgEditor.updateCanvas();
+ break;
+ case 'import_img':
+ svgCanvas.setGoodImage(str64);
+ break;
+ }
+ }
+
+ // Create upload form
+ var open_svg_form = $('<form>');
+ open_svg_form.attr({
+ enctype: 'multipart/form-data',
+ method: 'post',
+ action: open_svg_action,
+ target: 'output_frame'
+ });
+
+ // Create import form
+ var import_svg_form = open_svg_form.clone().attr('action', import_svg_action);
+
+ // Create image form
+ var import_img_form = open_svg_form.clone().attr('action', import_img_action);
+
+ // It appears necessory to rebuild this input every time a file is
+ // selected so the same file can be picked and the change event can fire.
+ function rebuildInput(form) {
+ form.empty();
+ var inp = $('<input type="file" name="svg_file">').appendTo(form);
+
+
+ function submit() {
+ // This submits the form, which returns the file data using svgEditor.uploadSVG
+ form.submit();
+
+ rebuildInput(form);
+ $.process_cancel("Uploading...", function() {
+ cancelled = true;
+ $('#dialog_box').hide();
+ });
+ }
+
+ if(form[0] == open_svg_form[0]) {
+ inp.change(function() {
+ // This takes care of the "are you sure" dialog box
+ svgEditor.openPrep(function(ok) {
+ if(!ok) {
+ rebuildInput(form);
+ return;
+ }
+ submit();
+ });
+ });
+ } else {
+ inp.change(function() {
+ // This submits the form, which returns the file data using svgEditor.uploadSVG
+ submit();
+ });
+ }
+ }
+
+ // Create the input elements
+ rebuildInput(open_svg_form);
+ rebuildInput(import_svg_form);
+ rebuildInput(import_img_form);
+
+ // Add forms to buttons
+ $("#tool_open").show().prepend(open_svg_form);
+ $("#tool_import").show().prepend(import_svg_form);
+ $("#tool_image").prepend(import_img_form);
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/ext-shapes.js b/files_svgedit/svg-edit/extensions/ext-shapes.js
new file mode 100644
index 000000000..92f5db99f
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-shapes.js
@@ -0,0 +1,387 @@
+/*
+ * ext-shapes.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Christian Tzurcanu
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+svgEditor.addExtension("shapes", function() {
+
+
+ var current_d, cur_shape_id;
+ var canv = svgEditor.canvas;
+ var cur_shape;
+ var start_x, start_y;
+ var svgroot = canv.getRootElem();
+ var lastBBox = {};
+
+ // This populates the category list
+ var categories = {
+ basic: 'Basic',
+ object: 'Objects',
+ symbol: 'Symbols',
+ arrow: 'Arrows',
+ flowchart: 'Flowchart',
+ animal: 'Animals',
+ game: 'Cards & Chess',
+ dialog_balloon: 'Dialog balloons',
+ electronics: 'Electronics',
+ math: 'Mathematical',
+ music: 'Music',
+ misc: 'Miscellaneous',
+ raphael_1: 'raphaeljs.com set 1',
+ raphael_2: 'raphaeljs.com set 2'
+ };
+
+ var library = {
+ 'basic': {
+ data: {
+ 'heart': 'm150,73c61,-175 300,0 0,225c-300,-225 -61,-400 0,-225z',
+ 'frame': 'm0,0l300,0l0,300l-300,0zm35,-265l0,230l230,0l0,-230z',
+ 'donut': 'm1,150l0,0c0,-82.29042 66.70958,-149 149,-149l0,0c39.51724,0 77.41599,15.69816 105.35889,43.64108c27.94293,27.94293 43.64111,65.84165 43.64111,105.35892l0,0c0,82.29041 -66.70958,149 -149,149l0,0c-82.29041,0 -149,-66.70959 -149,-149zm74.5,0l0,0c0,41.1452 33.35481,74.5 74.5,74.5c41.14522,0 74.5,-33.3548 74.5,-74.5c0,-41.1452 -33.3548,-74.5 -74.5,-74.5l0,0c-41.14519,0 -74.5,33.35481 -74.5,74.5z',
+ "triangle": "m1,280.375l149,-260.75l149,260.75z",
+ "right_triangle": "m1,299l0,-298l298,298z",
+ "diamond": "m1,150l149,-149l149,149l-149,149l-149,-149z",
+ "pentagon": "m1.00035,116.97758l148.99963,-108.4053l148.99998,108.4053l-56.91267,175.4042l-184.1741,0l-56.91284,-175.4042z",
+ "hexagon": "m1,149.99944l63.85715,-127.71428l170.28572,0l63.85713,127.71428l-63.85713,127.71428l-170.28572,0l-63.85715,-127.71428z",
+ "septagon1": "m0.99917,191.06511l29.51249,-127.7108l119.48833,-56.83673l119.48836,56.83673l29.51303,127.7108l-82.69087,102.41679l-132.62103,0l-82.69031,-102.41679z",
+ "heptagon": "m1,88.28171l87.28172,-87.28171l123.43653,0l87.28172,87.28171l0,123.43654l-87.28172,87.28172l-123.43653,0l-87.28172,-87.28172l0,-123.43654z",
+ "decagon": "m1,150.00093l28.45646,-88.40318l74.49956,-54.63682l92.08794,0l74.50002,54.63682l28.45599,88.40318l-28.45599,88.40318l-74.50002,54.63681l-92.08794,0l-74.49956,-54.63681l-28.45646,-88.40318z",
+ "dodecagon": "m1,110.07421l39.92579,-69.14842l69.14842,-39.92579l79.85159,0l69.14842,39.92579l39.92578,69.14842l0,79.85159l-39.92578,69.14842l-69.14842,39.92578l-79.85159,0l-69.14842,-39.92578l-39.92579,-69.14842l0,-79.85159z",
+ "star_points_5": "m1,116.58409l113.82668,0l35.17332,-108.13487l35.17334,108.13487l113.82666,0l-92.08755,66.83026l35.17514,108.13487l-92.08759,-66.83208l-92.08757,66.83208l35.17515,-108.13487l-92.08758,-66.83026z",
+ "trapezoid": "m1,299l55.875,-298l186.25001,0l55.87498,298z",
+ "arrow_up": "m1.49805,149.64304l148.50121,-148.00241l148.50121,148.00241l-74.25061,0l0,148.71457l-148.5012,0l0,-148.71457z",
+ "vertical_scrool": "m37.375,261.625l0,-242.9375l0,0c0,-10.32083 8.36669,-18.6875 18.6875,-18.6875l224.25,0c10.32083,0 18.6875,8.36667 18.6875,18.6875c0,10.32081 -8.36667,18.6875 -18.6875,18.6875l-18.6875,0l0,242.9375c0,10.32083 -8.36668,18.6875 -18.6875,18.6875l-224.25,0l0,0c-10.32083,0 -18.6875,-8.36667 -18.6875,-18.6875c0,-10.32083 8.36667,-18.6875 18.6875,-18.6875zm37.375,-261.625l0,0c10.32081,0 18.6875,8.36667 18.6875,18.6875c0,10.32081 -8.36669,18.6875 -18.6875,18.6875c-5.1604,0 -9.34375,-4.18335 -9.34375,-9.34375c0,-5.16041 4.18335,-9.34375 9.34375,-9.34375l18.6875,0m186.875,18.6875l-205.5625,0m-37.375,224.25l0,0c5.1604,0 9.34375,4.18335 9.34375,9.34375c0,5.1604 -4.18335,9.34375 -9.34375,9.34375l18.6875,0m-18.6875,18.6875l0,0c10.32081,0 18.6875,-8.36667 18.6875,-18.6875l0,-18.6875",
+ "smiley": "m68.49886,214.78838q81.06408,55.67332 161.93891,0m-144.36983,-109.9558c0,-8.60432 6.97517,-15.57949 15.57948,-15.57949c8.60431,0 15.57948,6.97517 15.57948,15.57949c0,8.60431 -6.97517,15.57947 -15.57948,15.57947c-8.60431,0 -15.57948,-6.97516 -15.57948,-15.57947m95.83109,0c0,-8.60432 6.97517,-15.57949 15.57948,-15.57949c8.60431,0 15.57947,6.97517 15.57947,15.57949c0,8.60431 -6.97516,15.57947 -15.57947,15.57947c-8.60429,0 -15.57948,-6.97516 -15.57948,-15.57947m-181.89903,44.73038l0,0c0,-82.60133 66.96162,-149.56296 149.56296,-149.56296c82.60135,0 149.56296,66.96162 149.56296,149.56296c0,82.60135 -66.96161,149.56296 -149.56296,149.56296c-82.60133,0 -149.56296,-66.96161 -149.56296,-149.56296zm0,0l0,0c0,-82.60133 66.96162,-149.56296 149.56296,-149.56296c82.60135,0 149.56296,66.96162 149.56296,149.56296c0,82.60135 -66.96161,149.56296 -149.56296,149.56296c-82.60133,0 -149.56296,-66.96161 -149.56296,-149.56296z",
+ "left_braket": "m174.24565,298.5c-13.39009,0 -24.24489,-1.80908 -24.24489,-4.04065l0,-140.4187c0,-2.23158 -10.85481,-4.04065 -24.2449,-4.04065l0,0c13.39009,0 24.2449,-1.80907 24.2449,-4.04065l0,-140.4187l0,0c0,-2.23159 10.8548,-4.04066 24.24489,-4.04066",
+ "uml_actor": "m40.5,100l219,0m-108.99991,94.00006l107,105m-107.00009,-106.00006l-100,106m99.5,-231l0,125m33.24219,-158.75781c0,18.35916 -14.88303,33.24219 -33.24219,33.24219c-18.35916,0 -33.2422,-14.88303 -33.2422,-33.24219c0.00002,-18.35915 14.88304,-33.24219 33.2422,-33.24219c18.35916,0 33.24219,14.88304 33.24219,33.24219z",
+ "dialog_balloon_1": "m0.99786,35.96579l0,0c0,-19.31077 15.28761,-34.96524 34.14583,-34.96524l15.52084,0l0,0l74.50001,0l139.68748,0c9.05606,0 17.74118,3.68382 24.14478,10.24108c6.40356,6.55726 10.00107,15.45081 10.00107,24.72416l0,87.41311l0,0l0,52.44785l0,0c0,19.31078 -15.2876,34.96524 -34.14584,34.96524l-139.68748,0l-97.32507,88.90848l22.82506,-88.90848l-15.52084,0c-18.85822,0 -34.14583,-15.65446 -34.14583,-34.96524l0,0l0,-52.44785l0,0z",
+ "cloud": "m182.05086,34.31005c-0.64743,0.02048 -1.27309,0.07504 -1.92319,0.13979c-10.40161,1.03605 -19.58215,7.63722 -24.24597,17.4734l-2.47269,7.44367c0.53346,-2.57959 1.35258,-5.08134 2.47269,-7.44367c-8.31731,-8.61741 -19.99149,-12.59487 -31.52664,-10.72866c-11.53516,1.8662 -21.55294,9.3505 -27.02773,20.19925c-15.45544,-9.51897 -34.72095,-8.94245 -49.62526,1.50272c-14.90431,10.44516 -22.84828,28.93916 -20.43393,47.59753l1.57977,7.58346c-0.71388,-2.48442 -1.24701,-5.01186 -1.57977,-7.58346l-0.2404,0.69894c-12.95573,1.4119 -23.58103,11.46413 -26.34088,24.91708c-2.75985,13.45294 2.9789,27.25658 14.21789,34.21291l17.54914,4.26352c-6.1277,0.50439 -12.24542,-0.9808 -17.54914,-4.26352c-8.66903,9.71078 -10.6639,24.08736 -4.94535,35.96027c5.71854,11.87289 17.93128,18.70935 30.53069,17.15887l7.65843,-2.02692c-2.46413,1.0314 -5.02329,1.70264 -7.65843,2.02692c7.15259,13.16728 19.01251,22.77237 32.93468,26.5945c13.92217,3.82214 28.70987,1.56322 41.03957,-6.25546c10.05858,15.86252 27.91113,24.19412 45.81322,21.38742c17.90208,-2.8067 32.66954,-16.26563 37.91438,-34.52742l1.82016,-10.20447c-0.27254,3.46677 -0.86394,6.87508 -1.82016,10.20447c12.31329,8.07489 27.80199,8.52994 40.52443,1.18819c12.72244,-7.34175 20.6609,-21.34155 20.77736,-36.58929l-4.56108,-22.7823l-17.96776,-15.41455c13.89359,8.70317 22.6528,21.96329 22.52884,38.19685c16.5202,0.17313 30.55292,-13.98268 36.84976,-30.22897c6.29684,-16.24631 3.91486,-34.76801 -6.2504,-48.68089c4.21637,-10.35873 3.96622,-22.14172 -0.68683,-32.29084c-4.65308,-10.14912 -13.23602,-17.69244 -23.55914,-20.65356c-2.31018,-13.45141 -11.83276,-24.27162 -24.41768,-27.81765c-12.58492,-3.54603 -25.98557,0.82654 -34.41142,11.25287l-5.11707,8.63186c1.30753,-3.12148 3.01521,-6.03101 5.11707,-8.63186c-5.93959,-8.19432 -15.2556,-12.8181 -24.96718,-12.51096z",
+ "cylinder": "m299.0007,83.77844c0,18.28676 -66.70958,33.11111 -149.00002,33.11111m149.00002,-33.11111l0,0c0,18.28676 -66.70958,33.11111 -149.00002,33.11111c-82.29041,0 -148.99997,-14.82432 -148.99997,-33.11111m0,0l0,0c0,-18.28674 66.70956,-33.1111 148.99997,-33.1111c82.29044,0 149.00002,14.82436 149.00002,33.1111l0,132.44449c0,18.28674 -66.70958,33.11105 -149.00002,33.11105c-82.29041,0 -148.99997,-14.82431 -148.99997,-33.11105z",
+ "arrow_u_turn": "m1.00059,299.00055l0,-167.62497l0,0c0,-72.00411 58.37087,-130.37499 130.375,-130.37499l0,0l0,0c34.57759,0 67.73898,13.7359 92.18906,38.18595c24.45006,24.45005 38.18593,57.61144 38.18593,92.18904l0,18.625l37.24997,0l-74.49995,74.50002l-74.50002,-74.50002l37.25,0l0,-18.625c0,-30.8589 -25.0161,-55.87498 -55.87498,-55.87498l0,0l0,0c-30.85892,0 -55.875,25.01608 -55.875,55.87498l0,167.62497z",
+ "arrow_left_up": "m0.99865,224.5l74.50004,-74.5l0,37.25l111.74991,0l0,-111.75l-37.25,0l74.5,-74.5l74.5,74.5l-37.25,0l0,186.25l-186.24989,0l0,37.25l-74.50005,-74.5z",
+ "maximize": "m1.00037,150.34581l55.30305,-55.30267l0,27.65093l22.17356,0l0,-44.21833l44.21825,0l0,-22.17357l-27.65095,0l55.30267,-55.30292l55.3035,55.30292l-27.65175,0l0,22.17357l44.21835,0l0,44.21833l22.17357,0l0,-27.65093l55.30345,55.30267l-55.30345,55.3035l0,-27.65175l-22.17357,0l0,44.21834l-44.21835,0l0,22.17355l27.65175,0l-55.3035,55.30348l-55.30267,-55.30348l27.65095,0l0,-22.17355l-44.21825,0l0,-44.21834l-22.17356,0l0,27.65175l-55.30305,-55.3035z",
+ "cross": "m0.99844,99.71339l98.71494,0l0,-98.71495l101.26279,0l0,98.71495l98.71495,0l0,101.2628l-98.71495,0l0,98.71494l-101.26279,0l0,-98.71494l-98.71494,0z",
+ "plaque": "m-0.00197,49.94376l0,0c27.5829,0 49.94327,-22.36036 49.94327,-49.94327l199.76709,0l0,0c0,27.5829 22.36037,49.94327 49.94325,49.94327l0,199.7671l0,0c-27.58289,0 -49.94325,22.36034 -49.94325,49.94325l-199.76709,0c0,-27.58292 -22.36037,-49.94325 -49.94327,-49.94325z",
+ "page": "m249.3298,298.99744l9.9335,-39.73413l39.73413,-9.93355l-49.66763,49.66768l-248.33237,0l0,-298.00001l298.00001,0l0,248.33234"
+
+ },
+ buttons: []
+ }
+ };
+
+ var cur_lib = library.basic;
+
+ var mode_id = 'shapelib';
+
+ function loadIcons() {
+ $('#shape_buttons').empty();
+
+ // Show lib ones
+ $('#shape_buttons').append(cur_lib.buttons);
+ }
+
+ function loadLibrary(cat_id) {
+
+ var lib = library[cat_id];
+
+ if(!lib) {
+ $('#shape_buttons').html('Loading...');
+ $.getJSON('extensions/shapelib/' + cat_id + '.json', function(result, textStatus) {
+ cur_lib = library[cat_id] = {
+ data: result.data,
+ size: result.size,
+ fill: result.fill
+ }
+ makeButtons(cat_id, result);
+ loadIcons();
+ });
+ return;
+ }
+
+ cur_lib = lib;
+ if(!lib.buttons.length) makeButtons(cat_id, lib);
+ loadIcons();
+ }
+
+ function makeButtons(cat, shapes) {
+ var size = cur_lib.size || 300;
+ var fill = cur_lib.fill || false;
+ var off = size * .05;
+ var vb = [-off, -off, size + off*2, size + off*2].join(' ');
+ var stroke = fill ? 0: (size/30);
+
+ var shape_icon = new DOMParser().parseFromString(
+ '<svg xmlns="http://www.w3.org/2000/svg"><svg viewBox="' + vb + '"><path fill="'+(fill?'#333':'none')+'" stroke="#000000" stroke-width="' + stroke + '" /><\/svg><\/svg>',
+ 'text/xml');
+
+ var width = 24;
+ var height = 24;
+ shape_icon.documentElement.setAttribute('width', width);
+ shape_icon.documentElement.setAttribute('height', height);
+ var svg_elem = $(document.importNode(shape_icon.documentElement,true));
+
+ var data = shapes.data;
+
+ cur_lib.buttons = [];
+
+ for(var id in data) {
+ var path_d = data[id];
+ var icon = svg_elem.clone();
+ icon.find('path').attr('d', path_d);
+
+ var icon_btn = icon.wrap('<div class="tool_button">').parent().attr({
+ id: mode_id + '_' + id,
+ title: id
+ });
+
+
+ // Store for later use
+ cur_lib.buttons.push(icon_btn[0]);
+ }
+
+ }
+
+
+ return {
+ svgicons: "extensions/ext-shapes.xml",
+ buttons: [{
+ id: "tool_shapelib",
+ type: "mode_flyout", // _flyout
+ position: 6,
+ title: "Shape library",
+ events: {
+ "click": function() {
+ canv.setMode(mode_id);
+ }
+ }
+ }],
+ callback: function() {
+
+ $('<style>').text('\
+ #shape_buttons {\
+ overflow: auto;\
+ width: 180px;\
+ max-height: 300px;\
+ display: table-cell;\
+ vertical-align: middle;\
+ }\
+ \
+ #shape_cats {\
+ min-width: 110px;\
+ display: table-cell;\
+ vertical-align: middle;\
+ height: 300px;\
+ }\
+ #shape_cats > div {\
+ line-height: 1em;\
+ padding: .5em;\
+ border:1px solid #B0B0B0;\
+ background: #E8E8E8;\
+ margin-bottom: -1px;\
+ }\
+ #shape_cats div:hover {\
+ background: #FFFFCC;\
+ }\
+ #shape_cats div.current {\
+ font-weight: bold;\
+ }').appendTo('head');
+
+
+ var btn_div = $('<div id="shape_buttons">');
+ $('#tools_shapelib > *').wrapAll(btn_div);
+
+ var shower = $('#tools_shapelib_show');
+
+
+ loadLibrary('basic');
+
+ // Do mouseup on parent element rather than each button
+ $('#shape_buttons').mouseup(function(evt) {
+ var btn = $(evt.target).closest('div.tool_button');
+
+ if(!btn.length) return;
+
+ var copy = btn.children().clone();
+ shower.children(':not(.flyout_arrow_horiz)').remove();
+ shower
+ .append(copy)
+ .attr('data-curopt', '#' + btn[0].id) // This sets the current mode
+ .mouseup();
+ canv.setMode(mode_id);
+
+ cur_shape_id = btn[0].id.substr((mode_id+'_').length);
+ current_d = cur_lib.data[cur_shape_id];
+
+ $('.tools_flyout').fadeOut();
+
+ });
+
+//
+ var shape_cats = $('<div id="shape_cats">');
+
+ var cat_str = '';
+
+ $.each(categories, function(id, label) {
+ cat_str += '<div data-cat=' + id + '>' + label + '</div>';
+ });
+
+ shape_cats.html(cat_str).children().bind('mouseup', function() {
+ var catlink = $(this);
+ catlink.siblings().removeClass('current');
+ catlink.addClass('current');
+
+ loadLibrary(catlink.attr('data-cat'));
+ // Get stuff
+
+ return false;
+ });
+
+ shape_cats.children().eq(0).addClass('current');
+
+ $('#tools_shapelib').append(shape_cats);
+
+ shower.mouseup(function() {
+ canv.setMode(current_d ? mode_id : 'select');
+ });
+
+
+ $('#tool_shapelib').remove();
+
+ var h = $('#tools_shapelib').height();
+ $('#tools_shapelib').css({
+ 'margin-top': -(h/2 - 15),
+ 'margin-left': 3
+ });
+
+
+ },
+ mouseDown: function(opts) {
+ var mode = canv.getMode();
+ if(mode !== mode_id) return;
+
+ var e = opts.event;
+ var x = start_x = opts.start_x;
+ var y = start_y = opts.start_y;
+ var cur_style = canv.getStyle();
+
+ cur_shape = canv.addSvgElementFromJson({
+ "element": "path",
+ "curStyles": true,
+ "attr": {
+ "d": current_d,
+ "id": canv.getNextId(),
+ "opacity": cur_style.opacity / 2,
+ "style": "pointer-events:none"
+ }
+ });
+
+ // Make sure shape uses absolute values
+ if(/[a-z]/.test(current_d)) {
+ current_d = cur_lib.data[cur_shape_id] = canv.pathActions.convertPath(cur_shape);
+ cur_shape.setAttribute('d', current_d);
+ canv.pathActions.fixEnd(cur_shape);
+ }
+
+ cur_shape.setAttribute('transform', "translate(" + x + "," + y + ") scale(0.005) translate(" + -x + "," + -y + ")");
+
+// console.time('b');
+ canv.recalculateDimensions(cur_shape);
+
+ var tlist = canv.getTransformList(cur_shape);
+
+ lastBBox = cur_shape.getBBox();
+
+ return {
+ started: true
+ }
+ // current_d
+ },
+ mouseMove: function(opts) {
+ var mode = canv.getMode();
+ if(mode !== mode_id) return;
+
+ var zoom = canv.getZoom();
+ var evt = opts.event
+
+ var x = opts.mouse_x/zoom;
+ var y = opts.mouse_y/zoom;
+
+ var tlist = canv.getTransformList(cur_shape),
+ box = cur_shape.getBBox(),
+ left = box.x, top = box.y, width = box.width,
+ height = box.height;
+ var dx = (x-start_x), dy = (y-start_y);
+
+ var newbox = {
+ 'x': Math.min(start_x,x),
+ 'y': Math.min(start_y,y),
+ 'width': Math.abs(x-start_x),
+ 'height': Math.abs(y-start_y)
+ };
+
+ var ts = null,
+ tx = 0, ty = 0,
+ sy = height ? (height+dy)/height : 1,
+ sx = width ? (width+dx)/width : 1;
+
+ var sx = newbox.width / lastBBox.width;
+ var sy = newbox.height / lastBBox.height;
+
+ sx = sx || 1;
+ sy = sy || 1;
+
+ // Not perfect, but mostly works...
+ if(x < start_x) {
+ tx = lastBBox.width;
+ }
+ if(y < start_y) ty = lastBBox.height;
+
+ // update the transform list with translate,scale,translate
+ var translateOrigin = svgroot.createSVGTransform(),
+ scale = svgroot.createSVGTransform(),
+ translateBack = svgroot.createSVGTransform();
+
+ translateOrigin.setTranslate(-(left+tx), -(top+ty));
+ if(!evt.shiftKey) {
+ var max = Math.min(Math.abs(sx), Math.abs(sy));
+
+ sx = max * (sx < 0 ? -1 : 1);
+ sy = max * (sy < 0 ? -1 : 1);
+ }
+ scale.setScale(sx,sy);
+
+ translateBack.setTranslate(left+tx, top+ty);
+ var N = tlist.numberOfItems;
+ tlist.appendItem(translateBack);
+ tlist.appendItem(scale);
+ tlist.appendItem(translateOrigin);
+
+ canv.recalculateDimensions(cur_shape);
+
+ lastBBox = cur_shape.getBBox();
+ },
+ mouseUp: function(opts) {
+ var mode = canv.getMode();
+ if(mode !== mode_id) return;
+
+ if(opts.mouse_x == start_x && opts.mouse_y == start_y) {
+ return {
+ keep: false,
+ element: cur_shape,
+ started: false
+ }
+ }
+
+ return {
+ keep: true,
+ element: cur_shape,
+ started: false
+ }
+ }
+ }
+});
+
diff --git a/files_svgedit/svg-edit/extensions/ext-shapes.xml b/files_svgedit/svg-edit/extensions/ext-shapes.xml
new file mode 100644
index 000000000..92b0090ae
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/ext-shapes.xml
@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="tool_shapelib">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
+ <path fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m70,194.72501l0,0c0,-10.30901 35.8172,-18.666 80,-18.666c44.18298,0 80,8.35699 80,18.666l0,74.66699c0,10.30899 -35.81702,18.66699 -80,18.66699c-44.1828,0 -80,-8.358 -80,-18.66699l0,-74.66699z"/>
+ <path fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m70,114.608l0,0c0,-10.309 35.8172,-18.6668 80,-18.6668c44.18298,0 80,8.3578 80,18.6668l0,74.66699c0,10.30901 -35.81702,18.666 -80,18.666c-44.1828,0 -80,-8.35699 -80,-18.666l0,-74.66699z"/>
+ <path fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m70,33.6667l0,0c0,-10.3094 35.8172,-18.6667 80,-18.6667c44.18298,0 80,8.3573 80,18.6667l0,74.6663c0,10.31 -35.81702,18.667 -80,18.667c-44.1828,0 -80,-8.357 -80,-18.667l0,-74.6663z"/>
+ <path id="svg_1" fill="#c0c0c0" stroke-linejoin="round" stroke-width="14" stroke="#202020" fill-rule="nonzero" d="m230,32.33334c0,10.30931 -35.81726,18.66666 -80,18.66666c-44.1828,0 -80,-8.35735 -80,-18.66666"/>
+ </svg>
+ </g>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/eyedropper-icon.xml b/files_svgedit/svg-edit/extensions/eyedropper-icon.xml
new file mode 100644
index 000000000..c05576aa2
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/eyedropper-icon.xml
@@ -0,0 +1,34 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+
+<g id="tool_eyedropper">
+<svg viewBox="0 0 320 320" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <radialGradient id="eyedropper_svg_6" cx="0.5" cy="0.5" r="0.5">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#e5e5e5" stop-opacity="0.38"/>
+ </radialGradient>
+ <linearGradient id="eyedropper_svg_15" x1="0" y1="0" x2="0.58594" y2="0.55078">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="0.57"/>
+ <stop offset="1" stop-color="#000056" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="eyedropper_svg_19" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffffff" stop-opacity="0"/>
+ </linearGradient>
+ </defs>
+ <g display="inline">
+ <title>Layer 1</title>
+ <path d="m193.899994,73l-119.899979,118l-15,39.5l10.25,4.5l43.750015,-20l108.999969,-112l-28.100006,-30z" id="svg_3" fill="none" stroke="#000000" stroke-width="5"/>
+ <path d="m58.649994,232c-2.75,28.200012 -26.399994,28.950012 -21.899994,59c4.5,30.049988 55,28 55.5,-1.25c0.5,-29.25 -20.25,-28.75 -22.25,-54.75l-11.350006,-3z" id="svg_4" fill="#aa56ff" stroke="#000000" stroke-width="7"/>
+ <path d="m45.474976,269.275024l13.775024,0.474976l-0.75,16.75l-14.25,-1.25l1.224976,-15.974976z" id="svg_5" fill="url(#eyedropper_svg_6)" stroke-width="5" fill-opacity="0.73"/>
+ <path d="m217.899994,46c21.5,-101.549999 141.600006,20.449997 28.100006,33l-5,44l-63,-66l39.899994,-11z" id="svg_2" fill="#000000" stroke-width="5"/>
+ <path d="m206.825012,61.075008c3.712494,-2.46249 7.637482,-3.53751 14.424988,-5.575008c10.125,-16.5 32.875,-41.5 40.5,-35c7.625,6.5 -21.25,35.625 -37.5,39.25c-5.5,10.125 -8,13.875 -17.25,16.5c-2.837494,-8.162514 -4.262482,-12.337486 -0.174988,-15.174992z" id="svg_7" fill="url(#eyedropper_svg_15)" stroke-width="5"/>
+ <path d="m133.049988,134.75l46.950012,9.25l-66,70l-42.5,20.5l-11.5,-5l14,-37.5l59.049988,-57.25z" id="svg_11" fill="#aa56ff" stroke="#000000" stroke-width="7"/>
+ <path d="m71.425034,212.350006l9.050888,-20.022537l51.516724,-49.327469l8.507355,0.97197l-69.074966,68.378036z" id="svg_16" fill="url(#eyedropper_svg_19)" stroke-width="5"/>
+ </g>
+</svg>
+</g>
+
+ <g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/eyedropper.png b/files_svgedit/svg-edit/extensions/eyedropper.png
new file mode 100644
index 000000000..61987c4bd
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/eyedropper.png
Binary files differ
diff --git a/files_svgedit/svg-edit/extensions/fileopen.php b/files_svgedit/svg-edit/extensions/fileopen.php
new file mode 100644
index 000000000..a6661e5cd
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/fileopen.php
@@ -0,0 +1,31 @@
+<!doctype html>
+<?php
+/*
+ * fileopen.php
+ * To be used with ext-server_opensave.js for SVG-edit
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+ // Very minimal PHP file, all we do is Base64 encode the uploaded file and
+ // return it to the editor
+
+ $file = $_FILES['svg_file']['tmp_name'];
+
+ $output = file_get_contents($file);
+
+ $type = $_REQUEST['type'];
+
+ $prefix = '';
+
+ // Make Data URL prefix for import image
+ if($type == 'import_img') {
+ $info = getimagesize($file);
+ $prefix = 'data:' . $info['mime'] . ';base64,';
+ }
+?>
+<script>
+window.top.window.svgEditor.processFile("<?php echo $prefix . base64_encode($output); ?>", "<?php echo $type ?>");
+</script> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/filesave.php b/files_svgedit/svg-edit/extensions/filesave.php
new file mode 100644
index 000000000..77414b807
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/filesave.php
@@ -0,0 +1,44 @@
+<?php
+/*
+ * filesave.php
+ * To be used with ext-server_opensave.js for SVG-edit
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+if(!isset($_POST['output_svg']) && !isset($_POST['output_png'])) {
+ die('post fail');
+}
+
+$file = '';
+
+$suffix = isset($_POST['output_svg'])?'.svg':'.png';
+
+if(isset($_POST['filename']) && strlen($_POST['filename']) > 0) {
+ $file = $_POST['filename'] . $suffix;
+} else {
+ $file = 'image' . $suffix;
+}
+
+if($suffix == '.svg') {
+ $mime = 'image/svg+xml';
+ $contents = rawurldecode($_POST['output_svg']);
+} else {
+ $mime = 'image/png';
+ $contents = $_POST['output_png'];
+ $pos = (strpos($contents, 'base64,') + 7);
+ $contents = base64_decode(substr($contents, $pos));
+}
+
+ header("Cache-Control: public");
+ header("Content-Description: File Transfer");
+ header("Content-Disposition: attachment; filename=" . $file);
+ header("Content-Type: " . $mime);
+ header("Content-Transfer-Encoding: binary");
+
+ echo $contents;
+
+?> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/foreignobject-icons.xml b/files_svgedit/svg-edit/extensions/foreignobject-icons.xml
new file mode 100644
index 000000000..0d34654a7
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/foreignobject-icons.xml
@@ -0,0 +1,96 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="tool_foreign">
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 84 84">
+ <g fill="#444" opacity="0.2" transform="translate(6,6)">
+ <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ <g fill="#444" opacity="0.3" transform="translate(4,4)">
+ <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ <g fill="#444" opacity="0.5" transform="translate(2,2)">
+ <path d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ <g fill="#0000CC">
+ <path id="xyz321" d="M42.8,74.3c0,4.3,0,5.9,11.8,5.9l4.1,0l0,3.8c-4.5-0.4-16.1-0.4-21.2-0.3c-5.1,0-16.6,0-21,0.4l0-3.8l4.1,0
+ c11.8,0,11.8-1.7,11.8-5.9l0-6.9C13.9,65.6,0,54.6,0,42c0-12.2,13.3-23.5,32.4-25.4l0-6.9c0-4.3,0-5.9-11.8-5.9l-4.1,0l0-3.8
+ c4.5,0.4,16.1,0.4,21.2,0.3c5.1,0,16.6,0,21-0.4l0,3.8l-4.1,0c-11.8,0-11.8,1.7-11.8,5.9l0,6.9C61.6,18.1,75.8,29.2,75.8,42
+ c0,12.4-13.8,23.9-33.1,25.4L42.8,74.3z M32.4,19.4c-18.7,2.5-19.9,16.2-19.9,22.6c0,7.6,2.3,20.2,20,22.5L32.4,19.4z M42.7,64.7
+ c18.8-2.2,20.7-15.4,20.6-22.8c0-9.3-3.5-20.6-20.7-22.6L42.7,64.7z"/>
+ </g>
+ </svg>
+ </g>
+
+ <g id="edit_foreign">
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="34 38 170 170" overflow="hidden">
+ <g fill="#000088">
+ <path d="M30.1,63.9v-4.3l30.2-14.9V50L36.5,61.7l23.8,11.7v5.3L30.1,63.9z"/>
+ <path d="M106.1,79.7v-1.1c4.2-0.5,4.8-1.1,4.8-5.2V58.2c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
+ c0,4.5,1.1,5.7,5.2,5.8v1.1H86.8v-1.1c4.1-0.3,4.9-1.1,4.9-5.1V57.9c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
+ c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5V55.4c0-3.5-0.6-4.6-2.5-4.6
+ c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
+ c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H106.1z"/>
+ <path d="M147.3,80.5c-3,0-4.2-1.4-4.6-5.3c-4.4,3.7-7.3,5.3-10.5,5.3c-4.5,0-7.6-3.2-7.6-7.7c0-2.4,1-4.8,2.6-6.3
+ c3.1-2.7,4.3-3.3,15.4-7.8v-4.4c0-3.9-1.9-6-5.5-6c-2.9,0-5.2,1.6-5.2,3.5c0,0.5,0.1,1.1,0.2,1.7c0.1,0.5,0.1,0.9,0.1,1.2
+ c0,1.6-1.5,3-3.2,3s-3.1-1.4-3.1-3.1c0-1.8,1.2-3.9,3-5.4c2-1.7,5.5-2.7,9.1-2.7c4.4,0,7.5,1.4,9,4.2c1,1.7,1.4,3.7,1.4,7.3v14
+ c0,3.2,0.5,4.2,2.2,4.2c1.1,0,1.9-0.4,3.2-1.4v1.9C151.3,79.6,149.8,80.5,147.3,80.5z M142.6,60.5c-8.7,3.2-11.7,5.8-11.7,10v0.3
+ c0,3.1,2,5.5,4.5,5.5c1.5,0,3.5-0.6,5.3-1.6c1.5-0.9,1.9-1.6,1.9-3.8V60.5z"/>
+ <path d="M165.3,80.5c-4.2,0-6.3-3.1-6.3-9.1V49.7h-3.8c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.4,0.4-0.9,1.2-1.4
+ c1.9-1.1,4.3-3.7,7-7.7c0.5-0.6,1-1.3,1.4-2c0.4,0,0.5,0.2,0.5,0.9v8.4h7.3v2.3h-7.3v20.6c0,4.6,1.1,6.5,3.7,6.5
+ c1.6,0,2.7-0.6,4.3-2.5l0.9,0.8C171.8,78.7,169,80.5,165.3,80.5z"/>
+ <path d="M193.8,79.7v-1.1c4.1-0.4,4.9-1.3,4.9-6.2V58.1c0-5-1.8-7.6-5.4-7.6c-2.8,0-5,1.2-8,4.5v17.4
+ c0,5,0.7,5.8,4.9,6.3v1.1h-15.6v-1.1c4.2-0.6,4.6-1.2,4.6-6.3V38.5c0-3.1-0.6-3.7-3.7-3.7c-0.4,0-0.6,0-0.9,0.1v-1.2l1.9-0.6
+ c4-1.2,5.8-1.7,8.3-2.6l0.4,0.2v21.9c3.3-4.3,6.3-6,10.6-6c5.9,0,8.9,3.9,8.9,11.5v14.3c0,5,0.4,5.5,4.3,6.3v1.1h-15.2V79.7z"/>
+ <path d="M59.1,116.1v-4.3l30.2-14.9v5.3l-23.8,11.7l23.8,11.7v5.3L59.1,116.1z"/>
+ <path d="M135.1,131.9v-1.1c4.2-0.5,4.8-1.1,4.8-5.2v-15.1c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
+ c0,4.5,1.1,5.7,5.2,5.8v1.1h-16.1v-1.1c4.1-0.3,4.9-1.1,4.9-5.1v-15.7c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
+ c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5v-18.2c0-3.5-0.6-4.6-2.5-4.6
+ c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
+ c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H135.1z"/>
+ <path d="M152.1,131.9v-1.1c5-0.3,5.7-1.1,5.7-6.3v-16.6c0-3.2-0.6-4.3-2.4-4.3c-0.6,0-1.6,0.1-2.4,0.2l-0.6,0.1v-1.1
+ l11.2-4L164,99v25.6c0,5.2,0.6,5.9,5.3,6.3v1.1L152.1,131.9L152.1,131.9z M160.8,93.1c-2,0-3.7-1.6-3.7-3.7c0-2,1.7-3.7,3.7-3.7
+ c2.1,0,3.7,1.7,3.7,3.7C164.6,91.6,163,93.1,160.8,93.1z"/>
+ <path d="M175.8,131v-5.3l23.7-11.8l-23.7-11.7v-5.3l30.1,14.9v4.3L175.8,131z"/>
+ <path d="M31.1,169.5v-4.3l30.2-14.9v5.3l-23.8,11.7L61.3,179v5.3L31.1,169.5z"/>
+ <path d="M71.3,186.4h-4.9l16.5-49.7h4.8L71.3,186.4z"/>
+ <path d="M127.1,185.3v-1.1c4.2-0.5,4.8-1.1,4.8-5.2v-15.2c0-6-1.3-7.9-5.4-7.9c-3.3,0-5.7,1.3-7.8,4.4v18.1
+ c0,4.5,1.1,5.7,5.2,5.8v1.1h-16.1v-1.1c4.1-0.3,4.9-1.1,4.9-5.1v-15.6c0-5-1.6-7.6-4.8-7.6c-2.5,0-5.6,1.2-7.4,2.9
+ c-0.5,0.5-1.1,1.4-1.1,1.4v20.3c0,2.8,1.1,3.6,4.9,3.7v1.1h-16v-1.1c4-0.1,5-1.2,5-5V161c0-3.5-0.6-4.6-2.5-4.6
+ c-0.8,0-1.4,0.1-2.3,0.3v-1.2c4-1.1,6.4-1.9,10.1-3.2l0.5,0.1v5.4c6-4.5,8-5.5,11.2-5.5c3.9,0,6.3,1.9,7.6,6c3.9-4.2,7.6-6,11.7-6
+ c5.5,0,8.4,4.3,8.4,12.8v14.8c0,2.8,0.9,4.1,3.1,4.2l1.9,0.1v1.1H127.1L127.1,185.3z"/>
+ <path d="M168.3,186.1c-3,0-4.2-1.4-4.6-5.3c-4.4,3.7-7.3,5.3-10.5,5.3c-4.5,0-7.6-3.2-7.6-7.7c0-2.4,1-4.8,2.6-6.3
+ c3.1-2.7,4.3-3.3,15.4-7.8v-4.4c0-3.9-1.9-6-5.5-6c-2.9,0-5.2,1.6-5.2,3.5c0,0.5,0.1,1.1,0.2,1.7c0.1,0.5,0.1,0.9,0.1,1.2
+ c0,1.6-1.5,3-3.2,3s-3.1-1.4-3.1-3.1c0-1.8,1.2-3.9,3-5.4c2-1.7,5.5-2.7,9.1-2.7c4.4,0,7.5,1.4,9,4.2c1,1.7,1.4,3.7,1.4,7.3v14
+ c0,3.2,0.5,4.2,2.2,4.2c1.1,0,1.9-0.4,3.2-1.4v1.9C172.3,185.2,170.8,186.1,168.3,186.1z M163.8,166.1c-8.7,3.2-11.7,5.8-11.7,10
+ v0.3c0,3.1,2,5.5,4.5,5.5c1.5,0,3.5-0.6,5.3-1.6c1.5-0.9,1.9-1.6,1.9-3.8V166.1z"/>
+ <path d="M186.3,186.1c-4.2,0-6.3-3.1-6.3-9.1v-21.7h-3.8c-0.2-0.1-0.3-0.3-0.3-0.5c0-0.4,0.4-0.9,1.2-1.4
+ c1.9-1.1,4.3-3.7,7-7.7c0.5-0.6,1-1.3,1.4-2c0.4,0,0.5,0.2,0.5,0.9v8.4h7.3v2.3h-7.3v20.6c0,4.6,1.1,6.5,3.7,6.5
+ c1.6,0,2.7-0.6,4.3-2.5l0.9,0.8C192.8,184.3,190,186.1,186.3,186.1z"/>
+ <path d="M209.1,185.3h-13.4v-1.1c4.2-0.6,4.6-1.2,4.6-6.3V144c0-3.1-0.6-3.7-3.7-3.7c-0.4,0-0.6,0-0.9,0.1v-1.2
+ l1.9-0.6c4-1.2,5.8-1.7,8.3-2.6l0.4,0.2v21.9c0.9-1.2,1.9-2.2,2.8-3.1"/>
+ <path d="M209.1,157.9c-0.8,0.7-1.7,1.5-2.7,2.6v17.4c0,4,0.4,5.3,2.7,5.9"/>
+ </g>
+ <g>
+ <polyline opacity="0.2" fill="#231F20" points="209.1,76.4 118.7,186.5 139.1,186.4 209.1,121 209.1,76.4 "/>
+ <polyline opacity="0.4" fill="#231F20" points="209.1,76.2 118.5,186.5 129.7,186.4 200.2,120.3 209.1,100.8 209.1,76.4 "/>
+ <path fill="#FFD761" d="M121.6,88.7l0.8,87.5l62.3-56.7c0,0-15.3-25.8-24.8-30C151.1,85.6,121.6,88.7,121.6,88.7z"/>
+ <path fill="#FEA01E" d="M209.1,19.5h-54l-33.5,69.2c0,0,29.7-3.4,38.3,0.8c8.9,4.4,25,30.8,25,30.8l24.2-50V19.5z"/>
+ <path d="M120.4,153.7l-0.6,25l23.8-16.9c0,0-8-7-11.2-8.1C129.4,152.8,120.4,153.7,120.4,153.7z"/>
+ <polyline fill="none" stroke="#231F20" stroke-width="5" points="153.9,19.5 121.6,88.7 120.7,181.2 186.6,120.3 209.1,70.3 "/>
+ </g>
+ </svg>
+ </g>
+
+ <g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/grid-icon.xml b/files_svgedit/svg-edit/extensions/grid-icon.xml
new file mode 100644
index 000000000..d34eb9d02
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/grid-icon.xml
@@ -0,0 +1,30 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<!--
+ Sample icons file. This file looks like an SVG file with groups as its
+ children. Each group element has an ID that must match the ID of the button given
+ in the extension. The SVG inside the group makes up the actual icon, and
+ needs use a viewBox instead of width/height for it to scale properly.
+
+ Multiple icons can be included, each within their own group.
+-->
+ <g id="view_grid">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <g>
+ <rect fill="#ffffff" stroke="#848484" x="2" y="2" width="20" height="20"/>
+ <line fill="none" stroke="#848484" x1="11.84375" y1="-1.53125" x2="11.84375" y2="18.46875" transform="rotate(90, 11.8429, 8.46955)"/>
+ <line fill="none" stroke="#848484" x1="11.90625" y1="5.21875" x2="11.90625" y2="25.21875" transform="rotate(90, 11.9054, 15.2196)"/>
+ <line fill="none" stroke="#848484" x1="8.5" y1="2.03125" x2="8.5" y2="22.03125"/>
+ <line fill="none" stroke="#848484" x1="15.5" y1="2.03125" x2="15.5" y2="22.03125"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="3.25" y="3.28125" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="10" y="3.28125" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="16.75" y="3.28125" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="3.28125" y="9.75" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="10.03125" y="9.75" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="16.78125" y="9.75" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="3.3125" y="16.59375" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="10.0625" y="16.59375" width="4" height="4"/>
+ <rect fill="#d8d8d8" stroke="#000000" stroke-width="0" x="16.8125" y="16.59375" width="4" height="4"/>
+ </g>
+ </svg>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/extensions/helloworld-icon.xml b/files_svgedit/svg-edit/extensions/helloworld-icon.xml
new file mode 100644
index 000000000..0b1ba1a04
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/helloworld-icon.xml
@@ -0,0 +1,21 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<!--
+ Sample icons file. This file looks like an SVG file with groups as its
+ children. Each group element has an ID that must match the ID of the button given
+ in the extension. The SVG inside the group makes up the actual icon, and
+ needs use a viewBox instead of width/height for it to scale properly.
+
+ Multiple icons can be included, each within their own group.
+-->
+ <g id="hello_world">
+ <svg width="102" height="102" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <g>
+ <title>Layer 1</title>
+ <rect ry="30" rx="30" x="2.5" y="2.5" width="97" height="97" id="svg_3" fill="#008000" stroke="#000000" stroke-width="5"/>
+ <text x="52.668" y="42.5" id="svg_1" fill="#ffffff" stroke="#000000" stroke-width="0" font-size="24" font-family="Monospace" text-anchor="middle" xml:space="preserve">Hello</text>
+ <text x="52.668" y="71.5" fill="#ffffff" stroke="#000000" stroke-width="0" font-size="24" font-family="Monospace" text-anchor="middle" xml:space="preserve" id="svg_2">World!</text>
+ </g>
+ </svg>
+ </g>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/imagelib/.svn/all-wcprops b/files_svgedit/svg-edit/extensions/imagelib/.svn/all-wcprops
new file mode 100644
index 000000000..01b876a9a
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1924/trunk/editor/extensions/imagelib
+END
+smiley.svg
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1649/trunk/editor/extensions/imagelib/smiley.svg
+END
+index.html
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1924/trunk/editor/extensions/imagelib/index.html
+END
diff --git a/files_svgedit/svg-edit/extensions/imagelib/.svn/entries b/files_svgedit/svg-edit/extensions/imagelib/.svn/entries
new file mode 100644
index 000000000..feaa6d01f
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/extensions/imagelib
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-01-16T22:11:27.176641Z
+1924
+wschleter@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+smiley.svg
+file
+
+
+
+
+2012-03-25T18:41:40.976323Z
+7d4e1741453e36abd4edb2e03d51f44c
+2010-07-29T15:09:49.401015Z
+1649
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1738
+
+index.html
+file
+
+
+
+
+2012-03-25T18:41:40.976323Z
+64199aad01eb7c8da86dd822ae5cdf5e
+2011-01-16T22:11:27.176641Z
+1924
+wschleter@gmail.com
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1683
+
diff --git a/files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/index.html.svn-base b/files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/index.html.svn-base
new file mode 100644
index 000000000..d35686831
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/index.html.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+text/html
+END
diff --git a/files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/smiley.svg.svn-base b/files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/smiley.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/.svn/prop-base/smiley.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/index.html.svn-base b/files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/index.html.svn-base
new file mode 100644
index 000000000..f5b674a44
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/index.html.svn-base
@@ -0,0 +1,64 @@
+<!doctype html>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
+
+
+<body>
+
+<h1>Select an image:</h1>
+<a href="smiley.svg">smiley.svg</a>
+<br>
+<a href="../../images/logo.png">logo.png</a>
+</body>
+
+<script>
+
+$('a').click(function() {
+ var href = this.href;
+ var target = window.parent;
+ // Convert Non-SVG images to data URL first
+ // (this could also have been done server-side by the library)
+ if(this.href.indexOf('.svg') === -1) {
+
+ var meta_str = JSON.stringify({
+ name: $(this).text(),
+ id: href
+ });
+ target.postMessage(meta_str, "*");
+
+ var img = new Image();
+ img.onload = function() {
+ var canvas = document.createElement("canvas");
+ canvas.width = this.width;
+ canvas.height = this.height;
+ // load the raster image into the canvas
+ canvas.getContext("2d").drawImage(this,0,0);
+ // retrieve the data: URL
+ try {
+ var dataurl = canvas.toDataURL();
+ } catch(err) {
+ // This fails in Firefox with file:// URLs :(
+ alert("Data URL conversion failed: " + err);
+ var dataurl = "";
+ }
+ target.postMessage('|' + href + '|' + dataurl, "*");
+ }
+ img.src = href;
+ } else {
+ // Send metadata (also indicates file is about to be sent)
+ var meta_str = JSON.stringify({
+ name: $(this).text(),
+ id: href
+ });
+ target.postMessage(meta_str, "*");
+ // Do ajax request for image's href value
+ $.get(href, function(data) {
+ data = '|' + href + '|' + data;
+ // This is where the magic happens!
+ target.postMessage(data, "*");
+
+ }, 'html'); // 'html' is necessary to keep returned data as a string
+ }
+ return false;
+});
+
+</script>
diff --git a/files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/smiley.svg.svn-base b/files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/smiley.svg.svn-base
new file mode 100644
index 000000000..21a798d68
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/.svn/text-base/smiley.svg.svn-base
@@ -0,0 +1,12 @@
+<svg width="137" height="137" xmlns="http://www.w3.org/2000/svg">
+ <title>Cool smiley</title>
+ <path fill="url(#svg_4)" stroke="#000000" stroke-width="3" d="m32.18682,97.71674q36.3159,24.94076 72.54585,0m-64.67542,-49.25576c0,-3.8554 3.12526,-6.98079 6.98068,-6.98079c3.85449,0 6.97872,3.12539 6.97872,6.98079c0,3.85346 -3.12423,6.97867 -6.97872,6.97867c-3.85542,0 -6.98068,-3.12521 -6.98068,-6.97867m42.93047,0c0,-3.8554 3.12529,-6.98079 6.97963,-6.98079c3.8544,0 6.97971,3.12539 6.97971,6.98079c0,3.85346 -3.12531,6.97867 -6.97971,6.97867c-3.85434,0 -6.97963,-3.12521 -6.97963,-6.97867m-81.48596,20.036l0,0c0,-37.00197 29.99679,-66.99892 67.00095,-66.99892c37.00303,0 66.99998,29.99695 66.99998,66.99892c0,37.00409 -29.99695,67.00101 -66.99998,67.00101c-37.00416,0 -67.00095,-29.99692 -67.00095,-67.00101zm0,0l0,0c0,-37.00197 29.99679,-66.99892 67.00095,-66.99892c37.00303,0 66.99998,29.99695 66.99998,66.99892c0,37.00409 -29.99695,67.00101 -66.99998,67.00101c-37.00416,0 -67.00095,-29.99692 -67.00095,-67.00101z" id="svg_1"/>
+ <path id="svg_5" d="m23.84005,41.03445l17.57052,0l5.42937,-19.67914l5.42941,19.67914l17.5706,0l-14.21488,12.16242l5.42982,19.67939l-14.21495,-12.16281l-14.21489,12.16281l5.42991,-19.67939l-14.21491,-12.16242l0,0z" stroke-width="3" fill="#000000"/>
+ <path id="svg_6" d="m65.84005,41.03445l17.57052,0l5.42937,-19.67914l5.42941,19.67914l17.5706,0l-14.21487,12.16242l5.42982,19.67939l-14.21496,-12.1628l-14.2149,12.1628l5.42992,-19.67939l-14.21491,-12.16242l0,0z" stroke-width="3" fill="#000000"/>
+ <defs>
+ <linearGradient y2="0.25391" x2="0.46484" y1="0.94922" x1="0.44531" id="svg_4">
+ <stop stop-color="#ff0000" offset="0"/>
+ <stop stop-color="#ffff00" offset="1"/>
+ </linearGradient>
+ </defs>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/imagelib/index.html b/files_svgedit/svg-edit/extensions/imagelib/index.html
new file mode 100644
index 000000000..f5b674a44
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/index.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
+
+
+<body>
+
+<h1>Select an image:</h1>
+<a href="smiley.svg">smiley.svg</a>
+<br>
+<a href="../../images/logo.png">logo.png</a>
+</body>
+
+<script>
+
+$('a').click(function() {
+ var href = this.href;
+ var target = window.parent;
+ // Convert Non-SVG images to data URL first
+ // (this could also have been done server-side by the library)
+ if(this.href.indexOf('.svg') === -1) {
+
+ var meta_str = JSON.stringify({
+ name: $(this).text(),
+ id: href
+ });
+ target.postMessage(meta_str, "*");
+
+ var img = new Image();
+ img.onload = function() {
+ var canvas = document.createElement("canvas");
+ canvas.width = this.width;
+ canvas.height = this.height;
+ // load the raster image into the canvas
+ canvas.getContext("2d").drawImage(this,0,0);
+ // retrieve the data: URL
+ try {
+ var dataurl = canvas.toDataURL();
+ } catch(err) {
+ // This fails in Firefox with file:// URLs :(
+ alert("Data URL conversion failed: " + err);
+ var dataurl = "";
+ }
+ target.postMessage('|' + href + '|' + dataurl, "*");
+ }
+ img.src = href;
+ } else {
+ // Send metadata (also indicates file is about to be sent)
+ var meta_str = JSON.stringify({
+ name: $(this).text(),
+ id: href
+ });
+ target.postMessage(meta_str, "*");
+ // Do ajax request for image's href value
+ $.get(href, function(data) {
+ data = '|' + href + '|' + data;
+ // This is where the magic happens!
+ target.postMessage(data, "*");
+
+ }, 'html'); // 'html' is necessary to keep returned data as a string
+ }
+ return false;
+});
+
+</script>
diff --git a/files_svgedit/svg-edit/extensions/imagelib/smiley.svg b/files_svgedit/svg-edit/extensions/imagelib/smiley.svg
new file mode 100644
index 000000000..21a798d68
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/imagelib/smiley.svg
@@ -0,0 +1,12 @@
+<svg width="137" height="137" xmlns="http://www.w3.org/2000/svg">
+ <title>Cool smiley</title>
+ <path fill="url(#svg_4)" stroke="#000000" stroke-width="3" d="m32.18682,97.71674q36.3159,24.94076 72.54585,0m-64.67542,-49.25576c0,-3.8554 3.12526,-6.98079 6.98068,-6.98079c3.85449,0 6.97872,3.12539 6.97872,6.98079c0,3.85346 -3.12423,6.97867 -6.97872,6.97867c-3.85542,0 -6.98068,-3.12521 -6.98068,-6.97867m42.93047,0c0,-3.8554 3.12529,-6.98079 6.97963,-6.98079c3.8544,0 6.97971,3.12539 6.97971,6.98079c0,3.85346 -3.12531,6.97867 -6.97971,6.97867c-3.85434,0 -6.97963,-3.12521 -6.97963,-6.97867m-81.48596,20.036l0,0c0,-37.00197 29.99679,-66.99892 67.00095,-66.99892c37.00303,0 66.99998,29.99695 66.99998,66.99892c0,37.00409 -29.99695,67.00101 -66.99998,67.00101c-37.00416,0 -67.00095,-29.99692 -67.00095,-67.00101zm0,0l0,0c0,-37.00197 29.99679,-66.99892 67.00095,-66.99892c37.00303,0 66.99998,29.99695 66.99998,66.99892c0,37.00409 -29.99695,67.00101 -66.99998,67.00101c-37.00416,0 -67.00095,-29.99692 -67.00095,-67.00101z" id="svg_1"/>
+ <path id="svg_5" d="m23.84005,41.03445l17.57052,0l5.42937,-19.67914l5.42941,19.67914l17.5706,0l-14.21488,12.16242l5.42982,19.67939l-14.21495,-12.16281l-14.21489,12.16281l5.42991,-19.67939l-14.21491,-12.16242l0,0z" stroke-width="3" fill="#000000"/>
+ <path id="svg_6" d="m65.84005,41.03445l17.57052,0l5.42937,-19.67914l5.42941,19.67914l17.5706,0l-14.21487,12.16242l5.42982,19.67939l-14.21496,-12.1628l-14.2149,12.1628l5.42992,-19.67939l-14.21491,-12.16242l0,0z" stroke-width="3" fill="#000000"/>
+ <defs>
+ <linearGradient y2="0.25391" x2="0.46484" y1="0.94922" x1="0.44531" id="svg_4">
+ <stop stop-color="#ff0000" offset="0"/>
+ <stop stop-color="#ffff00" offset="1"/>
+ </linearGradient>
+ </defs>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/markers-icons.xml b/files_svgedit/svg-edit/extensions/markers-icons.xml
new file mode 100644
index 000000000..6d122b051
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/markers-icons.xml
@@ -0,0 +1,115 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <g id="nomarker">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-50,0l100,0"/>
+ </svg>
+ </g>
+ <g id="leftarrow">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-50,0l100,40l-30,-40l30,-40z"/>
+ </svg>
+ </g>
+ <g id="rightarrow">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m50,0l-100,40l30,-40l-30,-40z"/>
+ </svg>
+ </g>
+ <g id="leftarrow_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-50,0l100,40l-30,-40l30,-40z"/>
+ </svg>
+ </g>
+ <g id="rightarrow_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m50,0l-100,40l30,-40l-30,-40z"/>
+ </svg>
+ </g>
+ <g id="forwardslash">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-20,50l40,-100"/>
+ </svg>
+ </g>
+ <g id="reverseslash">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-20,-50l40,100"/>
+ </svg>
+ </g>
+ <g id="verticalslash">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m0,-50l0,100"/>
+ </svg>
+ </g>
+ <g id="mcircle">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <circle stroke-width="10" stroke="#ff7f00" fill="#ff7f00" cy="0" cx="0" r="30"/>
+ </svg>
+ </g>
+ <g id="mcircle_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <circle stroke-width="10" stroke="#ff7f00" fill="none" cy="0" cx="0" r="30"/>
+ </svg>
+ </g>
+ <g id="xmark">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-30,30l60,-60m0,60l-60,-60"/>
+ </svg>
+ </g>
+ <g id="box">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-30,-30l0,60l60,0l0,-60z"/>
+ </svg>
+ </g>
+ <g id="star">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="m-40,-20l80,0l-70,60l30,-80l30,80z"/>
+ </svg>
+ </g>
+ <g id="box_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-30,-30l0,60l60,0l0,-60z"/>
+ </svg>
+ </g>
+ <g id="star_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="m-40,-20l80,0l-70,60l30,-80l30,80z"/>
+ </svg>
+ </g>
+ <g id="triangle_o">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="none" d="M-30,30 L0,-30 L30,30 Z"/>
+ </svg>
+ </g>
+ <g id="triangle">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="10" stroke="#ff7f00" fill="#ff7f00" d="M-30,30 L0,-30 L30,30 Z"/>
+ </svg>
+ </g>
+ <g id="textmarker">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <text xml:space="preserve" text-anchor="middle" font-family="serif" font-size="120" y="40" x="0" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
+ </svg>
+ </g>
+ <g id="mkr_markers_off">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <line y2="0" x2="50" y1="0" x1="-50" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ </svg>
+ </g>
+ <g id="mkr_markers_dimension">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <line y2="0" x2="40" y1="0" x1="20" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ <line y2="0" x2="-40" y1="0" x1="-20" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ <text text-anchor="middle" font-family="serif" font-size="80" y="20" x="0" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
+ <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M-50,0 L-30,-15 L-30,15 Z"/>
+ <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M50,0 L30,-15 L30,15 Z"/>
+ </svg>
+ </g>
+ <g id="mkr_markers_label">
+ <svg viewBox="-60 -60 120 120" xmlns="http://www.w3.org/2000/svg">
+ <line y2="0" x2="40" y1="0" x1="-20" stroke-width="5" stroke="#ff7f00" fill="none"/>
+ <text text-anchor="middle" font-family="serif" font-size="80" y="20" x="-40" stroke-width="0" stroke="#ff7f00" fill="#ff7f00">T</text>
+ <path stroke-width="5" stroke="#ff7f00" fill="#ff7f00" d="M50,0 L30,-15 L30,15 Z"/>
+ </svg>
+ </g>
+ <g id="svg_eof"/>
+</svg>
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/all-wcprops b/files_svgedit/svg-edit/extensions/shapelib/.svn/all-wcprops
new file mode 100644
index 000000000..636344e63
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/all-wcprops
@@ -0,0 +1,89 @@
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1736/trunk/editor/extensions/shapelib
+END
+game.json
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/game.json
+END
+flowchart.json
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/flowchart.json
+END
+math.json
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/math.json
+END
+arrow.json
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/arrow.json
+END
+electronics.json
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/electronics.json
+END
+misc.json
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/misc.json
+END
+raphael_1.json
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/1736/trunk/editor/extensions/shapelib/raphael_1.json
+END
+raphael_2.json
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/1736/trunk/editor/extensions/shapelib/raphael_2.json
+END
+music.json
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/music.json
+END
+animal.json
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/animal.json
+END
+raphael.txt
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1736/trunk/editor/extensions/shapelib/raphael.txt
+END
+symbol.json
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/symbol.json
+END
+dialog_balloon.json
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/dialog_balloon.json
+END
+object.json
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1626/trunk/editor/extensions/shapelib/object.json
+END
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/entries b/files_svgedit/svg-edit/extensions/shapelib/.svn/entries
new file mode 100644
index 000000000..c13c2fa39
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/entries
@@ -0,0 +1,504 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/extensions/shapelib
+http://svg-edit.googlecode.com/svn
+
+
+
+2010-09-21T12:43:38.181247Z
+1736
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+game.json
+file
+
+
+
+
+2012-03-25T18:41:40.740322Z
+8bfeb3d78da91cd90d9b2da9258c279b
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11623
+
+flowchart.json
+file
+
+
+
+
+2012-03-25T18:41:40.740322Z
+bf4343c2c1fd618ce5e8aa04c1def32d
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3798
+
+math.json
+file
+
+
+
+
+2012-03-25T18:41:40.740322Z
+8c62b7fb36b1061f2d715485f1cb143b
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1436
+
+arrow.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+56b7a54d89a38b1ad8d90dbb49419375
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15958
+
+electronics.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+0762432479510c8bbff58e631edfa156
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7386
+
+misc.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+362692de0da72df10ec79e8cabf82ce1
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+28372
+
+raphael_1.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+d6b84c0eb724a4dea5bdf02b8fa669ab
+2010-09-21T12:43:38.181247Z
+1736
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+99830
+
+raphael_2.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+5b3c3eea713927f637c416a786df2072
+2010-09-21T12:43:38.181247Z
+1736
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+47961
+
+music.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+30b05d18591754122736a56316e809b6
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+25339
+
+animal.json
+file
+
+
+
+
+2012-03-25T18:41:40.744322Z
+22d536b6151d6cba305728001b96e82b
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+34325
+
+raphael.txt
+file
+
+
+
+
+2012-03-25T18:41:40.748322Z
+a4156780de6385427328cc9a7148abfb
+2010-09-21T12:43:38.181247Z
+1736
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1186
+
+symbol.json
+file
+
+
+
+
+2012-03-25T18:41:40.748322Z
+3d6f4033be5c7e2c01584770a430445b
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+39559
+
+dialog_balloon.json
+file
+
+
+
+
+2012-03-25T18:41:40.748322Z
+f42f1a9da4a6580cce5777a92d828fcc
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2814
+
+object.json
+file
+
+
+
+
+2012-03-25T18:41:40.748322Z
+79b64dfa23fd0da64bf6ce1d159fa2fc
+2010-07-09T19:09:37.433406Z
+1626
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+24513
+
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/animal.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/animal.json.svn-base
new file mode 100644
index 000000000..3cf1a3c6c
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/animal.json.svn-base
@@ -0,0 +1,21 @@
+{"data": {
+ "bat": "m143.40468,206.20782c-0.49527,-8.51843 -1.60919,-23.17813 -13.91826,-16.10698c-5.69614,2.11977 -22.79842,7.51244 -14.5293,-3.62979c-4.53243,-11.10219 -22.97476,5.42294 -24.24419,-2.29205c9.91943,-10.64906 -4.7813,-22.35199 -15.17139,-14.80321c-6.39341,1.76166 -19.4276,12.91188 -21.9789,9.37552c5.93793,-7.52516 19.31312,-22.93167 3.18112,-27.55084c-17.5302,-3.97589 -32.93319,8.09392 -48.1771,14.68205c-4.57452,3.57106 -10.39707,2.94862 -4.70683,-2.99597c19.7419,-30.64111 50.72646,-53.70857 85.10566,-65.43076c8.33369,-2.70812 21.16511,-8.70424 21.41656,4.97536c5.15313,12.59007 8.81947,28.33097 22.08977,34.80917c15.28362,8.49702 4.32793,-24.52711 20.16156,-12.05241c6.66379,4.32207 20.92268,-3.91697 22.87737,0.71265c-3.88257,5.55579 -5.70456,15.41883 4.55382,10.3489c17.81406,-7.0078 30.89859,-22.70471 39.67026,-39.22318c9.16278,-1.3768 18.27335,5.56162 26.62798,9.24753c27.74529,15.70954 44.86571,45.39448 52.13728,75.65768c-7.5513,-4.24557 -14.87186,-12.828 -24.02185,-16.20273c-9.75534,-4.87419 -20.75789,-5.73363 -31.48114,-5.39867c-5.02554,5.98985 -7.99353,13.42558 -3.62529,20.86708c3.80284,14.25407 -12.13176,-4.90576 -17.88498,-6.20744c-10.74191,-7.67955 -21.03323,3.92213 -18.67635,14.82222c-2.42909,2.10051 -9.92085,-3.5218 -14.32263,-2.86926c-9.05026,-2.72606 -15.42468,1.20085 -9.97261,10.61331c-7.98315,-0.97417 -19.64474,-13.28291 -26.70493,-1.69363c-3.0779,2.89514 -4.66377,8.66307 -8.40561,10.34547z",
+ "bull": "m247.95622,28.12305c-12.19972,2.23394 -21.61887,16.95667 -20.74588,29.01591c1.44209,13.7284 17.93463,5.12075 22.80087,1.23941c-2.90906,11.49207 -26.14024,13.85409 -24.83565,-0.12387c-17.69467,13.05878 -30.95056,33.52913 -52.86781,40.14553c-19.77757,4.59067 -40.50726,3.0742 -60.45068,0.39017c-12.12445,-1.13604 -23.69794,-7.26224 -35.91985,-5.97962c-13.09134,3.59118 -23.59412,13.16467 -36.65408,16.93906c-13.77014,6.03062 -8.51065,22.6805 -9.70401,34.47604c0.36829,17.55977 -2.85913,36.16287 -15.09811,49.55722c-7.11563,10.54993 -7.76443,24.43282 -13.48046,35.44298c18.99679,-0.19772 7.54522,-25.59486 17.99728,-35.91756c14.58305,-6.75189 14.16003,-25.2986 16.19452,-38.95529c1.4834,-5.51941 0.74519,-25.08188 6.61763,-22.44334c7.21924,16.22275 11.33028,34.35388 9.69645,52.12326c-9.5553,8.96404 -24.74576,15.34862 -22.54872,31.87126c0.72458,14.96526 -8.38036,25.74033 -15.4907,37.48604c4.56749,6.89259 1.00608,20.69472 14.11573,16.65324c8.77115,1.68887 13.10825,-2.37698 4.45589,-8.42346c-13.07829,-12.56499 5.13552,-29.16821 12.20585,-40.168c7.30689,-12.28131 22.16195,-12.86801 33.02653,-20.13979c15.00671,-8.95824 25.97935,-22.79263 35.92999,-36.78595c8.71432,9.26259 -13.75776,17.74474 -17.07076,27.20334c-7.22755,7.75058 -20.15694,21.85651 -2.99889,26.65347c13.26358,4.53796 25.75887,13.79143 25.35975,28.30255c0.22051,9.84615 24.38135,18.76527 19.43611,2.77341c-8.3609,-14.92882 -28.34064,-20.79163 -33.65835,-37.70844c-3.6715,-12.98383 11.61318,-19.27325 18.93525,-8.74269c12.96419,-1.41862 26.57983,-10.04028 40.80356,-11.3647c14.66299,-5.4577 18.06927,14.52957 29.8145,19.76668c9.79047,9.67969 18.77974,21.93582 17.54285,36.4783c1.1926,12.30893 9.52699,25.16873 23.92239,23.90201c16.80026,-2.80963 -5.10118,-20.70317 -12.79568,-24.81631c-11.14896,-13.29695 -9.30676,-32.20113 -16.24597,-47.51259c-5.00217,-4.52083 0.22685,-26.45532 0.40694,-10.76334c-0.90044,17.98242 24.73294,7.66248 22.97939,-6.09152c4.36166,-10.95654 -11.58513,-4.19417 -9.47617,-15.24252c-1.73091,-13.74937 -0.74355,-30.75096 -12.6731,-40.17292c-6.8737,-6.7591 -4.7831,-7.41829 2.70201,-2.07212c14.59439,7.55807 11.75914,24.79303 12.78276,38.37691c4.22589,17.80225 21.30753,-5.24332 20.80711,-14.89757c2.92691,-20.96336 12.92174,-42.46973 32.42046,-52.68139c-5.2402,-2.56694 -30.94765,6.73531 -28.79092,-4.9679c10.59921,9.00244 25.18661,-0.80075 37.71524,1.85265c16.62164,0.68233 20.74963,-22.79317 2.53195,-23.94116c-11.78333,-6.98062 -21.92947,-19.31897 -37.15829,-18.35906c-22.07759,7.39931 -8.43927,-13.11165 -2.53694,-22.37832zm21.60802,9.50184c-1.66193,5.79599 -12.61478,17.62506 0.56973,12.83867c1.89221,-3.91013 1.1131,-8.97168 -0.56973,-12.83867zm-3.4996,26.34877c5.90985,9.81916 -11.80539,1.02993 0,0zm24.39551,10.15293c-2.05029,4.18517 5.51468,4.9676 -0.32553,4.96455c-3.08926,4.10121 -4.4324,-5.29953 0.32553,-4.96455z",
+ "camel": "m105.23692,274.01276c10.42601,-6.85904 -13.23158,-12.66162 -16.74452,-19.13904c-10.34003,-12.71768 -13.56136,-29.62202 -16.44211,-45.3219c4.95107,-8.43617 2.94567,-17.1517 4.73958,-25.91959c8.77055,-13.01825 13.62244,-28.29056 22.43666,-41.26205c9.81532,2.07159 20.42883,10.03517 30.26162,13.06094c8.8764,15.9576 -7.35719,29.2457 -5.44854,44.69498c3.72314,14.40366 -6.25101,26.40735 -8.25558,39.83173c0.06986,12.69931 11.61848,25.55493 24.23922,16.82416c-0.64038,-9.26088 -18.64324,-12.13185 -10.58395,-25.1562c2.65187,-13.46596 11.34413,-24.24693 17.91676,-35.55937c-3.71349,-13.26427 1.2287,-30.0778 9.59569,-40.02118c8.49532,8.2068 14.36288,22.63718 15.66277,34.12883c0.16464,13.17332 17.70532,21.98904 17.37173,37.50392c1.31061,13.71669 7.73416,26.77841 16.64259,34.21387c4.65822,9.68192 33.56361,4.63116 18.16859,-6.87111c-12.71291,-11.47281 -27.33986,-23.63953 -29.27029,-41.92267c-5.27388,-10.85303 6.84843,-26.2316 -8.03899,-30.76501c0.92262,-14.70679 -2.97293,-31.40077 5.40811,-44.51862c12.07202,-10.31686 29.7518,-11.08165 41.29709,-22.49498c14.0099,-9.28757 21.96306,-24.50421 26.44456,-40.2729c6.78918,-7.60537 17.33322,-24.04447 29.06323,-15.49826c11.50851,7.1165 3.01477,-10.78561 9.62354,-14.73589c-5.45358,-19.67866 -27.58679,-10.231 -41.40082,-15.14074c-12.54193,-8.39989 -25.52765,-3.55679 -34.67496,6.0378c-6.85069,3.08698 -3.14447,11.16754 3.57637,8.12783c-4.82072,16.0155 -11.46542,33.6401 -26.07742,43.1243c-16.7653,7.33572 -26.11705,-14.39821 -36.07204,-23.83146c-10.86565,-10.63506 -17.60231,-26.15123 -31.2878,-33.45204c-19.0355,-4.82 -33.49794,11.89507 -47.87449,21.30644c-14.26775,7.14342 -31.39994,10.67369 -41.13367,24.60683c-16.15372,19.41527 -5.91326,48.70807 -22.89915,67.80049c-6.99636,10.58755 -22.39972,18.21231 -20.28306,32.7636c7.50211,15.58318 0.92728,34.18239 5.02367,50.94881c3.02735,12.11708 7.50982,27.68176 22.18437,29.48123c11.54434,7.31882 17.83198,-8.01192 5.60827,-12.45197c-14.75563,-6.55614 -16.77197,-25.01053 -17.95741,-39.18628c-3.25454,-14.0275 7.86033,-23.30806 12.45064,-34.31837c-3.87635,-10.75487 9.79252,-25.37375 18.46243,-23.19664c-6.47958,9.9541 -15.94005,22.87103 -0.60315,31.06966c-0.20134,0.50305 2.25023,-9.18846 6.19941,-12.10042c-0.58951,-7.59273 -8.29086,-14.05685 -0.12206,-21.73929c14.33151,-9.55606 11.17263,18.16365 8.19696,26.02383c-0.15744,12.07039 -16.33567,21.65707 -8.0749,33.75336c9.04985,14.91904 13.29631,32.04613 16.76897,48.94904c4.98299,14.02148 17.57185,24.27618 33.31381,20.65268l2.58825,-0.02829z",
+ "cat": "m111.55353,268.57376c-12.38409,-9.66019 -26.54234,-3.66064 -40.17431,-4.38614c-11.9392,-10.23105 -26.45395,2.16507 -37.70551,-7.68756c-14.55057,-12.97847 10.67308,-21.10451 5.29292,-36.51207c-0.60409,-22.18257 -10.10326,-42.27484 -20.08909,-60.91698c-7.07184,-14.82233 -4.56518,-31.85568 -6.84103,-47.71686c-8.17014,-11.38815 -16.33076,-25.48726 -6.60928,-39.55753c10.981,-11.86565 5.81937,-27.47561 1.50418,-41.19728c11.10318,3.26597 23.84772,18.14071 38.4552,15.16287c9.93419,-6.39761 15.9648,-0.073 17.62218,11.6365c5.20781,15.03792 8.24681,35.60265 24.68163,40.4529c17.26196,4.92876 36.58965,6.02341 50.24171,20.484c24.96439,23.38795 36.53986,60.25828 35.56061,95.79604c2.26117,16.61917 23.11539,7.79897 33.43477,10.24997c17.3054,-0.76804 33.91818,4.66769 50.66774,8.39909c14.94962,3.97684 27.61282,-8.59756 41.65988,-10.10515c2.37341,14.53128 -16.06888,20.58582 -26.14133,25.0639c-11.95706,5.08662 -24.89989,5.20694 -37.1826,1.47655c-26.55344,-6.62021 -54.69701,-4.88251 -79.92953,6.75992c-13.61838,5.01505 -26.84254,14.51093 -41.6569,13.32327l-2.79124,-0.72549l0,0.00003z",
+ "chick": "m76.6114,300.49948c-0.94218,-11.68399 1.80264,-23.81186 -2.78349,-35.22473c-7.45612,-25.10127 -23.93798,-47.16536 -31.36633,-72.21014c-3.21228,-16.80365 -8.65163,-34.79272 -2.2363,-51.43718c9.2771,-20.44891 24.58445,-39.1077 45.00853,-51.46853c11.45798,-6.87112 33.39433,1.8131 33.44485,-16.51133c3.62297,-20.89642 15.43811,-40.3082 30.48538,-56.28489c17.86485,-17.49571 47.98021,-20.77926 71.28149,-10.72216c13.19823,4.36545 26.92773,11.92505 29.85556,25.342c-2.0408,13.23198 13.36339,22.40786 12.41484,34.53756c-13.98409,-0.03379 -27.4267,2.25514 -39.10866,9.99602c-8.20006,3.8867 -26.4511,6.08187 -12.88864,15.86904c12.71146,21.22634 12.39029,48.02362 0.02443,69.35255c-8.24092,16.61523 -18.78058,33.14909 -36.37866,43.00504c-13.36313,9.14961 -27.77914,16.93257 -42.68192,23.79149c-11.62872,11.1774 5.32764,27.26614 9.71201,38.8335c3.36447,3.54044 4.524,10.84882 11.15869,9.08932c15.28535,0.25418 32.76015,-1.9313 44.98404,7.81229c-8.94319,8.25949 -25.89421,-1.41025 -38.02573,4.80051c-8.78024,5.75812 -19.06332,7.43823 -31.36371,7.58014c-13.23612,4.30203 -27.23189,-3.61423 -39.08569,1.66962c-4.11388,0.41238 -8.38321,3.40195 -12.45068,2.1799zm58.28394,-16.2124c-4.84233,-9.87674 -20.53861,1.56897 -6.10292,2.32874c2.30783,-0.47092 12.8125,3.03821 6.10292,-2.32874zm-17.85122,-4.32443c14.82944,-9.3367 7.74453,-25.48042 -1.79045,-35.63309c-3.24258,-2.97528 -4.73457,-8.94336 -9.13439,-9.94019c-6.73362,0 -13.46722,0 -20.20084,0c-4.65086,8.49229 -2.48404,17.86589 0.89217,26.43201c3.51066,10.88467 6.16319,28.60654 23.56189,23.00385c2.6806,-0.4599 4.89924,-2.07458 6.67162,-3.86258z",
+ "cormorant": "m143.5415,0.99936c-4.24326,11.41716 -19.29625,4.15632 -24.74561,12.50427c0.52748,6.07653 -8.29025,7.80436 -13.00653,8.43892c-8.50133,3.84879 -22.80692,-4.79845 -26.45377,4.01417c10.96676,1.70561 23.50823,0.97173 33.37776,7.63992c6.81084,8.30698 18.80501,9.32233 23.86815,19.00227c5.01492,11.90637 0.21405,24.79235 -6.1066,35.16777c-5.40714,11.63457 -14.24293,22.0266 -17.15868,34.6068c0.20795,13.02319 4.72718,25.69211 3.20084,38.80902c0.9605,10.14279 6.64024,19.14648 10.04536,28.64983c5.00912,10.57565 9.93535,21.70013 17.62276,30.53665c7.02892,8.87558 29.89705,11.67009 23.64502,24.91443c-4.01926,11.10844 -7.40147,24.48637 -19.39478,29.5565c-9.50977,5.9848 -21.3932,8.93677 -29.06369,17.37073c3.84956,0.36453 28.16327,-14.36331 23.8996,1.69739c-9.52658,11.2518 16.95053,-0.69223 23.42963,-2.18207c4.74442,-0.99915 4.29691,14.62488 8.52766,3.80228c5.95903,-10.08762 6.23502,-21.34366 11.26126,-30.51312c2.4781,-10.25645 3.82962,7.94009 9.64467,10.12222c7.07556,9.50238 7.79694,-14.07236 11.23129,-19.70615c2.62747,-8.54028 4.63826,-23.31885 8.02322,-27.91885c0.19868,-2.83281 6.58795,3.93147 5.0274,-3.78851c0.90347,-23.48584 -1.83659,-48.86755 -15.67365,-68.59196c-9.60602,-8.62669 -13.22336,-21.57266 -21.36568,-31.47811c-10.01912,-4.8186 -8.05391,-19.66993 -20.19205,-21.12443c-2.75856,-10.2361 2.62035,-22.86311 4.63016,-33.73514c2.78795,-10.12834 8.4742,-20.66132 3.52232,-31.15684c-3.76698,-10.86702 -11.83783,-21.03737 -23.57631,-23.51091c-5.21049,-2.63619 -9.89668,-4.17218 -2.89241,-7.84742c4.71588,-7.73713 -7.28709,7.39913 -1.58588,-2.982l0.25854,-2.29765l-0.00003,0zm-57.08003,24.11987c12.78673,0.33177 -8.83535,0.35227 0,0zm92.46721,218.72338c11.05893,4.6954 0.80228,21.55537 -5.46918,26.98338c-13.1071,-3.20859 2.39713,-19.21964 5.46918,-26.98338l0,0zm-10.64413,31.82323c-5.88483,2.41168 -15.44353,4.13849 -3.83093,0.46683l1.97208,-0.34274l1.85886,-0.12408z",
+ "cow": "m28.0749,243.56958c-11.25466,-1.13762 -0.26117,-18.72878 -4.5063,-26.87576c-0.04291,-11.99254 -4.49496,-23.80263 -3.04635,-35.73141c8.85702,-21.03091 1.47632,-43.99974 -0.46577,-65.6628c-0.878,-4.78294 -0.85219,-17.06834 -3.03475,-6.14601c-6.04425,18.41563 -0.13999,41.17824 -5.30961,59.82921c-8.64015,10.38419 -15.16653,-6.09071 -6.91858,-12.40807c9.63606,-15.16887 7.3071,-35.6004 7.63113,-54.51396c-0.41477,-11.95865 4.38277,-26.97649 18.58104,-27.31744c12.14677,-0.91866 23.64877,4.86966 35.90276,4.15359c35.73927,0.55689 71.83095,0.86755 107.11801,-5.64501c17.61354,-4.0591 35.14902,3.10693 52.79015,0.20057c9.91351,1.07068 15.15811,-3.56471 10.78886,-12.26689c7.38425,-5.09429 13.06598,9.66071 16.34573,-3.48148c11.89191,-8.19559 13.54935,15.99933 26.71921,9.16614c15.88589,2.05862 -6.90274,16.26875 6.39813,23.38159c8.04169,6.20473 20.35629,21.57409 4.35831,26.00379c-13.75446,-0.96602 -27.54028,-0.06377 -41.30312,0.60226c-6.36993,10.6367 -19.62016,18.61491 -18.16837,32.55296c-1.1003,16.62756 -12.74783,33.02081 -28.69196,38.18489c-6.81386,-1.34894 -9.78644,0.85432 -8.9351,7.83342c-3.52046,9.11967 -4.14098,18.73875 -3.72333,28.43974c-1.04204,5.34808 1.17265,9.50755 4.32187,13.62691c-3.70361,6.41692 -24.92326,2.61598 -16.88379,-9.5238c2.05592,-15.92261 -0.36317,-31.91132 -2.16568,-47.74242c-8.4565,-6.01532 -18.70856,-3.81294 -27.26753,1.0208c-18.88187,6.9252 -40.73763,13.48228 -60.10471,4.59438c-10.79734,-3.01547 -27.0833,-5.25847 -35.10848,3.84904c-3.611,13.73518 -2.64567,28.48619 -5.7238,42.42607c-0.05178,7.28806 6.88112,13.54532 -4.86428,11.51134c-4.90851,0.11278 -9.83028,0.26732 -14.73372,-0.06165zm10.02217,-15.5108c1.93175,-6.52728 -2.78621,-23.11049 -3.1906,-7.64299c-1.60691,4.90746 0.4367,28.47777 2.83738,12.83046c0.15187,-1.72662 0.25968,-3.45683 0.35322,-5.18747z",
+ "crow_2": "m299.86716,62.24508c-8.36279,-13.35279 -25.79254,-10.94299 -38.7652,-13.97612c-10.77151,-4.46517 -27.26852,-8.74568 -34.93257,4.02601c-10.22766,11.92024 -19.30536,24.77381 -27.38379,38.20519c-16.9417,18.56395 -37.51366,33.44937 -58.19264,47.49408c-17.41919,8.55826 -36.48907,15.23247 -50.59015,29.17691c-26.77713,17.17799 -59.39612,20.30975 -89.00278,30.37996c5.24787,1.82477 28.48156,-4.80739 12.86404,2.45506c-11.61908,3.82678 4.57293,7.38318 9.74338,4.83008c-4.08242,4.36552 -5.2054,4.72249 -0.18473,4.65681c-9.12115,5.09712 20.25491,-1.58305 4.07883,5.5506c-7.04263,2.05971 -24.35976,21.06046 -8.48079,12.5005c14.76321,-6.14401 30.50038,-9.23448 45.85791,-13.45705c-11.48634,11.80891 -27.85513,19.19374 -35.74965,34.16698c0.17943,3.86479 12.21982,-7.85281 17.31087,-9.77229c28.95095,-17.49719 59.28473,-33.71347 91.89844,-43.16046c4.45381,1.07288 5.32478,12.99994 14.00563,6.90237c0.76199,7.59987 19.82927,-11.92125 14.84979,3.30377c8.25793,-13.03635 -0.01482,14.1528 7.62892,18.26904c3.90089,5.15268 19.92041,12.26512 6.86195,14.03082c-5.77165,8.63597 8.09146,-3.46425 11.11865,4.62627c11.3129,4.10901 3.07231,8.32173 -5.11652,5.83363c-6.27592,-0.83809 -7.57079,7.40965 -1.22719,2.29182c7.57507,5.19347 19.60568,3.32813 29.26515,5.56088c9.65308,0.80066 21.35422,-9.88435 25.01279,-7.29437c-8.89755,-6.38512 -21.77765,1.41119 -31.54323,-3.51736c-2.05963,-6.62599 22.89082,2.37143 22.94131,-8.82851c11.68727,-1.08766 -9.82895,-2.59717 -14.00406,0.04509c-14.38026,0.76889 -21.75813,-12.59969 -31.88164,-20.19017c0.30659,-15.75429 11.86186,-29.28856 23.95569,-38.18524c15.77855,-9.50124 31.96706,-21.73888 36.43575,-40.70174c4.63271,-16.88809 7.21239,-34.29048 9.31848,-51.60873c2.84918,-11.17406 11.03882,-21.49306 23.60089,-20.65947c6.77469,-0.94415 13.57404,-1.72816 20.30646,-2.95438z",
+ "crow": "m65.63132,15.69366c7.23991,-11.19251 23.71874,-13.17996 36.20271,-14.69413c13.92134,1.25098 24.65079,12.10254 32.81262,22.59631c9.49452,8.5772 21.08662,15.85565 25.83853,28.41352c12.01437,5.95259 26.19815,9.13653 33.55229,21.87244c11.11548,14.36729 17.52112,31.75739 23.31628,48.60368c0.92021,12.5585 6.47,24.01521 8.36046,36.46043c3.24197,12.33818 5.82637,24.53572 9.31963,36.76498c3.88237,12.71416 9.39792,24.81319 13.2628,37.54517c7.05891,11.17328 13.48564,22.96204 17.86821,35.4054c-10.48648,-0.88873 0.96857,15.8573 2.93524,22.45895c2.86746,13.58783 -12.84537,5.80856 -15.59308,-0.46634c-9.70456,9.1796 -29.57259,11.24072 -38.3669,-0.80743c-9.26392,-12.20752 -14.38051,-27.69696 -27.16855,-36.53391c-5.02811,-4.18506 -9.90665,-22.45958 -11.7061,-6.32031c6.38489,16.05743 -18.74254,6.90547 -27.66772,9.78912c-15.99664,-3.21661 6.07263,-12.35889 12.86923,-11.27576c6.38602,-6.35408 17.01372,-16.99594 1.7589,-20.33147c-10.44731,-4.15326 -23.84068,-14.68553 -29.71439,0.99188c-7.37552,3.90117 -20.59412,22.40862 -5.95329,23.77255c5.91614,12.10878 -17.0737,3.35048 -23.49316,6.21452c-6.05255,1.90814 -21.13758,-1.4375 -7.08788,-4.49867c12.08796,-1.9845 17.85132,-16.8317 25.44044,-25.82515c-0.25166,-11.53856 -9.48829,-20.69617 -16.41167,-29.40816c-7.36517,-12.27962 -17.64172,-22.79747 -22.75925,-36.23717c-3.35689,-13.95544 -9.74807,-26.85826 -12.98938,-40.84583c-3.65936,-14.01762 -7.85575,-29.82359 0.01893,-43.25633c3.58914,-11.78534 5.08364,-22.78083 -2.44828,-32.4814c-10.40722,-8.4583 -25.19866,-5.06594 -37.19873,-10.67507c-1.4463,-9.05923 17.76661,-12.5158 26.11695,-14.53937c3.17027,-0.11009 5.59681,-2.76167 8.88516,-2.69248z",
+ "dog": "m100.16203,296.98279c-8.8212,-9.63385 1.38332,-24.43997 -0.42293,-36.27057c0.75693,-11.26283 0.70357,-22.55605 0.97627,-33.83612c-5.62751,-3.03004 -11.14646,-9.8163 -17.39571,-9.15442c-9.39647,12.28885 -8.36188,28.63301 -15.80033,41.86707c-4.14935,12.68604 -14.20047,25.1369 -28.95629,23.20023c-15.78228,0.24448 -5.31179,-12.67972 3.94138,-14.51392c15.5036,-7.47278 14.489,-27.14363 17.24157,-41.59114c1.02824,-10.18478 3.24236,-20.5625 3.54647,-30.63432c-6.4542,-14.31418 -15.78849,-28.37114 -13.67442,-44.85196c-0.91037,-17.78856 4.2768,-37.23788 -5.08019,-53.53189c-5.56927,-15.61405 3.8713,-31.59072 2.9399,-47.52759c0.9721,-14.78285 -5.20505,-30.54867 1.20562,-44.61136c13.7762,-15.53139 12.97964,13.29988 18.95111,20.54415c5.64886,15.40877 24.7487,10.76537 35.50636,4.24826c7.2022,-4.10769 16.87807,-28.32801 24.44378,-14.32351c3.37997,14.22579 -6.14093,25.38077 -12.22646,36.88495c-6.86581,22.01683 5.86861,44.08519 20.93388,59.44197c24.83763,26.97977 44.07555,59.68134 54.0882,95.03609c1.31316,14.68071 3.98535,28.23558 12.82726,40.18617c10.20438,10.1714 26.16472,9.68739 39.32852,13.25957c9.22101,2.52521 30.75206,5.14639 26.47435,17.3808c-14.74448,2.4689 -30.09541,0.23105 -44.90068,-1.32291c-17.28331,-2.73001 -35.00906,-7.2897 -49.09666,-18.1597c-14.62904,-9.61427 -18.7715,20.00995 -34.01671,10.65375c-2.19362,-7.70334 10.66454,-19.74266 -6.53938,-19.26297c-6.33104,0.30879 -15.00338,1.82024 -19.76239,4.89166c1.07452,12.16098 2.04812,24.36316 4.2893,36.36713c-1.78267,6.00809 -14.15643,12.93057 -18.82182,5.63058z",
+ "duck": "m185.95239,299.43112c-13.71118,-7.29123 11.45862,-7.3541 17.23322,-7.85522c14.99724,-0.2811 17.02971,-18.28448 15.48773,-29.74414c-2.1938,-4.69699 -0.04752,-14.89349 -7.7746,-13.37029c-15.43901,-0.71622 -30.7112,-4.55923 -44.14467,-12.22302c-0.82443,12.88171 -7.29927,24.66777 -11.6053,36.85115c-5.66316,6.16721 14.39644,28.18469 0.43378,18.34869c-9.04433,-8.40845 0.06526,8.74658 -11.16418,3.91656c-15.23827,-0.31436 -31.02578,2.40784 -45.91216,-1.24551c-5.00268,-2.09833 -20.66561,0.51883 -9.25531,-6.49301c6.4804,-1.18185 12.15667,4.48007 17.05421,-2.03778c11.5948,4.79346 30.04866,4.82639 34.25867,-10.28015c7.00595,-11.43338 11.29851,-24.25136 11.56012,-37.68254c-8.2043,-6.31854 -14.70296,-14.48831 -18.43434,-24.21049c-8.62861,-14.22275 -24.3753,-22.02206 -37.28508,-31.87471c-17.12926,-11.15475 -36.8522,-23.99915 -40.20823,-46.00098c-4.08031,-16.32172 0.02216,-34.19492 11.59384,-46.57394c7.80417,-11.16946 22.31328,-21.55052 18.99293,-36.88489c-8.43674,-15.00933 -26.68094,1.9423 -34.96601,9.23433c-9.98,7.06196 -20.71845,24.17017 -34.34288,16.49594c-1.7172,-11.61691 13.7034,-18.90693 17.498,-29.74388c7.8585,-12.19844 12.51045,-26.37627 18.95516,-38.92993c11.65712,-10.85135 30.93148,-10.91782 42.45155,0.28526c14.7008,11.44654 23.86826,29.5425 22.42876,48.35335c1.4173,12.98959 -4.14301,29.91504 8.25453,38.93287c17.92052,9.9613 39.04935,12.35098 57.26444,21.89838c22.77972,10.51788 39.86913,29.49796 59.04057,45.11781c11.7964,10.71736 23.92368,21.11819 35.13879,32.44618c-7.49713,-2.24278 -14.43054,-6.05879 -21.60767,-9.15805c9.28815,12.08043 13.46152,26.94177 15.66077,41.78857c3.61584,15.73579 13.73315,31.11919 8.65729,47.77711c-4.42633,13.85214 -18.52838,-8.55096 -25.42393,-12.47198c-7.88147,-7.42908 -15.67812,-16.62666 -27.10399,-17.90884c-2.06194,13.35767 -4.18094,27.25305 -1.83514,40.63339c1.37479,11.84998 25.0215,4.73886 21.59566,13.51175c-19.80942,-2.16162 -39.69846,-0.3399 -59.55595,-0.59872l-2.94055,-0.30328l0,0z",
+ "eagle": "m42.43982,248.02586c11.79883,-9.19574 37.51548,5.68584 36.59332,-18.29665c11.6873,-8.23552 20.68873,-26.28419 1.79099,-32.32607c-10.7688,-5.1657 -15.8233,11.42451 -19.57125,12.4706c-7.77777,-10.83765 -3.38924,-28.5033 -0.32791,-39.95343c9.78217,-6.08578 25.82187,-13.03094 14.50231,-26.59097c-2.34529,-14.80103 -3.78094,-32.06657 -17.7612,-41.01302c-10.43393,-6.26692 -25.16679,-12.24148 -20.04643,-26.95332c-6.73619,-10.16047 -14.53631,-24.05076 -10.06464,-36.59579c10.19879,-1.80737 9.00111,23.96806 10.94535,18.5213c-3.83083,-8.28799 9.1568,-27.37077 8.41371,-9.7762c-0.78397,6.31187 -0.27625,19.10084 3.19139,6.43372c9.40052,-13.9652 0.18064,24.20846 9.40782,9.05938c6.50935,-2.10711 4.52592,9.32912 10.80828,3.67456c6.87772,5.25431 11.91442,6.4291 11.89108,15.161c9.16496,3.3132 16.00232,8.79374 14.18665,17.50479c17.88632,-4.31568 2.59483,17.992 15.32488,24.21275c6.86198,10.87837 9.94656,21.77702 9.45206,34.69591c14.12406,-3.90332 23.43909,-19.96727 38.02612,-24.96548c16.37712,-7.58971 22.24484,-26.45808 25.80173,-42.75597c1.58806,-7.86366 11.55658,-7.47865 8.4944,1.35465c11.47125,-12.36288 6.68346,-30.36211 9.92291,-45.39627c1.03862,-8.40902 -2.33224,-26.94658 4.74805,-28.67765c10.56419,9.48252 -2.34641,30.44621 7.95137,36.7387c7.25935,-13.5451 4.68625,-29.74639 5.07938,-44.52987c-0.17744,-8.53332 8.28981,-14.18234 7.88048,-2.00179c3.55096,10.5139 -0.40492,32.21981 1.64958,36.04613c8.07187,-12.48013 6.34647,-29.28694 14.90497,-41.01045c11.77513,4.41697 -3.33727,24.23894 -2.9549,34.73938c1.57841,8.06398 13.11919,-23.61583 13.7003,-6.1498c-5.31714,4.6162 -4.42737,17.32646 1.51364,7.08835c2.29477,-8.40776 17.99155,-5.58858 7.86148,2.08536c-7.52231,6.5335 13.19769,6.07413 4.12683,13.25697c6.05191,9.99521 -10.41388,15.90605 -0.99213,23.11055c-0.5419,2.90166 7.51996,8.55031 3.95645,15.5176c3.55255,6.41606 -12.64786,10.58171 -2.07687,14.97137c0.61145,14.96265 -18.29834,25.28072 -14.15472,39.25008c-1.22144,16.83496 -13.92377,30.96262 -27.51764,39.86047c-12.55846,2.38141 -22.29991,7.42523 -33.09448,14.38452c-7.10794,0.12218 -9.63133,0.08891 -13.34837,5.21904c-5.85042,-4.53848 -15.49744,-11.39697 -13.84404,2.34781c2.50378,17.06932 24.15945,18.76619 35.67772,27.84688c12.28496,4.33621 28.35258,18.74889 15.04837,30.03174c-1.28722,16.03848 -22.62962,6.43207 -28.17253,11.98065c-7.95277,1.1889 -7.12421,6.80249 -14.18958,0.10867c-6.88124,9.22229 -22.27397,-0.76007 -29.61287,-4.75983c-11.90405,5.67993 -17.34648,-22.86903 -19.53539,-2.88507c-4.83576,13.58316 -24.476,-1.01483 -24.37943,16.35269c-8.98567,-1.84631 -9.40855,12.19781 -19.04626,10.78702c6.06173,-2.81454 10.18479,-18.90897 -0.69688,-11.14999c-8.89938,-6.76031 -3.76038,16.63571 -11.0985,4.45398c-1.61417,-15.81525 16.34735,-16.12735 26.46889,-18.96848c3.63502,-9.19174 8.23714,-21.27525 7.27283,-30.1396c-9.56728,3.84567 -17.9573,12.08994 -29.11918,12.79019c0.69484,8.35417 -5.77779,21.85307 -15.72966,14.08031c14.30752,5.57813 7.98567,-25.05467 -0.66062,-9.91721c-3.38933,9.9873 -2.96938,-14.429 -12.7722,-7.32185c-5.13792,3.73692 -1.64958,12.39018 -6.75386,2.35237c-0.99273,-2.02373 -1.14814,-4.89752 0.9282,-6.35475z",
+ "elk": "m55.44169,70.04322c-9.46609,7.85901 -22.89024,10.68682 -35.01687,12.13352c-10.34381,-1.03976 -26.56821,7.31529 -15.97385,18.70621c7.56154,15.8879 23.87035,2.81345 34.83344,1.97973c6.74288,1.81747 9.04052,25.43575 14.68986,9.83006c3.84105,-12.93275 21.02425,-8.87709 30.14005,-4.40716c14.1686,4.39434 8.46609,22.12076 16.61138,31.95892c12.24081,12.85411 -1.67636,29.24428 -12.4499,37.76401c-12.75361,7.58044 -18.55984,19.76834 -16.78767,34.30325c0.04941,14.73842 -3.99104,30.75432 3.85034,44.19391c11.85099,1.57538 1.64103,-19.88701 4.92331,-27.40918c1.21214,-13.46214 -1.9274,-30.30058 10.90484,-39.28947c11.4828,-10.01157 23.57063,-19.55112 36.47411,-27.62581c12.21095,-0.62399 10.39299,17.77295 13.97888,26.40175c2.87054,13.20355 4.12752,27.58423 3.69688,40.50841c3.125,10.64038 5.51489,24.0757 -1.41217,31.57294c12.91045,1.34732 24.73607,-12.8914 14.16034,-24.30435c-4.26125,-15.94153 -5.71083,-32.54619 -8.8824,-48.75049c-1.29825,-11.53598 -3.35872,-25.34232 4.83759,-34.86038c12.05826,-0.41389 24.32834,12.14566 37.60088,4.59509c11.65439,-7.49344 33.21696,-6.53802 31.62036,11.82347c-3.2142,14.87534 1.55244,29.61519 2.2346,43.81203c-3.42354,18.43187 -22.15714,27.36267 -29.50255,43.57849c6.98146,9.64319 17.6196,-4.17101 24.65466,-8.5957c-1.74142,-12.99426 11.64835,-19.92599 15.71536,-30.922c6.9856,-14.97188 -3.20459,-32.25409 -2.75711,-46.36688c-5.96602,-12.06912 6.08081,-14.98056 11.07512,-3.9678c8.02901,10.14059 21.03195,16.80963 23.7973,30.43394c7.39731,10.39175 10.8736,22.49284 15.64307,34.03711c4.08353,6.21262 10.6907,18.02594 12.81412,3.55118c3.85464,-8.67506 1.42859,-14.46745 -6.31488,-15.1647c-13.17899,-14.6283 -10.83514,-37.51031 -25.72766,-51.16437c-10.90161,-6.89407 -22.06673,-14.37312 -25.85289,-27.85638c-6.71298,-10.98305 -8.98033,-24.34339 -5.63237,-36.85001c4.36508,-2.10748 7.17406,6.33847 3.86676,-3.07584c-7.08252,-11.81364 -21.74017,-16.42101 -34.30881,-20.12214c-13.86351,-4.31435 -28.287,-5.60372 -42.65346,-3.49644c-12.2518,3.14196 -25.56529,6.21495 -37.68355,0.56779c-10.80199,-6.45414 -23.34553,-5.2407 -34.37726,-0.35921c-8.31817,4.58586 -24.95089,-0.17232 -13.39404,-9.69791c-4.65558,-4.05794 -21.26908,7.53993 -8.94252,-2.36752c5.90361,-6.02524 8.73024,-18.58166 6.56192,-25.10496c-2.33636,8.03588 -5.7029,7.70039 -5.40219,-0.79288c-2.03959,15.14413 -12.13537,5.38195 -10.55587,1.00194c0.66773,6.1233 -2.56635,12.84344 -5.72467,3.23117c-0.3636,6.21597 2.87773,15.15818 -3.77972,17.71219c10.15314,9.32419 -13.24982,2.42432 -13.20099,-4.96754c-6.18471,-9.39983 -7.12771,-4.31873 -4.60736,3.21883c-4.59348,-3.34352 -10.47613,-9.66862 -5.36225,0.14767c5.84781,13.3303 21.7189,7.94385 31.61781,10.45553z",
+ "fish": "m127.20683,242.3436c1.50244,-15.94504 5.02446,-32.41927 12.88557,-46.10178c7.51215,-8.98547 19.63693,-8.71681 29.76314,-11.79086c-14.18819,-3.80443 -27.43222,-10.54059 -40.42705,-17.66788c-21.27006,-9.23157 -42.92073,4.06975 -62.09324,13.40138c-14.23518,6.80144 -28.31641,14.82532 -43.64474,18.1933c-10.05519,-6.98578 -1.65744,-26.80461 5.41335,-35.17271c8.9525,-11.55655 22.2043,-17.52696 31.90982,-28.07993c4.26963,-14.90575 -15.40321,-18.57297 -24.24153,-24.42971c-13.70577,-6.20512 -25.35116,-16.36843 -35.77064,-27.71589c24.19748,-1.40994 45.60231,13.61476 67.43612,22.73716c11.80957,4.27464 22.94788,10.28683 33.98999,16.23396c5.06265,-0.02556 22.24189,3.73252 20.52978,-2.03984c-12.8773,-0.57095 -11.58655,-17.22836 -2.92075,-23.83247c12.73701,-10.02242 28.26479,-15.93932 38.86842,-29.21478c4.65193,-3.7341 7.09996,-12.86792 11.03157,-15.74994c16.95282,13.24852 26.87143,34.14735 36.22475,53.96581c15.23062,3.44089 30.61246,6.23184 46.13637,7.07419c15.15991,6.93107 28.10406,19.01068 39.97369,31.27808c8.99451,6.78525 11.39157,25.24843 -0.83481,28.95241c-30.16479,16.24658 -63.84666,21.21309 -97.06413,22.77441c-4.67992,-0.32996 -8.75485,0.18372 -8.78621,6.33609c-2.92581,8.76227 -4.12184,18.94467 -9.62984,26.07907c-6.07878,-1.55455 -0.31998,-19.45975 -6.56294,-10.95245c-12.27982,13.32922 -27.04962,23.32567 -42.18671,32.26515c0,-2.18091 -0.00002,-4.36198 0.00002,-6.54276z",
+ "hare": "m95.22337,299.53546c-10.68459,-4.81824 3.25798,-14.45154 8.53654,-18.71286c3.55556,-3.28177 -20.37717,0.46036 -10.27298,-10.93198c11.08577,-9.30692 6.89815,-25.05217 -4.18282,-32.37115c-15.24973,-10.2968 -34.81611,-19.10942 -40.44992,-38.33635c-5.69662,-11.9756 7.81301,-24.58835 -0.87631,-35.40263c-6.99412,-14.0412 1.177,-28.68323 6.25594,-41.69022c2.33568,-17.99253 -11.97227,-32.2212 -19.84076,-47.00306c-9.74298,-14.12588 -15.35928,-30.58578 -16.16633,-47.73895c-2.11884,-7.3217 0.22601,-18.6921 8.68694,-8.82097c17.71845,14.18765 37.17033,27.65002 49.57116,47.06949c2.34735,7.01447 11.74658,27.34441 12.27144,8.93449c0.24582,-25.30315 7.97399,-52.90002 27.77682,-69.85634c13.46954,-12.2734 20.73361,9.21683 21.36209,20.13735c3.50587,21.487 -2.30553,42.79486 -8.78146,63.09225c-2.37738,9.43285 -8.56868,35.2823 9.08899,25.75117c40.67693,-15.70451 89.96005,0.78945 116.45525,34.52606c12.17961,16.33485 17.5135,37.32133 17.39308,57.47189c-6.27155,11.83836 17.03061,-0.22177 8.58704,13.43613c-4.97064,15.1297 -19.01465,23.33925 -28.85207,34.75906c-10.01038,9.15085 -2.58298,28.71576 -19.13725,31.59863c-24.15469,7.44629 -49.5191,10.70804 -74.66498,12.6066c-14.07156,2.88287 -20.90056,-13.20758 -7.41347,-19.89679c6.46608,-9.96799 24.96535,-10.66653 30.46185,-12.24564c-13.13484,1.28516 -29.33337,-4.0759 -40.40141,4.05872c-6.70294,10.88138 -12.07141,25.20364 -26.12755,28.30951c-6.3168,1.75439 -12.8116,3.16129 -19.27982,1.25558z",
+ "he_hen": "m176.04681,296.29803c-8.82596,-3.77927 -18.43298,1.74493 -27.86224,-3.75964c7.62581,-0.4744 19.08463,-0.03574 17.06104,-11.34488c3.33665,-13.20654 -3.43475,-27.06163 2.20258,-38.55534c-8.82878,-8.42361 -18.09561,-18.39673 -22.80272,-30.16238c-0.9447,4.74663 -1.81537,8.52257 -3.158,0.33916c-0.76965,-4.00471 -0.30261,9.89931 -3.24527,0.14346c-3.10373,-8.67493 -11.4597,-31.29446 -14.05236,-10.31462c-1.0768,10.8262 -4.45592,3.14465 -6.0004,-3.72562c-1.56924,-13.22943 -7.23737,-25.48523 -8.72193,-38.68883c5.80227,-8.36407 -0.82715,-9.5029 -3.91098,-1.15848c-3.39584,13.23767 -6.30494,26.33923 -2.7624,39.9769c-4.70789,3.85124 -13.79493,-17.92216 -9.61541,-26.27414c3.62592,-9.45018 2.81974,-19.09607 3.42313,-25.48878c3.31529,-7.21146 -3.22571,-15.04807 0.25123,-22.73853c-8.88477,9.68631 -16.83011,16.38615 -14.33428,31.58234c-1.10283,3.79079 3.703,25.58844 0.64231,17.56184c-5.77861,-15.66916 -5.78305,-33.02271 -1.43442,-49.01125c0.00535,-12.20366 -9.89253,21.0744 -9.16187,4.76299c-0.93676,-12.30159 4.13303,-25.82869 8.93452,-35.55499c-5.46675,-6.50523 -23.17289,-1.89566 -14.79648,-15.70558c8.24343,-7.01884 7.35999,-16.67057 -3.85936,-8.18394c-17.3246,12.72424 -31.69814,29.07174 -47.58007,43.52234c15.25898,-19.61487 32.46107,-38.59572 53.7519,-51.75492c20.64337,-12.99951 50.5769,-14.34346 68.38963,4.28573c4.53072,7.97979 15.06177,13.26968 17.57275,20.45337c-1.84586,10.76744 5.10652,16.10654 5.85289,25.57021c4.38731,7.30244 -3.95828,20.43125 8.52597,16.64671c14.20137,-0.01996 33.63664,-3.16645 34.74754,-20.87874c5.66772,-25.50935 8.27689,-54.0092 26.4256,-74.31131c10.08655,-5.89642 3.82147,-4.32716 -3.54926,-5.29837c-6.51613,-7.58361 6.57724,-19.75743 13.02319,-21.14511c-1.112,-17.9227 10.53479,10.74471 13.86426,-2.41437c4.99586,0.09501 7.43144,12.08141 10.46855,2.29789c9.05719,7.66376 18.6297,19.25661 6.66562,29.92943c13.61102,6.52517 -13.86911,2.29947 -2.14532,12.29652c9.6759,9.35194 2.83621,26.62759 -5.10654,34.15639c-0.3085,5.66077 9.31277,13.88494 11.24728,20.75249c9.99454,19.34809 11.9986,42.36646 8.16797,63.56847c-5.39346,19.98318 -25.46588,28.67906 -39.65833,41.37386c-12.12337,9.93893 -7.85776,27.37115 -13.59781,40.42342c0.57072,7.5369 4.77751,16.1196 10.7547,20.66925c8.66214,4.84064 18.81006,7.96561 25.81393,15.05286c-6.39667,3.34055 -19.43893,-10.21753 -19.56508,0.39017c-9.50252,-12.34393 -23.7677,-4.06104 -34.21234,-13.55405c8.69193,1.65643 19.99033,0.8027 10.47188,-9.61145c-3.75841,-8.80696 -15.07852,-11.84618 -15.37883,-22.49022c-10.66643,6.69647 -17.92447,15.81358 -25.66988,24.90395c-12.85808,-0.80322 -13.41248,25.11618 0.47165,24.73163c5.7019,1.45825 27.10161,9.40335 10.25006,7.35107c-5.02289,-0.89746 -10.47203,-4.04099 -10.31842,1.85727c-2.30338,-0.41431 -4.35982,-1.56003 -6.48019,-2.47418z",
+ "hen": "m131.70792,299.20142c-2.65045,-8.04401 -50.59061,2.01245 -25.50379,-8.40613c9.71836,-2.24731 29.67359,0.57056 9.8335,-5.50568c22.5928,7.62228 32.60569,-19.08859 34.06422,-37.09636c-21.02885,-6.55212 -24.67069,-31.02429 -46.83106,-37.61485c-16.88445,-13.23645 -41.63732,-12.83168 -52.35418,-33.24014c-10.17476,-18.17259 -4.4284,-40.29292 -2.74405,-59.92338c4.00956,-20.72375 12.14967,-41.69897 10.53991,-62.75727c-16.41068,9.44812 -22.4106,-11.67328 -22.78485,-18.27062c-12.07958,3.08904 -19.7317,3.22594 -6.59584,-7.5194c5.87008,-8.14037 8.78346,-25.92081 18.16113,-23.25189c2.47408,-10.763 9.04029,4.89351 16.30021,-4.61621c4.44867,3.35889 13.85731,7.10325 3.42817,13.02555c18.83147,9.50194 34.07959,23.95835 41.92437,42.43233c7.86127,18.77559 23.52317,39.06593 48.8149,33.98585c22.90038,3.93186 49.73083,-9.80992 48.68822,-32.86776c0.44391,-16.33654 16.52325,-54.48924 38.19395,-35.09801c16.24046,6.22802 34.92778,21.65468 31.09642,39.16159c-2.21887,18.0508 -0.50452,36.25767 1.60162,54.45551c-13.60181,10.0825 -11.15982,27.59631 -20.65894,40.7838c7.8804,18.56862 0.29095,38.62871 -12.60841,53.70848c-12.90314,13.89935 -31.76248,26.24356 -52.66508,24.4381c-7.98578,13.29396 9.42929,24.99069 15.57339,25.73553c-16.01053,-5.1321 -13.75549,4.70874 -8.47672,15.2244c4.94576,19.6875 -10.58037,-17.53909 -20.60904,0.27255c-7.77597,7.68976 -38.86531,10.29276 -13.69539,1.07587c21.48048,-7.96875 -24.12099,-12.95142 -13.99879,5.00586c3.34996,7.49203 22.77361,10.79092 2.32814,7.93628c-9.02753,-4.74515 -13.85625,12.10397 -21.02202,8.92599zm43.09088,-34.62769c7.8596,-9.56569 10.12141,-37.24054 -6.87671,-17.06372c-13.43553,10.88889 -18.29311,29.6301 6.87671,17.06372z",
+ "mouse": "m0.99942,221.57315c18.97592,-5.2153 38.89368,-5.72223 58.37582,-7.77921c22.496,-2.19991 45.89505,-1.95135 67.14781,-10.93486c14.09158,-5.66957 18.06422,-22.34355 18.92189,-36.61246c3.853,-24.50212 17.5325,-49.94102 40.26784,-59.44455c8.81084,-4.72752 21.73279,1.24299 28.77051,-3.16475c-8.53821,-11.67851 9.86266,-25.18666 17.60304,-12.64201c9.90706,2.44754 20.13632,-4.12984 22.40773,-13.63184c8.92409,7.01573 17.55354,16.51189 28.21455,21.93088c10.14639,3.852 24.18005,17.58312 11.18048,27.34964c-8.74753,9.55273 -22.39651,8.48746 -31.55023,16.51577c-9.2032,7.60971 -8.39032,20.69223 -4.77994,31.13091c0.58701,11.39519 9.68161,13.02966 17.70996,16.03508c1.32019,7.11591 -9.48019,9.15216 -14.76065,10.85889c-11.37581,1.93378 -22.26419,-2.9012 -30.79645,-10.59497c-7.75803,-9.73157 -17.02081,0.98111 -14.42018,10.56955c-13.10742,11.20265 10.79541,5.32968 13.63931,12.79547c-11.33516,4.36475 -24.3324,2.06448 -36.29933,1.86723c-15.70055,0.23059 -28.91441,-10.20818 -44.0015,-12.87645c-9.31265,3.4888 -17.24791,11.49408 -27.66536,12.5939c-30.59707,5.30119 -61.77245,4.85931 -92.6703,6.59238c-8.95057,-0.1062 -18.97236,1.51553 -27.29502,-0.55859z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/arrow.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/arrow.json.svn-base
new file mode 100644
index 000000000..5f75f26a2
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/arrow.json.svn-base
@@ -0,0 +1,28 @@
+{"data": {
+ "10": "m0.99679,148.19614c0.277,-34.75176 -0.17724,-69.54997 2.27791,-104.24061c60.32762,11.41171 119.94372,30.08407 179.25477,46.87597c3.18407,-17.04019 1.68541,-31.17523 4.4519,-46.93008c38.1039,33.15254 75.86421,66.77718 112.07695,102.003c-34.74261,39.95821 -74.59364,74.65916 -113.71667,110.1933c-1.26689,-16.54773 -2.53401,-33.09534 -3.80092,-49.64307c-57.66159,16.00916 -118.64064,32.56108 -176.67504,47.19652c-3.94662,-33.77068 -3.83062,-70.54794 -3.8689,-105.45503z",
+ "11": "m136.44681,226.75766l47.24773,-47.40907l-91.35118,0l-91.35098,0l0,-29.34846l0,-29.34849l90.303,0c49.66658,0 90.30293,-1.48752 90.30293,-3.30561c0,-1.81805 -19.77211,-23.15214 -43.93797,-47.40906l-43.93811,-44.1035l40.61224,0l40.61209,0l62.02386,62.14279l62.02383,62.14276l-62.14281,62.02386l-62.14279,62.02386l-42.75481,0l-42.75491,0l47.24786,-47.40909z",
+ "12": "m116.00724,294.49442c-8.01179,-8.01181 -6.96065,-12.86337 12.51841,-57.77466c9.83598,-22.67787 17.88353,-41.89153 17.88353,-42.69699c0,-0.8054 -27.16052,-1.46442 -60.3569,-1.46442l-60.3569,0l0,-42.47337l0,-42.47337l60.83526,0c46.90741,0 60.31158,-1.27951 58.54825,-5.58862c-1.25784,-3.07373 -9.83818,-23.47047 -19.06743,-45.32602c-17.39725,-41.19823 -17.39179,-52.24659 0.02688,-55.67119c8.66862,-1.70424 143.62872,129.24032 148.26757,143.85621c-44.95403,52.18671 -98.68933,106.81281 -148.18829,154.97751c-2.60997,0 -7.15958,-2.41428 -10.11037,-5.36508z",
+ "13": "m167.5984,129.81894c13.45454,0 26.90909,0 40.36363,0c0,13.45454 0,26.90909 0,40.36363c-13.45454,0 -26.90909,0 -40.36363,0c0,-13.45454 0,-26.90909 0,-40.36363zm-58.30304,0c14.9494,0 29.89909,0 44.8485,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89909,0 -44.8485,0c0,-13.45454 0,-26.90909 0,-40.36363zm-53.81818,0c14.9494,0 29.89908,0 44.84848,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89909,0 -44.84848,0c0,-13.45454 0,-26.90909 0,-40.36363zm-53.81818,0c14.9494,0 29.89908,0 44.84849,0c0,13.45454 0,26.90909 0,40.36363c-14.94941,0 -29.89908,0 -44.84849,0c0,-13.45454 0,-26.90909 0,-40.36363zm165.9394,83.23706c14.2021,-0.91132 28.40395,0.64389 42.60606,-0.26743c0.91125,-14.20201 0.48917,-28.40405 1.40042,-42.60606c13.29086,0 27.91505,0 41.20563,0c0,-13.45454 0,-26.9091 0,-40.36363c-13.45454,0 -26.90909,0 -40.36363,0c0,-14.94952 0,-29.899 0,-44.84848c-14.9494,0 -29.89908,0 -44.84848,0c0,-13.45454 0,-26.90909 0,-40.36363c14.9494,0 29.89908,0 44.84848,0c0,13.45454 0,26.90909 0,40.36363c13.29059,0 27.91478,-0.66666 41.20563,-0.66666c0.91125,14.20197 0.48918,29.0707 1.40044,43.27271c14.20209,0.91129 28.60425,-0.07731 42.80637,0.83398c0,13.29074 -0.20032,28.48132 -0.20032,41.77208c-14.9494,0 -29.89908,0 -44.84848,0c0,14.94951 0,29.89897 0,44.84848c-13.45454,0 -26.90909,0 -40.36363,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89908,0 -44.84848,0c0,-13.29074 0,-29.0479 0,-42.33865z",
+ "14": "m158.38327,149.9911l-83.00266,-148.9972l149.24145,148.9972l-149.24145,148.99712l83.00266,-148.99712z",
+ "15": "m175.41861,150.04552l-148.89816,-149.05299l98.06119,0l148.89816,149.05299l-148.89816,149.05287l-98.06119,0l148.89816,-149.05287z",
+ "16": "m227.52928,183.22569c6.14276,-5.95375 12.01762,-12.81764 17.19296,-18.97911l-155.07133,-2.82724l-21.27044,24.3479l-67.38522,-2.09119c8.44345,-11.0853 17.69294,-24.10754 24.55062,-33.88853l-24.39403,-32.88164l71.89852,0l14.62907,20.54468l158.32403,0l-19.63887,-20.4987c6.06082,-6.45992 15.03049,-15.08081 19.89622,-19.60087l53.24701,52.24467l-53.36812,53.05513l-18.61044,-19.42511z",
+ "bent_up": "m1.00136,224.73827l204.13,0l0,-149.15997l-31.28999,0l62.57999,-74.57997l62.58002,74.57997l-31.29001,0l0,223.73997l-266.71,0z",
+ "callout": "m0.99757,0.99642l193.63145,0l0,111.75l53.81497,0l0,-37.25l50.55357,74.49999l-50.55357,74.50003l0,-37.25002l-53.81497,0l0,111.75l-193.63145,0z",
+ "chevron": "m0.99844,0.99688l223.49919,0l74.49986,149.00068l-74.49986,149.00134l-223.49919,0l74.49984,-149.00134l-74.49984,-149.00068z",
+ "corners": "m78.29672,150l-55.17469,-55.1747l0,27.58735l-22.12203,0l0,-121.41265l121.41265,0l0,22.12203l-27.58736,0l55.17471,55.17471l55.17471,-55.17471l-27.58736,0l0,-22.12203l121.41264,0l0,121.41265l-22.12204,0l0,-27.58735l-55.1747,55.1747l55.1747,55.17471l0,-27.58736l22.12204,0l0,121.41264l-121.41264,0l0,-22.12204l27.58736,0l-55.17471,-55.17468l-55.17471,55.17468l27.58736,0l0,22.12204l-121.41265,0l0,-121.41264l22.12203,0l0,27.58736l55.17469,-55.17471z",
+ "diamond": "m228.23334,205.75699c-12.96465,-22.71989 -62.74901,-33.9996 -160.88079,-36.45064l-66.35706,-1.65739l0,-19.88501l0,-19.88482l50.08599,0c59.04541,0 101.26503,-4.08251 135.71376,-13.12332c20.32901,-5.33509 27.0845,-8.73719 36.27359,-18.26725l11.29199,-11.71121l32.38853,32.49907l32.38852,32.49925l-32.75113,32.72415l-32.75122,32.72433l-5.40219,-9.46716z",
+ "dotted": "m164.76302,54.29618c-12.89404,-14.08136 13.13254,-37.91006 24.83243,-21.67826c9.98653,14.06865 -12.21164,31.95572 -24.83243,21.67826zm34.52623,32.04741c-10.53665,-15.50334 18.2944,-32.06738 27.41472,-16.58083c10.82574,16.19412 -18.42853,34.68893 -27.41472,16.58083zm39.30569,38.77469c-13.16362,-8.91086 -0.08168,-29.46533 13.54875,-27.63215c18.93346,2.88981 13.87328,34.44158 -4.59297,32.89478c-3.58466,-0.41574 -6.77832,-2.45136 -8.95578,-5.26263zm32.87781,34.23642c-11.00845,-13.99648 14.37656,-32.37918 25.04797,-19.05171c11.60712,14.82527 -14.29718,34.39392 -25.04797,19.05171zm-63.84386,0.7675c-12.23796,-11.58463 5.72536,-30.30273 19.24007,-25.41679c19.63696,6.28566 5.03751,36.50668 -12.48737,29.64096c-2.41074,-1.14194 -4.56958,-2.71278 -6.7527,-4.22417zm-52.05359,0c-14.38365,-13.43323 11.89731,-35.50046 24.20743,-21.44815c12.48965,14.64734 -10.94827,35.43011 -24.20743,21.44815zm-51.41751,-0.7675c-11.01524,-13.99239 14.38364,-32.38554 25.04439,-19.04626c11.57417,14.84886 -14.25791,34.38168 -25.04439,19.04626zm-48.97159,0.7675c-14.38364,-13.43323 11.89733,-35.50046 24.20746,-21.44815c12.48962,14.64734 -10.94829,35.43011 -24.20746,21.44815zm-51.41319,-0.75569c-12.62148,-16.51503 21.51373,-34.53826 27.20482,-13.82039c4.20761,13.86485 -18.57945,25.93829 -27.20482,13.82039zm232.73729,36.71002c-12.26451,-12.7252 9.54947,-34.95583 22.63777,-23.37347c16.16324,11.53831 -5.25334,38.27226 -20.09267,25.93422c-0.83693,-0.86462 -1.69453,-1.70929 -2.5451,-2.56075zm-37.22105,31.5554c-10.33875,-14.74719 16.53384,-30.93315 26.24101,-17.10368c12.66234,14.69044 -12.76988,34.70573 -24.48114,20.0298l-1.75987,-2.92612zm-33.2933,39.2449c-11.17,-10.21844 4.17313,-26.31229 16.33257,-23.575c18.50797,4.77472 6.84483,34.45702 -10.13109,28.82402c-2.6304,-0.90369 -4.76476,-2.91159 -6.20148,-5.24902z",
+ "hand_2": "m166.23018,238.662c7.92778,-2.90976 14.43034,-5.61938 2.1153,-5.69868c-10.87593,1.46172 -39.01099,-9.28242 -16.4619,-14.56342c14.10701,-5.508 46.21144,7.21423 46.38257,-14.54736c-2.55197,-13.63786 -43.96396,-2.98952 -30.34076,-21.27969c15.00345,-6.1348 44.75407,8.31958 49.78708,-10.66391c-4.61371,-18.40675 -33.47118,-6.65964 -47.97568,-11.74664c-14.06097,2.90031 -17.76392,-15.58949 -1.98296,-12.79868c36.48125,-1.96817 73.21696,0.92035 109.57253,-3.09619c5.87265,-3.2529 10.21371,-23.26295 2.80267,-24.61046c-52.95885,-1.09735 -106.01129,-0.08873 -158.88631,-3.36192c-18.99625,-0.19729 -4.48207,-20.48157 9.55508,-15.71787c13.37119,-4.37856 18.67023,-15.85947 28.4838,-27.19597c5.01488,-24.77942 -19.08717,-15.58241 -28.93028,-8.33138c-10.99126,7.20572 -29.89664,22.16276 -39.92577,30.01463c-8.79154,6.3571 -29.0466,13.41131 -41.36795,21.93291c-10.53185,3.7428 -22.05687,1.87943 -32.40108,2.55152c0,33.57336 0,67.14623 0,100.71958c29.2655,12.743 60.06093,23.93646 92.50566,22.65599c19.00592,-0.07739 38.55775,0.63341 57.06799,-4.26245zm-120.57521,10.76822c-14.93961,-5.74022 -29.85212,-11.55359 -44.65637,-17.63553c0.70846,-41.92598 1.41691,-83.85243 2.12533,-125.77841c11.81984,-0.44887 29.35853,5.41407 37.78343,-3.21891c22.65079,-7.26991 37.35686,-23.34933 57.21348,-35.41785c13.97373,-10.98014 25.13529,-14.72766 39.56827,-23.05481c10.96249,-5.06954 16.89815,-2.48073 29.24257,-0.27045c5.38396,8.81045 12.06773,13.36412 8.59946,30.1482c-7.23705,3.64039 -16.6288,28.10783 -2.4068,28.30228c39.59416,3.79424 79.82585,-1.53866 119.10855,5.09266c9.78171,13.24281 11.64719,42.99407 -6.25568,51.39202c-17.13269,4.95341 -35.19667,2.49629 -52.7989,3.09193c-0.00107,12.52824 2.07022,28.51608 -11.83537,34.80946c-10.26779,13.39197 -10.98985,33.06551 -27.53502,42.86476c-13.91499,14.25851 -33.72333,18.66306 -53.04445,18.19296c-31.68189,0.4295 -65.02994,3.46667 -95.10849,-8.51738l0,-0.00095z",
+ "hand": "m136.98543,214.15889c-14.70618,-5.74251 -4.62521,-24.05643 -14.3905,-33.27538c-12.96347,-7.75244 -2.12349,-24.16507 -12.57821,-33.28812c-7.48801,-6.64952 -5.24203,-16.62421 -3.67915,-25.18983c-29.75101,-0.23549 -59.53337,0.62366 -89.25697,-0.78464c-15.11522,1.28053 -20.03182,-18.26941 -12.80666,-28.85114c7.00419,-11.24166 21.87759,-8.31262 33.12609,-9.4029c64.97946,-0.76864 129.97618,-0.61134 194.95673,0.02921c17.26189,0.80067 37.01695,-1.19489 50.6566,11.68779c16.24808,15.16693 16.0166,39.34441 16.04852,59.94771c-0.42267,19.21857 -2.90109,42.02173 -20.4863,53.46951c-16.36914,10.95175 -36.93741,7.66907 -55.55533,8.62302c-27.94264,-0.30014 -56.07063,1.04456 -83.86891,-2.2673l-2.16592,-0.69792l0,0zm69.33224,-10.55814c9.631,-11.23128 -3.5211,-20.50227 -14.65393,-17.55965c-16.14473,-0.10535 -32.65453,-1.7021 -48.52592,1.75482c-13.67432,5.19589 -4.85582,21.54512 7.46478,18.25877c18.04872,1.02443 36.47603,1.82143 54.28616,-1.68709l1.42891,-0.76686zm65.93199,-2.17656c15.66348,-8.69865 15.78064,-28.60548 16.25079,-44.24881c-0.34195,-16.50655 1.70639,-34.58434 -7.04581,-49.36581c-7.23798,-10.84158 -20.71933,-14.52557 -33.13705,-14.12024c-23.36646,0.0377 -47.0793,-1.82723 -70.16504,2.52512c-15.66467,3.36275 -22.23152,20.93031 -23.45795,35.19015c-0.48341,13.80043 -1.82124,28.00842 1.22505,41.56039c7.24641,5.02983 15.89499,-9.13847 19.17191,-15.4227c4.31766,-11.67575 -0.61995,-26.25061 8.10953,-36.19362c8.72269,-9.46424 24.96402,-8.53419 32.52521,1.88722c8.3812,9.23244 -0.48325,21.69592 1.82307,32.51563c4.15211,9.93069 -0.70021,19.45959 -0.85791,28.5067c4.13835,6.87068 2.87872,15.02933 1.61143,22.50597c16.21062,-0.57724 32.86133,1.70529 48.65034,-2.71872c1.84845,-0.69202 3.61401,-1.59238 5.29642,-2.62128zm-126.53741,-35.9437c2.18771,-13.69858 -18.65493,-12.59653 -20.49308,-1.57007c-4.38604,12.23279 17.61123,15.56906 20.78048,7.03215c0.03699,-1.82657 -0.14053,-3.64476 -0.2874,-5.46208zm62.45076,0.42249c1.41585,-11.79691 -20.5592,-11.91444 -24.75133,-3.63126c-2.34377,5.03215 -10.03961,15.25429 1.13329,12.59268c7.54675,-1.70357 25.12254,3.75204 23.61804,-8.96143zm-62.44263,-31.11197c-0.75351,-2.94205 3.03209,-10.28735 -1.13232,-9.92064c-9.20967,1.01493 -19.08115,-0.45296 -27.70964,3.18962c-7.77171,10.63712 5.24397,21.0274 15.9218,17.53934c7.79146,0.11475 13.91219,-1.24452 12.92017,-10.80832zm61.0041,7.53122c8.85812,-9.53879 -4.95708,-21.9593 -14.94496,-15.6684c-10.39732,5.40628 -7.29182,25.10663 6.58635,19.17703c2.96956,-0.54494 6.1384,-1.30057 8.35861,-3.50864zm-53.18405,-38.39041c2.00339,-3.50816 4.00681,-7.01634 6.01019,-10.52453c-44.99024,0.24061 -90.00227,-0.61648 -134.97418,0.73022c-12.21447,-3.32573 -22.07768,15.22181 -6.82234,18.35822c24.02138,3.10667 48.39057,1.52395 72.56345,1.97845c19.07089,-0.00607 38.14179,-0.01187 57.21268,-0.01793c2.0034,-3.50815 4.00681,-7.01634 6.01019,-10.52452z",
+ "in_circle_1": "m5.82933,197.43428c40.71335,-0.01967 134.41318,-0.35846 180.09581,-0.39397c0,16.34004 0,32.68033 0,49.02061c32.58316,-32.50494 65.16631,-65.00987 97.74948,-97.51482c-31.92815,-31.66348 -63.85603,-63.3272 -95.78392,-94.99068c-0.78604,15.0691 -1.57207,30.13822 -2.35809,45.20756c-59.53047,-0.36446 -119.11517,1.07731 -178.59646,-1.67522c0.61495,-72.0702 150.25177,-122.40517 212.67849,-79.3467c34.44215,24.58492 61.89983,56.78898 72.41017,96.54306c3.07645,22.14599 2.45142,44.78936 0.58615,67.02389c-6.63419,36.33044 -31.19992,67.07545 -59.56813,89.58617c-20.38606,15.81168 -45.18452,26.98569 -71.36909,26.70041c-75.26421,9.28406 -124.16029,-34.86111 -155.84441,-100.16032z",
+ "inner": "m197.26169,150.29735l-74.64867,-74.64867l0,37.32433l-80.12502,0l0,-111.97301l215.02399,0l0,298.5947l-215.02399,0l0,-111.97301l80.12502,0l0,37.32433l74.64867,-74.64867z",
+ "left_right": "m0.99835,150.00092l86.49609,-86.49651l0,43.24814l125.35546,0l0,-43.24814l86.49605,86.49651l-86.49605,86.49605l0,-43.24803l-125.35546,0l0,43.24803l-86.49609,-86.49605z",
+ "left_up": "m0.99865,224.5l74.50004,-74.5l0,37.25l111.74991,0l0,-111.75l-37.25,0l74.5,-74.5l74.5,74.5l-37.25,0l0,186.25l-186.24989,0l0,37.25l-74.50005,-74.5z",
+ "pentagon": "m0.99791,0.9981l162.54547,0l135.45454,149.40899l-135.45454,149.40898l-162.54547,0z",
+ "recycle_3": "m28.22058,93.28644c0.00678,-2.58051 2.31667,-18.40222 5.13495,-35.15953c8.78786,-52.25238 8.91713,-52.48297 20.07468,-35.82898l6.60126,9.85321l19.30534,-9.74535c25.53492,-12.88995 56.00401,-17.65838 84.01221,-13.14781c11.88918,1.91477 24.50447,5.02692 28.034,6.91587c7.00751,3.7502 6.55832,6.97083 -4.61034,33.05528c-6.12129,14.29643 -6.70886,14.70388 -17.2827,11.98577c-17.99704,-4.62608 -47.30141,-3.16897 -61.44969,3.05553l-13.26538,5.83627l9.31132,9.7189c5.12125,5.34554 8.02238,10.51565 6.44702,11.48924c-1.57542,0.97362 -20.7427,2.87124 -42.59392,4.21677c-32.78424,2.01891 -39.72768,1.62653 -39.71874,-2.24516zm168.81314,144.07051l-14.20186,-18.81009l12.93088,-12.50398c13.30882,-12.86928 22.90733,-30.93761 27.13603,-51.08145l2.41319,-11.49524l-13.91847,2.22554c-7.65517,1.22421 -13.96558,1.06514 -14.02313,-0.35333c-0.26878,-6.62247 36.12752,-71.90508 39.66528,-71.14616c5.56261,1.19325 61.9985,50.07314 61.9985,53.6975c0,1.61765 -5.93121,3.88967 -13.18036,5.04884l-13.18039,2.10753l-1.30084,22.476c-1.66846,28.82635 -16.85831,62.09589 -38.00682,83.24434c-8.4704,8.47049 -16.91487,15.4008 -18.76544,15.4008c-1.85062,0 -9.75555,-8.46469 -17.56657,-18.81029zm-128.20031,52.72328c0,-2.07986 2.23119,-8.0961 4.95819,-13.36954c4.94765,-9.56766 4.91901,-9.61411 -13.52617,-21.86105c-28.85884,-19.16116 -50.30965,-53.17105 -57.05687,-90.46291l-2.21202,-12.22588l15.77176,-2.16168c32.51166,-4.45622 32.80855,-4.32152 39.31982,17.83711c4.39381,14.95265 9.79779,23.91347 21.44681,35.56244c8.5651,8.56514 16.76965,14.83324 18.23236,13.92926c1.46265,-0.90396 3.57973,-6.24536 4.70464,-11.86984c1.1249,-5.62448 3.47056,-10.22638 5.21256,-10.22638c3.99942,0 41.66188,59.38374 42.2598,66.63249c0.39931,4.84137 -19.96001,13.22382 -73.01952,30.06421c-3.38333,1.07379 -6.09135,0.25229 -6.09135,-1.84824z",
+ "turn_17": "m187.66985,234.28424l2.06375,-22.20483l-24.28615,-3.86421c-61.48712,-9.78288 -121.75832,-51.26649 -155.31676,-106.90179c-6.02069,-9.98148 -10.05047,-19.59818 -8.95503,-21.37048c2.51272,-4.06578 63.74106,-36.43469 68.91894,-36.43469c2.11224,0 7.18627,5.95309 11.27556,13.22911c17.44035,31.03078 62.57552,63.39609 94.35383,67.65826l12.88387,1.7281l-2.21523,-19.19039c-2.29968,-19.92216 -1.65292,-24.10554 3.72659,-24.10554c3.43987,0 106.12749,76.50481 109.06303,81.25475c2.22696,3.60321 -11.89679,16.9705 -62.46501,59.11911c-21.96555,18.30804 -42.4514,33.28745 -45.52422,33.28745c-4.91821,0 -5.33987,-2.65765 -3.52318,-22.20483z",
+ "turn_reverse": "m298.99997,168.62498c0,-51.43148 -133.41916,-93.12499 -297.99997,-93.12499l0,-74.49999l0,0c164.58081,0 297.99997,41.69347 297.99997,93.12499l0,74.49999c0,42.46484 -91.92749,79.55168 -223.49998,90.16789l0,37.25l-74.49999,-71.54289l74.49999,-77.45709l0,37.25l0,0c88.72033,-7.15858 161.96952,-26.67409 198.62153,-52.91789",
+ "u_turn": "m1.00059,299.00055l0,-167.62497l0,0c0,-72.00411 58.37087,-130.37499 130.375,-130.37499l0,0l0,0c34.57759,0 67.73898,13.7359 92.18906,38.18595c24.45006,24.45005 38.18593,57.61144 38.18593,92.18904l0,18.625l37.24997,0l-74.49995,74.50002l-74.50002,-74.50002l37.25,0l0,-18.625c0,-30.8589 -25.0161,-55.87498 -55.87498,-55.87498l0,0l0,0c-30.85892,0 -55.875,25.01608 -55.875,55.87498l0,167.62497z",
+ "up": "m1.49805,149.64304l148.50121,-148.00241l148.50121,148.00241l-74.25061,0l0,148.71457l-148.5012,0l0,-148.71457z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/dialog_balloon.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/dialog_balloon.json.svn-base
new file mode 100644
index 000000000..e3d147993
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/dialog_balloon.json.svn-base
@@ -0,0 +1,9 @@
+{"data": {
+ "1": "m0.99786,35.96579l0,0c0,-19.31077 15.28761,-34.96524 34.14583,-34.96524l15.52084,0l0,0l74.50001,0l139.68748,0c9.05606,0 17.74118,3.68382 24.14478,10.24108c6.40356,6.55726 10.00107,15.45081 10.00107,24.72416l0,87.41311l0,0l0,52.44785l0,0c0,19.31078 -15.2876,34.96524 -34.14584,34.96524l-139.68748,0l-97.32507,88.90848l22.82506,-88.90848l-15.52084,0c-18.85822,0 -34.14583,-15.65446 -34.14583,-34.96524l0,0l0,-52.44785l0,0z",
+ "4": "m1,1l49.66667,0l0,0l74.5,0l173.83334,0l0,115.8889l0,0l0,49.66666l0,33.11111l-173.83334,0l-123.68433,97.37498l49.18433,-97.37498l-49.66667,0l0,-33.11111l0,-49.66666l0,0z",
+ "5": "m3.88165,296.34811l58.64952,-105.30074l0,0c-62.13446,-31.76456 -79.86445,-91.6022 -40.96117,-138.24044c38.90255,-46.63797 121.70818,-64.81269 191.29914,-41.98796c69.59094,22.8246 103.19446,79.17835 77.63046,130.19172c-25.56265,51.01335 -101.92546,79.99094 -176.41714,66.94487l-110.20081,88.39255z",
+ "6": "m4.33333,266.6662c0,-1.854 2.23757,-3.35571 5,-3.35571c2.76243,0 5,1.50171 5,3.35571c0,1.85394 -2.23757,3.35565 -5,3.35565c-2.76243,0 -5,-1.50171 -5,-3.35565zm10.25,-24.11072c0,-4.6351 5.59392,-8.38943 12.50001,-8.38943c6.90608,0 12.5,3.75433 12.5,8.38943c0,4.63489 -5.59392,8.38928 -12.5,8.38928c-6.90609,0 -12.50001,-3.75433 -12.50001,-8.38928zm23.75001,-36.55524c0,-12.81482 19.46685,-23.19473 43.50002,-23.19473c24.0331,0 43.49996,10.37991 43.49996,23.19473c0,12.81473 -19.46686,23.19455 -43.49996,23.19455c-24.03317,0 -43.50002,-10.37982 -43.50002,-23.19455zm-37.33334,-104.99994c0,-55.2486 66.67956,-100 149,-100c82.32047,0 149,44.7514 149,100c0,55.24866 -66.67953,100 -149,100c-82.32044,0 -149,-44.75134 -149,-100z",
+ "scream": "m299.67374,132.67729l-35.72574,1.97192l-9.55817,48.04506l-31.60561,-11.61551l-45.83566,36.86661l-17.45096,-21.51509l-146.98414,92.00807l81.6677,-102.60858l-67.83573,-13.33963l21.22697,-19.84731l-46.57336,-36.42733l33.47025,-8.80944l-10.52427,-47.94958l35.08694,5.02536l28.86619,-44.2482l25.5638,17.26465l59.09183,-26.49832l7.92432,24.02253l70.55626,-0.33542l-12.23108,23.15343l59.61954,25.93398l-28.50317,14.93327l29.75409,43.96953z",
+ "thought": "m12,1c-6.094,0 -11,4.906 -11,11l0,147c0,6.09399 4.906,11 11,11l49.15625,0c-2.03143,2.32526 -3.15625,4.84886 -3.15625,7.5c0,11.32597 20.36188,20.5 45.5,20.5c25.13812,0 45.5,-9.17403 45.5,-20.5c0,-2.65114 -1.12482,-5.17474 -3.15625,-7.5l142.15625,0c6.09399,0 11,-4.90601 11,-11l0,-147c0,-6.094 -4.90601,-11 -11,-11l-276,0zm54,199c-13.81215,0 -25,5.37016 -25,12c0,6.62984 11.18785,12 25,12c13.81216,0 25,-5.37016 25,-12c0,-6.62984 -11.18784,-12 -25,-12zm-25,30c-7.73481,0 -14,4.02762 -14,9c0,4.97238 6.26519,9 14,9c7.73481,0 14,-4.02762 14,-9c0,-4.97238 -6.26519,-9 -14,-9zm-24,22c-4.97238,0 -9,2.23756 -9,5c0,2.76242 4.02762,5 9,5c4.97238,0 9,-2.23758 9,-5c0,-2.76244 -4.02762,-5 -9,-5z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/electronics.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/electronics.json.svn-base
new file mode 100644
index 000000000..4d18a8c34
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/electronics.json.svn-base
@@ -0,0 +1,20 @@
+{"data": {
+ "capacitor": "m292.103577,149.999374l-117.073944,-0.445328m-167.175035,0.445328l116.628588,0m0.44532,-72.035179l11.364601,0l0,144.640358l-11.364601,0l0,-144.640358zm38.244209,-0.569977l11.364594,0l0,144.640297l-11.364594,0l0,-144.640297zm-162.171733,68.98156l6.905184,0l0,6.905212l-6.905184,0l0,-6.905212zm291.101741,0.325241l6.905182,0l0,6.905212l-6.905182,0l0,-6.905212z",
+ "diode": "m180.228439,90.39769l21.70816,0l0,117.211075l-21.70816,0l0,-117.211075zm23.345947,59.602753l88.556381,0m-284.3409,-1.995804l85.541058,0l0,-65.011185l87.251961,66.722031l-87.250778,67.291931l0,-68.720001m-92.331572,-3.917542l6.811423,0l0,6.811447l-6.811423,0l0,-6.811447zm291.20439,2.03891l6.811401,0l0,6.811462l-6.811401,0l0,-6.811462z",
+ "gate_and": "m7.454795,178.082489l67.605378,0m-67.605378,-54.850876l67.605393,0.000015m-0.155602,-30.065033l0,113.750015c194.70015,10.208389 199.234482,-124.687454 0,-113.750015zm217.618942,56.662766l-70.312149,0m-221.397258,-29.817062l6.68369,0l0,6.683685l-6.68369,0l0,-6.683685zm-0.314375,54.532364l6.68369,0l0,6.683685l-6.68369,0l0,-6.683685zm291.95109,-27.976547l6.683685,0l0,6.683685l-6.683685,0l0,-6.683685z",
+ "gate_inverter": "m292.351624,149.998962l-70.506393,0m-0.189026,0a19.883057,19.883057 0 1 1-39.766113,0a19.883057,19.883057 0 1 139.766113,0zm-213.972072,2.405243l69.321826,0l0,-61.05407l101.250404,58.4571l-101.19664,58.840652l0,-56.176727m-76.061115,-3.699677l6.780182,0l0,6.779526l-6.780182,0l0,-6.779526zm291.428455,-2.135864l6.780518,0l0,6.780548l-6.780518,0l0,-6.780548z",
+ "gate_nand": "m8.042537,173.038879l60.699101,-0.672531m-60.699101,-49.879471l61.371335,0m-0.785973,-24.868042l0,104.835098c179.441437,9.408417 183.619827,-114.915443 0,-104.835098zm223.921448,50.643158l-64.591507,0m0.637238,0a11.937837,11.937837 0 1 1-23.87648,0a11.937837,11.937837 0 1 123.87648,0zm-227.445681,-29.373505l6.739111,0l0,6.739143l-6.739111,0l0,-6.739143zm-0.150617,50.613495l6.73911,0l0,6.739151l-6.73911,0l0,-6.739151zm291.47287,-24.654327l6.739105,0l0,6.739151l-6.739105,0l0,-6.739151z",
+ "gate_nor": "m292.610077,150.214462l-69.483139,-0.215668m0.147217,0.215668a12.942393,12.942393 0 1 1-25.884689,0a12.942393,12.942393 0 1 125.884689,0zm-215.590108,29.264374l63.620397,0m-63.620397,-54.805801l65.561368,-0.431335m-20.75433,-33.139984c129.343479,0 143.580387,58.405624 143.580387,58.405624l-0.347778,0c-18.514755,69.097885 -143.580379,58.057999 -143.580379,58.057999c59.7962,-58.405655 0.347775,-116.463623 0.347775,-116.463623zm-51.490408,30.117874l6.644974,0l0,6.645012l-6.644974,0l0,-6.645012zm0.003831,54.852463l6.644983,0l0,6.64502l-6.644983,0l0,-6.64502zm291.530706,-29.571609l6.644989,0l0,6.64502l-6.644989,0l0,-6.64502z",
+ "gate_or": "m7.681484,183.57515l71.7616,0m-71.7616,-60.67144l73.093784,-0.000015m-23.092442,-37.784157c143.186604,0 158.947315,64.65654 158.947315,64.65654l75.817307,0l-76.202316,0c-20.49614,76.493118 -158.94717,64.271667 -158.94717,64.271667c66.195942,-64.656525 0.385136,-128.928207 0.385136,-128.928207zm-56.684011,33.939781l6.677925,0l0,6.677956l-6.677925,0l0,-6.677956zm291.510831,27.410866l6.677948,0l0,6.677948l-6.677948,0l0,-6.677948zm-291.404498,33.607208l6.677927,0l0,6.677917l-6.677927,0l0,-6.677917z",
+ "gate_xor": "m80.450493,91.498093c129.22271,0 143.446312,58.351089 143.446312,58.351089l68.423569,0l-68.770889,0c-18.497391,69.033295 -143.446304,58.003708 -143.446304,58.003708c59.740372,-58.351089 0.347511,-116.354797 0.347511,-116.354797zm-22.576313,4.515259c43.415966,54.530457 0,108.018921 0,108.018921m-50.015199,-26.867355l63.560987,0m-63.560987,-54.7547l63.560987,0m-70.418914,-3.722206l6.82584,0l0,6.825867l-6.82584,0l0,-6.825867zm0.057968,54.832268l6.825839,0l0,6.825867l-6.825839,0l0,-6.825867zm291.170364,-27.096024l6.825836,0l0,6.825867l-6.825836,0l0,-6.825867z",
+ "inductor": "m7.783882,182.663147l59.679306,0c0,0 -30.829735,-67.744125 15.054253,-68.81945c42.462807,-0.995041 37.635605,69.357201 24.194321,69.357201c-13.441284,0 -12.903625,-68.81955 22.043701,-68.81955c34.947357,0 40.323868,68.819366 20.968399,68.819366c-19.355423,0 -11.828323,-68.819366 22.58139,-68.819366c34.409683,0 41.399155,68.81955 19.893112,68.81955c-21.506073,0 -9.67775,-68.81955 24.19429,-68.81955c33.87207,0 29.570831,68.819366 18.280151,68.819366c-11.290665,0 57.528732,-0.537659 57.528732,-0.537659m-291.202282,-3.571106l6.772959,0l0,6.772995l-6.772959,0l0,-6.772995zm291.221844,0.301132l6.772949,0l0,6.772995l-6.772949,0l0,-6.772995z",
+ "junction_1": "m0.99971,146.64024l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm7.44043,3.36145l283.11684,0m0.72388,-3.35979l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35944,-0.72348l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0z",
+ "junction_2": "m0.99971,146.64024l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm7.44043,3.36145l121.77922,0c0,-29.3896 38.77921,-31.3896 38.77921,0l122.55841,0m0.72391,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35945,-0.72348l0,-6.71786l6.71794,0l0,6.71786l-6.71794,0z",
+ "junction_3": "m143.58945,150.00009c0,-3.49425 2.83032,-6.32455 6.32455,-6.32455c3.49423,0 6.32455,2.83031 6.32455,6.32455c0,3.49423 -2.83032,6.32455 -6.32455,6.32455c-3.49423,0 -6.32455,-2.83032 -6.32455,-6.32455zm-142.59006,-3.35985l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm7.44043,3.36145l283.11682,0m0.72394,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35947,-0.72348l0,-6.71786l6.71796,0l0,6.71786l-6.71796,0z",
+ "junction_tee": "m149.914,143.67554zm-148.91461,2.96471l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm7.44043,3.36145l283.11682,0m0.72394,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-141.61324,2.91669l-0.66661,-141.11688m-3.35947,-0.72348l0,-6.71786l6.71796,0l0,6.71786l-6.71796,0z",
+ "resistor": "m7.868202,151.620193l82.343018,0l11.393402,-32.392784l18.643684,62.356071l20.71521,-63.165901l18.12587,62.356071l19.679459,-61.546242l19.679443,61.951149l10.875488,-30.368195l82.860886,0m-291.18655,-2.813812l6.844604,0l0,6.844635l-6.844604,0l0,-6.844635zm291.194058,-0.465622l6.844604,0l0,6.844635l-6.844604,0l0,-6.844635z",
+ "source_AC_h": "m7.841724,149.837311l67.250737,0m149.928139,0.389923l67.250793,0m-67.653702,-0.227753a74.615135,74.615135 0 1 1-149.230286,0a74.615135,74.615135 0 1 1149.230286,0zm-126.528297,-1.996506c49.250984,-78.535637 61.230949,87.853104 103.826454,2.662094m-200.917796,-4.522659l6.717863,0l0,6.717896l-6.717863,0l0,-6.717896zm291.36706,0.642181l6.717865,0l0,6.717896l-6.717865,0l0,-6.717896z",
+ "source_DC": "m221.862747,94.98175l0,31.813873m-21.510544,-15.906944l43.020996,0m48.613678,39.407722l-121.593582,0m-162.447085,0l115.809275,0m1.040596,-37.757935l7.284134,0l0,75.963058l-7.284134,0l0,-75.963058zm37.461227,-41.623596l7.284134,0l0,158.169647l-7.284134,0l0,-158.169647zm-161.255614,75.613235l6.954941,0l0,6.954971l-6.954941,0l0,-6.954971zm291.012953,0.175003l6.954956,0l0,6.954971l-6.954956,0l0,-6.954971z",
+ "speaker": "m21.35352,187l77,0m-83.70878,3.11937l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0zm6.70878,-76.11937l77,0m-83.70878,3.11937l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0zm155.70878,-32.61937l115,-83l0,296.5l-115,-82.5l0,-131zm-70.99999,0l70.99999,0l0,131l-70.99999,0l0,-131z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/flowchart.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/flowchart.json.svn-base
new file mode 100644
index 000000000..70f2333ac
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/flowchart.json.svn-base
@@ -0,0 +1,25 @@
+{"data": {
+ "manual_input": "m1,103.64394l298,-30.9037l0,154.51852l-298,0z",
+ "callout_left_right": "m1,150.0006l58.10869,-58.1087l0,29.05434l46.81141,0l0,-87.16304l87.1598,0l0,87.16304l46.8114,0l0,-29.05434l58.1087,58.1087l-58.1087,58.10869l0,-29.05435l-46.8114,0l0,87.16306l-87.1598,0l0,-87.16306l-46.81141,0l0,29.05435l-58.10869,-58.10869z",
+ "card": "m1,60.5l59.5,-59.5l238.5,0l0,298l-298,0l0,-238.5z",
+ "collate": "m0,1l299,0l-149.5,149l149.5,149l-299.00031,0l149.50031,-149l-149.5,-149z",
+ "connector_offpage": "m0.99775,0.99775l297.99984,0l0,238.39982l-149.00002,59.60002l-148.99999,-59.60002l0.00017,-238.39982z",
+ "data_stored": "m50.83397,0.99813l249.16667,0c-27.52219,0 -49.83333,66.78392 -49.83333,149.16604c0,82.38213 22.31114,149.16603 49.83333,149.16603l-249.16667,0l0,0c-27.52219,0 -49.83333,-66.78391 -49.83333,-149.16603c0,-82.38212 22.31114,-149.16604 49.83333,-149.16604z",
+ "data": "m1.00038,249.33351l59.60001,-198.66668l238.40001,0l-59.60001,198.66668z",
+ "decision": "m0.99837,149.99953l148.79352,-102.86476l148.79387,102.86476l-148.79387,102.86476l-148.79352,-102.86476z",
+ "delay": "m1,1l149,0l0,0c82.29044,0 149,66.70957 149,149c0,82.29044 -66.70956,149 -149,149l-149,0z",
+ "display": "m1,149.99924l49.66672,-97.42307l198.66612,0c27.43034,0 49.66716,43.61774 49.66716,97.42307c0,53.80476 -22.23682,97.42308 -49.66716,97.42308l-198.66612,0l-49.66672,-97.42308z",
+ "document_multiple": "m1.00054,45.02563l253.99998,0l0,206.43799c-126.99997,0 -126.99997,78.65668 -253.99998,33.96539zm21.49946,-240.92902l0,-19.5l255,0l0,207l-22.5,1m-210.5,-207l0,-25l255,0l0,207l-21.5,0",
+ "document": "m1.00064,1.00098l298,0l0,242.19891c-149,0 -149,92.28223 -298,39.84915z",
+ "filter1": "m75.5,150l74.5,-149l74.5,149l-74.5,149l-74.5,-149zm0,0l149,0",
+ "or_junction": "m0.99865,149.9991l0,0c0,-82.29043 66.70957,-149 149.00001,-149l0,0c39.51724,0 77.41597,15.69817 105.3589,43.64109c27.94292,27.94292 43.64107,65.84166 43.64107,105.35891l0,0c0,82.29041 -66.70956,148.99998 -148.99997,148.99998l0,0c-82.29044,0 -149.00001,-66.70958 -149.00001,-148.99998zm149.00001,-149l0,297.99998m-149.00001,-148.99998l297.99998,0",
+ "preparation": "m1.00063,150.00006l59.58485,-82.24058l178.75446,0l59.58505,82.24058l-59.58505,82.24086l-178.75446,0l-59.58485,-82.24086z",
+ "process": "m1,51.87891l298,0l0,196.24391l-298,0zm37.25,-196.24391l0,196.24391m223.5,-196.24391l0,196.24391",
+ "punched_tape": "m1.00047,30.80047l0,0c0,16.45808 33.35479,29.8 74.50001,29.8c41.1452,0 74.49998,-13.34192 74.49998,-29.8l0,0c0,-16.45809 33.3548,-29.8 74.50002,-29.8c41.14522,0 74.49998,13.34192 74.49998,29.8l0,238.4c0,-16.45808 -33.35477,-29.80002 -74.49998,-29.80002c-41.14522,0 -74.50002,13.34193 -74.50002,29.80002c0,16.45807 -33.35478,29.79999 -74.49998,29.79999c-41.14522,0 -74.50001,-13.34192 -74.50001,-29.79999z",
+ "sequential_data_storage": "m150,299l0,0c-82.29043,0 -149,-66.70955 -149,-149l0,0c0,-82.29043 66.70957,-149 149,-149l0,0c39.51726,0 77.41599,15.69817 105.3589,43.64108c27.94292,27.94293 43.6411,65.84165 43.6411,105.35892l0,0c0,39.51726 -15.69818,77.41599 -43.6411,105.3589l43.6411,0l0,43.6411z",
+ "sort": "m-0.0038,150.00102l299.00334,0m-299.00334,-0.00002l149.50209,-150.00059l149.50131,150.00059l-149.50131,150.00018l-149.50209,-150.00018z",
+ "storage_internal": "m1,1l297.99997,0l0,297.99997l-297.99997,0zm37.25,-297.99997l0,297.99997m-37.25,-260.74997l297.99997,0",
+ "terminal": "m48.94167,99.12235l202.11729,0l0,0c26.47794,0 47.9425,22.7794 47.9425,50.8792c0,28.09979 -21.46457,50.87918 -47.9425,50.87918l-202.11729,0l0,0c-26.47791,0 -47.9425,-22.77939 -47.9425,-50.87918c0,-28.09981 21.46459,-50.8792 47.9425,-50.8792z",
+ "wave": "m1,37.20809c99.33355,-125.42461 198.66708,125.4246 298.00061,0l0,225.76426c-99.33353,125.42462 -198.66706,-125.42459 -298.00061,0z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/game.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/game.json.svn-base
new file mode 100644
index 000000000..675bc3767
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/game.json.svn-base
@@ -0,0 +1,13 @@
+{"data": {
+ "cards_clubs": "m107.57338,275.50809c15.10838,-15.77673 27.93053,-34.56763 33.34637,-55.90254c-16.19595,12.31328 -31.05006,32.11845 -53.64258,31.36813c-17.05595,0.97891 -37.37346,0.99548 -49.37947,-13.26945c-26.83,-21.5751 -34.03729,-64.69673 -12.00568,-92.15404c15.07669,-19.82526 41.4039,-28.23172 65.56467,-25.25816c15.22319,-6.45935 -2.97749,-22.81502 -4.80785,-33.02267c-11.33012,-37.02704 15.36169,-81.44029 54.60988,-85.70572c28.15103,-4.0415 55.67099,14.18231 69.44571,37.83293c7.4856,16.54877 3.58533,35.33045 1.83887,52.49866c-5.88113,8.62766 -20.94342,29.50022 0.55099,27.85616c21.2518,-0.33633 43.69397,5.90277 57.70761,22.8026c20.49747,22.76067 22.37766,60.37286 1.7551,83.63007c-10.90869,14.16582 -27.2782,25.50356 -45.80551,24.87234c-18.13391,1.83067 -37.77023,-2.10338 -50.62924,-15.92061c-5.48438,-3.84309 -18.92297,-18.36311 -18.91833,-15.17883c13.43222,27.98354 28.62112,57.04413 55.49167,74.38477c9.60062,7.71954 -14.62323,2.41226 -20.4874,3.98563c-35.53012,0.0314 -71.06009,0.06342 -106.59021,0.09497c7.31842,-7.63818 14.6373,-15.27603 21.9554,-22.91422z",
+ "cards_diamonds": "m34.92883,153.9321c25.56111,-56.62673 71.64644,-104.95768 110.85236,-152.92286c45.60773,30.78102 85.01025,98.49872 119.29071,145.66264c-30.57587,54.55344 -74.58923,104.23671 -114.23947,153.1615c-42.74368,-44.7616 -79.29648,-95.90262 -115.90359,-145.90128z",
+ "cards_hearts": "m106.76112,245.09012c-77.74644,-57.80281 -105.54389,-94.36783 -105.76917,-139.13003c-0.20544,-40.80623 34.10907,-80.19025 69.67002,-79.96313c17.75755,0.11364 55.84863,15.13257 69.33681,27.33919c6.79614,6.1504 10.01512,5.54391 25.146,-4.73779c41.17987,-27.98239 81.39243,-28.56973 107.43585,-1.56907c41.62292,43.15273 34.04501,94.68497 -21.78392,148.13782c-29.68187,28.41864 -94.50056,78.8349 -101.35565,78.8349c-2.08591,0 -21.29187,-13.01038 -42.67994,-28.9119z",
+ "cards_spades": "m92.84135,287.13989c18.3756,-17.73279 31.81261,-40.18849 43.07161,-62.94162c6.87787,-9.075 0.36623,-17.01425 -9.00183,-9.3188c-24.07579,16.07495 -56.84848,21.58751 -82.91551,6.92194c-29.46779,-15.23779 -42.75618,-51.47162 -36.07021,-83.04361c4.23415,-31.99545 27.52112,-57.07481 52.80524,-75.08997c29.04437,-20.7771 60.40868,-38.61331 86.95355,-62.67224c11.08365,0.22219 19.42508,17.61496 31.35349,22.21747c31.67316,23.59131 69.20874,40.95643 94.15042,72.50237c12.60098,17.9752 19.78281,40.10946 20.58459,61.98948c-3.83926,29.67093 -21.5314,60.96272 -52.04169,69.41241c-26.37521,7.98038 -53.51129,-2.14038 -76.49545,-15.01619c-2.80743,-0.60251 -13.10471,-8.7151 -9.02362,-2.41039c13.74066,28.19803 28.79581,56.19804 50.59952,79.09325c1.28156,2.89285 11.33243,9.75613 5.98334,9.64709c-44.76935,0 -89.53856,0 -134.30794,0c4.78471,-3.7637 9.5696,-7.5275 14.35449,-11.2912z",
+ "chess_bishop": "m61.92021,296.91153c0.43627,-9.82327 20.22808,-4.98053 9.33225,-14.55078c3.63447,-11.80536 14.91982,-19.66748 21.741,-29.79436c5.22913,-8.62125 17.00826,-19.01086 11.31252,-29.67047c-10.46021,-5.58662 -7.49181,-18.00824 5.30239,-15.28014c8.2272,-7.58801 8.79371,-20.26302 11.57766,-30.59467c2.52694,-12.36574 4.07327,-24.95554 3.66998,-37.5896c-14.99698,0.03661 -30.27584,-0.68196 -44.73978,-4.74928c2.8019,-11.20453 20.86148,-8.79659 28.26084,-15.67982c-6.87532,-6.18329 13.89957,-5.56496 8.46355,-15.34472c-0.37302,-11.20033 -9.19685,-14.44135 -16.26585,-22.60765c-9.44371,-12.76132 5.36173,-25.51221 13.58463,-34.13964c9.16566,-9.37672 19.64847,-19.36716 22.45389,-32.62941c-3.77451,-3.10155 -12.3967,-7.54239 -3.59866,-11.78228c12.01596,-2.03703 24.83499,-2.28521 36.61118,1.05654c7.81644,7.61585 -11.93045,8.03119 -3.43417,17.63365c10.07373,12.07176 -3.50795,18.30174 -11.52704,25.27969c-4.66763,5.89621 -18.59915,13.67189 -16.20224,19.78346c13.63968,-0.47554 21.5871,-13.67976 31.31615,-21.49704c10.67101,-13.68708 20.99446,8.43092 27.81822,15.94714c8.40642,11.39094 2.60674,26.70086 -10.05556,31.59287c-6.28001,6.46729 -10.44972,24.88914 4.57674,22.14657c8.72636,3.17196 -8.52979,3.51371 1.37608,6.446c6.58298,2.52787 32.25821,8.30554 18.1142,16.0547c-12.00471,2.71368 -24.40523,2.6017 -36.6002,1.50584c-0.75204,18.52477 1.89484,36.97644 7.35446,54.6958c1.35513,5.04123 2.71027,10.08244 4.06541,15.12361c6.52129,-0.129 19.98573,-1.55484 13.76321,9.18311c-13.08994,7.21928 -5.0789,22.41203 2.17738,31.05447c8.99446,11.37192 22.40833,22.01788 22.98288,37.58719c3.59734,2.14404 15.56946,8.03415 12.10645,12.64545c-57.30759,-0.2937 -114.6481,0.84897 -171.9265,-1.25046l-1.98901,-0.18246l-1.62205,-0.39337l0,0z",
+ "chess_king": "m75.6993,294.60599c-8.08068,-9.43317 12.65705,-9.68567 9.39906,-20.14252c5.95673,-13.85672 21.44485,-22.24414 23.72572,-37.99019c-6.28166,-4.37628 -9.89445,-14.96013 2.0899,-13.70361c8.78859,-6.61539 7.6902,-20.15297 10.33321,-30.0876c2.47588,-16.03471 3.03656,-32.26408 4.10001,-48.43053c-10.16894,-0.78108 -20.58942,-0.23701 -30.49778,-2.84268c0.28501,-10.75136 20.44619,-6.62604 21.3638,-16.77121c14.65907,-0.2649 0.81196,-22.15992 -5.15776,-27.38371c-7.64118,-8.81222 -12.7306,-22.72323 -6.92168,-33.60618c8.30865,-5.52043 27.09519,-2.1601 26.24604,-16.66769c-5.65058,-3.22095 -12.82484,-1.17552 -19.15805,-1.74514c0.38948,-6.7649 0.77895,-13.52979 1.16843,-20.29469c8.37558,-0.64424 16.75118,-1.28853 25.12676,-1.93283c-4.25133,-4.41846 -10.61392,-7.6702 -12.20608,-13.92034c5.41558,-8.90246 18.46751,-8.1166 27.81776,-8.03243c9.09207,-0.62713 25.66919,5.43749 13.27614,15.20592c-1.00447,2.39887 -10.78024,8.36352 -4.73895,7.71326c7.73515,0 15.47028,0 23.20541,0c-0.02223,6.6133 -0.20001,13.29232 1.35312,19.76423c-5.90448,4.39723 -25.05112,-3.75612 -19.59946,9.81149c6.13853,5.67249 15.53992,5.52279 23.32581,8.02098c4.54138,0.45371 8.15405,1.63713 6.5175,6.94557c0.85359,9.85596 -1.63307,19.77049 -8.40776,27.25217c-4.79567,7.80693 -15.56667,17.58031 -12.3781,26.61691c6.03265,-0.98199 10.87871,2.97905 6.06032,7.43356c4.94479,3.66121 22.35728,2.82278 18.59119,11.98875c-8.82205,2.92029 -18.29916,1.70366 -27.45192,2.00166c2.43703,25.01987 5.80666,50.04211 11.43709,74.54305c3.28979,5.43672 16.35808,9.61523 5.63309,16.70296c-4.00256,13.19919 8.78183,23.08223 16.81097,31.55379c8.82797,6.61176 4.54482,19.91519 17.0338,22.03693c9.83562,9.52774 -13.5036,9.27408 -19.49568,9.29486c-39.66827,0.42773 -79.37933,1.02615 -119.03208,-0.25211c-3.24605,-0.40967 -7.25645,-0.31595 -9.56982,-3.08264z",
+ "chess_knight": "m100.17753,299.2356c-10.0382,0.34137 -24.72987,-4.84531 -14.46609,-16.41525c11.17445,-4.40472 -1.98608,-19.00409 9.21265,-25.88123c8.98889,-12.79953 21.20518,-24.48807 24.89179,-40.11865c-0.57252,-10.60066 -13.22608,-16.87427 -7.18922,-28.60765c-5.92265,-18.77635 -4.55389,-40.38806 6.25748,-57.26643c9.18032,-15.67659 20.32635,-32.28713 19.15084,-51.25797c-11.5139,4.80804 -23.70148,9.0206 -36.37307,6.83708c-11.91311,-1.1064 -22.59742,8.54017 -34.74928,3.29494c-12.31807,-2.55921 -19.64501,-19.02957 -10.4606,-28.65753c10.03679,-8.57325 24.78339,-8.84916 34.35549,-18.41713c12.62932,-10.46186 24.31081,-24.61204 41.71716,-26.46155c7.69322,-1.76131 10.99294,-9.49197 15.25148,-15.2854c3.53894,9.18849 9.69408,17.31353 18.95801,21.387c18.83824,10.9118 23.5276,33.98066 30.47462,52.94444c5.13654,14.85179 9.41592,30.35814 18.01733,43.6171c0.09145,6.36343 -9.56343,9.05308 -3.04225,16.51302c3.39153,20.2325 3.53752,40.95071 3.23686,61.41966c-5.72005,10.01691 -10.93028,21.19722 -3.29993,32.69295c5.09689,14.05096 17.7905,23.26645 24.03563,36.52565c3.53024,6.8656 -6.88226,16.83319 6.09091,15.10654c11.84755,6.2681 2.28101,21.56821 -9.50232,17.11713c-44.15834,1.12289 -88.41394,2.24417 -132.5675,0.9133z",
+ "chess_pawn": "m76.17518,297.98557c-10.50418,1.59836 -25.59558,-8.37918 -12.29734,-17.44669c11.25366,-5.8967 0.45475,-21.25174 12.35514,-28.71019c12.10069,-16.52 24.98341,-33.40712 31.01369,-53.22789c-0.84142,-9.49573 -19.64921,-25.21422 -0.595,-28.29408c15.7114,1.82648 9.96503,-21.69583 15.39529,-31.88779c3.26528,-15.46995 5.63882,-31.19783 5.05293,-47.04268c-10.94164,-0.30554 -22.10724,0.96841 -32.83411,-1.63306c-6.84238,-8.98132 15.45903,-13.45317 19.13895,-21.55999c7.72121,-11.65172 -11.3031,-24.52544 -3.15941,-38.29919c5.20168,-20.85055 29.26575,-34.36854 49.62741,-26.73076c21.08499,5.46792 36.67119,30.37529 26.64961,51.09357c-0.80009,3.99703 -7.062,9.17959 -4.97066,12.36269c9.12987,6.33601 19.70087,11.85771 25.48528,21.64108c-8.18987,5.93826 -21.89375,1.4159 -32.1122,4.23674c-9.29645,8.24593 -0.11353,25.10609 0.36266,36.41936c2.90009,12.9261 5.46037,25.96617 8.78381,38.77452c6.98657,2.72525 21.33679,5.88095 13.4649,17.20207c-11.22217,9.11032 -5.7289,23.62137 0.60231,33.84465c7.87996,15.78793 21.40668,27.84862 29.69345,43.27188c3.07736,7.12057 -7.92374,19.7316 5.78708,16.78259c14.86404,3.15744 5.96938,23.76761 -7.3875,18.8981c-49.21407,1.73288 -98.52922,2.43631 -147.74446,0.51953l-2.31185,-0.21448l0,0z",
+ "chess_queen": "m59.54884,298.46313c-11.18457,2.51251 -19.80814,-14.30008 -5.94004,-16.129c12.20336,0.23074 -3.0349,-11.94995 7.98012,-16.05304c12.67021,-12.36537 25.23749,-25.26018 33.3575,-41.17609c-4.09126,-5.42482 -10.84344,-10.60782 -9.96117,-18.03085c7.964,-2.71161 19.82806,-0.87375 20.29981,-13.44502c7.24239,-22.68985 9.1741,-46.67986 10.76167,-70.3136c-7.99255,-6.33596 -24.45116,-0.33371 -35.62089,-3.56097c-16.94488,-4.5746 6.31873,-13.33291 13.78075,-12.6113c6.70493,0.01006 16.63324,-4.12222 5.41084,-7.2804c9.46686,-0.43687 23.08297,-12.44518 7.51486,-16.77373c11.54188,-8.28655 2.64816,-26.31929 -2.17102,-36.68976c-7.265,-12.52285 -19.21146,-21.59242 -32.71435,-26.42871c-2.18616,-12.77 18.63421,-8.99565 27.07909,-9.65835c12.78728,0.48775 25.82639,-0.15282 36.96732,-7.11507c15.05278,-6.96464 27.8495,4.65901 41.61934,7.11611c13.92807,0.89699 28.41634,-2.50577 41.97807,1.44028c4.20209,2.98911 11.18788,7.71034 2.77457,9.97613c-16.06789,8.94404 -31.07338,22.15693 -35.10127,40.92605c-6.0766,10.44077 4.6955,19.50048 -5.15381,26.98807c-0.10249,8.80961 22.85634,10.04067 10.00395,14.37878c8.80815,4.77542 27.69864,1.76332 29.62625,12.3696c-7.99612,6.2903 -19.2092,3.80788 -28.79007,4.39512c-3.2489,1.10706 -11.41316,-2.70125 -10.17032,2.89742c-0.6366,25.08775 5.87923,49.75521 12.1806,73.83221c0.00804,11.79608 29.09497,5.10777 12.92737,18.49597c-11.94247,10.28146 5.56685,24.68452 11.63272,33.82986c8.25099,10.03221 22.89711,15.11021 21.67468,29.8362c8.40468,0.60507 18.40166,13.69095 6.78131,16.95151c-62.8902,1.31946 -125.82766,2.22778 -188.72791,1.83258z",
+ "chess_rock": "m70.40736,299.11804c-15.60727,2.87628 -15.90823,-19.81082 -1.8931,-20.53482c-4.2011,-9.73361 -0.98556,-21.67557 5.22356,-30.68398c8.90442,-15.05035 22.29623,-30.00999 19.52936,-48.8515c-0.95786,-9.8022 -13.10349,-27.37677 5.72565,-24.85997c5.09087,-9.77498 2.13017,-24.16621 5.9483,-35.39389c3.33424,-21.28385 10.75552,-43.9948 2.86147,-65.09612c-4.97705,-11.23243 -17.62387,-18.62589 -16.26645,-32.35733c-1.42947,-13.39034 -0.95647,-26.88279 0.60455,-40.23392c6.07738,0.50975 12.84039,-1.27954 18.38155,1.475c-0.04153,12.96106 12.26991,10.08973 10.7935,-0.92486c3.23881,-1.28251 8.60017,-0.18413 12.6562,-0.55014c18.03256,0 36.06522,0 54.09778,0c-2.06311,7.51434 3.5195,17.19948 10.5887,8.35272c-1.93379,-11.75267 14.25911,-7.86334 10.37854,2.24694c0.22855,13.39515 1.87041,27.25403 -1.89201,40.29753c-6.12787,5.2086 -6.22449,15.45995 -13.90137,21.60233c-6.16908,11.51656 -3.45045,25.43306 -2.7644,37.9428c2.61279,18.51363 6.92676,36.79671 8.00221,55.52328c-0.76923,10.18126 20.18948,7.18474 11.15244,19.71645c-9.87662,8.41151 -4.0954,22.61668 -0.18413,32.66171c7.71916,17.36203 23.99019,32.95758 21.5343,53.32025c-1.94743,8.89606 14.16618,5.88821 9.97758,17.34372c-0.12151,14.11871 -21.10172,5.04239 -30.39526,8.00793c-46.7146,0.56656 -93.44374,1.44144 -140.159,0.99585z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/math.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/math.json.svn-base
new file mode 100644
index 000000000..88c94971a
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/math.json.svn-base
@@ -0,0 +1,9 @@
+{"data": {
+ "divide": "m150,0.99785l0,0c25.17819,0 45.58916,20.41097 45.58916,45.58916c0,25.17821 -20.41096,45.58916 -45.58916,45.58916c-25.17822,0 -45.58916,-20.41093 -45.58916,-45.58916c0,-25.1782 20.41093,-45.58916 45.58916,-45.58916zm0,296.25203c-25.17822,0 -45.58916,-20.41095 -45.58916,-45.58917c0,-25.17819 20.41093,-45.58916 45.58916,-45.58916c25.17819,0 45.58916,20.41096 45.58916,45.58916c0,25.17822 -20.41096,45.58917 -45.58916,45.58917zm-134.06754,-193.71518l268.13507,0l0,91.17833l-268.13507,0z",
+ "equal": "m0.99915,31.03476l297.3767,0l0,95.17349l-297.3767,0zm0,47.58677l297.3767,0l0,95.17349l-297.3767,0z",
+ "minus": "m0.99887,102.39503l297.49445,0l0,95.2112l-297.49445,0z",
+ "not_equal": "m40.81188,62.2131l103.7978,0l22.27972,-61.2131l65.67503,23.90375l-13.5795,37.30935l40.20317,0l0,69.88993l-65.64099,0l-12.71893,34.94495l78.35992,0l0,69.88991l-103.79779,0l-22.27972,61.21309l-65.67503,-23.90378l13.57949,-37.30933l-40.20319,0l0,-69.88991l65.64102,0l12.71894,-34.94498l-78.35995,0z",
+ "times": "m1.00089,73.36786l72.36697,-72.36697l76.87431,76.87368l76.87431,-76.87368l72.36765,72.36697l-76.87433,76.87431l76.87433,76.87431l-72.36765,72.36765l-76.87431,-76.87433l-76.87431,76.87433l-72.36697,-72.36765l76.87368,-76.87431l-76.87368,-76.87431z",
+ "plus": "m1.00211,102.40185l101.39974,0l0,-101.39975l95.45412,0l0,101.39975l101.3997,0l0,95.45412l-101.3997,0l0,101.3997l-95.45412,0l0,-101.3997l-101.39974,0z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/misc.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/misc.json.svn-base
new file mode 100644
index 000000000..ed58c4ccc
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/misc.json.svn-base
@@ -0,0 +1,37 @@
+{"data": {
+ "3_ways": "m1,159.61292l52.87097,-52.87097l0,26.43549l69.69355,0l0,-79.30646l-26.43549,0l52.87096,-52.87097l52.87097,52.87097l-26.43549,0l0,79.30646l69.69356,0l0,-26.43549l52.87096,52.87097l-52.87096,52.87097l0,-26.43549l-192.25807,0l0,26.43549l-52.87097,-52.87097z",
+ "3D_plane_1": "m1,187.25l74.49999,-74.5l223.49998,0l-74.5,74.5l-223.49997,0z",
+ "3D_plane_2": "m112.75,75.50002l74.5,-74.50002l0,223.50002l-74.5,74.49998l0,-223.49998z",
+ "babe": "m299.04794,205.18787c-3.77606,12.02469 -14.23288,15.70245 -23.42029,7.51477c-4.99579,-3.63025 -15.93668,-4.01721 -8.27643,4.11765c4.3663,3.89154 12.96597,18.43826 2.6701,7.63031c-6.72076,-9.88528 -21.45963,-10.97299 -26.80637,-21.01428c-0.7126,-12.09052 -19.01982,-9.85156 -28.21417,-13.29294c-7.97734,0.2787 -20.34282,-8.29872 -23.22426,-8.2877c7.17442,8.54059 6.05238,22.25063 13.10196,29.89879c9.38933,2.61444 12.97119,14.02899 0.81691,15.99643c-14.79422,5.33719 -12.22833,-12.63193 -20.04561,-20.07751c-5.76567,-2.6597 -0.17117,23.97388 -5.6981,17.70459c0.14073,-11.08301 -5.26385,-21.19345 -7.43376,-31.72055c3.66939,-3.90994 3.24513,-15.0824 -1.24792,-6.28702c-9.32401,15.52066 -21.53839,29.02148 -33.42717,42.58749c-12.32529,3.3429 -25.61986,1.75922 -38.28926,0.99091c-13.33909,0.21539 -16.41985,-23.40515 -24.5597,-24.14911c-1.69956,6.7645 0.04348,10.7413 3.54543,14.16528c-5.43895,6.35352 -17.0083,4.24969 -24.32439,1.67859c-12.99512,4.18167 4.10523,-7.37332 9.39456,-5.37735c0.12955,-9.23239 1.69711,-21.43146 -1.15234,-30.31955c-4.26376,-4.21536 -13.54346,-25.27448 -12.61225,-10.56541c-2.43563,17.92097 -10.72475,34.53096 -12.64814,52.59737c-1.6411,10.13943 -15.83897,5.33594 -23.08624,5.82672c-7.30112,2.27881 -6.50991,0.30469 -13.11051,0.69199c7.01961,-9.43863 23.73587,-3.27213 28.50491,-13.30713c2.12957,-14.98691 1.05568,-30.67914 6.12082,-45.11276c-2.11474,-14.92252 -6.78208,-29.69904 -6.85915,-44.79436c2.37534,-9.86703 8.15515,-18.85688 7.95601,-29.33565c4.35726,-11.70351 7.18935,-24.90283 15.98966,-34.19202c9.32926,-10.04192 23.95938,-2.34001 28.82026,8.23518c5.23969,11.5593 -2.89557,23.16132 -3.7411,34.79802c10.97217,2.97472 2.07053,18.22128 16.21945,16.77118c11.11885,1.02463 7.90206,16.12445 0.58741,20.71976c-0.2656,7.05571 8.13246,16.23514 6.20955,25.48418c5.50479,6.05925 12.30074,9.05171 12.7784,-1.61943c3.7646,-14.17346 5.15414,-29.11295 11.81579,-42.45001c2.65157,-10.67883 13.6115,-24.48097 25.27724,-15.69678c10.81068,5.92413 13.54153,23.94177 22.32231,28.34891c10.75034,-9.00977 20.01573,4.53285 28.83136,9.38853c13.27853,7.35518 24.98924,17.12993 37.79256,25.23851c13.37863,6.81644 27.61211,12.28633 40.07347,20.72394c8.47791,4.65475 17.41223,-4.71762 19.34897,6.49048zm-149.77098,-49.39249c-1.45267,7.65393 4.38054,3.60388 0,0z",
+ "bevel": "m24.5,277l-24,23m276,-22l23,22m-23,-274l23,-24m-275,23l-23,-22m23,21.5l252,0l0,252l-252,0l0,-252zm-23.5,-23.5l299,0l0,299l-299,0l0,-299z",
+ "bone": "m273.3559,119.27242c-11.58661,5.90293 -23.89537,9.95385 -36.67676,12.27164c-53.42084,0.2984 -105.13121,0.41397 -158.74251,2.97562c-14.28426,-2.65407 -30.58815,0.18161 -42.82426,-9.13783c-9.06827,-7.25944 -28.17529,-2.4415 -25.05096,11.36483c6.17649,14.08824 -14.61965,21.70474 -7.59176,36.00003c6.11589,14.67987 24.54805,9.02721 35.59484,4.1729c20.29636,-4.79665 40.55842,-9.8537 60.92737,-14.38416c42.52868,-4.82219 82.54949,-1.83121 124.59118,1.02063c11.68694,2.54654 23.55803,4.03351 35.45654,5.38187c10.1839,0.16006 18.34979,7.46698 27.92017,8.65919c12.6539,-1.22533 16.41983,-19.19981 7.59747,-27.17406c-13.18918,-8.72406 6.75436,-24.14882 -8.14166,-31.38885c-4.25287,-2.31086 -8.733,-0.75754 -13.05966,0.23817z",
+ "chord": "m277.04315,255.07486c-47.63342,47.63342 -121.3194,57.33392 -179.65791,23.65366c-58.33851,-33.6824 -86.78111,-102.34741 -69.34571,-167.41564c17.43547,-65.06779 76.39998,-110.31287 143.76268,-110.31287l105.24094,254.07486z",
+ "circle_band": "m1,224.5l0,0c0,-82.29044 66.70957,-149 149,-149c82.29042,0 149,66.70956 149,149l-74.5,0c0,-41.14522 -33.3548,-74.5 -74.5,-74.5c-41.1452,0 -74.5,33.35478 -74.5,74.5z",
+ "circle_pie": "m299,150l0,0c0,82.29044 -66.70956,149 -149,149c-82.29044,0 -149,-66.70956 -149,-149c0,-82.29043 66.70956,-149 149,-149l0,149z",
+ "cube": "m30.42785,1.56129l-29.42785,29.42785l0,268.21907l264.28937,0.68124l33.35693,-30.10974l0,-268.21843l-268.21845,0zm236.46521,28.94674l0,269.42122m0,-269.42122l33.35693,-29.50804m-33.35693,30.791l-265.57233,-1.28296",
+ "dagger": "m1.57422,47.21264c-2.775,14.24454 5.08469,27.79975 11.2199,40.10517c13.07098,21.70464 28.2358,42.59465 47.26681,59.46329c12.98537,10.6889 24.68548,22.99878 39.38902,31.4678c19.22253,12.95224 39.86254,23.55869 61.26455,32.3793c15.9138,6.93546 32.60274,11.85577 49.65401,15.08282c4.95967,1.28564 18.82625,4.91663 10.19991,-3.60251c-7.15544,-3.02133 -14.76756,-5.22583 -21.96236,-8.37695c-34.92769,-14.34082 -72.04247,-26.94104 -100.21951,-53.10463c-4.66899,-6.20064 8.95855,3.3492 11.3067,5.96803c23.50703,16.73581 50.36192,27.95749 76.84653,39.04178c13.47301,4.46384 28.20039,13.97903 42.51408,7.22675c12.36502,-4.72467 -2.95702,-5.44891 -8.42033,-7.24844c-24.28337,-6.90491 -48.85286,-13.54227 -71.13893,-25.76019c-12.72568,-4.65573 -23.42126,-13.22678 -34.85331,-20.29132c-12.35065,-8.53128 -23.65424,-18.49934 -35.67798,-27.49634c-7.86864,-5.96642 -15.68669,-11.98865 -22.20108,-19.46664c-11.01625,-11.02383 -21.70009,-22.36108 -31.68482,-34.33246c-6.52307,-7.36439 -13.86146,-14.10685 -18.44664,-22.93894l-5.05655,-8.11652zm256.45175,139.13108c-1.50562,-0.04745 -3.06,0.28214 -4.36211,1.15021c-9.72246,4.86124 -7.63908,13.88922 -13.19478,20.83386c-4.16678,5.55569 -9.028,8.33356 -15.97261,10.41693c1.38892,2.77783 4.16675,6.94461 4.16675,10.41693c0,7.63907 -9.02798,14.58368 -15.97261,13.88922c-2.77786,-0.69446 -9.028,-4.16678 -11.11139,0c-0.69446,1.38895 -0.69446,2.77786 0,3.47232c0,2.77786 3.47231,4.16678 6.25015,5.55569c7.63908,2.08337 15.97263,-0.69446 22.22279,-4.86124c4.86122,-2.77783 8.33353,-7.63907 9.72246,-13.19479l1.38892,-9.02798c0.69446,-2.77783 3.47232,-3.47232 6.94463,-8.33353c4.16676,-5.55569 8.33354,-15.2782 13.88924,-19.44495c2.08337,-1.38892 4.16675,-2.0834 6.94461,-2.77786c-1.38892,-2.08337 -2.77786,-3.47229 -4.16678,-5.55566c-1.38892,-0.69449 -2.77783,-2.0834 -4.16675,-2.0834c-0.78128,-0.26041 -1.6792,-0.42728 -2.58252,-0.45575zm29.4061,26.21594c-2.61084,-0.02899 -5.33868,0.54254 -8.07312,1.32382l5.55569,3.47232c-1.38895,2.77783 -4.86121,8.33353 -4.16678,11.80585c0.69449,6.94461 10.41693,6.94461 14.58371,2.77783c4.86124,-5.55569 4.86124,-13.88922 -2.08337,-18.056c-1.82297,-0.91147 -3.78549,-1.30127 -5.81613,-1.32382zm-13.39011,3.40723c-0.54364,0.00192 -1.07498,0.00705 -1.60593,0.0217c-3.8486,0.21091 -7.69568,0.50116 -11.54541,0.67276c-2.41867,0.03116 -4.88754,-0.00473 -7.22676,0.69446c-3.17285,2.02515 -5.29396,5.38272 -6.53229,8.87607c-0.16666,0.50345 -0.30807,1.02072 -0.41234,1.54083c3.86218,1.74924 8.17189,1.5618 12.30499,1.41064c2.50439,-0.06696 5.00949,0.24561 7.50888,0.36893c1.7876,0.07916 3.57104,0.32327 5.36038,0.26044c2.19412,-0.07278 4.22598,-1.3168 5.38205,-3.16849c0.99927,-1.58255 1.9447,-3.21933 2.56085,-4.99146c0.49768,-1.59048 0.5896,-3.80087 -1.06339,-4.75272c-1.43857,-0.79446 -3.10013,-0.93906 -4.73105,-0.93317zm2.53915,15.9726c-0.69449,0.69446 -1.38892,0.69446 -2.0834,1.38892c-0.69446,3.47232 8.33356,11.80588 9.72247,4.16678c-3.47232,-1.38892 -5.55573,-2.77786 -7.63907,-5.55569z",
+ "diamonds": "m79.28394,70.5173l69.51914,-69.51918l69.53062,69.51918l-69.53062,69.5193l-69.51914,-69.5193zm-78.28265,78.73502l69.53064,-69.51916l69.51917,69.51916l-69.51917,69.53081l-69.53064,-69.53081zm158.04381,1.41991l69.53076,-69.50788l69.50775,69.50788l-69.50775,69.53059l-69.53076,-69.53059zm-78.26005,78.74646l69.50779,-69.51927l69.53087,69.51927l-69.53087,69.5197l-69.50779,-69.5197z",
+ "dog": "m244.35188,22.54387l-69.54898,69.54889c-119.32899,0.00291 -120.2569,-0.00142 -121.18423,0c-10.16035,0.01348 -20.31404,-0.04446 -30.47281,0.1654c-17.41192,-3.13311 -29.41997,20.08429 -17.10143,32.59326c9.91919,10.04415 24.91881,5.84701 37.58711,6.70858c0.082,39.19679 0.15858,78.39276 0.24066,117.58955c-1.93424,11.60912 7.01076,23.37389 18.92138,24.38115c10.04872,1.3252 21.64701,-4.10141 24.54638,-14.3645c2.0378,-20.77086 0.69009,-41.75818 1.06802,-62.62978c15.7105,0 58.3028,0.55273 93.34407,0.94731c0.05244,10.48698 0.11156,36.08763 0.16484,43.1525c-0.20064,9.60797 -0.94731,36.79358 17.44778,36.82019c18.39429,0.02664 19.96759,-19.29745 19.74867,-23.16328c-0.13904,-5.1078 0.14149,-42.99934 0.54108,-56.44814c2.24173,0.01166 4.87888,0.02997 6.54291,0.02997c-0.00998,-0.00999 -0.01997,-0.01997 -0.02995,-0.02997c0.10487,0.06078 0.2106,0.11987 0.31549,0.18065c0.19894,-16.80684 -0.38959,-50.0226 -0.04497,-66.82692c15.38005,-0.19313 30.76425,-0.09573 46.14514,-0.13486c13.52618,3.45377 34.10559,-4.10139 23.59946,-20.81667c-16.37396,-18.52205 -34.58011,-35.37009 -51.83061,-53.07936l0,-34.62398z",
+ "frame_half": "m1,1l297,0l-98.99899,98.99902l-99.00199,0l0,99.00198l-98.99902,98.99901z",
+ "hand_stop": "m136.25574,297.49808c-29.33714,-5.08954 -54.45634,-27.86633 -62.06976,-56.71431c-3.62096,-14.72525 -1.50079,-30.17319 -2.21442,-45.21799c-0.13461,-38.62221 -0.20337,-77.24464 -0.30453,-115.86696c3.44471,-11.98872 17.98409,-18.29414 29.04424,-12.36688c0.96214,-3.14931 0.25692,-8.79729 0.59418,-12.8885c-1.96137,-11.24498 6.05913,-22.68389 17.70836,-23.44487c6.68523,-0.04347 14.68906,5.03699 11.64235,-6.21321c-2.06573,-11.58701 7.02885,-24.78486 19.46753,-23.71677c11.8866,-1.10308 20.91313,10.99307 19.47894,22.20545c0.55293,6.69356 15.04739,-4.38583 20.11427,3.0555c6.46245,3.83537 10.88301,11.15349 9.66263,18.71955c0.37462,20.72639 -0.50464,41.58417 0.94255,62.21075c10.62856,-5.38028 25.7729,1.23052 27.94981,13.06696c-0.24077,36.77421 0.61372,73.57438 -0.64664,110.32743c-4.27835,37.80429 -40.23309,69.77301 -78.61711,67.50256c-4.25351,0.01132 -8.54422,0.05313 -12.75241,-0.65872zm26.24695,-10.04156c32.22029,-5.44516 57.56776,-36.59567 55.75252,-69.35173c0.24638,-31.65953 1.24834,-63.36566 0.07516,-95.00381c-0.74966,-11.56753 -19.92574,-8.76712 -18.68594,1.90652c-0.00584,23.46449 -0.01172,46.92897 -0.01762,70.39346c-5.97046,6.15695 -16.65688,2.44864 -23.81619,7.45261c-15.91585,6.94403 -26.02902,23.94809 -26.37592,41.0688c-8.5842,13.31046 -12.47054,-8.35147 -7.54663,-15.48785c5.69263,-21.52615 25.72418,-37.58736 47.72688,-39.6965c-0.18001,-49.52237 0.46608,-99.06258 -0.57811,-148.57061c-6.22968,-14.02401 -23.68619,-1.72364 -19.04016,10.55674c-0.45773,37.44105 -0.04761,74.89084 -0.68825,112.32923c-4.16106,6.65674 -12.04573,0.3437 -9.47389,-5.79948c-0.17776,-46.90031 -0.35556,-93.80062 -0.53333,-140.70093c-3.33864,-8.28292 -18.12991,-6.98883 -18.3627,2.10197c-0.18286,48.40011 -0.36572,96.80021 -0.5486,145.20032c-3.89212,5.48285 -11.88664,0.71593 -9.73376,-5.26897c-0.14377,-36.45805 0.40013,-72.93186 -0.55034,-109.37686c-0.24316,-10.84745 -18.40633,-10.5788 -18.64873,-0.51889c-0.36327,37.37112 0.09734,74.76224 -0.99649,112.11712c1.02982,9.51479 -12.37218,4.97615 -9.28424,-2.22137c-0.16375,-25.39479 0.44627,-50.81747 -0.58949,-76.18918c-6.1088,-15.65501 -24.37704,-2.73073 -19.28278,10.2811c0.06127,45.03139 -0.41048,90.08521 0.72834,135.10263c2.79378,34.58762 36.09247,63.06729 70.73276,60.79437c3.26721,-0.13614 6.52469,-0.50925 9.73752,-1.11868z",
+ "L_shape": "m1,1l149,0l0,149l149,0l0,149l-298,0l0,-298z",
+ "lightning_bolt": "m117.48906,0.99793l60.3351,83.60071l-24.88768,9.85823l75.99797,71.63888l-24.88768,11.96198l93.95412,119.94316l-159.33742,-91.91997l30.38835,-12.76016l-99.00077,-58.87717l35.47526,-18.19279l-104.52837,-61.76487l116.49113,-53.48799z",
+ "logo_apple": "m209.28954,1.00088c-43.04727,7.92585 -57.33284,43.96882 -57.8894,64.561c23.68694,1.71168 38.47275,-11.65597 44.5219,-19.4791c9.85237,-11.09263 12.25443,-26.71591 13.36751,-45.0819zm5.28372,71.19604c-31.11621,-0.01418 -48.48506,12.70539 -57.04939,12.84402c-9.82712,-0.76584 -38.46593,-12.28108 -55.16231,-12.46661c-58.47802,1.74345 -75.23289,65.28636 -74.50751,92.61087c4.76329,104.60263 68.59296,131.60016 79.02421,134.12564c8.36713,1.64984 36.57712,-12.89731 57.32939,-12.23529c22.65837,2.3606 38.49214,11.76068 47.58983,11.10309c11.51012,-0.79871 49.05655,-31.14218 60.37299,-77.89201c-22.81836,-19.29358 -36.89403,-36.77824 -38.15468,-53.37267c-0.584,-7.50279 10.70016,-49.91425 28.69514,-61.83392c2.59723,-14.65567 -24.13031,-33.25182 -45.08191,-32.83442c-1.03252,-0.02777 -2.05203,-0.0482 -3.05577,-0.04871z",
+ "man": "m125.90131,25.2503c0,-13.33112 10.79823,-24.12934 24.12934,-24.12934c13.33113,0 24.12932,10.79822 24.12932,24.12934c0,13.33112 -10.79819,24.12934 -24.12932,24.12934c-13.33113,0 -24.12934,-10.79822 -24.12934,-24.12934zm81.12696,68.30144v-12.18601c0,-12.82147 -10.38806,-23.21696 -23.21696,-23.21696h-67.63607c-12.82147,0 -23.21695,10.39549 -23.21695,23.21696v12.18601c-0.02242,0.2766 -0.03739,0.56071 -0.03739,0.84853v70.18918c0,5.4538 4.41839,9.87215 9.87218,9.87215c5.44633,0 9.87589,-4.41837 9.87589,-9.87215v-69.14999h6.62006v79.02961h0.04859v111.66646c0,7.25925 5.89491,13.15787 13.16164,13.15787c7.27048,0 13.16164,-5.89114 13.16164,-13.15787v-111.66646h8.68347v111.66646c0,7.25925 5.89856,13.15787 13.16162,13.15787c7.27045,0 13.16161,-5.89114 13.16161,-13.15787v-111.66646h0.04112v-79.02961h6.62007v69.14623c0,5.45381 4.42955,9.8759 9.8759,9.8759c5.45386,0 9.87218,-4.42209 9.87218,-9.8759v-70.18916c-0.00371,-0.29156 -0.02617,-0.56819 -0.0486,-0.8448z",
+ "maximize_2": "m1,149.99998l67.05,-67.05l0,33.52501l48.425,0l0,-48.425l-33.52501,0l67.05,-67.05l67.04999,67.05l-33.52499,0l0,48.425l48.42502,0l0,-33.52501l67.04997,67.05l-67.04997,67.04999l0,-33.52499l-48.42502,0l0,48.42502l33.52499,0l-67.04999,67.04997l-67.05,-67.04997l33.52501,0l0,-48.42502l-48.425,0l0,33.52499l-67.05,-67.04999z",
+ "moon": "m227,299.94119l0,0c-85.05185,0 -154,-66.92029 -154,-149.4706c0,-82.55034 68.94815,-149.4706 154,-149.4706l0,0c-48.47263,35.28521 -77,90.6619 -77,149.4706c0,58.80869 28.52737,114.18535 77,149.4706z",
+ "mythic_unicorn_2": "m182.0204,297.85391c-5.77818,-7.90314 -14.7635,-8.80438 -16.9241,-20.05347c-1.69348,-6.11859 -17.65829,-14.32483 -8.20955,-3.3428c7.2961,6.61768 15.96432,31.02682 -1.98563,23.31473c-13.65228,-5.01041 -14.2377,-20.48209 -17.89716,-32.06519c-11.90031,-8.25644 3.07674,-25.71408 -9.73651,-36.29276c-10.87482,-11.04288 -3.30119,-31.72456 -18.8404,-39.55457c-7.79965,-3.16566 -11.1757,18.69177 -12.48895,2.70163c-4.27309,-16.17242 -19.36451,7.86156 -29.42789,5.31358c-8.12057,-0.70595 13.58361,-6.35143 3.22626,-7.87068c-6.08933,3.33348 -11.72343,9.09727 -12.68681,-0.44351c-7.3251,-4.35046 -22.68599,-11.29797 -22.28696,-18.20909c6.3611,-1.99829 27.83545,3.78387 24.11403,-4.25029c-6.38573,-2.42343 -7.54573,-9.04803 0.27553,-4.60205c15.41352,0.48352 33.48255,-5.66917 46.30758,6.09853c6.68958,4.11612 13.26701,18.87857 16.84827,4.53223c11.5443,-13.92389 34.83883,-15.10329 41.95536,-33.13124c1.72211,-8.72215 -5.28903,-13.69839 -11.24521,-15.46512c-1.15878,-2.86641 -3.13139,-15.03612 -8.05675,-8.8949c0.22449,-5.37502 4.84473,-18.22859 -5.38927,-12.53831c-1.03801,-11.44846 8.74879,-22.87025 -4.19783,-31.20716c12.13029,2.25027 9.73825,-11.57887 7.09616,-13.77212c7.19073,-1.02106 15.62939,-7.49186 11.66467,-15.50808c7.80894,14.17675 8.07971,-17.19902 14.50877,-3.67512c11.83272,1.93988 -3.67599,-10.57163 7.20721,-7.77902c6.21443,0.21264 4.83423,-6.80917 10.41692,-1.50957c7.3886,-4.03149 -5.66409,-16.21531 6.26559,-7.74985c4.01033,3.484 16.77809,12.60911 14.48726,0.56772c11.33586,12.0923 20.25659,-11.23169 29.67625,-16.06186c3.73633,-4.47003 11.8613,-9.20071 4.36795,-0.66791c-4.97461,10.87669 -21.85179,22.64296 -17.31131,33.45053c-4.10985,3.74163 8.29224,8.44421 -1.58034,7.02768c-5.8488,6.31351 7.84134,18.1257 8.93388,28.06219c-3.13588,6.80826 -15.07657,14.53744 -19.90688,14.29315c1.76543,-8.76564 -2.06178,-20.19066 -13.24036,-15.23595c6.26202,11.45789 14.72818,22.40379 20.03253,34.86404c5.18462,12.24902 13.59059,26.39416 24.64981,10.62966c7.04883,-10.04763 27.18559,-9.90218 21.65419,6.41521c-2.82767,16.0232 4.74286,37.1706 -9.80374,48.20794c-8.77531,16.90973 -18.50392,-6.2874 -11.60965,-15.06308c-1.75673,-2.50781 -3.11575,-4.27809 2.02489,-7.7061c-1.06146,-2.57137 14.7939,-12.24554 6.80286,-18.18176c-9.0885,10.30594 -22.38708,22.23511 -18.69125,37.55475c2.99957,10.26601 -21.73944,27.86615 -19.76117,10.82875c0.44312,-6.62131 9.89648,-19.45415 7.72044,-21.10741c-6.90181,12.95006 -16.71997,25.39136 -31.55621,29.23625c-12.34084,0.73132 -18.80547,10.66779 -12.94504,21.69241c1.11998,15.62238 -7.12646,29.76141 -9.02499,44.972c3.52914,16.13283 25.01552,19.39287 27.93198,35.84959c5.01138,11.05234 -7.52405,9.41898 -13.36446,6.32639zm-30.55545,-48.12944c-1.80891,-7.29253 -5.53151,18.95699 -0.94273,5.02481l0.68695,-2.46143l0.25578,-2.56339z",
+ "page": "m249.3298,298.99744l9.9335,-39.73413l39.73413,-9.93355l-49.66763,49.66768l-248.33237,0l0,-298.00001l298.00001,0l0,248.33234",
+ "people_business_woman_1": "m152.09991,291.25156c-2.47678,-44.58551 4.65103,-89.4209 -0.87244,-133.89311c-8.95648,25.8877 -13.19429,53.17113 -13.68393,80.52692c-0.41364,17.0155 -0.16316,34.03816 -0.23213,51.05714c-6.59424,1.84573 -15.25726,1.21277 -19.31381,7.46753c-5.79991,2.60486 -12.31924,1.35736 -18.48087,1.65521c6.01304,-4.82208 13.37695,-9.59021 13.6609,-18.23849c6.31746,-52.60599 2.67181,-105.66583 3.06088,-158.49306c0.43537,-21.1868 -1.16552,-42.66898 2.64828,-63.61227c2.03822,-10.62624 19.15558,-5.1272 18.60609,-18.67488c3.03041,-11.80116 0.67964,-26.03735 9.52867,-35.60117c10.5938,-7.7376 21.95103,4.42952 20.767,15.48053c1.06621,11.41806 -1.19225,25.92375 9.12468,33.77226c11.50188,2.75379 13.11151,17.72176 18.13281,26.80961c4.23164,10.69022 9.72182,23.87735 0.08774,33.44124c-5.93716,8.68594 -16.90076,16.78377 -12.99744,28.7057c-0.60452,31.03065 -6.76558,61.62357 -9.34036,92.51013c-2.09418,17.62329 -2.81628,35.5533 -6.9491,52.84404c-0.55614,5.69342 -5.84515,19.49838 -12.14343,10.53711c-0.87442,-1.99588 -1.26941,-4.15509 -1.60355,-6.29443zm-31.23076,-126.74179c-4.61314,-4.02649 0.43039,13.47859 0.48324,1.7234l-0.48324,-1.7234l0,0zm6.80929,-33.43718c-1.88333,-6.96362 -7.13425,10.3817 -5.38842,14.89726c-0.28574,6.8293 0.74596,4.17953 2.10389,-0.81731c1.48602,-4.58557 2.79638,-9.27054 3.28453,-14.07996zm61.63647,-23.18116c5.52028,-11.36497 -2.7056,-23.94508 -11.13263,-31.31998c-8.36171,1.6476 -4.1756,17.26677 -4.09579,24.50607c-0.37729,9.19583 11.31773,21.60236 15.22842,6.8139zm-59.09369,-11.57291c-3.00658,-5.39182 -0.968,23.24248 0.49254,8.1709c0.11818,-2.72906 0.0034,-5.48079 -0.49254,-8.1709z",
+ "plant_tree_1": "m122.82124,295.43991c-9.60714,-8.11343 -1.74962,-22.4458 -1.18428,-32.9653c4.14859,-11.24323 3.96359,-85.81235 -10.94936,-86.09872c-15.83897,-4.80884 -33.8653,1.83771 -48.3958,-7.59918c-9.84084,-5.82912 -12.90007,-17.71764 -12.64209,-28.40579c0.19444,-11.07701 -10.96857,-15.73981 -14.56149,-25.02111c-4.85892,-11.57952 -0.66407,-24.81283 7.67092,-33.63805c7.87535,-8.99152 0.96225,-20.76784 4.99341,-30.60822c5.74977,-13.3805 22.92119,-7.46461 32.14548,-16.67288c9.90182,-6.99356 18.35265,-19.09785 32.07681,-17.29906c13.25371,0.83774 28.05221,3.21463 39.26759,-5.80136c10.45538,-8.74133 25.08881,-13.41753 38.21471,-8.04486c12.4521,3.84588 26.61226,11.87612 26.66945,26.64145c-3.79947,15.14795 10.55962,14.96229 20.88582,17.05112c12.22475,5.50745 24.82689,14.06517 29.88231,26.94686c1.34924,14.72554 -15.32854,26.93484 -7.76337,41.96729c2.96521,14.64848 -9.76962,22.78136 -18.92447,30.72028c-3.76666,14.33221 -18.04883,25.98621 -33.39958,22.57785c-12.36432,-2.02824 -19.98886,11.49191 -32.59709,10.30693c-8.35739,8.60075 -2.66228,82.40933 -1.11533,92.59302c6.29385,12.59021 -2.48013,26.51376 -16.65036,26.0885c-11.10333,1.33105 -23.19679,1.95465 -33.62328,-2.73877z",
+ "rectangle_2_rounded": "m50.66998,1l198.6639,0l0,0c13.17268,0 25.80577,5.2328 35.12022,14.54726c9.31445,9.31446 14.54727,21.94758 14.54727,35.12021l0,248.33141c0,0.00134 -0.00116,0.00247 -0.0025,0.00247l-297.99637,-0.00247l0,0c-0.00136,0 -0.0025,-0.0011 -0.0025,-0.0025l0.0025,-248.3289l0,0c0,-27.43059 22.23686,-49.66747 49.66748,-49.66747z",
+ "rectangle_3_rounded": "m50.66972,1l248.33028,0c0.0007,0 0.00134,0.00024 0.00177,0.00072c0.00049,0.00048 0.00076,0.00108 0.00076,0.0018l-0.00253,248.32779c0,27.43044 -22.23679,49.66722 -49.66722,49.66722l-248.3303,0l0,0c-0.00138,0 -0.00248,-0.00113 -0.00248,-0.0025l0.00248,-248.32779l0,0c0,-27.43045 22.23678,-49.66723 49.66724,-49.66723z",
+ "ribbon_up": "m0.99887,298.99884l37.37486,-124.16641l-37.37486,-124.16684l74.74943,0l0,-37.25092l0,0c0,-6.85776 4.18383,-12.41691 9.34372,-12.41691l130.81201,0c5.16063,0 9.34372,5.55916 9.34372,12.41691l0,37.25092l0,0l74.74974,0l-37.37488,124.16684l37.37488,124.16641l-102.7809,0c-5.15987,0 -9.3437,-5.55884 -9.3437,-12.41577c0,-6.85834 4.18384,-12.41724 9.3437,-12.41724l18.68744,0c5.16063,0 9.34372,-5.5603 9.34372,-12.41721c0,-6.85834 -4.18309,-12.41722 -9.34372,-12.41722l-130.81201,0c-5.15989,0 -9.34372,5.55888 -9.34372,12.41722c0,6.85693 4.18383,12.41721 9.34372,12.41721l18.68743,0c5.1606,0 9.34372,5.5589 9.34372,12.41724c0,6.85693 -4.18312,12.41577 -9.34372,12.41577zm121.79819,-30.86179l-0.71873,-217.77046m-149.49945,214.90504l0.71875,-213.47234m110.6871,199.14535l0.71873,41.54834m-74.03098,-1.43271l-0.71874,-40.11563",
+ "sflowchart_filter2": "m1,75.5l298,0l-149,74.5l149,74.5l-298,0l149,-74.5l-149,-74.5z",
+ "sign_no": "m0.99794,149.99951l0,0c0,-82.29002 66.70967,-148.99969 148.99992,-148.99969l0,0c39.51779,0 77.41692,15.69819 105.35898,43.64116c27.94318,27.94297 43.64124,65.84185 43.64124,105.35853l0,0c0,82.29103 -66.7092,149.00024 -149.00021,149.00024l0,0c-82.29025,0 -148.99992,-66.70921 -148.99992,-149.00024zm240.6012,66.65504l0,0c32.80489,-45.08388 27.92851,-107.33437 -11.49672,-146.75905c-39.42525,-39.42501 -101.67574,-44.30139 -146.75847,-11.49616l158.25519,158.25521zm-183.20167,-133.30872c-32.80512,45.08364 -27.92886,107.33413 11.49615,146.75825c39.4249,39.42525 101.67541,44.30159 146.75814,11.49672l-158.2543,-158.25497z",
+ "skull": "m74.9404,81.44109c-2.88919,16.35929 -10.26919,31.99403 -10.76614,48.86361c0.66122,9.76746 -5.89156,15.01402 -14.86213,14.8293c-9.64813,10.00099 1.19087,25.80647 12.10749,29.84357c11.14103,7.47832 24.96226,-0.87791 35.99846,5.83044c14.65424,11.4554 20.77205,31.76607 15.71635,49.57211c-5.02672,14.69893 20.70476,9.35306 11.02628,-2.39693c-7.47506,-11.48471 14.09103,-7.68764 8.56998,3.21603c-1.04326,8.75262 6.45616,11.58562 3.11867,20.06531c8.69472,4.98558 -0.72885,7.77708 -6.02475,8.71843c-12.40178,6.18225 2.24324,-11.07452 -7.58144,-16.17874c-8.99694,1.95532 -2.90059,17.02136 -5.98875,15.28125c-6.3575,-4.97824 -6.35281,-23.59047 -17.02285,-11.44621c-3.54128,-14.96387 2.92009,-30.54814 -2.05737,-45.42514c2.03897,-11.11034 -15.50281,-14.9426 -13.28409,-2.05647c0.88449,19.66696 -5.0876,39.29475 -1.66005,58.86481c4.72071,12.07065 17.92378,17.50833 26.2104,26.82291c6.80557,7.18207 15.6284,14.86087 26.22089,12.5997c12.0141,-0.52078 24.05035,-1.63034 36.01024,0.2771c15.04311,0.47446 26.52666,-11.41623 39.36443,-17.5242c15.0918,-11.98355 12.71564,-33.38867 11.21118,-50.43889c-1.84476,-10.52664 2.20334,-21.05807 1.44894,-31.48618c-10.88037,-13.31276 -19.80722,10.08708 -16.70779,20.14043c-0.00076,12.64635 2.42783,28.93701 -9.63577,37.17496c-9.95572,-0.25104 -19.43069,3.36517 -29.4632,1.4744c-8.14081,4.83435 -21.32692,4.71021 -24.01404,-6.79811c-1.07281,-10.22015 3.55807,-20.93494 -2.73401,-30.47318c5.52835,4.7614 15.17361,-4.11226 9.79822,6.56248c-6.55643,8.68922 5.55173,22.07874 10.10989,9.25331c1.51227,-8.60512 -6.54141,-20.02596 6.69714,-18.18237c2.6998,3.03528 -9.21959,24.26701 7.07346,18.90152c11.61606,-2.54445 -2.06659,-20.76607 13.66382,-20.82939c7.61295,-8.9626 5.56317,-25.76184 17.20825,-32.56114c12.98419,-8.78706 33.2569,-2.44315 42.52423,-17.32399c7.89911,-7.61507 4.18182,-28.72154 -9.44128,-21.72794c-17.02448,1.65962 -3.51318,-23.0582 -3.98819,-32.32024c4.01126,-8.06691 -4.87137,-25.04774 -1.81268,-26.84933c5.77948,8.84253 7.84946,19.18484 6.60651,29.51878c-0.10681,8.76352 -3.8233,32.51385 8.36014,17.87288c4.12442,-10.20347 2.92487,-21.76073 5.86331,-32.37626c5.66748,-22.91865 -4.48026,-45.85004 -15.79309,-65.262c-9.63495,-10.45038 -21.86679,-18.78104 -33.35342,-26.98327c-19.32092,-7.26658 -40.65421,-8.56836 -61.06006,-6.74718c-18.04979,3.12863 -37.13738,6.42709 -51.51633,18.73374c-14.01352,8.25707 -27.43441,19.22373 -32.97453,35.08961c-4.82798,12.78156 -13.28239,25.798 -9.43994,39.99647c3.67479,11.83601 1.72576,24.12813 2.32075,36.22574c6.26442,13.82637 12.1788,-7.07504 11.59255,-13.98853c0.3468,-13.11021 7.26362,-24.71465 12.36033,-36.35318zm115.06042,28.12622c12.88235,0.92311 29.19336,8.09689 29.54492,23.0528c1.95883,15.00865 -10.16846,29.55684 -25.7099,28.08501c-14.11661,-1.15955 -23.14499,-13.35332 -22.20761,-27.06258c-4.7262,-9.82969 2.6286,-20.35741 12.49942,-22.61709c1.91415,-0.64365 3.88168,-1.12543 5.87317,-1.45815zm-86.93419,1.27835c14.94448,-2.65778 31.94749,6.61306 31.99739,23.15527c1.40359,15.99194 -15.57494,19.12508 -27.15695,23.1313c-8.01422,5.17467 -16.3391,0.35667 -22.99829,-4.85698c-8.63997,-9.0434 -6.10048,-27.26721 3.02245,-35.52229c4.42388,-3.27404 9.90028,-4.56108 15.1354,-5.9073zm51.1378,42.18812c7.2348,9.94383 15.92023,25.10751 6.56407,36.39339c-8.30571,6.66107 -9.35284,-9.47466 -18.07048,-1.8754c-8.17816,-7.1624 -0.63536,-21.73717 5.10291,-29.01329c1.8913,-2.09525 4.05559,-3.93987 6.4035,-5.5047z",
+ "star_32": "m1,150l37.78866,-10.95375l-34.9264,-18.11479l39.19976,-3.37057l-30.72019,-24.58047l39.1037,4.34019l-25.33452,-30.10049l37.5051,11.88636l-18.97492,-34.46539l34.46528,18.97503l-11.88614,-37.50511l30.10025,25.33441l-4.34019,-39.10359l24.58048,30.72008l3.37057,-39.19964l18.11479,34.92639l10.95375,-37.78866l10.95375,37.78866l18.11479,-34.92639l3.37057,39.19964l24.58047,-30.72008l-4.34018,39.10359l30.10023,-25.33441l-11.88614,37.50511l34.4653,-18.97503l-18.97491,34.46539l37.50508,-11.88636l-25.33452,30.10049l39.10347,-4.34019l-30.71994,24.58047l39.1994,3.37057l-34.92581,18.11479l37.78842,10.95375l-37.78842,10.95375l34.92581,18.11479l-39.1994,3.37057l30.71994,24.58047l-39.10347,-4.34018l25.33452,30.10025l-37.50508,-11.88615l18.97491,34.4653l-34.4653,-18.97493l11.88614,37.5051l-30.10023,-25.33452l4.34018,39.10347l-24.58047,-30.71994l-3.37057,39.1994l-18.11479,-34.92581l-10.95375,37.78842l-10.95375,-37.78842l-18.11479,34.92581l-3.37057,-39.1994l-24.58048,30.71994l4.34019,-39.10347l-30.10025,25.33452l11.88614,-37.5051l-34.46528,18.97493l18.97492,-34.4653l-37.5051,11.88615l25.33452,-30.10025l-39.1037,4.34018l30.72019,-24.58047l-39.19976,-3.37057l34.9264,-18.11479l-37.78866,-10.95375z",
+ "sun": "m298.99939,149.99919l-60.12755,21.3835l0,-42.76601l60.12755,21.38251zm-43.65198,-105.36193l-27.38881,57.64266l-30.23897,-30.23995l57.62778,-27.40271zm-105.34804,-43.63768l21.38251,60.12764l-42.76602,0l21.38351,-60.12764zm-105.36263,43.63768l57.64236,27.40271l-30.23955,30.23995l-27.40281,-57.64266zm-43.63767,105.36193l60.12774,-21.38251l0,42.76601l-60.12774,-21.3835zm43.63767,105.34903l27.40281,-57.62877l30.23955,30.23996l-57.64236,27.38881zm105.36263,43.65096l-21.38351,-60.12753l42.76602,0l-21.38251,60.12753zm105.34804,-43.65096l-57.62778,-27.38881l30.23897,-30.23996l27.38881,57.62877zm-179.84834,-105.34903l0,0c0,-41.14515 33.35516,-74.5 74.50031,-74.5c41.14514,0 74.5,33.35485 74.5,74.5c0,41.14514 -33.35486,74.49998 -74.5,74.49998c-41.14514,0 -74.50031,-33.35484 -74.50031,-74.49998z",
+ "woman": "m150.04984,49.03255c13.33249,0 24.15346,-10.81348 24.15346,-24.15346c0,-13.34748 -10.82097,-24.16844 -24.15346,-24.16844c-13.34375,0 -24.16843,10.82096 -24.16843,24.16844c0,13.33998 10.82095,24.15346 24.16843,24.15346zm67.74049,104.1672l-21.67561,-80.39177c-0.20212,-0.72988 -0.48662,-1.42607 -0.83093,-2.06987c-2.46291,-7.53088 -9.53339,-12.9844 -17.88399,-12.9844h-54.86088c-8.70618,0 -16.01627,5.9214 -18.16845,13.95758c-0.14598,0.35184 -0.26575,0.7224 -0.37429,1.10417l-21.2901,80.38803c-1.41861,5.2701 1.71053,10.6862 6.98811,12.1048c5.27014,1.4111 10.68626,-1.71803 12.10487,-6.98813l16.71989,-63.14786h6.96569l-30.34438,114.25453h28.5927v78.87959c0,6.06738 4.91077,10.9819 10.98564,10.9819c6.05989,0 10.9819,-4.9108 10.9819,-10.9819v-78.87959h8.73613v78.87959c0,6.06738 4.91826,10.9819 10.99315,10.9819c6.05988,0 10.9819,-4.9108 10.9819,-10.9819v-78.87959h28.57767l-30.45665,-114.25453h7.14911l17.02679,63.14786c1.41859,5.2701 6.83472,8.39923 12.10481,6.98813c5.2589,-1.41859 8.38803,-6.83842 6.97693,-12.10854z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/music.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/music.json.svn-base
new file mode 100644
index 000000000..fe31aed7e
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/music.json.svn-base
@@ -0,0 +1,21 @@
+{"data": {
+ "clef_alto": "m51.25065,150.28749c0,-49.53207 0,-99.06413 0,-148.5962c11.59261,0 23.18523,0 34.77784,0c0,99.06413 0,198.12827 0,297.1924c-11.59261,0 -23.18522,0 -34.77784,0c0,-49.53209 0,-99.06413 0,-148.59621zm51.37634,0c0,-49.53207 0,-99.06413 0,-148.5962c8.48285,-2.46703 12.93837,1.84261 11.08508,10.0007c0.12527,45.40251 0.25053,90.80502 0.37581,136.20751c21.44767,-15.32626 29.57346,-41.86327 36.21976,-66.10667c3.81448,15.78812 9.88112,35.01518 27.29865,40.16045c16.60112,4.98381 31.30354,-10.63891 31.13045,-26.64445c2.89955,-20.45341 3.30077,-41.70258 -1.14742,-61.93042c-4.16455,-12.79745 -16.64639,-23.36595 -30.52771,-22.52039c-11.42384,-5.25948 -24.23628,10.96936 -9.59547,16.90924c12.31264,13.08186 -1.99968,35.47687 -19.11742,30.23324c-16.59583,-3.55596 -21.00951,-25.43777 -11.40723,-37.80838c13.77419,-17.97563 39.16574,-20.24264 60.03438,-17.62625c27.15413,3.08944 47.80745,27.56302 50.7352,54.02297c3.73869,23.61245 -2.35521,50.29027 -22.12251,65.37829c-16.57411,13.95533 -40.93645,15.69794 -60.41183,7.1722c-4.73631,7.1261 -9.47264,14.25217 -14.20895,21.37825c4.65338,6.95274 9.30673,13.90549 13.96008,20.8582c23.58311,-10.57065 54.40877,-5.07518 69.99907,16.43117c21.95821,28.96715 17.67499,75.52599 -10.84692,98.64314c-17.91376,14.62869 -43.09233,14.67899 -64.38158,8.83109c-16.11131,-4.2995 -31.82996,-19.966 -26.84735,-37.82117c2.51375,-15.55998 23.9128,-21.41389 34.33803,-9.83356c14.19543,12.82462 -6.37968,25.74036 -5.32516,38.10141c15.79561,11.97195 41.38054,0.70062 45.05746,-18.39487c5.84576,-20.96526 4.47285,-43.25116 1.61388,-64.56879c-1.53316,-14.33195 -14.00139,-28.78069 -29.45882,-24.78352c-16.25957,3.69221 -24.37509,20.62003 -27.1602,35.64745c-3.41434,11.00523 -4.50349,-10.5222 -7.16806,-14.04636c-5.53896,-17.66304 -15.20212,-35.01096 -30.07851,-46.1468c-1.53252,4.76282 -0.13866,10.70403 -0.62897,15.96893c-0.11874,43.15994 -0.2375,86.31984 -0.35623,129.47978c-8.48793,2.46848 -12.93407,-1.8443 -11.0575,-10.00076c0,-46.19846 0,-92.39696 0,-138.59544z",
+ "clef_bass": "m21.53929,297.24106c0.11552,-13.50244 21.89277,-17.95071 30.83244,-27.31851c34.50853,-23.15955 68.13189,-49.8976 89.28437,-86.39645c22.47179,-37.29227 34.65842,-82.97259 25.51732,-126.22972c-4.84746,-26.84145 -30.93637,-48.32386 -58.5412,-44.96438c-18.18078,2.48732 -39.18159,6.6724 -49.70108,23.45858c-11.41858,8.57642 -5.13639,28.67733 10.08619,21.04295c19.47556,-7.4344 43.93666,7.72539 43.16644,29.21231c0.02258,20.3737 -20.60109,34.74615 -39.82058,32.83379c-21.40677,-0.21405 -42.59771,-17.48695 -42.15028,-39.87929c-1.48358,-36.0903 29.74187,-65.56665 63.16554,-73.13066c29.88613,-9.31284 64.6309,-5.56545 89.8325,13.80772c18.75227,12.81883 33.51952,32.25211 36.60045,55.18989c6.65193,29.82199 -1.94455,60.59844 -16.85703,86.54317c-19.16537,34.9521 -48.44911,63.56561 -82.44233,84.09172c-31.5721,20.13449 -64.41224,38.31845 -98.38529,54.07944c-0.19582,-0.78018 -0.39163,-1.56039 -0.58745,-2.34058zm226.81013,-147.1503c-16.25441,-7.36092 -12.66826,-37.2715 6.2514,-37.94421c14.1568,-3.30239 27.38025,11.49424 23.01007,25.17739c-2.75677,12.80446 -18.12839,18.35408 -29.26147,12.76682zm0,-81.82211c-16.25441,-7.36089 -12.66826,-37.2715 6.2514,-37.9442c14.1568,-3.30238 27.38025,11.49425 23.01007,25.17739c-2.82837,12.84788 -18.04926,18.33069 -29.26147,12.76681z",
+ "clef_treble": "m142.57787,298.08936c-19.93291,-3.16858 -30.69543,-32.78793 -10.77837,-43.63799c20.76305,-10.6983 33.11169,27.38725 10.4319,31.10985c-12.41878,4.65247 16.12379,12.44363 21.44362,4.62054c16.62259,-8.04572 14.05481,-28.98639 10.0555,-43.73428c-1.38792,-11.29834 -3.1236,-23.3942 -17.37872,-16.97299c-34.39165,2.76706 -61.61951,-32.12309 -58.88461,-64.7627c0.92851,-30.78641 26.14601,-51.87253 44.81895,-73.25146c-6.13037,-27.96899 -7.98138,-60.28084 9.78998,-84.65368c16.36949,-19.81244 24.67825,16.44271 27.44722,28.74505c6.15059,28.7567 -6.11317,58.97542 -26.51985,79.24646c1.94853,9.61536 3.86572,19.23715 5.85146,28.84491c21.56471,-4.16351 42.14922,14.0585 43.32542,35.40215c3.33209,19.27364 -9.02991,37.47516 -25.91515,45.75842c-0.27765,16.55051 8.86742,33.71834 5.58147,50.80913c-3.15567,17.67035 -22.97263,26.33539 -39.26881,22.47659zm22.51283,-75.40413c6.10963,-11.46864 -4.97238,-31.72308 -5.58083,-46.4445c0.2393,-25.67101 -26.99069,4.97273 -18.89308,17.57916c2.40038,7.45953 23.23523,21.13914 4.09677,12.70238c-19.98106,-11.95877 -19.06588,-42.72807 -0.80893,-55.71979c15.31693,-3.39279 5.96193,-23.83228 3.07584,-30.54592c-18.81245,17.14481 -40.13555,38.73356 -36.89114,66.48257c2.4439,26.00902 30.79729,41.78694 55.00137,35.94611zm12.65782,-4.96449c17.94263,-11.51868 17.35378,-41.74863 -2.27676,-51.12454c-20.94589,-11.06784 -6.59929,17.92804 -6.2155,28.9649c2.90686,4.22505 1.26024,28.84393 8.49226,22.15964zm-22.11331,-138.56764c11.03699,-13.35171 23.65346,-32.62746 15.90224,-50.28019c-16.69221,-11.01859 -25.9682,18.77171 -26.37872,31.81623c-0.15186,8.45836 -1.39836,37.61288 10.47649,18.46396l0,0z",
+ "note_16th": "m88.44206,298.30295c-13.87988,-2.82538 -24.35809,-16.50861 -20.88289,-30.73529c4.91499,-19.9595 23.53616,-33.76636 42.17206,-40.32825c12.41348,-4.12247 26.50006,-3.4993 38.15588,2.63036c1.0408,-76.23686 0.44647,-152.49294 0.60452,-228.73842c4.20728,-0.00103 9.6062,-1.35928 8.46304,4.73352c0.58707,13.69153 7.31578,26.22541 17.65646,35.05743c23.06891,21.49232 49.01909,44.8303 54.31831,77.58647c1.50432,13.81924 -0.10796,27.74641 -3.17799,41.24139c9.09166,16.96843 8.54382,37.52667 4.8522,55.93042c-2.39383,9.71803 -6.29839,19.07953 -11.26178,27.74855c-11.71941,5.45538 1.38908,-8.91675 1.22467,-14.09427c6.33897,-15.55397 7.06616,-32.87975 4.18297,-49.26376c-6.28082,-23.96758 -30.02579,-35.67821 -49.12051,-48.20921c-6.90894,-2.70374 -21.67717,-19.0106 -18.74876,-3.03152c-0.64005,43.31421 -0.53076,86.63467 -0.73126,129.95221c-8.01517,20.08276 -26.40254,35.40967 -47.75954,39.25299c-6.54287,1.13068 -13.39496,1.54416 -19.94739,0.2674zm133.16364,-163.77284c0.19041,-24.65028 -18.17068,-44.59457 -36.16211,-59.2127c-9.00275,-6.78731 -18.53905,-13.97798 -28.66229,-18.37087c0.62265,14.17498 7.10901,27.98635 14.87303,39.75766c14.63148,19.60416 36.7207,32.71725 48.97745,54.30224c1.46973,-5.35919 1.02641,-10.98389 0.97392,-16.47633z",
+ "note_2_16th": "m49.3958,299.54056c-16.81947,-3.04166 -22.61933,-24.29047 -12.59162,-37.02081c13.30804,-19.68834 41.77522,-32.96074 64.07959,-20.53789c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.99711c55.61466,-11.21983 111.34956,-21.8626 166.98527,-32.98482c-0.12048,77.7042 -0.24097,155.40843 -0.36145,233.1126c-8.71588,23.50243 -36.87907,39.79991 -61.40202,32.51219c-14.59976,-4.3703 -18.09988,-23.21532 -9.97012,-34.76195c11.13289,-17.22395 31.85399,-29.0497 52.68539,-25.82347c5.94469,-0.60136 14.69865,9.02304 12.18605,-1.86462c0,-54.46642 0,-108.93282 0,-163.39921c-51.0519,10.27703 -102.20471,20.06591 -153.28023,30.23172c-0.17435,63.38239 0.43399,126.77441 -0.45506,190.14903c-1.62524,19.24988 -20.10281,32.38318 -37.35132,37.51443c-6.81397,1.14908 -13.90893,1.86209 -20.78043,0.8699zm133.17406,-258.40903c26.23065,-5.16204 52.47366,-10.26209 78.69298,-15.48133c3.33676,-13.29303 -11.59628,-4.66015 -18.89926,-4.33564c-44.78732,8.84114 -89.60051,17.55139 -134.38097,26.42687c-3.33676,13.29303 11.59627,4.66015 18.89925,4.33564c18.56081,-3.65804 37.12405,-7.30357 55.688,-10.94555z",
+ "note_2_32nd": "m49.39585,299.53995c-16.81947,-3.04169 -22.61932,-24.29047 -12.59161,-37.02081c13.30804,-19.68835 41.77521,-32.96077 64.07959,-20.53792c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.9971c55.61465,-11.21984 111.34956,-21.86261 166.98528,-32.98483c-0.12048,77.70421 -0.24097,155.40842 -0.36145,233.11262c-8.71591,23.50241 -36.8791,39.7999 -61.40204,32.51218c-14.59978,-4.3703 -18.09987,-23.21533 -9.97015,-34.76193c11.13292,-17.22395 31.854,-29.0497 52.68541,-25.82347c5.9447,-0.60136 14.69868,9.02304 12.18605,-1.86462c0,-46.71117 0,-93.42232 0,-140.13348c-51.05188,10.27702 -102.20473,20.0659 -153.28023,30.23172c-0.22871,56.35212 0.56696,112.72466 -0.58765,169.06043c-3.51923,18.91183 -22.11423,32.00891 -40.05743,35.8262c-5.92716,0.70624 -12.00983,1.31848 -17.94172,0.38101zm133.17405,-235.14331c26.23065,-5.16204 52.47366,-10.26208 78.69298,-15.48132c3.33676,-13.29303 -11.59628,-4.66015 -18.89923,-4.33564c-44.78734,8.84113 -89.60054,17.55138 -134.381,26.42687c-3.33677,13.29303 11.59627,4.66015 18.89925,4.33564c18.56078,-3.65805 37.12405,-7.30357 55.688,-10.94555zm0,-23.26575c26.23065,-5.16204 52.47366,-10.26209 78.69298,-15.48133c3.33676,-13.29302 -11.59628,-4.66015 -18.89923,-4.33563c-44.78734,8.84113 -89.60054,17.55139 -134.381,26.42687c-3.33677,13.29303 11.59627,4.66016 18.89925,4.33564c18.56078,-3.65804 37.12405,-7.30358 55.688,-10.94555z",
+ "note_2_64th": "m49.39639,299.53995c-16.81947,-3.04169 -22.61932,-24.29047 -12.59161,-37.02081c13.30804,-19.68835 41.77522,-32.9608 64.07959,-20.53792c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.99711c55.61465,-11.21983 111.34957,-21.86261 166.98528,-32.98482c-0.12048,77.70421 -0.24097,155.40842 -0.36145,233.11262c-8.71591,23.50241 -36.8791,39.7999 -61.40205,32.51218c-14.59976,-4.3703 -18.09987,-23.21533 -9.97012,-34.76193c11.1329,-17.22395 31.85399,-29.0497 52.68539,-25.8235c5.94467,-0.60133 14.69868,9.02307 12.18605,-1.86459c0,-38.95592 0,-77.91182 0,-116.86773c-51.0519,10.27703 -102.20474,20.06591 -153.28024,30.23172c-0.23563,48.66071 0.58183,97.34513 -0.58977,145.98728c-3.69252,18.80173 -22.14742,31.83179 -40.05531,35.63361c-5.92716,0.70627 -12.00984,1.31848 -17.94173,0.38101zm133.17406,-211.87756c26.23067,-5.16204 52.47368,-10.26209 78.69298,-15.48133c3.33676,-13.29303 -11.59627,-4.66015 -18.89925,-4.33564c-44.78732,8.84113 -89.60051,17.55138 -134.38099,26.42688c-3.33676,13.29302 11.59627,4.66015 18.89925,4.33562c18.56079,-3.65804 37.12405,-7.30356 55.688,-10.94553zm0,-23.26575c26.23067,-5.16204 52.47368,-10.26208 78.69298,-15.48132c3.33676,-13.29303 -11.59627,-4.66015 -18.89925,-4.33564c-44.78732,8.84113 -89.60051,17.55138 -134.38099,26.42687c-3.33676,13.29303 11.59627,4.66015 18.89925,4.33564c18.56079,-3.65805 37.12405,-7.30357 55.688,-10.94555zm0,-23.26575c26.23067,-5.16204 52.47368,-10.26209 78.69298,-15.48133c3.33676,-13.29302 -11.59627,-4.66015 -18.89925,-4.33563c-44.78732,8.84113 -89.60051,17.55139 -134.38099,26.42687c-3.33676,13.29303 11.59627,4.66016 18.89925,4.33564c18.56079,-3.65804 37.12405,-7.30357 55.688,-10.94554z",
+ "note_2_8th": "m49.39571,299.54196c-16.81947,-3.04169 -22.61933,-24.29047 -12.59162,-37.02081c13.30804,-19.68834 41.77522,-32.96077 64.07959,-20.53792c0.44447,-69.55862 0.18803,-139.12106 0.25597,-208.68139c55.61337,-11.00192 111.35248,-21.38966 166.98529,-32.30051c-0.12051,77.70421 -0.24097,155.40842 -0.36145,233.11263c-8.71594,23.50241 -36.8791,39.7999 -61.40207,32.51218c-14.59976,-4.3703 -18.09987,-23.21533 -9.97012,-34.76193c11.1329,-17.22395 31.854,-29.0497 52.68538,-25.82347c5.9447,-0.60136 14.69872,9.02304 12.18608,-1.86462c-0.20636,-61.46065 0.51324,-122.93768 -0.53098,-184.38539c-9.07608,-3.36956 -25.21706,4.38308 -36.83795,5.01031c-38.86079,7.56314 -77.80466,14.7255 -116.5762,22.73074c1.16985,68.10055 0.62434,136.24279 0.45018,204.35774c2.05843,15.54877 -6.51154,30.19547 -19.54225,38.30072c-11.24453,8.17932 -25.1371,11.12784 -38.82984,9.35175z",
+ "note_3_16th": "m15.05685,274.22351c-14.31707,-1.91919 -18.42601,-20.36026 -8.93697,-29.99135c10.38879,-13.67648 30.27091,-22.30884 46.50806,-13.88651c0.66153,-52.11798 0.28726,-104.24728 0.38611,-156.37085c81.97754,-16.40272 164.06679,-32.26359 246.07988,-48.4937c-0.2363,57.62228 0.57657,115.26416 -0.57095,172.87157c-1.96915,14.86053 -17.13602,24.73001 -30.79037,27.8163c-11.96523,3.66803 -28.81345,-4.27913 -25.97942,-18.60889c3.50381,-15.4984 19.49126,-26.6657 34.85991,-28.02376c8.59586,-2.14986 20.61923,9.25734 16.69226,-5.91415c0.09525,-39.33675 -0.07153,-78.67297 -0.13177,-118.00977c-38.18202,7.50178 -76.35632,15.04294 -114.54555,22.50813c-0.23268,48.18274 0.55394,96.38557 -0.57504,144.55286c-2.30531,15.49788 -18.60167,25.74417 -33.19453,27.71848c-14.44766,3.90948 -29.61349,-11.1328 -21.45115,-25.13463c9.01589,-16.79831 32.00478,-28.23689 49.88007,-18.48071c0.13591,-41.88866 0.57454,-83.7979 -0.20747,-125.67833c-9.66763,-2.10095 -24.53024,4.47319 -35.97192,5.4189c-26.23273,5.15636 -52.45877,10.34411 -78.68841,15.51694c-0.35831,49.24326 0.12716,98.5107 -1.08934,147.73389c-6.17624,16.23714 -25.20985,26.82423 -42.27338,24.45558l0,0zm101.53641,-195.02805c18.87659,-3.72421 37.75267,-7.44825 56.62927,-11.17233c3.17946,-13.298 -14.34059,-1.80056 -21.35852,-2.54169c-31.16307,6.26984 -62.32049,12.56754 -93.49695,18.76997c-1.80596,13.61728 18.79422,-0.36912 26.46645,1.18459c10.58865,-2.07109 21.17471,-4.15247 31.75974,-6.24054zm119.43625,-23.77348c18.94301,-3.80857 37.98227,-7.27608 56.8645,-11.31118c2.82892,-13.23786 -18.20215,0.42724 -25.56601,-1.09475c-29.37257,5.74051 -58.85892,11.05022 -88.16765,17.02801c-3.13623,14.00632 18.26294,0.04643 25.92744,1.45249c10.31323,-2.02774 20.62746,-4.05219 30.94171,-6.07457z",
+ "note_3_32th": "m15.05685,274.22333c-14.31707,-1.91882 -18.42601,-20.36018 -8.93697,-29.99106c10.3888,-13.67676 30.27089,-22.30908 46.50806,-13.88647c0.66166,-52.11824 0.28732,-104.24765 0.38611,-156.37099c81.97754,-16.40273 164.06694,-32.2636 246.07988,-48.4937c-0.2363,57.6225 0.57663,115.26395 -0.57123,172.87143c-1.96881,14.86089 -17.13586,24.73018 -30.79025,27.81644c-11.96498,3.66806 -28.81322,-4.27921 -25.97935,-18.60878c3.50368,-15.49834 19.49123,-26.6657 34.86018,-28.02408c8.67697,-2.20874 20.51364,9.40097 16.68222,-5.83759c-0.09845,-33.39989 0.78769,-66.86396 -0.50803,-100.22556c-37.99194,7.33447 -75.93604,14.91556 -113.90202,22.38341c-0.40428,43.27432 0.22905,86.58281 -1.10269,129.83c-6.66052,18.05263 -29.74564,30.16772 -47.98743,22.50237c-14.38366,-7.43967 -7.95995,-27.06667 2.9687,-34.4792c10.34322,-10.82147 29.63336,-12.35156 40.562,-8.05225c0.25528,-36.18434 0.11931,-72.37016 0.15388,-108.55522c-38.40674,7.73776 -76.89246,15.09384 -115.31775,22.74432c-0.2578,42.95952 0.63174,85.96188 -0.70086,128.88727c-5.20541,16.91916 -25.24538,27.88303 -42.40446,25.48965zm99.21976,-176.85336c19.73389,-3.88507 39.47778,-7.71994 59.20331,-11.64712c1.63908,-13.07382 -17.1093,-0.27914 -24.42491,-1.54683c-30.21908,5.91451 -60.4242,11.89998 -90.63543,17.85444c-2.77443,12.63378 14.55762,1.2752 21.41661,2.10594c11.47932,-2.25961 22.95964,-4.51424 34.44042,-6.76643zm2.31665,-18.17461c18.87643,-3.72409 37.75285,-7.44817 56.62927,-11.17224c3.17953,-13.298 -14.34081,-1.80056 -21.35843,-2.5417c-31.16306,6.26989 -62.32067,12.56752 -93.49722,18.77c-1.80564,13.61723 18.7942,-0.36929 26.46687,1.1845c10.58833,-2.07081 21.17455,-4.15248 31.7595,-6.24056zm119.82236,-6.10279c19.00511,-3.73167 38.01025,-7.46333 57.01538,-11.195c2.25488,-12.51775 -14.43167,-1.31337 -21.22391,-2.14778c-31.1899,6.14801 -62.39635,12.21269 -93.57906,18.3969c-0.48149,12.89743 19.70058,-0.51178 28.22481,0.73691c9.85522,-1.92534 19.70935,-3.85638 29.56277,-5.79102zm-0.38611,-17.67059c18.94318,-3.80859 37.98227,-7.27608 56.86438,-11.31118c2.82913,-13.23785 -18.20197,0.42724 -25.56577,-1.09474c-29.37247,5.74053 -58.85913,11.0502 -88.1676,17.028c-3.13618,14.00631 18.26254,0.04646 25.92732,1.45247c10.31334,-2.02773 20.6273,-4.05214 30.94167,-6.07454z",
+ "note_3_64th": "m15.05833,274.22296c-14.317,-1.9187 -18.42625,-20.3604 -8.93719,-29.99104c10.38896,-13.67708 30.27131,-22.30949 46.50857,-13.88661c0.66169,-52.1188 0.28732,-104.24842 0.38611,-156.37186c81.97786,-16.40303 164.06815,-32.26401 246.08122,-48.49419c-0.23633,57.62288 0.57712,115.26462 -0.57092,172.87238c-1.96869,14.86116 -17.13614,24.73065 -30.79056,27.81697c-11.96483,3.66806 -28.81317,-4.27963 -25.97963,-18.60901c3.50381,-15.49847 19.49141,-26.66583 34.8607,-28.02443c7.61099,-2.92159 20.18073,9.65431 16.68201,-4.30438c0.21829,-27.96678 0.10867,-55.9346 0.13544,-83.90191c-38.27235,7.48128 -76.53494,15.0156 -114.80267,22.52314c-0.22958,36.48441 0.55602,72.99504 -0.58997,109.45938c-3.18001,15.89902 -20.29759,26.40845 -35.74976,27.23267c-14.89929,2.89737 -27.08599,-14.42255 -17.93506,-27.04372c9.64191,-15.67046 31.65898,-26.22467 48.93309,-16.72427c0.33206,-30.58104 0.14311,-61.16617 0.19254,-91.74873c-38.39642,7.82673 -76.92161,15.04803 -115.31823,22.87476c-0.25736,36.94054 0.62957,73.92738 -0.70087,110.83084c-5.2055,16.9194 -25.24553,27.88339 -42.40482,25.49002l0,0zm101.38524,-159.31403c18.83891,-3.75145 37.70946,-7.35722 56.50069,-11.3393c2.95145,-13.53962 -17.91554,0.08701 -25.35307,-1.30814c-29.80621,5.87558 -59.6283,11.67136 -89.42722,17.5835c-2.26596,13.04952 15.28052,1.23864 22.46973,2.11949c11.93564,-2.35683 23.87244,-4.70798 35.80987,-7.05554zm-2.1648,-17.54025c19.73418,-3.88531 39.47784,-7.72015 59.20348,-11.64717c1.63916,-13.07402 -17.10936,-0.27902 -24.42487,-1.54701c-30.21927,5.9147 -60.42458,11.89994 -90.63596,17.8548c-2.77449,12.63354 14.55767,1.27519 21.41672,2.10558c11.47937,-2.25951 22.95979,-4.51389 34.44062,-6.7662zm123.16869,-6.50159c18.66148,-3.66445 37.32301,-7.3289 55.98506,-10.99284c1.75296,-13.03485 -16.50751,-0.89732 -23.95999,-1.87753c-30.19955,5.92758 -60.38982,11.90097 -90.58421,17.8548c-3.55789,11.04535 8.5943,3.94657 14.87352,3.58826c14.56204,-2.85567 29.12408,-5.71393 43.68562,-8.57269zm-120.85203,-11.67342c18.8765,-3.72417 37.75323,-7.44803 56.62942,-11.17215c3.18001,-13.29807 -14.34068,-1.80056 -21.35812,-2.54169c-31.16348,6.26993 -62.3213,12.56734 -93.49802,18.77035c-1.80566,13.61685 18.79432,-0.36964 26.46704,1.18407c10.58839,-2.07059 21.17467,-4.1525 31.75968,-6.24059zm119.82291,-6.10266c19.0054,-3.73169 38.01082,-7.46337 57.01573,-11.19506c2.25491,-12.51782 -14.4313,-1.3134 -21.22379,-2.14781c-31.19003,6.14807 -62.39655,12.21279 -93.5799,18.39685c-0.48135,12.89765 19.70091,-0.51173 28.22522,0.73721c9.8551,-1.92541 19.70967,-3.85648 29.56273,-5.7912zm-0.38611,-17.67071c18.94363,-3.8086 37.9825,-7.27608 56.86485,-11.31125c2.82944,-13.23789 -18.20175,0.42725 -25.56567,-1.09475c-29.37276,5.7406 -58.85979,11.05029 -88.16818,17.02811c-3.13626,14.0062 18.26253,0.04649 25.9276,1.4525c10.31329,-2.02775 20.62709,-4.05215 30.94141,-6.07461z",
+ "note_3_8th": "m15.02169,274.2272c-14.31707,-1.91879 -18.42601,-20.36015 -8.93697,-29.99103c10.3888,-13.67676 30.27088,-22.3091 46.50806,-13.88649c0.66166,-52.11824 0.28732,-104.24764 0.38611,-156.37097c81.97754,-16.40273 164.06694,-32.2636 246.07985,-48.4937c-0.2363,57.6225 0.57663,115.26395 -0.5712,172.87141c-1.96884,14.86089 -17.13589,24.73018 -30.79025,27.81644c-11.965,3.66806 -28.81323,-4.27919 -25.97937,-18.60878c3.50368,-15.49834 19.49124,-26.66568 34.8602,-28.02408c8.2316,-2.53128 20.41348,9.51646 16.65692,-5.23953c-0.07721,-45.31436 0.85016,-90.69309 -0.45593,-135.96806c-37.90379,6.83744 -76.18053,14.4211 -114.18623,21.74638c-0.22679,54.0925 0.53969,108.20272 -0.57019,162.28107c-1.77496,14.91302 -17.02997,24.75598 -30.69292,27.71687c-13.90182,4.60379 -31.50981,-7.66069 -24.80507,-22.93971c8.1866,-17.99985 32.25569,-30.36769 50.72748,-20.3566c0.32813,-48.569 0.14423,-97.14091 0.19258,-145.71125c-38.34256,7.86306 -76.73341,15.50194 -115.11303,23.18613c-0.70871,54.82025 0.60002,109.69145 -0.90556,164.48224c-5.27564,16.97054 -25.17379,27.85027 -42.40448,25.48964z",
+ "note_32nd": "m96.7115,298.78342c-12.19044,-1.97687 -21.5796,-13.65018 -18.87752,-26.14322c3.19898,-16.4884 18.16196,-28.11014 32.8273,-34.56326c11.8622,-4.83313 26.35187,-5.63437 37.63535,1.13913c0.44954,-79.35593 0.19681,-158.71518 0.26346,-238.07262c3.98198,-0.1698 8.54333,-0.99947 7.45644,4.60387c0.32353,13.2127 8.16176,24.35488 17.90031,32.62089c20.68701,19.0793 43.62003,41.1507 45.44289,71.03391c1.94933,11.70761 -4.32771,23.23071 -1.67,34.59584c2.53688,11.20206 1.78056,22.8308 0.17831,34.09036c7.53368,20.20854 5.71452,43.47615 -2.49284,63.20886c0.75815,6.16689 -13.8391,16.22797 -7.44476,5.95023c8.63434,-18.74539 13.17647,-41.8004 3.81317,-61.08943c-11.33986,-18.69514 -31.97612,-28.28085 -48.89772,-41.04474c-11.778,-11.86667 -5.42902,11.18993 -7.18364,18.06325c-0.26184,33.71661 -0.28255,67.43445 -0.41075,101.15173c-5.27325,12.84436 -14.94577,23.71875 -27.82796,29.29456c-9.44402,4.40988 -20.29373,7.32529 -30.71203,5.16064zm114.86545,-145.34879c-7.29857,-26.18551 -30.51866,-43.93251 -53.18727,-56.72259c-6.20538,-0.86809 1.83978,14.15399 3.5831,18.80585c8.11926,15.92772 24.10783,25.32948 35.63724,38.48439c5.02966,4.16844 10.75517,12.77017 14.6803,15.07132c0.57034,-5.18866 0.22502,-10.51091 -0.71336,-15.63898zm0.91826,-35.72012c-0.11551,-22.00919 -16.64085,-39.55235 -32.65781,-52.65142c-7.46819,-4.94457 -16.49954,-13.27054 -24.16978,-14.26883c1.45969,12.25124 6.9503,24.24821 17.03656,31.76259c14.34996,13.93145 29.52126,27.82796 39.47783,45.32379c1.14618,-3.04146 0.13112,-6.92123 0.3132,-10.16613z",
+ "note_4th": "m126.58881,297.40149c-11.87886,-2.65546 -23.26585,-13.54025 -21.01448,-26.56512c0.1731,-16.24911 13.85612,-27.71617 25.94878,-36.50977c15.62231,-10.78831 37.15717,-14.20154 54.34061,-5.04248c1.02979,-75.90828 0.44815,-151.83525 0.60191,-227.75206c3.00182,0.70564 9.53603,-2.12083 8.02534,3.09698c-0.14726,78.93155 0.33716,157.8673 -0.38513,236.79541c-0.07584,10.70851 -0.22026,22.31233 -7.75522,30.804c-13.91748,17.52454 -37.15509,29.1525 -59.76181,25.17303z",
+ "note_64th": "m104.92412,299.31976c-12.00094,-1.27536 -20.94641,-13.79388 -17.06551,-25.49271c6.43043,-17.60776 24.98182,-29.7767 43.42287,-30.74879c7.6006,-2.50558 20.88075,10.01114 17.93382,-3.27145c0.48503,-79.47305 0.24155,-158.94821 0.30153,-238.42232c5.75809,-1.70799 6.23006,2.55972 6.32732,7.33913c1.78415,17.85563 19.14293,26.89136 29.82072,39.25721c15.39714,15.12255 27.5349,36.04512 24.51741,58.34038c-3.08612,10.64033 -0.83701,20.84729 0.30066,31.5748c0.06851,11.58006 -4.18433,22.62605 -0.40593,34.00638c1.68036,11.01886 -3.23894,22.12428 2.03442,32.51251c2.40002,18.25101 0.69795,38.47595 -10.52008,53.59502c-7.11406,1.93207 2.97337,-8.35378 2.33067,-11.88858c6.3118,-18.25085 7.27405,-41.79056 -8.5262,-55.64728c-12.36734,-10.82431 -26.50575,-19.43405 -39.98901,-28.77931c-0.71652,35.81755 -0.4848,71.65158 -0.68907,107.47679c-5.08496,13.03387 -16.00215,23.09641 -29.22493,27.57315c-6.53331,2.3526 -13.63996,3.72845 -20.5687,2.57507zm98.72386,-126.48091c-6.34319,-22.74789 -26.51086,-38.16362 -46.20412,-49.27464c-5.25957,0.57732 2.32552,14.64314 4.87614,19.57021c8.86444,13.06609 22.37558,21.98311 32.7415,33.78232c3.44377,1.45969 10.43367,15.90742 9.37975,5.93784c0.13239,-3.35165 -0.09975,-6.73082 -0.79327,-10.01572zm0.7843,-31.02991c0.01227,-19.15482 -14.53879,-34.37045 -28.41721,-45.78492c-6.00691,-3.41928 -16.78343,-14.40513 -20.81033,-10.93629c1.48004,11.20951 7.52783,21.1048 16.47551,27.9065c11.85971,11.75211 24.67769,23.13779 32.59132,38.04211c0.77432,-2.77734 0.04828,-6.25352 0.16071,-9.2274zm0.01279,-39.15976c-0.40309,-21.71703 -17.74644,-38.41104 -34.56728,-49.83583c-4.69977,-2.50358 -18.46306,-14.73891 -13.78862,-1.7836c3.12802,17.13914 19.8609,25.3779 30.46255,37.43516c7.16287,5.47251 13.39691,18.87303 18.00247,22.03555c0.14136,-2.61625 -0.03749,-5.23595 -0.10913,-7.85128z",
+ "note_8th": "m92.11929,299.44888c-12.88673,-2.17523 -24.85642,-14.0065 -22.42534,-27.8176c1.23042,-15.16177 13.28207,-27.36446 25.40788,-35.40434c16.13786,-10.9864 38.20284,-15.06764 55.98708,-5.59207c1.04205,-76.42476 0.44817,-152.86866 0.60602,-229.30206c11.21484,-2.71548 7.58873,11.96767 10.1358,18.75797c2.43044,19.96716 15.82285,35.63469 29.15343,49.62502c16.53877,17.58521 34.10059,36.23084 39.47629,60.59399c5.87012,28.26657 -3.51422,57.18356 -15.69261,82.51581c-0.88187,8.11874 -15.77403,19.86469 -8.67888,5.1937c11.94699,-25.09727 21.81674,-54.00095 13.66216,-81.79225c-7.76553,-27.73048 -31.97011,-50.88958 -60.78398,-55.04219c-0.18622,58.55498 0.45346,117.12103 -0.68288,175.66663c-2.83272,17.24548 -17.81155,30.04147 -32.83268,37.34811c-10.35778,4.50974 -22.04797,7.23831 -33.33228,5.2493z",
+ "note_half": "m126.15042,298.46863c-16.82465,-2.00256 -23.94094,-21.72537 -20.50175,-36.48892c5.91676,-23.32147 29.06407,-39.43811 52.28738,-42.05833c8.81128,-0.72736 18.52644,-0.60411 25.78337,4.94891c5.95566,-2.36537 1.76544,-11.69408 2.85246,-17.2854c0,-68.81003 0,-137.6201 0,-206.43012c14.97716,-2.18183 5.30603,19.02521 7.94768,27.71113c-0.09924,75.95386 0.62134,151.91534 -0.76007,227.86198c-7.30341,28.38443 -39.39244,46.36703 -67.60907,41.74075zm2.8452,-12.40747c22.98492,-7.3089 44.37535,-22.56259 55.31068,-44.49013c0.95541,-13.55527 -16.00528,-10.73553 -23.6718,-6.15868c-13.5024,6.76553 -26.21068,15.65268 -36.74068,26.51123c-6.99238,6.4256 -15.89267,26.17618 0.78696,25.05563l2.30408,-0.3252l2.01074,-0.59286l0,0z",
+ "note_whole": "m130.51953,195.65829c-18.47874,-2.9818 -38.13104,-9.41365 -49.81914,-24.96915c-4.87284,-6.5025 -6.85786,-14.78229 -6.23731,-22.81049c-0.81288,-10.41815 5.23877,-19.78279 13.11027,-26.04227c15.71593,-12.69998 36.4436,-17.12403 56.18739,-18.21444c21.01479,-0.84168 42.85126,2.6237 61.20964,13.32044c11.19275,6.86285 21.10484,18.66567 20.54733,32.45548c0.612,8.09668 -0.91914,16.68852 -6.59294,22.84065c-11.24144,13.63681 -28.92738,19.59387 -45.72455,22.87505c-14.06622,2.54445 -28.55254,2.69426 -42.68069,0.54472zm34.33258,-7.95905c9.06644,-1.9348 15.01314,-11.03741 14.88672,-20.03276c1.54852,-18.89767 -4.73529,-39.56404 -20.09192,-51.52234c-8.61502,-6.06224 -20.8895,-6.65757 -30.00668,-1.42353c-6.79661,4.10276 -9.33514,12.23845 -9.31819,19.7824c-0.73656,16.04378 3.97748,32.8201 14.66045,45.0217c7.49542,7.87076 19.3475,12.08484 29.86963,8.17453z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/object.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/object.json.svn-base
new file mode 100644
index 000000000..71ec7ec18
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/object.json.svn-base
@@ -0,0 +1,19 @@
+{"data": {
+ "ball": "m1.36762,144.54343c-0.61252,-24.33647 11.43968,-48.24649 31.71385,-61.85355c33.0555,-25.12355 76.68359,-36.57172 117.69406,-29.65477c20.30775,-3.13354 29.29549,17.94864 22.15137,34.18353c-11.04268,10.79923 -30.25032,0.52836 -44.5518,6.11385c-46.3661,5.97041 -92.1348,26.12911 -123.47163,61.54787c-0.19116,-3.78908 -5.04203,-6.31387 -3.53584,-10.33693zm0.56006,21.59657c2.46893,-17.16783 19.59014,-26.10648 31.49495,-36.53964c40.07716,-28.36518 90.31613,-39.61352 138.89854,-37.70576c1.20387,19.56051 -8.00084,38.23036 -19.07559,53.7263c-15.20721,8.47826 -34.11861,-1.17561 -50.23914,6.54221c-28.27367,6.8441 -59.74523,15.46761 -77.84163,40.11734c-6.57559,19.79451 -20.47401,-0.35286 -21.54921,-12.00313c-1.52846,-4.62877 -1.3158,-9.384 -1.6879,-14.13731zm7.76269,-58.70418c2.42006,-21.53997 16.61662,-39.35048 29.64042,-55.76294c14.68114,-17.49181 34.66698,-30.31521 57.12629,-35.01287c17.80165,-4.64955 36.14864,-6.58389 54.39959,-8.53692c13.84103,10.63111 22.64574,29.11792 20.32661,46.60463c-10.75017,2.72292 -29.7578,-6.48294 -44.25362,-4.23798c-41.11142,0.38721 -83.13954,16.86419 -110.9226,47.60359c-2.31326,2.96635 -4.3931,6.11006 -6.31669,9.34248zm-2.20363,84.97105c15.37329,12.3277 15.8773,33.69405 25.32488,49.77684c-11.32475,-14.57886 -21.29314,-31.61081 -25.32488,-49.77684zm12.17333,11.7446c4.82258,-13.28815 19.94093,-31.96367 32.55468,-30.57486c5.04242,12.98813 7.22698,27.06129 15.42273,38.77007c22.00548,40.39473 62.27551,75.33984 110.15025,76.43997c7.82913,1.58691 28.58411,-3.6853 27.74063,-1.50394c-20.00963,9.82742 -43.17618,11.98239 -65.22374,11.19174c-40.94611,-2.71915 -81.7309,-22.38535 -106.34646,-55.65858c-6.96676,-11.95032 -10.92698,-25.33659 -14.29809,-38.66251zm33.70255,-33.88084c11.04849,-5.13829 31.74819,-20.7682 40.05036,-8.17067c20.26116,39.90601 54.51507,73.83781 96.68548,89.7942c21.8947,7.30453 46.52556,7.18939 67.87685,-1.92662c-8.90472,13.82597 -23.64018,22.69292 -37.52655,30.83714c-35.49046,15.14874 -78.39111,6.93469 -108.29421,-16.68286c-28.94243,-22.9118 -51.66176,-55.70389 -58.71476,-92.285l-0.04169,-0.84726l-0.03548,-0.71893l0,0l0,0zm14.80587,-143.69432c26.85995,-18.47492 60.14433,-27.13922 92.60995,-24.83766c-16.61871,10.60714 -37.47179,6.57748 -55.695,12.32051c-12.71339,2.76803 -25.33243,6.4903 -36.91495,12.51714zm23.19239,130.17215c17.68391,-8.37067 37.80864,-8.2348 56.92004,-7.08942c11.52194,17.94525 19.73788,38.80402 37.6284,51.74121c20.84937,18.617 51.18832,23.87227 77.45898,15.12419c9.02167,-6.09496 19.03778,-2.20023 14.1109,9.88971c-5.93085,20.07378 -26.98962,28.88977 -46.28781,29.86346c-39.48146,3.94382 -75.60028,-18.48682 -102.27098,-45.57831c-15.55914,-15.57706 -28.70033,-33.74123 -37.55954,-53.95085zm59.9713,-149.25921c14.39017,-11.41684 33.98842,-1.08634 48.71259,4.37706c14.6449,12.52997 16.60739,33.37817 20.47758,51.17717c6.47049,41.78263 3.85324,86.6684 -15.69031,124.8082c-4.67027,13.36929 -18.09242,20.61154 -26.69522,6.15724c-9.99724,-11.02568 -17.64142,-23.85532 -24.85538,-36.77173c-4.26648,-12.35977 9.69913,-21.07201 12.62395,-32.37317c5.6987,-11.2672 7.1479,-23.94022 7.7876,-36.27168c2.68518,-18.44756 0.04341,-37.58501 -4.80806,-55.44724c-3.40224,-9.88385 -8.92734,-19.45691 -17.55275,-25.65586zm41.36089,197.33399c28.32747,-32.0033 32.81847,-77.44762 30.6862,-118.36129c-1.29825,-24.12249 -4.96657,-49.05092 -17.68674,-70.0582c13.14473,0.40704 27.28206,12.75397 37.58124,21.8466c29.18982,37.11403 37.77368,91.40852 15.58273,134.05255c-8.72922,17.24329 -20.55305,32.80717 -34.43375,46.22929c-11.62009,-0.9548 -23.39864,-5.3515 -31.72969,-13.70895zm32.30334,13.89389c30.50691,-29.40305 52.59978,-71.66214 46.00664,-114.99303c-2.62479,-20.29454 -10.03497,-39.89902 -21.13239,-57.06778c20.32477,12.66527 31.62595,35.09759 41.79111,55.93748c14.61285,36.42265 6.66864,80.8159 -19.44537,109.92648c-13.41086,7.60643 -32.33356,8.77071 -47.21999,6.19685zm50.22404,-6.80072c10.46527,-18.28113 22.34006,-36.81323 23.43076,-58.50224c1.62656,-7.25171 -0.89633,14.22787 -1.77191,18.74721c-2.78329,15.96013 -6.41766,32.99399 -16.3092,46.01608c-2.27573,-1.26239 -1.2605,-7.4102 -5.34964,-6.26105z",
+ "bolt": "m178.14388,74.00616l-108.49727,68.79685l107.15599,23.63498l-99.04335,73.85934l-39.98779,-12.47227l28.36194,71.19228l112.7131,-31.06076l-47.58928,-12.98325l129.22581,-106.08589l-118.12698,-19.22734l114.07071,-71.6874l-65.0681,-10.76349l70.86891,-45.56109l-26.03423,-0.65478l-109.97452,62.50492l51.92505,10.50792z",
+ "bulb": "m148.28435,1.01645c-19.71313,-0.08707 -41.0383,4.93402 -53.87904,21.08005c-10.00002,11.90277 -20.52196,24.53872 -22.82235,40.47736c-5.18059,28.1529 -4.92928,57.93743 3.64143,85.4047c4.96631,13.63997 16.45209,23.50325 23.37698,36.11604c9.14968,13.20706 13.47519,29.26166 12.26267,45.27029c24.17088,0 48.34173,0 72.5126,0c0.07924,-23.9402 14.94635,-43.62665 28.19687,-62.22926c9.25131,-10.94521 15.23657,-24.20433 17.34691,-38.38177c4.07767,-25.40971 5.00331,-52.60092 -4.43568,-76.9665c-8.96201,-18.6421 -19.94247,-39.09958 -40.93047,-46.16479c-11.25407,-4.11034 -23.39734,-4.80265 -35.26991,-4.60611zm-36.97603,226.70836c24.34058,0 48.68115,0 73.0217,0c-4.36798,8.93942 -9.9079,18.74007 -6.84158,28.88942c-4.05983,8.82452 1.13719,17.61151 -5.54364,25.68655c-2.46005,11.06699 -16.46573,11.92905 -25.84717,12.23193c-10.13806,1.12546 -21.40701,-1.68927 -25.2739,-12.25085c-8.04343,-5.6481 1.65114,-12.52795 -4.58124,-18.87732c7.18661,-7.80208 -5.34555,-11.88156 -0.88777,-20.35059c-1.22452,-5.78517 -5.73284,-8.48584 -4.0464,-15.32915zm-0.15865,0.0249c24.34056,0 48.68114,0 73.02171,0c-1.83408,8.68544 -9.76653,16.89687 -6.75067,25.63821c1.71628,7.25716 -5.42461,13.19765 -1.14021,20.86113c-3.26378,9.1944 -9.79655,19.57855 -20.90657,19.54898c-10.7323,0.01825 -25.30243,3.58121 -31.95258,-7.11847c-2.51509,-6.44772 -10.6368,-10.31369 -4.40095,-17.31061c-7.73209,-5.79929 5.18552,-14.38748 -4.75156,-18.20934c4.72482,-9.15317 -5.09683,-14.41997 -3.11917,-23.40991l0,0zm-0.30553,-0.19208c24.34058,0 48.68115,0 73.02173,0c-1.83408,8.68544 -9.76651,16.89688 -6.75064,25.63823c1.71623,7.25714 -5.42465,13.19763 -1.14023,20.86111c-4.2211,6.69464 -8.74136,17.62585 -17.58711,18.4115c-9.70837,0.11472 -19.41676,0.2294 -29.12514,0.34415c-6.65182,-7.13144 -16.14077,-15.45563 -10.92694,-24.96432c-7.35572,-5.15384 5.77059,-13.49446 -4.37249,-16.88078c4.72483,-9.15317 -5.09684,-14.41994 -3.11918,-23.40988l0,0zm19.95543,64.05962c10.3149,0 20.62982,0 30.94472,0c-3.3429,2.41727 -5.36609,8.04688 -10.20465,6.82349c-4.97464,-0.38892 -10.5618,0.58282 -15.16096,-0.64023c-1.8597,-2.0611 -3.71941,-4.12219 -5.5791,-6.18326zm11.23076,-64.53401c-3.56728,-52.49875 -7.20926,-74.75493 -20.64074,-106.52489c-13.43148,-31.76996 -2.88758,-21.17014 27.12348,-24.60654c30.01106,-3.43639 13.46907,9.90684 13.48128,34.43486c0.01221,24.52803 1.7489,36.82391 3.69955,58.10826c-1.9278,20.61055 1.80084,20.75101 -2.79076,37.25708",
+ "car_smart": "m28.92024,238.37814c-20.54175,-8.15092 -27.36674,-32.3504 -27.6178,-52.52942c-2.7836,-14.94118 14.71887,-25.93048 8.95686,-41.2937c-2.18657,-22.71175 4.68564,-45.20703 14.9548,-65.22043c0.32475,-12.85873 10.87969,-17.84956 22.37955,-17.11762c37.15603,-4.71741 74.98359,-4.84966 112.15372,-0.39277c22.18198,4.11681 39.85953,19.32546 58.61859,30.81274c11.63586,8.63808 25.21985,14.32888 36.92355,22.63131c12.64026,10.62529 24.51556,22.47708 33.27448,36.57193c3.15143,14.09033 7.38165,28.09947 9.54742,42.2829c4.39661,13.27223 -4.6037,21.62047 -11.41214,30.84103c-10.34,12.57306 -29.90723,17.53416 -44.71561,10.78313c-10.28528,-3.75465 -14.07077,-19.70746 -25.7968,-18.60466c-44.20906,-0.65964 -88.41812,-1.31926 -132.62719,-1.97884c-10.24168,13.44736 -24.40165,28.14365 -42.91705,26.05086c-4.02312,-0.33679 -7.97831,-1.33774 -11.7224,-2.83646z",
+ "car": "m26.77284,183.48201c-8.08779,-6.80998 -23.25337,0.56996 -25.08215,-11.86069c-3.52016,-11.04616 7.23365,-19.6761 14.38957,-26.36473c12.51913,-6.23676 26.95447,-6.99092 40.49323,-9.84883c16.2238,-2.35439 33.11552,-4.36668 47.10119,-13.71207c15.9294,-9.9651 33.67083,-18.25834 52.86141,-18.11141c26.44141,-0.91634 53.7986,-0.02856 78.2453,11.26058c15.36688,6.93465 31.87709,10.4591 48.27711,13.85143c13.95395,1.83385 10.70889,16.88237 15.35007,26.15973c3.54291,10.65329 -4.11594,21.25732 -15.32654,21.59605c-11.85318,2.69405 -25.72552,2.95921 -34.00009,13.30453c-8.47623,9.38277 -23.69647,9.05888 -32.32811,0.09547c-3.56866,-2.21568 -5.9512,-7.58008 -10.70335,-6.65411c-44.31184,0.24008 -88.64653,-0.63266 -132.93902,0.78894c-11.57394,-0.92139 -16.38131,13.44077 -28.69251,12.44249c-6.30352,0.19554 -12.27285,-9.98318 -17.64611,-12.94739z",
+ "coud": "m193.50864,67.27344c-28.56444,0 -53.08249,14.81322 -65.08365,36.1982c-4.7932,-2.67596 -10.08009,-4.29625 -15.72245,-4.29625c-17.06268,0 -31.26126,13.72618 -35.64974,32.35901c-7.49058,-2.96072 -16.20005,-4.7533 -25.50328,-4.7533c-27.90971,0 -50.54951,15.27039 -50.54951,34.09579c0,16.99312 18.56764,30.96303 42.68829,33.54732c-1.08106,1.83421 -1.91961,3.65059 -1.91961,5.57599c0,18.02431 49.38134,32.72462 110.23999,32.72462c60.85864,0 110.24005,-14.70032 110.23999,-32.72462c0,-1.21274 -0.75272,-2.29501 -1.18832,-3.47357c2.66562,0.6629 5.30496,1.37115 8.22687,1.37115c16.28061,0.00005 29.5253,-11.06223 29.5253,-24.6806c0,-13.61838 -13.24469,-24.68059 -29.5253,-24.68059c-1.99515,0 -3.69165,0.68915 -5.57599,1.00551c1.64767,-5.44531 2.74228,-11.00153 2.74228,-16.91078c0,-36.04859 -32.63087,-65.35786 -72.94485,-65.35786z",
+ "drop": "m101.50413,119.73441c-169.70167,149.53423 29.55369,277.04852 105.31838,71.70643l58.26123,-190.46983l-163.57961,118.7634z",
+ "drop": "m115.15536,295.759c-42.01334,-15.78687 -72.12711,-65.94934 -65.28346,-108.74701c4.3154,-26.98718 95.35947,-190.81818 103.3105,-185.90417c2.59511,1.60386 25.68835,39.79974 51.31831,84.87975c41.0565,72.21342 46.5999,85.67899 46.5999,113.19665c0,55.77716 -44.6394,101.46498 -98.23825,100.54555c-15.6409,-0.26834 -32.60906,-2.05518 -37.707,-3.97076zm42.09262,-28.05386c1.39066,-7.22116 -1.85785,-10.74289 -9.90955,-10.74289c-18.35065,0 -43.80598,-23.24161 -49.49309,-45.18889c-6.0666,-23.41179 -22.15186,-26.19615 -24.52774,-4.24574c-4.57746,42.29059 76.21872,100.22086 83.93037,60.17752z",
+ "electric_guitar": "m168.96899,1.09303c-2.62799,0.19977 -5.017,2.04496 -6.96899,4.55579c0.009,13.46278 -11.116,25.03858 -14.875,34.35928c2.30499,1.8475 1.13,2.9332 -1.03101,4.4286c-0.17,2.5165 0.468,4.9685 2.468,7.3554c-2.591,41.8755 -6.024,92.17889 -8.718,134.4599c6.14801,0.138 12.354,1.117 18.81201,0.687c-0.007,-32.55499 2.539,-84.562 3.282,-116.00749c-0.101,-10.2094 -0.504,-24.029 13.12399,-28.8618c-6.94499,-14.7833 5.922,-35.70095 -5.562,-40.97666c-0.146,-0.00122 -0.293,-0.00885 -0.438,0c-0.03099,0.00187 -0.062,-0.00236 -0.093,0l0,-0.00001zm11.692,171.76396c-4.715,6.66701 -11.79199,10.17 -14.146,13.60501c-5.37599,8.46799 -14.379,-3.16701 -26.89,2.99599c0.065,-1.02399 0.153,-2.172 0.21899,-3.20599c-0.07199,-0.002 -0.14699,0.00101 -0.21899,0c-6.659,1.013 -12.157,-7.713 -12.594,-15.44901c5.55199,-11.89 -14.242,-18.006 -19.5,-5.82899c-3.943,13.605 -0.41,27.51199 4.78201,40.672c5.933,16.162 -8.871,30.179 -13.2192,45.17601c-4.1375,9.502 -4.2709,20.46999 2.68719,29.192c9.486,13.58398 29.413,18.62799 47.563,18.758c3.23401,0.224 6.44801,0.414 9.68701,0.58499c57.61699,3.284 34.35399,-35.13699 25.282,-68.41299c-5.82201,-21.66299 1.48199,-36.38 6.269,-42.614c2.659,-7.35001 6.02899,-23 -9.92101,-15.472l0,-0.00101zm-34.567,-128.4203c2.43501,-11.918 -8.10399,0.709 0,0z",
+ "guitar": "m158.45264,1.00012c-0.96039,0.00612 -1.8884,0.06411 -2.73161,0.18457c-4.49716,0.64245 -8.99768,2.5655 -8.99768,2.5655c0,0 0.00569,8.99612 -0.63676,15.42064c-0.64244,6.42453 -3.21147,17.34015 -3.21147,17.34015l3.15611,6.32144l0.05536,-1.172l10.62189,1.86414l0.94128,0.05537c0,0 1.28059,-1.28413 2.56551,-3.21148c1.2849,-1.92736 3.85747,-3.21148 3.85747,-3.21148c0,0 0.63675,-9.63641 0.63675,-16.70339c0,-7.06698 2.57472,-18.63212 2.57472,-18.63212c0,0 -4.66991,-0.84783 -8.83156,-0.82133zm-1.74417,42.52442l-10.62189,-0.58139l-0.05536,-0.11074l-5.5278,113.65688c0.19376,0.03734 0.44296,0.08304 0.44296,0.08304c0.14801,2.18161 0.8121,3.84209 1.8549,5.14021l11.84926,5.41707c0.3562,0.09476 0.71249,0.18806 1.07048,0.28609l1.28276,-123.83578l-0.29532,-0.05537zm-0.98744,123.89115l0,0.20302l-1.07048,-0.48911c-4.80661,-1.27875 -9.3821,-2.34575 -11.84926,-5.41707l-2.5009,-1.14432l0.20303,-4.07893c-2.16553,-0.41753 -15.40038,-2.83867 -20.1179,-0.47989c-5.13962,2.56979 -8.99552,6.42279 -10.28043,14.77466c-1.2849,8.3519 2.57119,23.77351 1.92873,34.05275c-0.64246,10.27924 -7.71416,19.91469 -10.92641,28.26657c-3.21227,8.35188 -6.4202,17.99007 -2.5655,32.12404c3.85472,14.13391 17.99164,23.77151 25.70107,26.9838c7.70942,3.21225 23.7631,5.14023 23.7631,5.14023c0,0 15.42752,2.58041 25.06432,1.93796c20.23672,-3.64624 28.72404,-15.65756 29.98303,-30.66595c1.259,-15.00839 -4.71521,-33.01251 -13.40884,-48.65207c-9.50552,-17.10013 8.59656,-39.76326 -0.76596,-52.52802c-9.74182,-13.28188 -16.9409,8.64334 -23.78156,3.87593c-2.77655,-1.93504 -6.09895,-3.00655 -9.37605,-3.90359z",
+ "helicopter": "m145.07504,214.22588c7.36339,2.46503 20.68225,-9.04681 7.26401,-9.72079c-9.08205,-5.71648 20.13416,-1.63675 8.22827,-13.70961c-12.73747,-2.77332 -22.69479,-12.46857 -27.12979,-24.871c-5.18111,-13.36012 -22.04633,-9.68964 -33.09622,-13.54991c-22.05075,-3.93678 -44.07657,-8.59007 -66.50366,-9.73877c-7.45861,8.40495 -10.97594,26.46114 -24.24853,25.75703c-13.26779,-6.6758 0.56035,-23.43509 -3.41489,-33.00934c-7.79329,-2.62592 -6.3066,-7.72096 1.2938,-8.36586c11.59587,-8.00312 1.94812,-23.47349 -0.57486,-34.01581c-6.13778,-10.01295 7.00565,-18.8414 12.01386,-7.02641c6.38165,12.3224 10.0863,25.85204 15.15507,38.7706c1.5816,8.28716 13.30507,3.58878 19.44516,6.06101c25.89155,2.78554 51.80775,5.58556 77.83869,6.66318c13.03992,-5.6261 26.8783,-10.34038 41.29993,-8.34114c10.08574,3.05644 15.78185,-0.7104 15.3338,-11.13895c5.72609,-15.02095 -14.03151,-8.3312 -22.93935,-10.54208c-35.53757,-1.72837 -71.18015,-2.25171 -106.70476,-0.12757c-7.88696,-1.96813 10.41693,-1.78943 13.19444,-2.24187c37.48436,-1.98021 75.04819,-1.00611 112.54227,-2.69012c10.81163,-3.98792 21.54251,3.11311 32.56555,1.91049c27.80304,1.13907 55.63103,1.5356 83.45552,1.62198c-7.86588,5.84674 -22.53885,0.05771 -32.94354,1.5061c-20.90826,-0.64194 -41.94905,-1.24406 -62.73434,1.6021c-8.09567,7.82163 -3.84563,24.5245 6.28453,28.41502c10.32359,5.55025 20.91692,10.41565 30.31529,17.0117c5.93991,11.31316 22.72864,20.80537 17.77679,35.05132c-5.67494,11.7886 -26.25294,4.37625 -31.4632,7.69153c3.85466,6.8309 17.16597,7.52176 19.55997,10.01913c-13.12518,3.78056 -0.61014,11.85339 6.85498,9.29091c9.21201,2.18106 -9.36668,3.71298 -12.4339,2.99583c-14.92371,0.12004 -29.83833,-0.52202 -44.7583,-0.72722c14.41679,-0.6433 28.87468,-0.63033 43.24721,-2.05975c-3.35245,-13.78374 -21.0649,-7.04161 -31.27078,-9.43388c-4.97525,-2.55072 -21.3748,0.68501 -13.06122,5.71829c4.63876,-2.08994 15.97667,-0.09111 5.65021,2.25237c-18.67735,0.60303 -37.42494,0.87289 -56.04201,-1.0285zm45.45972,-5.72816c-5.69293,-8.23618 -25.36656,-6.65369 -28.94688,0.84814c6.97417,5.6115 21.3663,3.65866 28.78714,0.2599l0.15974,-1.10805l0,0zm41.15115,-4.79669c-8.39107,-5.92067 -23.748,-6.57408 -31.28664,-1.76099c9.46599,4.52687 21.07687,2.68456 31.28664,1.76099zm-41.46053,-2.71213c8.91602,-7.60876 -15.73071,-6.19264 -21.17932,-5.80487c-13.47525,6.12955 5.46666,7.82239 11.1256,6.8177c3.37151,-0.02223 6.75697,-0.27522 10.05373,-1.01283z",
+ "katana": "m127.28507,65.14041c-7.0962,-0.54353 -19.86895,7.61395 -17.02093,-6.32892c4.93732,-8.55679 18.30521,-4.48845 16.78561,5.48313l0.17354,0.62374l0.06178,0.22205l0,0zm17.16403,-18.49577c-6.77293,11.60114 -22.03173,12.43076 -33.48896,16.75148c-5.30647,3.04373 -26.81981,5.02184 -18.62814,-4.27034c11.69819,-7.75446 26.08649,-9.62626 39.25734,-13.85468c4.24069,-0.99664 9.15976,-1.38791 12.85976,1.37354zm-35.03055,12.26915c-5.16663,-17.73298 -10.33324,-35.46593 -15.49986,-53.19891c6.32053,-8.5978 20.25586,-4.8693 18.32531,6.59137c4.01678,13.78642 8.03355,27.57289 12.05032,41.35935m-5.56697,9.33072c22.56753,79.08354 48.81091,157.2375 81.6054,232.70842m-75.6467,-234.76585c22.79797,74.42342 46.12929,148.92492 77.59851,220.23124c0.43317,5.52475 14.80417,22.08911 1.77542,17.81497c-4.05151,-1.9415 -10.97104,-0.62137 -11.72156,-6.31741c-30.74268,-74.29929 -57.39734,-150.28568 -79.92033,-227.47363",
+ "leaf_1": "m35.63904,285.5213c9.77121,-31.99348 23.14531,-59.08864 35.83149,-72.59245c13.5912,-14.46718 7.56125,-20.74258 -6.45918,-6.72212c-5.89857,5.89853 -7.58387,1.61555 -7.58387,-19.2735c0,-49.83961 25.83589,-80.67891 87.99842,-105.04016c52.59872,-20.61333 91.37741,-43.79435 107.45589,-64.23479l13.10197,-16.65652l0,28.9807c0,35.83507 -11.11781,89.97318 -23.42422,114.0641c-13.0549,25.55626 -57.80217,72.72934 -79.76038,84.08435c-19.67261,10.17316 -61.687,13.16808 -84.14172,5.99792c-11.19011,-3.57314 -14.7415,-0.84308 -20.53963,15.78944c-3.8556,11.06018 -7.0102,26.79501 -7.0102,34.96616c0,9.27652 -3.72057,14.8566 -9.90572,14.8566c-7.3461,0 -8.78352,-3.67429 -5.56284,-14.21973z",
+ "menorah": "m86.17095,270.72717c9.02267,-23.09398 33.59461,-36.70894 57.45916,-38.45409c0,-4.91623 0,-9.83244 0,-14.74866c-38.305,-2.75075 -76.20534,-18.86525 -101.66333,-48.29793c-23.2569,-24.97108 -35.58256,-58.55817 -37.27682,-92.42073c-13.45491,-9.58464 12.56556,-16.55834 15.7355,-5.95607c-7.24909,8.79617 -0.22592,22.59306 0.80432,33.36646c11.47956,50.91395 56.38975,91.60496 107.78628,98.82449c13.14264,5.82442 16.6395,-2.00252 14.39308,-13.99509c2.81267,-9.48175 -7.44086,-6.60333 -13.57417,-8.37358c-40.52152,-7.1041 -75.7263,-38.65041 -86.11595,-78.75394c-2.97659,-11.47399 -3.94458,-24.11363 -7.5694,-33.51495c7.70256,-6.02401 26.19639,-1.60448 15.97076,9.15671c1.09565,45.56244 38.91488,85.76277 83.65269,91.48959c9.24995,4.52249 8.18915,-3.21457 7.85701,-9.40932c4.90146,-15.06035 -9.71606,-12.79654 -19.53952,-16.50067c-27.62657,-9.39215 -47.87568,-36.35101 -49.79039,-65.51331c-13.2153,-11.51691 15.74928,-17.53994 15.95383,-5.55531c-7.59098,8.84892 0.96818,23.21689 5.54156,32.6564c10.3335,16.84724 28.24842,28.22102 47.83452,30.47823c0,-7.52246 0,-15.04491 0,-22.56738c-18.20905,-2.81535 -32.7534,-18.72141 -34.8131,-36.97318c-12.40635,-10.10166 14.58986,-14.97282 16.53119,-5.29626c-6.736,5.28018 -1.66743,13.75206 2.28733,19.47478c2.82583,3.38407 16.81124,15.16281 15.99458,6.28913c0,-10.03232 0,-20.06463 0,-30.09695c-8.52963,-5.41637 3.21713,-9.02356 -1.91258,-15.41792c2.95047,-6.63559 4.28693,-23.79965 6.49635,-24.00391c7.40089,10.5439 4.63795,25.17949 11.62167,34.34932c-3.85376,4.14688 -4.52328,8.74758 -3.86568,14.89357c0,8.05796 0,16.11592 0,24.17388c11.03737,-3.24367 21.02812,-12.42406 21.72646,-24.48188c-12.61211,-14.80839 30.69243,-11.52931 12.71999,1.59949c-1.87195,17.85434 -17.0993,32.57059 -34.44644,35.57887c0,7.49281 0,14.98562 0,22.47842c29.68999,-2.98224 55.87296,-29.1582 56.39926,-59.47436c-12.36238,-13.6567 27.91393,-12.75137 14.12813,-0.52898c-3.16423,14.80594 -6.23018,30.54218 -16.29872,42.63571c-12.70108,17.1765 -33.04718,27.37456 -53.98901,29.78134c0.16994,9.14496 -4.65584,28.46082 11.13493,20.75519c39.31322,-6.69104 72.74197,-39.63307 78.74797,-79.43351c5.73982,-8.84732 -8.70837,-25.00382 8.28397,-22.77648c10.50046,-2.44997 11.98193,6.34405 5.8692,11.72792c-2.04736,35.89314 -21.91298,70.45303 -53.09749,88.60141c-15.52945,9.13074 -33.16388,14.88533 -51.17824,15.85547c0.17836,7.53169 -0.4761,15.16116 0.61618,22.6142c35.31798,-2.81911 70.08339,-18.10321 93.11932,-45.67516c20.51892,-23.04272 31.08511,-53.43816 32.84753,-84.00375c-10.43478,-10.04525 11.39471,-11.61442 16.59445,-7.04305c-5.883,11.66189 -5.21661,27.04671 -9.11984,40.52295c-12.68921,53.08224 -58.41412,95.84925 -111.85593,105.51876c-7.32545,1.56883 -14.77785,2.36348 -22.20172,3.29227c-0.71042,9.09981 -0.50818,18.35449 11.59822,16.61531c20.59241,4.32626 40.36211,18.55411 46.94081,39.19469c-43.09088,0 -86.18179,0 -129.2727,0c0.31159,-0.88608 0.62314,-1.77219 0.93477,-2.65823zm-82.88959,-208.5947c-0.54892,-8.1144 4.33617,-25.42208 5.66115,-27.43132c2.27143,7.42761 12.58555,23.78434 4.72879,28.60384c-3.29131,-0.38358 -8.04816,1.57556 -10.38994,-1.17252zm34.52483,0.55147c-1.7146,-10.01769 5.4567,-19.41309 4.51432,-29.75311c3.2196,8.43034 16.36395,29.47998 1.96646,30.42084c-2.16732,-0.0773 -4.38702,0.03559 -6.48078,-0.66772zm35.62526,-0.17229c-1.52428,-9.82734 5.20364,-19.12723 4.61758,-29.264c3.98769,8.50923 17.39558,32.7104 -0.82941,30.07944l-1.91212,-0.12625l-1.87605,-0.68919l0,0zm34.60818,0.26421c-1.9521,-10.01891 5.40411,-19.48301 4.43661,-29.84504c3.27068,8.4848 16.29427,29.36411 1.98981,30.63179c-2.15335,-0.08198 -4.37302,0.0215 -6.42642,-0.78675zm69.2087,-0.38279c-1.5544,-10.07727 5.31645,-19.6095 4.34973,-30.05398c2.70531,5.08463 6.32187,13.73424 7.91895,20.50951c4.77353,11.03205 -3.95122,12.51878 -12.26868,9.54446zm35.71176,0.44493c-2.89404,-9.75608 5.30412,-19.55815 4.07715,-29.90718c3.42241,8.32418 12.40758,23.15913 6.53528,30.337c-3.53609,0.01955 -7.13571,0.41735 -10.61243,-0.42982zm34.8703,-0.20629c-2.23303,-8.13288 4.34842,-24.82986 5.07388,-28.23849c3.49849,8.39077 16.5291,33.58521 -2.7937,28.93562l-2.28018,-0.69713l0,0zm35.10023,-0.15336c-1.90784,-8.93159 5.20419,-21.786 4.83258,-28.71239c3.47043,8.02287 16.97986,32.30244 -0.94669,29.60343l-1.89111,-0.14957l-1.99478,-0.74147l0,0z",
+ "sun": "m238.69324,135.65587c0,46.60593 -40.30034,84.38748 -90.01332,84.38748c-49.71299,0 -90.01332,-37.78156 -90.01332,-84.38748c0,-46.6059 40.30033,-84.38747 90.01332,-84.38747c49.71298,0 90.01332,37.78154 90.01332,84.38747zm-7.30318,120.56636c-4.20586,5.25757 -51.12886,-47.27794 -57.30507,-44.69331c-6.17622,2.58458 -15.51068,86.52086 -22.0425,87.47173c-6.53188,0.9509 -17.76118,-85.09837 -24.12714,-87.15329c-6.36602,-2.05495 -43.23042,49.74286 -48.75608,45.85272c-5.52563,-3.89009 13.12091,-67.11951 10.04803,-73.73549c-3.07288,-6.61595 -73.34953,-9.72229 -74.79697,-17.10284c-1.44742,-7.38055 63.69369,-26.7453 64.2322,-34.0554c0.53854,-7.31011 -43.73452,-48.6129 -41.1993,-55.02096c2.53526,-6.40806 61.81988,21.03078 65.82475,15.40928c4.00487,-5.62149 -7.80805,-76.34053 -1.73039,-78.4587c6.07763,-2.11818 42.59449,47.54089 49.0827,47.30339c6.48817,-0.23753 26.02002,-62.46352 32.64861,-61.00949c6.62865,1.45401 3.32251,66.01247 8.45366,70.32287c5.13113,4.31043 55.87381,-16.15842 59.63792,-10.29998c3.76414,5.85843 -29.09575,62.86814 -27.11681,69.62658c1.97902,6.75845 62.18188,13.20758 61.3595,20.19514c-0.82245,6.98758 -75.2742,9.96732 -78.37666,16.73535c-3.10245,6.76802 28.36942,83.35484 24.16354,88.6124z",
+ "chair": "m118.11539,289.55515c-7.47328,-14.4328 15.76004,-21.83389 9.75156,-35.26642c-9.58212,-8.59285 -23.93785,-6.58557 -35.88018,-5.92961c-12.89955,-1.58955 -16.67669,11.62587 -24.11323,17.11729c-14.66394,-4.57965 -9.41961,-23.5907 3.95336,-25.69879c17.48831,-7.56879 36.79559,-3.21786 54.96046,-6.57193c13.14571,-7.65541 -3.09947,-24.09541 -13.42245,-25.84244c-17.08451,-6.9008 -38.18468,-7.0844 -51.24073,-21.62146c-5.1916,-11.32457 -3.84497,-32.04767 10.15321,-36.01445c6.34414,-10.73523 5.01785,-24.55999 3.35027,-36.47948c1.42348,-12.67513 -26.70474,-5.25126 -14.90233,-18.24577c10.64336,-8.15804 24.36629,-13.15867 37.81105,-12.959c10.96933,0.36309 11.71716,12.99065 -0.37628,9.89848c-12.30081,6.18077 -7.72121,23.86169 -7.25122,35.16668c5.93514,11.39347 22.04794,5.36764 32.49831,7.07384c14.8665,0.39955 21.73593,0.44463 35.83476,5.23605c14.25958,-1.05464 8.64325,-20.61657 0.17079,-21.97119c-13.03212,-2.87206 -25.91483,-10.25501 -33.20317,-21.62909c-4.07215,-13.26593 1.69855,-27.24597 4.77583,-40.18096c9.18196,-28.0861 34.13237,-54.57027 65.33606,-54.63913c19.15414,0.28833 38.85675,14.48402 42.13089,33.82922c2.48616,20.34066 -5.57245,41.0622 -0.32005,61.11538c12.75343,7.04288 -8.70227,17.78406 -9.16336,27.50478c-5.43883,14.13736 6.97403,30.55498 -3.65417,43.29654c-6.64983,9.38159 -22.16026,14.5639 -22.43275,27.04953c-3.81845,11.24202 -21.47061,10.39703 -30.28923,17.71931c-9.74564,2.86838 -15.08257,19.17726 -0.15649,15.9317c14.55153,-0.35892 29.03516,-5.81784 43.55118,-3.3181c10.39314,7.10063 -0.45073,21.22018 -10.9113,14.54475c-5.46445,0.08383 -25.63857,2.80356 -18.76688,8.69054c17.18895,4.015 35.8273,9.2104 46.95854,24.0352c10.43184,13.90863 -12.73763,17.22995 -17.34935,5.0022c-19.29245,-15.75378 -48.30531,-24.24933 -70.97163,-10.48508c-13.71143,5.73386 -10.53542,20.53958 -11.98199,31.56015c-5.57972,6.09451 -13.26627,-2.5275 -14.84946,-7.91876zm100.26077,-153.99353c-4.62421,-8.64436 -27.69229,-17.16811 -30.82967,-4.71919c1.76141,12.68575 19.62196,15.68971 29.15408,10.51048c1.73547,-1.32053 2.45361,-3.74493 1.67558,-5.79129z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael.txt.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael.txt.svn-base
new file mode 100644
index 000000000..7549cc09b
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael.txt.svn-base
@@ -0,0 +1,12 @@
+All Raphaël icons were retrieved from here:
+http://raphaeljs.com/icons/
+
+And fall under the MIT license:
+
+Copyright © 2008 Dmitry Baranovskiy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+The software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_1.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_1.json.svn-base
new file mode 100644
index 000000000..6f7f7ca06
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_1.json.svn-base
@@ -0,0 +1,67 @@
+{"size": 32,
+"fill": true,
+"data": {
+ "raph_?": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z",
+ "raph_i": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M14.757,8h2.42v2.574h-2.42V8z M18.762,23.622H16.1c-1.034,0-1.475-0.44-1.475-1.496v-6.865c0-0.33-0.176-0.484-0.484-0.484h-0.88V12.4h2.662c1.035,0,1.474,0.462,1.474,1.496v6.887c0,0.309,0.176,0.484,0.484,0.484h0.88V23.622z",
+ "raph_$": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.255,23.88v2.047h-1.958v-2.024c-3.213-0.44-4.621-3.08-4.621-3.08l2.002-1.673c0,0,1.276,2.223,3.586,2.223c1.276,0,2.244-0.683,2.244-1.849c0-2.729-7.349-2.398-7.349-7.459c0-2.2,1.738-3.785,4.137-4.159V5.859h1.958v2.046c1.672,0.22,3.652,1.1,3.652,2.993v1.452h-2.596v-0.704c0-0.726-0.925-1.21-1.959-1.21c-1.32,0-2.288,0.66-2.288,1.584c0,2.794,7.349,2.112,7.349,7.415C21.413,21.614,19.785,23.506,17.255,23.88z",
+ "raph_temp": "M19.361,17.744V3.438c0-1.85-1.504-3.348-3.352-3.348c-1.852,0-3.35,1.498-3.35,3.348v14.193c-2.106,1.154-3.536,3.391-3.536,5.961c0,3.752,3.042,6.793,6.793,6.793c3.753,0,6.793-3.041,6.793-6.793C22.71,21.099,21.363,18.924,19.361,17.744zM15.917,29.27c-3.129,0-5.676-2.548-5.676-5.68c0-2.072,1.132-3.98,2.954-4.979l0.581-0.316V3.437c0-1.231,1.003-2.231,2.236-2.231c1.231,0,2.232,1,2.232,2.231v14.942l0.548,0.324c1.756,1.036,2.806,2.861,2.806,4.887C21.596,26.722,19.048,29.27,15.917,29.27zM18.225,19.666l-1.099-0.647V9.26h-2.233v9.695l-1.161,0.635c-1.464,0.805-2.375,2.334-2.375,4c0,2.514,2.047,4.561,4.56,4.561c2.515,0,4.56-2.047,4.56-4.561C20.479,21.988,19.616,20.485,18.225,19.666z",
+ "raph_thunder": "M25.371,7.306c-0.092-3.924-3.301-7.077-7.248-7.079c-2.638,0.001-4.942,1.412-6.208,3.517c-0.595-0.327-1.28-0.517-2.01-0.517C7.626,3.229,5.772,5.033,5.689,7.293c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h5.271l-2.166,3.398l1.977-0.411L10,30.875l9.138-10.102L17,21l2.167-2.023h4.269c3.312,0,6-2.688,6-6C29.434,10.34,27.732,8.11,25.371,7.306zM23.436,16.979H7.561c-2.209-0.006-3.997-1.792-4.001-4.001c-0.002-1.982,1.45-3.618,3.35-3.931c0.265-0.043,0.502-0.191,0.657-0.414C7.722,8.41,7.779,8.136,7.73,7.87C7.702,7.722,7.685,7.582,7.685,7.446C7.689,6.221,8.68,5.23,9.905,5.228c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.309c0.342-0.066,0.626-0.307,0.748-0.63c0.749-1.992,2.662-3.412,4.911-3.41c2.899,0.004,5.244,2.35,5.251,5.249c0,0.161-0.009,0.326-0.027,0.497c-0.049,0.517,0.305,0.984,0.815,1.079c1.86,0.344,3.274,1.966,3.271,3.923C27.43,15.186,25.645,16.973,23.436,16.979z",
+ "raph_snow": "M25.372,6.912c-0.093-3.925-3.302-7.078-7.248-7.08c-2.638,0.002-4.942,1.412-6.208,3.518c-0.595-0.327-1.28-0.518-2.01-0.518C7.627,2.834,5.773,4.639,5.69,6.898c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.875c3.312,0,6-2.688,6-6C29.434,9.944,27.732,7.715,25.372,6.912zM23.436,16.584H7.562c-2.209-0.006-3.997-1.793-4.001-4c-0.002-1.983,1.45-3.619,3.35-3.933c0.265-0.043,0.502-0.19,0.657-0.414C7.723,8.015,7.78,7.74,7.731,7.475C7.703,7.326,7.686,7.187,7.686,7.051c0.004-1.225,0.995-2.217,2.22-2.219c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.31c0.342-0.066,0.626-0.308,0.748-0.631c0.749-1.992,2.662-3.412,4.911-3.41c2.898,0.004,5.244,2.351,5.251,5.25c0,0.16-0.009,0.325-0.026,0.496c-0.05,0.518,0.305,0.984,0.814,1.079c1.859,0.345,3.273,1.966,3.271,3.923C27.43,14.791,25.645,16.578,23.436,16.584zM16.667,24.09l1.119-1.119c0.389-0.391,0.389-1.025,0-1.416c-0.392-0.391-1.025-0.391-1.415,0l-1.119,1.119l-1.119-1.119c-0.391-0.391-1.025-0.391-1.415,0c-0.391,0.391-0.391,1.025,0,1.416l1.118,1.117l-1.12,1.121c-0.389,0.393-0.389,1.021,0,1.414c0.195,0.188,0.451,0.293,0.707,0.293c0.256,0,0.512-0.104,0.708-0.293l1.12-1.119l1.12,1.119c0.195,0.188,0.451,0.293,0.708,0.293c0.256,0,0.512-0.104,0.707-0.293c0.391-0.396,0.391-1.021,0-1.414L16.667,24.09zM25.119,21.817c-0.393-0.392-1.025-0.392-1.415,0l-1.12,1.121l-1.12-1.121c-0.391-0.392-1.022-0.392-1.414,0c-0.39,0.392-0.39,1.022,0,1.416l1.119,1.119l-1.119,1.119c-0.39,0.391-0.39,1.022,0,1.413c0.195,0.195,0.451,0.294,0.707,0.294c0.257,0,0.513-0.099,0.707-0.294l1.12-1.118l1.12,1.118c0.194,0.195,0.45,0.294,0.707,0.294c0.256,0,0.513-0.099,0.708-0.294c0.389-0.391,0.389-1.022,0-1.413l-1.12-1.119l1.12-1.119C25.507,22.842,25.507,22.209,25.119,21.817zM9.334,23.953l1.119-1.119c0.389-0.394,0.389-1.021,0-1.414c-0.391-0.394-1.025-0.394-1.415,0l-1.119,1.119l-1.12-1.121c-0.391-0.39-1.023-0.39-1.415,0c-0.391,0.396-0.391,1.024,0,1.418l1.119,1.117l-1.12,1.118c-0.391,0.394-0.391,1.025,0,1.414c0.196,0.195,0.452,0.293,0.708,0.293c0.256,0,0.511-0.098,0.707-0.293l1.12-1.119l1.121,1.121c0.195,0.195,0.451,0.293,0.707,0.293s0.513-0.098,0.708-0.293c0.389-0.391,0.389-1.022,0-1.416L9.334,23.953z",
+ "raph_hail": "M25.372,6.912c-0.093-3.925-3.302-7.078-7.248-7.08c-2.638,0.002-4.942,1.412-6.208,3.518c-0.595-0.327-1.28-0.518-2.01-0.518C7.627,2.834,5.773,4.639,5.69,6.898c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.875c3.312,0,6-2.688,6-6C29.434,9.944,27.732,7.715,25.372,6.912zM23.436,16.584H7.562c-2.209-0.006-3.997-1.793-4.001-4c-0.002-1.983,1.45-3.619,3.35-3.933c0.265-0.043,0.502-0.19,0.657-0.414C7.723,8.015,7.78,7.74,7.731,7.475C7.703,7.326,7.686,7.187,7.686,7.051c0.004-1.225,0.995-2.217,2.22-2.219c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.31c0.342-0.066,0.626-0.308,0.748-0.631c0.749-1.992,2.662-3.412,4.911-3.41c2.898,0.004,5.244,2.351,5.251,5.25c0,0.16-0.009,0.325-0.026,0.496c-0.05,0.518,0.305,0.984,0.814,1.079c1.859,0.345,3.273,1.966,3.271,3.923C27.43,14.791,25.645,16.578,23.436,16.584zM11.503,23.709c-0.784-0.002-1.418-0.636-1.418-1.416c0-0.785,0.634-1.416,1.418-1.418c0.78,0.002,1.413,0.633,1.416,1.418C12.917,23.073,12.284,23.707,11.503,23.709zM19.002,23.709c-0.783-0.002-1.418-0.636-1.418-1.416c0-0.785,0.635-1.416,1.418-1.418c0.779,0.002,1.414,0.633,1.414,1.418C20.417,23.073,19.784,23.707,19.002,23.709zM7.503,28.771c-0.783-0.002-1.417-0.637-1.417-1.418s0.634-1.414,1.417-1.416c0.78,0.002,1.415,0.635,1.415,1.416C8.917,28.135,8.284,28.77,7.503,28.771zM15.001,28.771c-0.782-0.002-1.417-0.637-1.417-1.418s0.634-1.414,1.417-1.416c0.78,0.002,1.413,0.635,1.415,1.416C16.415,28.135,15.784,28.77,15.001,28.771zM22.5,28.771c-0.782-0.002-1.416-0.634-1.416-1.416c0-0.785,0.634-1.418,1.416-1.42c0.781,0.002,1.414,0.635,1.418,1.42C23.915,28.138,23.282,28.77,22.5,28.771z",
+ "raph_rain": "M25.371,7.306c-0.092-3.924-3.301-7.077-7.248-7.079c-2.638,0.001-4.942,1.412-6.208,3.517c-0.595-0.327-1.28-0.517-2.01-0.517C7.626,3.229,5.772,5.033,5.689,7.293c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.874c3.312,0,6-2.688,6-6C29.434,10.34,27.732,8.11,25.371,7.306zM23.436,16.979H7.561c-2.209-0.006-3.997-1.792-4.001-4.001c-0.002-1.982,1.45-3.618,3.35-3.931c0.265-0.043,0.502-0.191,0.657-0.414C7.722,8.41,7.779,8.136,7.73,7.87C7.702,7.722,7.685,7.582,7.685,7.446C7.689,6.221,8.68,5.23,9.905,5.228c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.309c0.342-0.066,0.626-0.307,0.748-0.63c0.749-1.992,2.662-3.412,4.911-3.41c2.899,0.004,5.244,2.35,5.251,5.249c0,0.161-0.009,0.326-0.027,0.497c-0.049,0.517,0.305,0.984,0.815,1.079c1.86,0.344,3.274,1.966,3.271,3.923C27.43,15.186,25.645,16.973,23.436,16.979zM9.029,26.682c0-1.115,0.021-5.425,0.021-5.432c0.002-0.409-0.247-0.779-0.628-0.932c-0.38-0.152-0.815-0.059-1.099,0.24c-0.006,0.008-1.037,1.098-2.081,2.342c-0.523,0.627-1.048,1.287-1.463,1.896c-0.399,0.648-0.753,1.066-0.811,1.885C2.971,28.355,4.324,29.711,6,29.714C7.672,29.71,9.029,28.354,9.029,26.682zM4.971,26.727c0.091-0.349,1.081-1.719,1.993-2.764c0.025-0.029,0.051-0.061,0.076-0.089c-0.005,1.124-0.01,2.294-0.01,2.808c0,0.567-0.461,1.028-1.029,1.03C5.447,27.71,4.997,27.273,4.971,26.727zM16.425,26.682c0-1.115,0.021-5.424,0.021-5.43c0.002-0.41-0.247-0.779-0.628-0.934c-0.381-0.152-0.814-0.058-1.1,0.242c-0.006,0.008-1.035,1.094-2.08,2.342c-0.522,0.623-1.047,1.285-1.463,1.894c-0.399,0.649-0.753,1.068-0.809,1.888c0,1.672,1.354,3.028,3.029,3.028C15.068,29.711,16.425,28.354,16.425,26.682zM12.365,26.729c0.092-0.349,1.081-1.72,1.993-2.765c0.025-0.03,0.05-0.06,0.075-0.089c-0.005,1.123-0.011,2.294-0.011,2.807c-0.002,0.568-0.461,1.027-1.028,1.029C12.84,27.709,12.392,27.273,12.365,26.729zM23.271,20.317c-0.38-0.153-0.816-0.06-1.099,0.24c-0.009,0.008-1.037,1.097-2.08,2.342c-0.523,0.625-1.049,1.285-1.462,1.896c-0.402,0.649-0.754,1.067-0.812,1.886c0,1.672,1.354,3.029,3.03,3.029c1.673,0,3.027-1.357,3.027-3.029c0-1.115,0.022-5.425,0.022-5.431C23.9,20.84,23.651,20.47,23.271,20.317zM21.879,26.681c-0.004,0.568-0.463,1.027-1.031,1.029c-0.553-0.002-1.002-0.438-1.028-0.982c0.092-0.349,1.081-1.72,1.993-2.765c0.025-0.028,0.05-0.059,0.074-0.088C21.883,24.998,21.879,26.167,21.879,26.681z",
+ "raph_undo": "M14.378,6.781c0.41,0.988,1.938,0.346,1.524-0.648C15.708,5.667,15.515,5.2,15.32,4.734c-0.289-0.695-0.875-3.233-2.042-2.747c-1.03,0.433-0.128,1.846,0.142,2.494C13.739,5.248,14.059,6.015,14.378,6.781M20.8,7.223c1.094,0.453,1.538-1.551,1.813-2.216c0.281-0.677,1.478-2.565,0.357-3.029c-1.092-0.453-1.537,1.548-1.813,2.216C20.876,4.872,19.68,6.757,20.8,7.223M18.137,6.692c1.183,0,0.829-2.019,0.829-2.742c0-0.732,0.383-2.935-0.829-2.935c-1.183,0-0.828,2.019-0.828,2.742C17.309,4.49,16.926,6.692,18.137,6.692M23.058,8.729c0.852,0.85,2.142-0.972,2.659-1.49c0.512-0.513,2.187-1.687,1.352-2.524c-0.834-0.836-2.013,0.843-2.522,1.353C24.028,6.585,22.198,7.874,23.058,8.729M24.565,10.986c0.448,1.091,2.183-0.01,2.849-0.286c0.676-0.28,2.858-0.771,2.394-1.89c-0.455-1.091-2.181,0.008-2.849,0.285C26.281,9.377,24.102,9.866,24.565,10.986M12.036,8.742c0.752,0.75,1.932-0.415,1.17-1.173c-0.253-0.347-0.646-0.645-0.949-0.946c-0.541-0.539-2.162-2.799-3.068-1.889c-0.79,0.791,0.586,1.755,1.083,2.25C10.859,7.57,11.447,8.156,12.036,8.742M29.365,17.397c-0.768-0.317-1.534-0.635-2.302-0.952c-0.646-0.268-2.07-1.169-2.495-0.135c-0.481,1.168,2.054,1.747,2.751,2.035c0.455,0.188,0.911,0.377,1.367,0.565C29.7,19.331,30.379,17.816,29.365,17.397M29.942,12.817c-0.83,0-1.66,0-2.49,0c-0.701,0-2.357-0.288-2.355,0.83c0,1.262,2.567,0.827,3.319,0.827c0.493,0,0.986,0,1.479-0.001C30.99,14.473,31.043,12.815,29.942,12.817M24.234,18.568c-0.673-0.673-1.773,0.189-1.281,1.007c-0.295-0.264-0.614-0.499-0.961-0.69c3.894-2.866,3.328-9.006-1.021-11.107c-2.024-0.978-4.481-0.828-6.368,0.394c-0.871,0.564-1.603,1.336-2.119,2.236c-0.262,0.456-0.468,0.943-0.612,1.449c-0.074,0.258-0.131,0.521-0.172,0.786c-0.083,0.534-0.109,0.553-0.553,0.871c-0.182-0.957-1.64-0.675-2.326-0.674c-0.815,0.001-1.963-0.217-2.752,0.046c-0.867,0.289-0.652,1.615,0.263,1.613c0.324,0.052,0.701-0.001,1.028-0.001c0.904-0.001,1.809-0.002,2.713-0.003c-0.308,0.352-0.496,0.969-0.94,0.77c-0.467-0.209-0.978-0.319-1.49-0.319c-0.951,0-1.877,0.375-2.561,1.036c-0.681,0.658-1.088,1.569-1.123,2.516c-0.944,0.31-1.791,0.891-2.421,1.658c-2.756,3.354-0.265,8.554,4.058,8.554v-0.002c3.597,0,7.194,0,10.792,0c1.341,0,2.843,0.167,4.168-0.113c3.652-0.772,5.361-5.21,3.133-8.229c0.548,0.547,1.096,1.094,1.644,1.641c0.183,0.183,0.364,0.424,0.575,0.574c0.552,0.552,1.524,0.066,1.403-0.713c-0.097-0.622-1.042-1.267-1.448-1.673C25.319,19.652,24.776,19.11,24.234,18.568M18.137,8.787c4.559,0.009,6.576,5.979,2.912,8.734c-0.637-3.505-4.161-5.824-7.629-5.03C13.943,10.367,15.852,8.792,18.137,8.787M22.895,24.08c-0.633,3.346-4.149,2.879-6.68,2.879c-3.017,0-6.033,0-9.049,0c-0.767,0-1.62,0.084-2.373-0.095c-2.274-0.538-3.416-3.242-2.172-5.235c0.678-1.087,1.568-1.19,2.626-1.67c0.604-0.273,0.456-0.807,0.456-1.331c0.002-0.597,0.284-1.169,0.756-1.533c0.787-0.608,1.943-0.497,2.611,0.234c1.098,1.205,1.96-1.346,2.507-1.893c2.025-2.025,5.475-1.708,7.068,0.684c0.344,0.516,0.581,1.102,0.693,1.712c0.097,0.529-0.115,1.341,0.188,1.796c0.291,0.47,0.943,0.463,1.397,0.68c0.508,0.23,0.963,0.591,1.304,1.034C22.834,22.125,23.064,23.107,22.895,24.08M6.906,9.917c0.881,0.364,1.763,0.727,2.644,1.091c0.353,0.146,0.707,0.292,1.06,0.437c0.997,0.412,1.637-1.119,0.642-1.526C10.47,9.441,9.456,9.177,8.609,8.828c-0.354-0.146-0.707-0.292-1.06-0.437C6.554,7.98,5.912,9.505,6.906,9.917",
+ "raph_sun": "M15.502,7.504c-4.35,0-7.873,3.523-7.873,7.873c0,4.347,3.523,7.872,7.873,7.872c4.346,0,7.871-3.525,7.871-7.872C23.374,11.027,19.85,7.504,15.502,7.504zM15.502,21.25c-3.244-0.008-5.866-2.63-5.874-5.872c0.007-3.243,2.63-5.866,5.874-5.874c3.242,0.008,5.864,2.631,5.871,5.874C21.366,18.62,18.744,21.242,15.502,21.25zM15.502,6.977c0.553,0,1-0.448,1-1.001V1.125c-0.002-0.553-0.448-1-1-1c-0.553,0-1.001,0.449-1,1.002v4.85C14.502,6.528,14.949,6.977,15.502,6.977zM18.715,7.615c0.125,0.053,0.255,0.076,0.382,0.077c0.394,0,0.765-0.233,0.925-0.618l1.856-4.483c0.21-0.511-0.031-1.095-0.541-1.306c-0.511-0.211-1.096,0.031-1.308,0.541L18.174,6.31C17.963,6.82,18.205,7.405,18.715,7.615zM21.44,9.436c0.195,0.194,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293l3.43-3.433c0.391-0.39,0.39-1.023,0-1.415c-0.392-0.39-1.025-0.39-1.415,0.002L21.44,8.021C21.049,8.412,21.049,9.045,21.44,9.436zM23.263,12.16c0.158,0.385,0.531,0.617,0.923,0.617c0.127,0,0.257-0.025,0.383-0.078l4.48-1.857c0.511-0.211,0.753-0.797,0.541-1.307s-0.796-0.752-1.307-0.54l-4.481,1.857C23.292,11.064,23.051,11.65,23.263,12.16zM29.752,14.371l-4.851,0.001c-0.552,0-1,0.448-0.998,1.001c0,0.553,0.447,0.999,0.998,0.999l4.852-0.002c0.553,0,0.999-0.449,0.999-1C30.752,14.817,30.304,14.369,29.752,14.371zM29.054,19.899l-4.482-1.854c-0.512-0.212-1.097,0.03-1.307,0.541c-0.211,0.511,0.031,1.096,0.541,1.308l4.482,1.854c0.126,0.051,0.256,0.075,0.383,0.075c0.393,0,0.765-0.232,0.925-0.617C29.806,20.695,29.563,20.109,29.054,19.899zM22.86,21.312c-0.391-0.391-1.023-0.391-1.414,0.001c-0.391,0.39-0.39,1.022,0,1.413l3.434,3.429c0.195,0.195,0.45,0.293,0.706,0.293s0.513-0.098,0.708-0.293c0.391-0.392,0.389-1.025,0-1.415L22.86,21.312zM20.029,23.675c-0.211-0.511-0.796-0.752-1.307-0.541c-0.51,0.212-0.752,0.797-0.54,1.308l1.86,4.48c0.159,0.385,0.531,0.617,0.925,0.617c0.128,0,0.258-0.024,0.383-0.076c0.511-0.211,0.752-0.797,0.54-1.309L20.029,23.675zM15.512,23.778c-0.553,0-1,0.448-1,1l0.004,4.851c0,0.553,0.449,0.999,1,0.999c0.553,0,1-0.448,0.998-1l-0.003-4.852C16.511,24.226,16.062,23.777,15.512,23.778zM12.296,23.142c-0.51-0.21-1.094,0.031-1.306,0.543l-1.852,4.483c-0.21,0.511,0.033,1.096,0.543,1.307c0.125,0.052,0.254,0.076,0.382,0.076c0.392,0,0.765-0.234,0.924-0.619l1.853-4.485C13.051,23.937,12.807,23.353,12.296,23.142zM9.57,21.325c-0.392-0.391-1.025-0.389-1.415,0.002L4.729,24.76c-0.391,0.392-0.389,1.023,0.002,1.415c0.195,0.194,0.45,0.292,0.706,0.292c0.257,0,0.513-0.098,0.708-0.293l3.427-3.434C9.961,22.349,9.961,21.716,9.57,21.325zM7.746,18.604c-0.213-0.509-0.797-0.751-1.307-0.54L1.96,19.925c-0.511,0.212-0.752,0.798-0.54,1.308c0.16,0.385,0.531,0.616,0.924,0.616c0.127,0,0.258-0.024,0.383-0.076l4.479-1.861C7.715,19.698,7.957,19.113,7.746,18.604zM7.1,15.392c0-0.553-0.447-0.999-1-0.999l-4.851,0.006c-0.553,0-1.001,0.448-0.999,1.001c0.001,0.551,0.449,1,1,0.998l4.852-0.006C6.654,16.392,7.102,15.942,7.1,15.392zM1.944,10.869l4.485,1.85c0.125,0.053,0.254,0.076,0.381,0.076c0.393,0,0.766-0.232,0.925-0.618c0.212-0.511-0.032-1.097-0.544-1.306L2.708,9.021c-0.511-0.21-1.095,0.032-1.306,0.542C1.19,10.074,1.435,10.657,1.944,10.869zM8.137,9.451c0.195,0.193,0.449,0.291,0.705,0.291s0.513-0.098,0.709-0.295c0.391-0.389,0.389-1.023-0.004-1.414L6.113,4.609C5.723,4.219,5.088,4.221,4.699,4.612c-0.391,0.39-0.389,1.024,0.002,1.414L8.137,9.451zM10.964,7.084c0.16,0.384,0.532,0.615,0.923,0.615c0.128,0,0.258-0.025,0.384-0.077c0.51-0.212,0.753-0.798,0.54-1.307l-1.864-4.479c-0.212-0.51-0.798-0.751-1.308-0.539C9.129,1.51,8.888,2.096,9.1,2.605L10.964,7.084z",
+ "raph_undo": "M12.981,9.073V6.817l-12.106,6.99l12.106,6.99v-2.422c3.285-0.002,9.052,0.28,9.052,2.269c0,2.78-6.023,4.263-6.023,4.263v2.132c0,0,13.53,0.463,13.53-9.823C29.54,9.134,17.952,8.831,12.981,9.073z",
+ "raph_merge": "M26.92,10.928l-3.574-2.064v2.297h-6.414c-1.123,0.084-3.062-1.19-5.218-2.881C9.543,6.676,7.062,4.709,3.74,4.656H1.505v3.662H3.74c1.627-0.047,3.633,1.232,5.769,2.883c0.796,0.577,1.599,1.213,2.45,1.788c-0.851,0.575-1.653,1.212-2.45,1.789c-2.136,1.646-4.142,2.929-5.767,2.882H1.505v3.668h2.236c3.315-0.047,5.797-2.02,7.975-3.621c2.156-1.691,4.094-2.966,5.218-2.883h6.412v2.297l3.574-2.062l3.576-2.064L26.92,10.928z",
+ "raph_split": "M23.346,23.979l3.576-2.062l3.574-2.062l-3.576-2.064l-3.574-2.062v2.293c-0.876,0-1.894,0-2.235,0c-1.626,0.046-3.633-1.233-5.768-2.883c-0.796-0.578-1.599-1.214-2.45-1.789c0.851-0.575,1.653-1.211,2.45-1.789c2.135-1.647,4.142-2.929,5.766-2.882l2.237-0.001v2.296l3.574-2.063l3.576-2.064L26.92,4.78l-3.574-2.064v2.295H21.11c-3.321,0.047-5.803,2.019-7.975,3.622c-2.156,1.691-4.094,2.965-5.218,2.882H1.505v3.664h6.414c1.123-0.083,3.062,1.191,5.218,2.882c2.171,1.604,4.652,3.575,7.974,3.622h2.235V23.979L23.346,23.979z",
+ "raph_fork": "M26.268,22.562l3.514-2.03l-3.514-2.028l-3.515-2.028v2.256c-0.922-0.002-2.45-0.002-2.883-0.002c-1.28-0.03-2.12-0.431-2.994-1.148c-1.303-1.07-2.415-2.997-3.756-4.853c-0.682-0.923-1.442-1.839-2.454-2.575C9.664,9.415,8.355,8.902,6.9,8.912H0.593v3.604H6.9c0.877,0.016,1.432,0.302,2.189,1.012c1.12,1.055,2.212,3.072,3.718,4.983c1.476,1.893,3.747,3.804,7.041,3.823h2.905v2.256L26.268,22.562zM11.401,8.912c0.04,0.028,0.082,0.053,0.121,0.082c1.202,0.874,2.07,1.947,2.757,2.88c0.158,0.218,0.298,0.428,0.448,0.642h8.026v2.257l3.515-2.028l3.514-2.029l-3.514-2.029l-3.515-2.03v2.255H11.401z",
+ "raph_shuffle": "M9.089,13.133c0.346,0.326,0.69,0.75,1.043,1.228c0.051-0.073,0.099-0.144,0.15-0.219c0.511-0.75,1.09-1.599,1.739-2.421c0.103-0.133,0.211-0.245,0.316-0.371c-0.487-0.572-1.024-1.12-1.672-1.592C9.663,9.02,8.354,8.506,6.899,8.517H0.593v3.604H6.9C7.777,12.138,8.333,12.422,9.089,13.133zM22.753,16.082v2.256c-0.922-0.002-2.45-0.002-2.883-0.002c-1.28-0.03-2.12-0.438-2.994-1.148c-0.378-0.311-0.74-0.7-1.097-1.133c-0.268,0.376-0.538,0.764-0.813,1.168c-0.334,0.488-0.678,0.99-1.037,1.484c-0.089,0.121-0.189,0.246-0.283,0.369c1.455,1.528,3.473,2.846,6.202,2.862h2.905v2.256l3.515-2.026l3.521-2.03l-3.521-2.028L22.753,16.082zM16.876,13.27c0.874-0.712,1.714-1.118,2.994-1.148c0.433,0,1.961,0,2.883-0.002v2.256l3.515-2.026l3.521-2.028l-3.521-2.029l-3.515-2.027V8.52h-2.905c-3.293,0.02-5.563,1.93-7.041,3.822c-1.506,1.912-2.598,3.929-3.718,4.982C8.332,18.033,7.777,18.32,6.9,18.336H0.593v3.604H6.9c1.455,0.011,2.764-0.502,3.766-1.242c1.012-0.735,1.772-1.651,2.454-2.573C14.461,16.267,15.574,14.34,16.876,13.27z",
+ "raph_refresh": "M15.999,4.308c1.229,0.001,2.403,0.214,3.515,0.57L18.634,6.4h6.247l-1.562-2.706L21.758,0.99l-0.822,1.425c-1.54-0.563-3.2-0.878-4.936-0.878c-7.991,0-14.468,6.477-14.468,14.468c0,3.317,1.128,6.364,3.005,8.805l2.2-1.689c-1.518-1.973-2.431-4.435-2.436-7.115C4.312,9.545,9.539,4.318,15.999,4.308zM27.463,7.203l-2.2,1.69c1.518,1.972,2.431,4.433,2.435,7.114c-0.011,6.46-5.238,11.687-11.698,11.698c-1.145-0.002-2.24-0.188-3.284-0.499l0.828-1.432H7.297l1.561,2.704l1.562,2.707l0.871-1.511c1.477,0.514,3.058,0.801,4.709,0.802c7.992-0.002,14.468-6.479,14.47-14.47C30.468,12.689,29.339,9.643,27.463,7.203z",
+ "raph_smile2": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,29.534C8.539,29.534,2.466,23.462,2.466,16C2.466,8.539,8.539,2.466,16,2.466c7.462,0,13.535,6.072,13.535,13.533C29.534,23.462,23.462,29.534,16,29.534zM11.104,14c0.932,0,1.688-1.483,1.688-3.312s-0.755-3.312-1.688-3.312s-1.688,1.483-1.688,3.312S10.172,14,11.104,14zM20.729,14c0.934,0,1.688-1.483,1.688-3.312s-0.756-3.312-1.688-3.312c-0.932,0-1.688,1.483-1.688,3.312S19.798,14,20.729,14zM8.143,21.189C10.458,24.243,13.148,26,16.021,26c2.969,0,5.745-1.868,8.11-5.109c-2.515,1.754-5.292,2.734-8.215,2.734C13.164,23.625,10.54,22.756,8.143,21.189z",
+ "raph_smile": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM20.729,7.375c0.934,0,1.688,1.483,1.688,3.312S21.661,14,20.729,14c-0.932,0-1.688-1.483-1.688-3.312S19.798,7.375,20.729,7.375zM11.104,7.375c0.932,0,1.688,1.483,1.688,3.312S12.037,14,11.104,14s-1.688-1.483-1.688-3.312S10.172,7.375,11.104,7.375zM16.021,26c-2.873,0-5.563-1.757-7.879-4.811c2.397,1.564,5.021,2.436,7.774,2.436c2.923,0,5.701-0.98,8.215-2.734C21.766,24.132,18.99,26,16.021,26z",
+ "raph_alarm": "M15.499,5.125c-0.553,0-0.999,0.448-0.999,1v9.221L8.454,17.99c-0.506,0.222-0.736,0.812-0.514,1.318c0.164,0.375,0.53,0.599,0.915,0.599c0.134,0,0.271-0.027,0.401-0.085l6.626-2.898c0.005-0.002,0.009-0.004,0.013-0.006l0.004-0.002c0.015-0.006,0.023-0.02,0.037-0.025c0.104-0.052,0.201-0.113,0.279-0.195c0.034-0.034,0.053-0.078,0.079-0.117c0.048-0.064,0.101-0.127,0.13-0.204c0.024-0.06,0.026-0.125,0.038-0.189c0.013-0.064,0.038-0.121,0.038-0.186V6.124C16.5,5.573,16.052,5.125,15.499,5.125zM31.125,6.832c0-3.832-3.105-6.938-6.938-6.938c-1.938,0-3.686,0.796-4.94,2.077C18.05,1.652,16.798,1.466,15.5,1.466c-1.334,0-2.62,0.195-3.847,0.531c-1.259-1.295-3.016-2.103-4.965-2.103C2.856-0.106-0.25,3-0.25,6.832c0,1.845,0.726,3.517,1.901,4.76c-0.443,1.39-0.685,2.87-0.685,4.408c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534c0-1.575-0.259-3.087-0.722-4.508C30.436,10.261,31.125,8.629,31.125,6.832zM15.5,27.533C9.139,27.533,3.966,22.359,3.966,16c0-6.36,5.173-11.534,11.534-11.534c6.361,0,11.533,5.173,11.533,11.534C27.033,22.361,21.859,27.533,15.5,27.533z",
+ "raph_clock": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,27.533C9.639,27.533,4.466,22.359,4.466,16C4.466,9.64,9.639,4.466,16,4.466c6.361,0,11.533,5.173,11.533,11.534C27.533,22.361,22.359,27.533,16,27.533zM15.999,5.125c-0.553,0-0.999,0.448-0.999,1v9.221L8.954,17.99c-0.506,0.222-0.736,0.812-0.514,1.318c0.164,0.375,0.53,0.599,0.915,0.599c0.134,0,0.271-0.027,0.401-0.085l6.626-2.898c0.005-0.002,0.009-0.004,0.013-0.006l0.004-0.002c0.015-0.006,0.023-0.02,0.037-0.025c0.104-0.052,0.201-0.113,0.279-0.195c0.034-0.034,0.053-0.078,0.079-0.117c0.048-0.064,0.101-0.127,0.13-0.204c0.024-0.06,0.026-0.125,0.038-0.189C16.975,16.121,17,16.064,17,15.999V6.124C17,5.573,16.552,5.125,15.999,5.125z",
+ "raph_globeAlt2": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM8.251,7.48c0.122,0.055,0.255,0.104,0.28,0.137C8.57,7.668,8.621,7.823,8.557,7.861C8.492,7.9,8.39,7.887,8.376,7.771c-0.013-0.115-0.026-0.128-0.18-0.18c-0.022-0.007-0.035-0.01-0.051-0.015C8.18,7.544,8.216,7.512,8.251,7.48zM7.733,7.974c0.031,0.087,0.113,0.125,0,0.17C7.673,8.168,7.611,8.172,7.559,8.165C7.617,8.102,7.672,8.035,7.733,7.974zM16,27.533C9.639,27.533,4.466,22.36,4.466,16c0-0.085,0.011-0.168,0.013-0.254c0.004-0.003,0.008-0.006,0.012-0.009c0.129-0.102,0.283-0.359,0.334-0.45c0.052-0.089,0.181-0.154,0.116-0.256c-0.059-0.096-0.292-0.23-0.407-0.261c0.01-0.099,0.032-0.195,0.045-0.294c0.063,0.077,0.137,0.17,0.208,0.194c0.115,0.038,0.501,0.052,0.566,0.052c0.063,0,0.334,0.014,0.386-0.064c0.051-0.077,0.09-0.077,0.154-0.077c0.064,0,0.18,0.231,0.271,0.257c0.089,0.026,0.257,0.013,0.244,0.181c-0.012,0.166,0.077,0.309,0.167,0.321c0.09,0.013,0.296-0.194,0.296-0.194s0,0.322-0.012,0.438C6.846,15.698,7,16.124,7,16.124s0.193,0.397,0.244,0.488c0.052,0.09,0.27,0.36,0.27,0.476c0,0.117,0.026,0.297,0.104,0.297s0.155-0.206,0.244-0.335c0.091-0.128,0.117-0.31,0.155-0.438c0.039-0.129,0.039-0.36,0.039-0.45c0-0.091,0.076-0.168,0.257-0.245c0.181-0.077,0.309-0.296,0.463-0.412c0.155-0.116,0.142-0.309,0.452-0.309c0.308,0,0.282,0,0.36-0.078c0.077-0.077,0.154-0.128,0.192,0.013c0.039,0.142,0.257,0.347,0.296,0.399c0.039,0.052,0.116,0.193,0.104,0.348c-0.013,0.153,0.012,0.334,0.077,0.334c0.064,0,0.193-0.219,0.193-0.219s0.283-0.192,0.27,0.014c-0.014,0.205,0.025,0.425,0.025,0.552c0,0.13,0.232,0.438,0.232,0.362c0-0.079,0.103-0.296,0.103-0.413c0-0.114,0.064-0.063,0.231,0.051c0.167,0.116,0.283,0.349,0.283,0.349s0.168,0.154,0.193,0.219c0.026,0.064,0.206-0.025,0.244-0.104c0.039-0.076,0.065-0.115,0.167-0.141c0.104-0.026,0.231-0.026,0.271-0.168c0.039-0.142,0.154-0.308,0-0.502c-0.154-0.193-0.232-0.321-0.347-0.412c-0.117-0.09-0.206-0.322-0.206-0.322s0.244-0.218,0.321-0.296c0.079-0.077,0.193-0.025,0.207,0.064c0.013,0.091-0.115,0.168-0.141,0.361c-0.026,0.192,0.154,0.257,0.206,0.192c0.051-0.065,0.18-0.219,0.18-0.257c0-0.039-0.089-0.026-0.102-0.167c-0.013-0.142,0.166-0.245,0.23-0.207c0.066,0.039,0.477-0.051,0.67-0.154s0.308-0.322,0.425-0.412c0.116-0.089,0.515-0.386,0.489-0.527c-0.026-0.142,0.012-0.334-0.09-0.515c-0.103-0.18-0.232-0.295-0.283-0.373c-0.051-0.077,0.219-0.09,0.347-0.206c0.129-0.116,0-0.219-0.064-0.206c-0.064,0.013-0.232,0.052-0.296,0.039c-0.064-0.013-0.103-0.077-0.206-0.155c-0.102-0.077,0.026-0.192,0.091-0.179c0.064,0.013,0.23-0.129,0.308-0.193c0.077-0.064,0.193-0.115,0.154-0.051c-0.038,0.064-0.128,0.296-0.026,0.309c0.104,0.013,0.348-0.193,0.388-0.18c0.038,0.013,0.102,0.18,0.064,0.257c-0.039,0.077-0.039,0.206,0.013,0.193c0.051-0.013,0.154-0.129,0.18-0.09c0.027,0.039,0.154,0.116,0.09,0.257c-0.063,0.142-0.193,0.193-0.039,0.284c0.154,0.089,0.206,0.012,0.322-0.052c0.115-0.064,0.193-0.347,0.128-0.438c-0.064-0.09-0.218-0.27-0.218-0.334c0-0.064,0.257-0.064,0.257-0.167s0.09-0.18,0.18-0.219c0.091-0.039,0.206-0.206,0.244-0.154c0.039,0.052,0.271,0.116,0.334,0.039c0.064-0.077,0.4-0.36,0.605-0.515c0.206-0.154,0.283-0.334,0.336-0.515c0.051-0.18,0.128-0.296,0.102-0.437v0c0.077,0.18,0.09,0.309,0.077,0.45c-0.013,0.142,0,0.438,0.026,0.476c0.025,0.039,0.129,0.128,0.192,0.103c0.064-0.025-0.025-0.283-0.025-0.334c0-0.052,0.09-0.129,0.142-0.142c0.052-0.013,0-0.231-0.065-0.322c-0.063-0.09-0.154-0.142-0.102-0.154c0.051-0.013,0.115-0.116,0.077-0.142c-0.039-0.025-0.014-0.116-0.103-0.09c-0.065,0.019-0.241-0.015-0.235,0.095c-0.037-0.11-0.116-0.183-0.216-0.172c-0.116,0.013-0.181,0.077-0.296,0.077s-0.025-0.18-0.077-0.18c-0.051,0-0.168,0.167-0.231,0.077c-0.064-0.09,0.18-0.206,0.373-0.27c0.192-0.064,0.514-0.438,0.644-0.451c0.128-0.013,0.45,0.026,0.733,0.013c0.283-0.013,0.373-0.129,0.463-0.064s0.283,0.142,0.399,0.129c0.116-0.014,0.064,0,0.244-0.129c0.18-0.129,0.348-0.193,0.438-0.296c0.09-0.103,0.335-0.18,0.348-0.077c0.014,0.103-0.026,0.206,0.077,0.206s0.258-0.103,0.386-0.154c0.129-0.051,0.231-0.116,0.231-0.116s-0.527,0.36-0.655,0.438c-0.129,0.077-0.438,0.129-0.567,0.283c-0.128,0.155-0.205,0.206-0.192,0.374c0.014,0.167,0.231,0.386,0.128,0.54c-0.103,0.154-0.141,0.373-0.141,0.373s0.154-0.219,0.373-0.36s0.348-0.334,0.425-0.412s0.309-0.091,0.309-0.181s0.064-0.206,0.104-0.309c0.038-0.103-0.077-0.078,0-0.206c0.076-0.129,0.064-0.232,0.45-0.232s0.257,0.026,0.566,0.013c0.309-0.013,0.424-0.167,0.72-0.245c0.296-0.077,0.527-0.128,0.618-0.089c0.09,0.038,0.232,0.012,0.141-0.078c-0.089-0.09-0.295-0.219-0.193-0.245c0.104-0.026,0.207-0.039,0.246-0.142c0.039-0.103-0.142-0.283-0.039-0.386c0.104-0.103-0.077-0.231-0.207-0.257c-0.128-0.025-0.63,0.026-0.731-0.025c-0.104-0.052-0.271-0.116-0.322-0.078c-0.052,0.039-0.168,0.245-0.168,0.245s-0.09,0.025-0.168-0.09c-0.076-0.116-0.5-0.103-0.629-0.103s-0.271,0.025-0.413,0.039c-0.141,0.013-0.219,0.052-0.322-0.039c-0.102-0.09-0.243-0.129-0.296-0.167c-0.051-0.039-0.334-0.039-0.553-0.012c-0.218,0.025-0.438,0.025-0.438,0.025s-0.104-0.039-0.257-0.129c-0.154-0.09-0.309-0.154-0.361-0.154c-0.051,0-0.449,0.064-0.539,0c-0.091-0.064-0.181-0.103-0.245-0.103s-0.115-0.103-0.038-0.103s0.437-0.103,0.437-0.103s-0.103-0.142-0.231-0.142c-0.128,0-0.359-0.064-0.424-0.064s-0.014,0.064-0.142,0.039c-0.13-0.026-0.258-0.078-0.335-0.026c-0.076,0.051-0.258,0.128-0.064,0.18c0.193,0.052,0.373,0,0.425,0.078c0.052,0.077,0,0.115,0,0.167s-0.103,0.193-0.167,0.219c-0.064,0.025-0.143-0.039-0.27,0.025c-0.129,0.064-0.451,0.013-0.49,0.052c-0.038,0.039-0.115-0.103-0.18-0.077c-0.064,0.025-0.232,0.193-0.322,0.18c-0.089-0.013-0.206-0.103-0.206-0.206s-0.038-0.232-0.077-0.258c-0.038-0.025-0.322-0.039-0.425-0.025c-0.103,0.013-0.424,0.038-0.477,0.09c-0.052,0.052-0.193,0.09-0.283,0.09s-0.167-0.09-0.36-0.116c-0.192-0.026-0.617-0.039-0.669-0.026s-0.218-0.025-0.155-0.077c0.065-0.051,0.257-0.219,0.143-0.295c-0.117-0.078-0.375-0.078-0.489-0.09c-0.117-0.013-0.232-0.039-0.413-0.013c-0.181,0.026-0.219,0.116-0.296,0.039c-0.077-0.077,0.193,0.039-0.077-0.077c-0.27-0.116-0.399-0.103-0.477-0.064c-0.077,0.039,0.013,0.025-0.192,0.103c-0.206,0.078-0.322,0.116-0.374,0.129c-0.051,0.012-0.372-0.065-0.411-0.091c-0.038-0.025-0.181,0.013-0.309,0.064S9.895,7.025,9.767,7C9.638,6.973,9.432,6.973,9.303,7.025C9.174,7.076,9.084,7.076,8.956,7.166c-0.13,0.09-0.373,0.142-0.373,0.142S8.522,7.305,8.448,7.301C10.474,5.541,13.111,4.466,16,4.466c6.361,0,11.534,5.173,11.534,11.534S22.36,27.533,16,27.533zM14.888,19.92c0,0,0.207-0.026,0.207-0.117c0-0.089-0.207-0.205-0.282-0.102c-0.078,0.102-0.219,0.205-0.207,0.296C14.625,20.138,14.888,19.92,14.888,19.92zM14.875,17.023c-0.181,0.233-0.167,0.182-0.296,0.128c-0.128-0.05-0.334,0.116-0.296,0.182c0.039,0.064,0.322-0.014,0.386,0.102c0.065,0.116,0.065,0.129,0.193,0.104c0.128-0.026,0.257-0.205,0.219-0.295C15.043,17.151,14.875,17.023,14.875,17.023zM14.837,18.245c-0.051,0-0.412,0.064-0.451,0.079c-0.039,0.013-0.27-0.025-0.27-0.025c-0.09,0.089-0.026,0.179,0.116,0.166s0.438-0.052,0.502-0.052C14.799,18.413,14.888,18.245,14.837,18.245zM14.284,14.668c-0.19,0.03-0.308,0.438-0.155,0.425C14.284,15.081,14.451,14.643,14.284,14.668zM14.734,16.959c-0.052-0.064-0.181-0.271-0.323-0.219c-0.042,0.017-0.153,0.245-0.012,0.245C14.541,16.985,14.786,17.023,14.734,16.959zM14.85,16.805c0.232-0.013,0.167-0.245-0.013-0.257C14.786,16.544,14.618,16.818,14.85,16.805zM17.591,18.928c-0.193-0.039-0.244-0.102-0.45-0.205c-0.207-0.103-0.67-0.103-0.682-0.039c-0.014,0.064,0,0-0.155-0.05c-0.153-0.054-0.271,0-0.309-0.091c-0.038-0.091-0.128-0.117-0.244-0.002c-0.097,0.097-0.142,0.104,0.078,0.143c0.218,0.039,0.283,0.039,0.192,0.141c-0.09,0.104-0.154,0.233-0.077,0.244c0.077,0.015,0.309-0.05,0.334,0c0.026,0.054-0.051,0.064,0.207,0.105c0.258,0.037,0.309,0.128,0.359,0.178c0.051,0.052,0.206,0.22,0.104,0.22c-0.104,0-0.219,0.128-0.142,0.143c0.077,0.013,0.309-0.039,0.321,0c0.014,0.037,0.143,0.283,0.271,0.271c0.129-0.013,0.206-0.244,0.27-0.31c0.065-0.064,0.322-0.104,0.349,0.012c0.026,0.116,0.104,0.233,0.257,0.311c0.154,0.076,0.335,0.154,0.348,0.089c0.013-0.064-0.077-0.309-0.181-0.346c-0.103-0.041-0.282-0.259-0.282-0.348c0-0.091-0.155-0.117-0.232-0.182C17.849,19.147,17.784,18.967,17.591,18.928zM8.042,17.023c-0.084,0.037-0.155,0.476,0,0.527c0.154,0.052,0.244-0.205,0.193-0.271C8.183,17.218,8.158,16.973,8.042,17.023zM15.429,18.117c-0.118-0.05-0.335,0.424-0.181,0.463C15.403,18.62,15.518,18.156,15.429,18.117zM15.687,13.703c0.077,0,0.18-0.051,0.18-0.193c0-0.142,0.18,0,0.27-0.013s0.141-0.103,0.18-0.206c0.005-0.013,0.008-0.021,0.009-0.027c-0.003,0.024-0.001,0.093,0.095,0.117c0.154,0.038,0.205-0.064,0.205-0.103s0.283-0.103,0.336-0.142c0.051-0.038,0.258-0.103,0.27-0.154c0.013-0.051,0-0.348,0.064-0.373c0.064-0.026,0.154-0.026,0.052-0.206c-0.104-0.181-0.104-0.348-0.232-0.271c-0.095,0.057-0.038,0.284-0.115,0.438s-0.142,0.296-0.193,0.296s-0.321,0.103-0.399,0.18c-0.076,0.077-0.45-0.064-0.501,0c-0.052,0.064-0.154,0.141-0.219,0.193c-0.065,0.051-0.245,0.013-0.207,0.167C15.518,13.562,15.609,13.703,15.687,13.703zM17.449,12.056c0.18-0.013,0.348-0.064,0.348-0.064s0.271,0.013,0.232-0.116c-0.04-0.128-0.322-0.141-0.375-0.128c-0.051,0.013-0.142-0.142-0.244-0.116c-0.096,0.023-0.128,0.155-0.128,0.193c0,0.039-0.36,0.115-0.245,0.219C17.153,12.146,17.27,12.069,17.449,12.056zM13.91,19.058c0.104,0.064,0.296-0.219,0.349-0.13c0.051,0.091-0.013,0.13,0.076,0.246c0.091,0.114,0.258,0.102,0.258,0.102s-0.013-0.309-0.155-0.387c-0.142-0.077-0.232-0.166-0.064-0.141c0.167,0.026,0.257-0.039,0.219-0.114c-0.039-0.078-0.283-0.039-0.361-0.026s-0.193-0.052-0.193-0.052c-0.077,0.024-0.063,0.089-0.09,0.219C13.923,18.902,13.807,18.992,13.91,19.058zM20.924,21.618c-0.231-0.052-0.077,0.039,0,0.154c0.077,0.116,0.232,0.176,0.258,0.05C21.193,21.759,21.155,21.67,20.924,21.618zM21.915,24.744c-0.077,0.064,0,0.091-0.219,0.22c-0.22,0.13-0.49,0.271-0.541,0.386c-0.052,0.116,0.051,0.181,0.258,0.192c0.206,0.013,0.154,0.053,0.296-0.103s0.271-0.244,0.438-0.373c0.168-0.128,0.168-0.322,0.168-0.322s-0.181-0.178-0.193-0.141C22.1,24.665,21.992,24.681,21.915,24.744zM18.504,21.618c0.014-0.116-0.219-0.116-0.334-0.207c-0.116-0.089-0.128-0.359-0.193-0.515c-0.064-0.153-0.192-0.257-0.322-0.397c-0.128-0.143-0.192-0.465-0.23-0.438c-0.039,0.025-0.154,0.399-0.064,0.515c0.09,0.116-0.039,0.348-0.103,0.503c-0.065,0.153-0.22-0.026-0.349-0.104c-0.129-0.078-0.308-0.128-0.398-0.219c-0.09-0.091,0.155-0.335,0.091-0.426c-0.065-0.09-0.412-0.013-0.45-0.013c-0.039,0-0.116-0.128-0.194-0.128c-0.077,0-0.064,0.258-0.064,0.258s-0.078-0.091-0.193-0.207c-0.117-0.115,0.012,0.077-0.103,0.193c-0.117,0.117-0.079,0.078-0.129,0.206c-0.051,0.129-0.167,0.077-0.283-0.052c-0.116-0.128-0.179-0.037-0.258,0c-0.077,0.039-0.141,0.259-0.18,0.309c-0.039,0.052-0.309,0.117-0.374,0.182c-0.064,0.062-0.09,0.27-0.09,0.322c0,0.05-0.271,0.023-0.361,0.089c-0.09,0.064-0.23,0.025-0.321,0.025c-0.09,0-0.399,0.244-0.502,0.308c-0.103,0.066-0.103,0.298-0.051,0.362c0.051,0.063,0.154,0.219,0.09,0.244c-0.064,0.026-0.104,0.206,0.051,0.359c0.154,0.155,0.103,0.194,0.115,0.271c0.014,0.077,0.078,0.104,0.181,0.232c0.102,0.128-0.181,0.231-0.219,0.31c-0.039,0.076,0.091,0.192,0.167,0.257c0.077,0.063,0.271,0.026,0.386-0.013c0.117-0.039,0.245-0.143,0.321-0.155c0.079-0.013,0.438-0.026,0.438-0.026s0.129-0.192,0.219-0.296c0.089-0.102,0.372-0.013,0.372-0.013s0.117-0.076,0.426-0.141c0.309-0.065,0.179,0.064,0.296,0.104c0.115,0.037,0.27,0.062,0.359,0.128c0.09,0.064,0,0.218-0.012,0.283c-0.014,0.064,0.219,0.038,0.23-0.026c0.014-0.064,0.077-0.128,0.207-0.205c0.128-0.078,0.025,0.114,0.076,0.231c0.052,0.116,0.129-0.157,0.129-0.026c0,0.039,0.039,0.078,0.051,0.116c0.014,0.039,0.181,0.052,0.181,0.18c0,0.13,0,0.207,0.039,0.231c0.038,0.026,0.244,0,0.335,0.155c0.089,0.154,0.154,0.013,0.205-0.052c0.052-0.064,0.231,0.026,0.283,0.078c0.052,0.05,0.193-0.104,0.387-0.155c0.192-0.051,0.167-0.039,0.219-0.115c0.051-0.078,0.09-0.283,0.205-0.438c0.115-0.153,0.271-0.424,0.271-0.631c0-0.206-0.014-0.682-0.155-0.899C18.761,21.953,18.492,21.733,18.504,21.618zM18.029,24.77c-0.065-0.013-0.207-0.062-0.207-0.062c-0.142,0.141,0.142,0.141,0.104,0.283c-0.039,0.141,0.193,0.089,0.257,0.064c0.063-0.027,0.22-0.323,0.193-0.399C18.351,24.577,18.093,24.783,18.029,24.77zM22.803,24.178c-0.052,0-0.077,0.064-0.192,0c-0.117-0.063-0.091-0.037-0.168-0.167c-0.077-0.127-0.091-0.296-0.219-0.23c-0.051,0.025,0,0.168,0.051,0.218c0.053,0.052,0.077,0.231,0.064,0.283c-0.012,0.052-0.231,0.116-0.129,0.18c0.104,0.064,0.297,0,0.271,0.078c-0.025,0.077-0.129,0.179-0.013,0.205c0.115,0.025,0.154-0.089,0.207-0.178c0.051-0.093,0.089-0.169,0.179-0.221C22.944,24.294,22.854,24.178,22.803,24.178zM22.815,21.18c0.168,0.064,0.464-0.231,0.347-0.27C23.047,20.871,22.815,21.18,22.815,21.18zM13.923,19.906c-0.029,0.115,0.193,0.167,0.206,0.039C14.141,19.816,13.949,19.803,13.923,19.906zM14.27,16.47c-0.064,0.065-0.257,0.193-0.283,0.31c-0.025,0.115,0.309-0.182,0.399-0.296c0.091-0.117,0.27-0.052,0.308-0.117c0.04-0.063,0.04-0.063,0.04-0.063s-0.142-0.025-0.257-0.063c-0.117-0.039-0.258,0.102-0.193-0.104c0.064-0.206,0.257-0.167,0.219-0.322c-0.039-0.154-0.168-0.193-0.207-0.193c-0.09,0,0.013,0.141-0.116,0.231c-0.128,0.09-0.271,0.128-0.193,0.283C14.064,16.29,14.334,16.405,14.27,16.47zM13.254,19.751c0.013-0.076-0.142-0.192-0.206-0.192c-0.065,0-0.386-0.077-0.386-0.077c-0.058,0.023-0.135,0.045-0.158,0.077c-0.007-0.011-0.022-0.024-0.049-0.039c-0.142-0.075-0.309,0-0.361-0.102c-0.05-0.104-0.127-0.104-0.179-0.039c-0.094,0.117,0.025,0.206,0.063,0.231c0.038,0.024,0.181,0.052,0.309,0.039c0.08-0.008,0.181-0.027,0.21-0.059c0.004,0.014,0.016,0.027,0.035,0.044c0.103,0.092,0.167,0.13,0.321,0.116C13.009,19.74,13.241,19.829,13.254,19.751zM12.881,18.992c0.065,0,0.193,0,0.283,0.026c0.09,0.025,0.386,0.05,0.373-0.064c-0.013-0.115-0.038-0.297,0.089-0.411c0.13-0.117,0.257-0.18,0.193-0.348c-0.063-0.167-0.193-0.271-0.103-0.349c0.09-0.076,0.192-0.102,0.192-0.166c0-0.065-0.217,0.18-0.244-0.246c-0.005-0.091-0.206,0.025-0.219,0.116c-0.012,0.091,0.142,0.167-0.103,0.167c-0.245,0-0.257,0.194-0.309,0.232c-0.052,0.039-0.103,0.051-0.207,0.076c-0.102,0.026-0.127,0.13-0.153,0.194c-0.025,0.063-0.206-0.116-0.257-0.064c-0.051,0.052-0.013,0.296,0.077,0.501C12.585,18.863,12.816,18.992,12.881,18.992zM11.979,18.928c0.065-0.077,0.038-0.192-0.063-0.18c-0.103,0.013-0.193-0.168-0.36-0.283c-0.168-0.114-0.296-0.194-0.451-0.36c-0.154-0.167-0.347-0.271-0.45-0.359c-0.104-0.091-0.257-0.13-0.322-0.116c-0.159,0.032,0.231,0.309,0.271,0.346c0.039,0.041,0.387,0.335,0.387,0.478s0.231,0.476,0.296,0.527c0.064,0.052,0.385,0.244,0.437,0.348c0.052,0.103,0.167,0.13,0.167-0.013C11.89,19.174,11.916,19.006,11.979,18.928zM11.002,17.474c0.064,0.232,0.193,0.464,0.244,0.555c0.052,0.089,0.271,0.217,0.348,0.281c0.077,0.064,0.192-0.024,0.143-0.102c-0.052-0.078-0.155-0.192-0.167-0.283c-0.013-0.091-0.078-0.233-0.181-0.387c-0.102-0.153-0.192-0.192-0.257-0.295c-0.064-0.104-0.296-0.297-0.296-0.297c-0.102,0.013-0.102,0.205-0.051,0.271C10.834,17.28,10.938,17.243,11.002,17.474z",
+ "raph_globeAlt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM27.436,17.39c0.001,0.002,0.004,0.002,0.005,0.004c-0.022,0.187-0.054,0.37-0.085,0.554c-0.015-0.012-0.034-0.025-0.047-0.036c-0.103-0.09-0.254-0.128-0.318-0.115c-0.157,0.032,0.229,0.305,0.267,0.342c0.009,0.009,0.031,0.03,0.062,0.058c-1.029,5.312-5.709,9.338-11.319,9.338c-4.123,0-7.736-2.18-9.776-5.441c0.123-0.016,0.24-0.016,0.28-0.076c0.051-0.077,0.102-0.241,0.178-0.331c0.077-0.089,0.165-0.229,0.127-0.292c-0.039-0.064,0.101-0.344,0.088-0.419c-0.013-0.076-0.127-0.256,0.064-0.407s0.394-0.382,0.407-0.444c0.012-0.063,0.166-0.331,0.152-0.458c-0.012-0.127-0.152-0.28-0.24-0.318c-0.09-0.037-0.28-0.05-0.356-0.151c-0.077-0.103-0.292-0.203-0.368-0.178c-0.076,0.025-0.204,0.05-0.305-0.015c-0.102-0.062-0.267-0.139-0.33-0.189c-0.065-0.05-0.229-0.088-0.305-0.088c-0.077,0-0.065-0.052-0.178,0.101c-0.114,0.153,0,0.204-0.204,0.177c-0.204-0.023,0.025-0.036,0.141-0.189c0.113-0.152-0.013-0.242-0.141-0.203c-0.126,0.038-0.038,0.115-0.241,0.153c-0.203,0.036-0.203-0.09-0.076-0.115s0.355-0.139,0.355-0.19c0-0.051-0.025-0.191-0.127-0.191s-0.077-0.126-0.229-0.291c-0.092-0.101-0.196-0.164-0.299-0.204c-0.09-0.579-0.15-1.167-0.15-1.771c0-2.844,1.039-5.446,2.751-7.458c0.024-0.02,0.048-0.034,0.069-0.036c0.084-0.009,0.31-0.025,0.51-0.059c0.202-0.034,0.418-0.161,0.489-0.153c0.069,0.008,0.241,0.008,0.186-0.042C8.417,8.2,8.339,8.082,8.223,8.082S8.215,7.896,8.246,7.896c0.03,0,0.186,0.025,0.178,0.11C8.417,8.091,8.471,8.2,8.625,8.167c0.156-0.034,0.132-0.162,0.102-0.195C8.695,7.938,8.672,7.853,8.642,7.794c-0.031-0.06-0.023-0.136,0.14-0.153C8.944,7.625,9.168,7.708,9.16,7.573s0-0.28,0.046-0.356C9.253,7.142,9.354,7.09,9.299,7.065C9.246,7.04,9.176,7.099,9.121,6.972c-0.054-0.127,0.047-0.22,0.108-0.271c0.02-0.015,0.067-0.06,0.124-0.112C11.234,5.257,13.524,4.466,16,4.466c3.213,0,6.122,1.323,8.214,3.45c-0.008,0.022-0.01,0.052-0.031,0.056c-0.077,0.013-0.166,0.063-0.179-0.051c-0.013-0.114-0.013-0.331-0.102-0.203c-0.089,0.127-0.127,0.127-0.127,0.191c0,0.063,0.076,0.127,0.051,0.241C23.8,8.264,23.8,8.341,23.84,8.341c0.036,0,0.126-0.115,0.239-0.141c0.116-0.025,0.319-0.088,0.332,0.026c0.013,0.115,0.139,0.152,0.013,0.203c-0.128,0.051-0.267,0.026-0.293-0.051c-0.025-0.077-0.114-0.077-0.203-0.013c-0.088,0.063-0.279,0.292-0.279,0.292s-0.306,0.139-0.343,0.114c-0.04-0.025,0.101-0.165,0.203-0.228c0.102-0.064,0.178-0.204,0.14-0.242c-0.038-0.038-0.088-0.279-0.063-0.343c0.025-0.063,0.139-0.152,0.013-0.216c-0.127-0.063-0.217-0.14-0.318-0.178s-0.216,0.152-0.305,0.204c-0.089,0.051-0.076,0.114-0.191,0.127c-0.114,0.013-0.189,0.165,0,0.254c0.191,0.089,0.255,0.152,0.204,0.204c-0.051,0.051-0.267-0.025-0.267-0.025s-0.165-0.076-0.268-0.076c-0.101,0-0.229-0.063-0.33-0.076c-0.102-0.013-0.306-0.013-0.355,0.038c-0.051,0.051-0.179,0.203-0.28,0.152c-0.101-0.051-0.101-0.102-0.241-0.051c-0.14,0.051-0.279-0.038-0.355,0.038c-0.077,0.076-0.013,0.076-0.255,0c-0.241-0.076-0.189,0.051-0.419,0.089s-0.368-0.038-0.432,0.038c-0.064,0.077-0.153,0.217-0.19,0.127c-0.038-0.088,0.126-0.241,0.062-0.292c-0.062-0.051-0.33-0.025-0.367,0.013c-0.039,0.038-0.014,0.178,0.011,0.229c0.026,0.05,0.064,0.254-0.011,0.216c-0.077-0.038-0.064-0.166-0.141-0.152c-0.076,0.013-0.165,0.051-0.203,0.077c-0.038,0.025-0.191,0.025-0.229,0.076c-0.037,0.051,0.014,0.191-0.051,0.203c-0.063,0.013-0.114,0.064-0.254-0.025c-0.14-0.089-0.14-0.038-0.178-0.012c-0.038,0.025-0.216,0.127-0.229,0.012c-0.013-0.114,0.025-0.152-0.089-0.229c-0.115-0.076-0.026-0.076,0.127-0.025c0.152,0.05,0.343,0.075,0.622-0.013c0.28-0.089,0.395-0.127,0.28-0.178c-0.115-0.05-0.229-0.101-0.406-0.127c-0.179-0.025-0.42-0.025-0.7-0.127c-0.279-0.102-0.343-0.14-0.457-0.165c-0.115-0.026-0.813-0.14-1.132-0.089c-0.317,0.051-1.193,0.28-1.245,0.318s-0.128,0.19-0.292,0.318c-0.165,0.127-0.47,0.419-0.712,0.47c-0.241,0.051-0.521,0.254-0.521,0.305c0,0.051,0.101,0.242,0.076,0.28c-0.025,0.038,0.05,0.229,0.191,0.28c0.139,0.05,0.381,0.038,0.393-0.039c0.014-0.076,0.204-0.241,0.217-0.127c0.013,0.115,0.14,0.292,0.114,0.368c-0.025,0.077,0,0.153,0.09,0.14c0.088-0.012,0.559-0.114,0.559-0.114s0.153-0.064,0.127-0.166c-0.026-0.101,0.166-0.241,0.203-0.279c0.038-0.038,0.178-0.191,0.014-0.241c-0.167-0.051-0.293-0.064-0.115-0.216s0.292,0,0.521-0.229c0.229-0.229-0.051-0.292,0.191-0.305c0.241-0.013,0.496-0.025,0.444,0.051c-0.05,0.076-0.342,0.242-0.508,0.318c-0.166,0.077-0.14,0.216-0.076,0.292c0.063,0.076,0.09,0.254,0.204,0.229c0.113-0.025,0.254-0.114,0.38-0.101c0.128,0.012,0.383-0.013,0.42-0.013c0.039,0,0.216,0.178,0.114,0.203c-0.101,0.025-0.229,0.013-0.445,0.025c-0.215,0.013-0.456,0.013-0.456,0.051c0,0.039,0.292,0.127,0.19,0.191c-0.102,0.063-0.203-0.013-0.331-0.026c-0.127-0.012-0.203,0.166-0.241,0.267c-0.039,0.102,0.063,0.28-0.127,0.216c-0.191-0.063-0.331-0.063-0.381-0.038c-0.051,0.025-0.203,0.076-0.331,0.114c-0.126,0.038-0.076-0.063-0.242-0.063c-0.164,0-0.164,0-0.164,0l-0.103,0.013c0,0-0.101-0.063-0.114-0.165c-0.013-0.102,0.05-0.216-0.013-0.241c-0.064-0.026-0.292,0.012-0.33,0.088c-0.038,0.076-0.077,0.216-0.026,0.28c0.052,0.063,0.204,0.19,0.064,0.152c-0.14-0.038-0.317-0.051-0.419,0.026c-0.101,0.076-0.279,0.241-0.279,0.241s-0.318,0.025-0.318,0.102c0,0.077,0,0.178-0.114,0.191c-0.115,0.013-0.268,0.05-0.42,0.076c-0.153,0.025-0.139,0.088-0.317,0.102s-0.204,0.089-0.038,0.114c0.165,0.025,0.418,0.127,0.431,0.241c0.014,0.114-0.013,0.242-0.076,0.356c-0.043,0.079-0.305,0.026-0.458,0.026c-0.152,0-0.456-0.051-0.584,0c-0.127,0.051-0.102,0.305-0.064,0.419c0.039,0.114-0.012,0.178-0.063,0.216c-0.051,0.038-0.065,0.152,0,0.204c0.063,0.051,0.114,0.165,0.166,0.178c0.051,0.013,0.215-0.038,0.279,0.025c0.064,0.064,0.127,0.216,0.165,0.178c0.039-0.038,0.089-0.203,0.153-0.166c0.064,0.039,0.216-0.012,0.331-0.025s0.177-0.14,0.292-0.204c0.114-0.063,0.05-0.063,0.013-0.14c-0.038-0.076,0.114-0.165,0.204-0.254c0.088-0.089,0.253-0.013,0.292-0.115c0.038-0.102,0.051-0.279,0.151-0.267c0.103,0.013,0.243,0.076,0.331,0.076c0.089,0,0.279-0.14,0.332-0.165c0.05-0.025,0.241-0.013,0.267,0.102c0.025,0.114,0.241,0.254,0.292,0.279c0.051,0.025,0.381,0.127,0.433,0.165c0.05,0.038,0.126,0.153,0.152,0.254c0.025,0.102,0.114,0.102,0.128,0.013c0.012-0.089-0.065-0.254,0.025-0.242c0.088,0.013,0.191-0.026,0.191-0.026s-0.243-0.165-0.331-0.203c-0.088-0.038-0.255-0.114-0.331-0.241c-0.076-0.127-0.267-0.153-0.254-0.279c0.013-0.127,0.191-0.051,0.292,0.051c0.102,0.102,0.356,0.241,0.445,0.33c0.088,0.089,0.229,0.127,0.267,0.242c0.039,0.114,0.152,0.241,0.19,0.292c0.038,0.051,0.165,0.331,0.204,0.394c0.038,0.063,0.165-0.012,0.229-0.063c0.063-0.051,0.179-0.076,0.191-0.178c0.013-0.102-0.153-0.178-0.203-0.216c-0.051-0.038,0.127-0.076,0.191-0.127c0.063-0.05,0.177-0.14,0.228-0.063c0.051,0.077,0.026,0.381,0.051,0.432c0.025,0.051,0.279,0.127,0.331,0.191c0.05,0.063,0.267,0.089,0.304,0.051c0.039-0.038,0.242,0.026,0.294,0.038c0.049,0.013,0.202-0.025,0.304-0.05c0.103-0.025,0.204-0.102,0.191,0.063c-0.013,0.165-0.051,0.419-0.179,0.546c-0.127,0.127-0.076,0.191-0.202,0.191c-0.06,0-0.113,0-0.156,0.021c-0.041-0.065-0.098-0.117-0.175-0.097c-0.152,0.038-0.344,0.038-0.47,0.19c-0.128,0.153-0.178,0.165-0.204,0.114c-0.025-0.051,0.369-0.267,0.317-0.331c-0.05-0.063-0.355-0.038-0.521-0.038c-0.166,0-0.305-0.102-0.433-0.127c-0.126-0.025-0.292,0.127-0.418,0.254c-0.128,0.127-0.216,0.038-0.331,0.038c-0.115,0-0.331-0.165-0.331-0.165s-0.216-0.089-0.305-0.089c-0.088,0-0.267-0.165-0.318-0.165c-0.05,0-0.19-0.115-0.088-0.166c0.101-0.05,0.202,0.051,0.101-0.229c-0.101-0.279-0.33-0.216-0.419-0.178c-0.088,0.039-0.724,0.025-0.775,0.025c-0.051,0-0.419,0.127-0.533,0.178c-0.116,0.051-0.318,0.115-0.369,0.14c-0.051,0.025-0.318-0.051-0.433,0.013c-0.151,0.084-0.291,0.216-0.33,0.216c-0.038,0-0.153,0.089-0.229,0.28c-0.077,0.19,0.013,0.355-0.128,0.419c-0.139,0.063-0.394,0.204-0.495,0.305c-0.102,0.101-0.229,0.458-0.355,0.623c-0.127,0.165,0,0.317,0.025,0.419c0.025,0.101,0.114,0.292-0.025,0.471c-0.14,0.178-0.127,0.266-0.191,0.279c-0.063,0.013,0.063,0.063,0.088,0.19c0.025,0.128-0.114,0.255,0.128,0.369c0.241,0.113,0.355,0.217,0.418,0.367c0.064,0.153,0.382,0.407,0.382,0.407s0.229,0.205,0.344,0.293c0.114,0.089,0.152,0.038,0.177-0.05c0.025-0.09,0.178-0.104,0.355-0.104c0.178,0,0.305,0.04,0.483,0.014c0.178-0.025,0.356-0.141,0.42-0.166c0.063-0.025,0.279-0.164,0.443-0.063c0.166,0.103,0.141,0.241,0.23,0.332c0.088,0.088,0.24,0.037,0.355-0.051c0.114-0.09,0.064-0.052,0.203,0.025c0.14,0.075,0.204,0.151,0.077,0.267c-0.128,0.113-0.051,0.293-0.128,0.47c-0.076,0.178-0.063,0.203,0.077,0.278c0.14,0.076,0.394,0.548,0.47,0.638c0.077,0.088-0.025,0.342,0.064,0.495c0.089,0.151,0.178,0.254,0.077,0.331c-0.103,0.075-0.28,0.216-0.292,0.47s0.051,0.431,0.102,0.521s0.177,0.331,0.241,0.419c0.064,0.089,0.14,0.305,0.152,0.445c0.013,0.14-0.024,0.306,0.039,0.381c0.064,0.076,0.102,0.191,0.216,0.292c0.115,0.103,0.152,0.318,0.152,0.318s0.039,0.089,0.051,0.229c0.012,0.14,0.025,0.228,0.152,0.292c0.126,0.063,0.215,0.076,0.28,0.013c0.063-0.063,0.381-0.077,0.546-0.063c0.165,0.013,0.355-0.075,0.521-0.19s0.407-0.419,0.496-0.508c0.089-0.09,0.292-0.255,0.268-0.356c-0.025-0.101-0.077-0.203,0.024-0.254c0.102-0.052,0.344-0.152,0.356-0.229c0.013-0.077-0.09-0.395-0.115-0.457c-0.024-0.064,0.064-0.18,0.165-0.306c0.103-0.128,0.421-0.216,0.471-0.267c0.051-0.053,0.191-0.267,0.217-0.433c0.024-0.167-0.051-0.369,0-0.457c0.05-0.09,0.013-0.165-0.103-0.268c-0.114-0.102-0.089-0.407-0.127-0.457c-0.037-0.051-0.013-0.319,0.063-0.345c0.076-0.023,0.242-0.279,0.344-0.393c0.102-0.114,0.394-0.47,0.534-0.496c0.139-0.025,0.355-0.229,0.368-0.343c0.013-0.115,0.38-0.547,0.394-0.635c0.013-0.09,0.166-0.42,0.102-0.497c-0.062-0.076-0.559,0.115-0.622,0.141c-0.064,0.025-0.241,0.127-0.446,0.113c-0.202-0.013-0.114-0.177-0.127-0.254c-0.012-0.076-0.228-0.368-0.279-0.381c-0.051-0.012-0.203-0.166-0.267-0.317c-0.063-0.153-0.152-0.343-0.254-0.458c-0.102-0.114-0.165-0.38-0.268-0.559c-0.101-0.178-0.189-0.407-0.279-0.572c-0.021-0.041-0.045-0.079-0.067-0.117c0.118-0.029,0.289-0.082,0.31-0.009c0.024,0.088,0.165,0.279,0.19,0.419s0.165,0.089,0.178,0.216c0.014,0.128,0.14,0.433,0.19,0.47c0.052,0.038,0.28,0.242,0.318,0.318c0.038,0.076,0.089,0.178,0.127,0.369c0.038,0.19,0.076,0.444,0.179,0.482c0.102,0.038,0.444-0.064,0.508-0.102s0.482-0.242,0.635-0.255c0.153-0.012,0.179-0.115,0.368-0.152c0.191-0.038,0.331-0.177,0.458-0.28c0.127-0.101,0.28-0.355,0.33-0.444c0.052-0.088,0.179-0.152,0.115-0.253c-0.063-0.103-0.331-0.254-0.433-0.268c-0.102-0.012-0.089-0.178-0.152-0.178s-0.051,0.088-0.178,0.153c-0.127,0.063-0.255,0.19-0.344,0.165s0.026-0.089-0.113-0.203s-0.192-0.14-0.192-0.228c0-0.089-0.278-0.255-0.304-0.382c-0.026-0.127,0.19-0.305,0.254-0.19c0.063,0.114,0.115,0.292,0.279,0.368c0.165,0.076,0.318,0.204,0.395,0.229c0.076,0.025,0.267-0.14,0.33-0.114c0.063,0.024,0.191,0.253,0.306,0.292c0.113,0.038,0.495,0.051,0.559,0.051s0.33,0.013,0.381-0.063c0.051-0.076,0.089-0.076,0.153-0.076c0.062,0,0.177,0.229,0.267,0.254c0.089,0.025,0.254,0.013,0.241,0.179c-0.012,0.164,0.076,0.305,0.165,0.317c0.09,0.012,0.293-0.191,0.293-0.191s0,0.318-0.012,0.433c-0.014,0.113,0.139,0.534,0.139,0.534s0.19,0.393,0.241,0.482s0.267,0.355,0.267,0.47c0,0.115,0.025,0.293,0.103,0.293c0.076,0,0.152-0.203,0.24-0.331c0.091-0.126,0.116-0.305,0.153-0.432c0.038-0.127,0.038-0.356,0.038-0.444c0-0.09,0.075-0.166,0.255-0.242c0.178-0.076,0.304-0.292,0.456-0.407c0.153-0.115,0.141-0.305,0.446-0.305c0.305,0,0.278,0,0.355-0.077c0.076-0.076,0.151-0.127,0.19,0.013c0.038,0.14,0.254,0.343,0.292,0.394c0.038,0.052,0.114,0.191,0.103,0.344c-0.013,0.152,0.012,0.33,0.075,0.33s0.191-0.216,0.191-0.216s0.279-0.189,0.267,0.013c-0.014,0.203,0.025,0.419,0.025,0.545c0,0.053,0.042,0.135,0.088,0.21c-0.005,0.059-0.004,0.119-0.009,0.178C27.388,17.153,27.387,17.327,27.436,17.39zM20.382,12.064c0.076,0.05,0.102,0.127,0.152,0.203c0.052,0.076,0.14,0.05,0.203,0.114c0.063,0.064-0.178,0.14-0.075,0.216c0.101,0.077,0.151,0.381,0.165,0.458c0.013,0.076-0.279,0.114-0.369,0.102c-0.089-0.013-0.354-0.102-0.445-0.127c-0.089-0.026-0.139-0.343-0.025-0.331c0.116,0.013,0.141-0.025,0.267-0.139c0.128-0.115-0.189-0.166-0.278-0.191c-0.089-0.025-0.268-0.305-0.331-0.394c-0.062-0.089-0.014-0.228,0.141-0.331c0.076-0.051,0.279,0.063,0.381,0c0.101-0.063,0.203-0.14,0.241-0.165c0.039-0.025,0.293,0.038,0.33,0.114c0.039,0.076,0.191,0.191,0.141,0.229c-0.052,0.038-0.281,0.076-0.356,0c-0.075-0.077-0.255,0.012-0.268,0.152C20.242,12.115,20.307,12.013,20.382,12.064zM16.875,12.28c-0.077-0.025,0.025-0.178,0.102-0.229c0.075-0.051,0.164-0.178,0.241-0.305c0.076-0.127,0.178-0.14,0.241-0.127c0.063,0.013,0.203,0.241,0.241,0.318c0.038,0.076,0.165-0.026,0.217-0.051c0.05-0.025,0.127-0.102,0.14-0.165s0.127-0.102,0.254-0.102s0.013,0.102-0.076,0.127c-0.09,0.025-0.038,0.077,0.113,0.127c0.153,0.051,0.293,0.191,0.459,0.279c0.165,0.089,0.19,0.267,0.088,0.292c-0.101,0.025-0.406,0.051-0.521,0.038c-0.114-0.013-0.254-0.127-0.419-0.153c-0.165-0.025-0.369-0.013-0.433,0.077s-0.292,0.05-0.395,0.05c-0.102,0-0.228,0.127-0.253,0.077C16.875,12.534,16.951,12.306,16.875,12.28zM17.307,9.458c0.063-0.178,0.419,0.038,0.355,0.127C17.599,9.675,17.264,9.579,17.307,9.458zM17.802,18.584c0.063,0.102-0.14,0.431-0.254,0.407c-0.113-0.027-0.076-0.318-0.038-0.382C17.548,18.545,17.769,18.529,17.802,18.584zM13.189,12.674c0.025-0.051-0.039-0.153-0.127-0.013C13.032,12.71,13.164,12.725,13.189,12.674zM20.813,8.035c0.141,0.076,0.339,0.107,0.433,0.013c0.076-0.076,0.013-0.204-0.05-0.216c-0.064-0.013-0.104-0.115,0.062-0.203c0.165-0.089,0.343-0.204,0.534-0.229c0.19-0.025,0.622-0.038,0.774,0c0.152,0.039,0.382-0.166,0.445-0.254s-0.203-0.152-0.279-0.051c-0.077,0.102-0.444,0.076-0.521,0.051c-0.076-0.025-0.686,0.102-0.812,0.102c-0.128,0-0.179,0.152-0.356,0.229c-0.179,0.076-0.42,0.191-0.509,0.229c-0.088,0.038-0.177,0.19-0.101,0.216C20.509,7.947,20.674,7.959,20.813,8.035zM14.142,12.674c0.064-0.089-0.051-0.217-0.114-0.217c-0.12,0-0.178,0.191-0.103,0.254C14.002,12.776,14.078,12.763,14.142,12.674zM14.714,13.017c0.064,0.025,0.114,0.102,0.165,0.114c0.052,0.013,0.217,0,0.167-0.127s-0.167-0.127-0.204-0.127c-0.038,0-0.203-0.038-0.267,0C14.528,12.905,14.65,12.992,14.714,13.017zM11.308,10.958c0.101,0.013,0.217-0.063,0.305-0.101c0.088-0.038,0.216-0.114,0.216-0.229c0-0.114-0.025-0.216-0.077-0.267c-0.051-0.051-0.14-0.064-0.216-0.051c-0.115,0.02-0.127,0.14-0.203,0.14c-0.076,0-0.165,0.025-0.14,0.114s0.077,0.152,0,0.19C11.117,10.793,11.205,10.946,11.308,10.958zM11.931,10.412c0.127,0.051,0.394,0.102,0.292,0.153c-0.102,0.051-0.28,0.19-0.305,0.267s0.216,0.153,0.216,0.153s-0.077,0.089-0.013,0.114c0.063,0.025,0.102-0.089,0.203-0.089c0.101,0,0.304,0.063,0.406,0.063c0.103,0,0.267-0.14,0.254-0.229c-0.013-0.089-0.14-0.229-0.254-0.28c-0.113-0.051-0.241-0.28-0.317-0.331c-0.076-0.051,0.076-0.178-0.013-0.267c-0.09-0.089-0.153-0.076-0.255-0.14c-0.102-0.063-0.191,0.013-0.254,0.089c-0.063,0.076-0.14-0.013-0.217,0.012c-0.102,0.035-0.063,0.166-0.012,0.229C11.714,10.221,11.804,10.361,11.931,10.412zM24.729,17.198c-0.083,0.037-0.153,0.47,0,0.521c0.152,0.052,0.241-0.202,0.191-0.267C24.868,17.39,24.843,17.147,24.729,17.198zM20.114,20.464c-0.159-0.045-0.177,0.166-0.304,0.306c-0.128,0.141-0.267,0.254-0.317,0.241c-0.052-0.013-0.331,0.089-0.242,0.279c0.089,0.191,0.076,0.382-0.013,0.472c-0.089,0.088,0.076,0.342,0.052,0.482c-0.026,0.139,0.037,0.229,0.215,0.229s0.242-0.064,0.318-0.229c0.076-0.166,0.088-0.331,0.164-0.47c0.077-0.141,0.141-0.434,0.179-0.51c0.038-0.075,0.114-0.316,0.102-0.457C20.254,20.669,20.204,20.489,20.114,20.464zM10.391,8.802c-0.069-0.06-0.229-0.102-0.306-0.11c-0.076-0.008-0.152,0.06-0.321,0.06c-0.168,0-0.279,0.067-0.347,0C9.349,8.684,9.068,8.65,9.042,8.692C9.008,8.749,8.941,8.751,9.008,8.87c0.069,0.118,0.12,0.186,0.179,0.178s0.262-0.017,0.288,0.051C9.5,9.167,9.569,9.226,9.712,9.184c0.145-0.042,0.263-0.068,0.296-0.119c0.033-0.051,0.263-0.059,0.263-0.059S10.458,8.861,10.391,8.802z",
+ "raph_globe": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM19.158,23.269c-0.079,0.064-0.183,0.13-0.105,0.207c0.078,0.078-0.09,0.131-0.09,0.17s0.104,0.246,0.052,0.336c-0.052,0.092-0.091,0.223-0.13,0.301c-0.039,0.077-0.131,0.155-0.104,0.272c0.025,0.116-0.104,0.077-0.104,0.194c0,0.116,0.116,0.065,0.09,0.208c-0.025,0.144-0.09,0.183-0.09,0.285c0,0.104,0.064,0.247,0.064,0.286s-0.064,0.17-0.155,0.272c-0.092,0.104-0.155,0.17-0.144,0.233c0.014,0.065,0.104,0.144,0.091,0.184c-0.013,0.037-0.129,0.168-0.116,0.259c0.014,0.09,0.129,0.053,0.155,0.116c0.026,0.065-0.155,0.118-0.078,0.183c0.078,0.064,0.183,0.051,0.156,0.208c-0.019,0.112,0.064,0.163,0.126,0.198c-0.891,0.221-1.818,0.352-2.777,0.352C9.639,27.533,4.466,22.36,4.466,16c0-2.073,0.557-4.015,1.518-5.697c0.079-0.042,0.137-0.069,0.171-0.062c0.065,0.013,0.079,0.104,0.183,0.13c0.104,0.026,0.195-0.078,0.26-0.117c0.064-0.039,0.116-0.195,0.051-0.182c-0.065,0.013-0.234,0-0.234,0s0.183-0.104,0.183-0.169s0.025-0.169,0.129-0.208C6.83,9.655,6.83,9.681,6.765,9.837C6.7,9.993,6.896,9.928,6.973,9.863s0.13-0.013,0.272-0.104c0.143-0.091,0.143-0.143,0.221-0.143c0.078,0,0.221,0.143,0.299,0.091c0.077-0.052,0.299,0.065,0.429,0.065c0.129,0,0.545,0.169,0.624,0.169c0.078,0,0.312,0.09,0.325,0.259c0.013,0.169,0.09,0.156,0.168,0.156s0.26,0.065,0.26,0.13c0,0.065-0.052,0.325,0.078,0.39c0.129,0.064,0.247,0.169,0.299,0.143c0.052-0.026,0-0.233-0.064-0.26c-0.065-0.026-0.027-0.117-0.052-0.169c-0.026-0.051,0.078-0.051,0.117,0.039c0.039,0.091,0.143,0.26,0.208,0.26c0.064,0,0.208,0.156,0.168,0.247c-0.039,0.091,0.039,0.221,0.156,0.221c0.116,0,0.26,0.182,0.312,0.195c0.052,0.013,0.117,0.078,0.117,0.117c0,0.04,0.065,0.26,0.065,0.351c0,0.09-0.04,0.454-0.053,0.597s0.104,0.39,0.234,0.52c0.129,0.13,0.246,0.377,0.324,0.429c0.079,0.052,0.13,0.195,0.247,0.182c0.117-0.013,0.195,0.078,0.299,0.26c0.104,0.182,0.208,0.48,0.286,0.506c0.078,0.026,0.208,0.117,0.142,0.182c-0.064,0.064-0.168,0.208-0.051,0.208c0.117,0,0.156-0.065,0.247,0.053c0.09,0.116,0.208,0.181,0.194,0.26c-0.013,0.077,0.104,0.103,0.156,0.116c0.052,0.013,0.169,0.247,0.286,0.143c0.117-0.104-0.155-0.259-0.234-0.326c-0.078-0.064,0-0.207-0.182-0.35c-0.182-0.143-0.156-0.247-0.286-0.351c-0.13-0.104-0.233-0.195-0.104-0.286c0.13-0.091,0.143,0.091,0.195,0.208c0.052,0.116,0.324,0.351,0.441,0.454c0.117,0.104,0.326,0.468,0.39,0.468s0.247,0.208,0.247,0.208s0.103,0.168,0.064,0.22c-0.039,0.052,0.053,0.247,0.144,0.299c0.09,0.052,0.455,0.22,0.507,0.247c0.052,0.027,0.155,0.221,0.299,0.221c0.142,0,0.247,0.014,0.286,0.053c0.039,0.038,0.155,0.194,0.234,0.104c0.078-0.092,0.09-0.131,0.208-0.131c0.117,0,0.168,0.091,0.233,0.156c0.065,0.065,0.247,0.235,0.338,0.222c0.091-0.013,0.208,0.104,0.273,0.064s0.169,0.025,0.22,0.052c0.054,0.026,0.234,0.118,0.222,0.272c-0.013,0.157,0.103,0.195,0.182,0.234c0.078,0.039,0.182,0.13,0.248,0.195c0.064,0.063,0.206,0.077,0.246,0.116c0.039,0.039,0.065,0.117,0.182,0.052c0.116-0.064,0.092-0.181,0.092-0.181s0.129-0.026,0.194,0.026c0.064,0.05,0.104,0.22,0.144,0.246c0.038,0.026,0.115,0.221,0.063,0.362c-0.051,0.145-0.038,0.286-0.091,0.286c-0.052,0-0.116,0.17-0.195,0.209c-0.076,0.039-0.285,0.221-0.272,0.286c0.013,0.063,0.131,0.258,0.104,0.35c-0.025,0.091-0.194,0.195-0.154,0.338c0.038,0.144,0.312,0.183,0.323,0.312c0.014,0.131,0.209,0.417,0.235,0.546c0.025,0.13,0.246,0.272,0.246,0.453c0,0.184,0.312,0.3,0.377,0.312c0.063,0.013,0.182,0.131,0.272,0.17s0.169,0.116,0.233,0.221s0.053,0.261,0.053,0.299c0,0.039-0.039,0.44-0.078,0.674C19.145,23.021,19.235,23.203,19.158,23.269zM10.766,11.188c0.039,0.013,0.117,0.091,0.156,0.091c0.04,0,0.234,0.156,0.286,0.208c0.053,0.052,0.053,0.195-0.013,0.208s-0.104-0.143-0.117-0.208c-0.013-0.065-0.143-0.065-0.208-0.104C10.805,11.344,10.66,11.152,10.766,11.188zM27.51,16.41c-0.144,0.182-0.13,0.272-0.195,0.286c-0.064,0.013,0.065,0.065,0.09,0.194c0.022,0.112-0.065,0.224,0.063,0.327c-0.486,4.619-3.71,8.434-8.016,9.787c-0.007-0.011-0.019-0.025-0.021-0.034c-0.027-0.078-0.027-0.233,0.064-0.285c0.091-0.053,0.312-0.233,0.363-0.272c0.052-0.04,0.13-0.221,0.091-0.247c-0.038-0.026-0.232,0-0.26-0.039c-0.026-0.039-0.026-0.092,0.104-0.182c0.13-0.091,0.195-0.222,0.247-0.26c0.052-0.039,0.155-0.117,0.195-0.209c0.038-0.09-0.041-0.039-0.118-0.039s-0.117-0.142-0.117-0.207s0.195,0.026,0.339,0.052c0.143,0.024,0.077-0.065,0.064-0.142c-0.013-0.078,0.026-0.209,0.105-0.17c0.076,0.039,0.479-0.013,0.531-0.026c0.052-0.013,0.194-0.246,0.246-0.312c0.053-0.065,0.064-0.129,0-0.168c-0.065-0.04-0.143-0.184-0.168-0.221c-0.026-0.041-0.039-0.274-0.013-0.34c0.025-0.063,0,0.377,0.181,0.43c0.183,0.052,0.286,0.078,0.455-0.078c0.169-0.155,0.298-0.26,0.312-0.363c0.013-0.104,0.052-0.209,0.117-0.246c0.065-0.039,0.104,0.103,0.182-0.065c0.078-0.17,0.156-0.157,0.234-0.299c0.077-0.144-0.13-0.325,0.024-0.43c0.157-0.103,0.43-0.233,0.43-0.233s0.078-0.039,0.234-0.078c0.155-0.038,0.324-0.014,0.376-0.09c0.052-0.079,0.104-0.247,0.182-0.338c0.079-0.092,0.169-0.234,0.13-0.299c-0.039-0.065,0.104-0.352,0.091-0.429c-0.013-0.078-0.13-0.261,0.065-0.416s0.402-0.391,0.416-0.454c0.012-0.065,0.169-0.338,0.154-0.469c-0.012-0.129-0.154-0.285-0.245-0.325c-0.092-0.037-0.286-0.05-0.364-0.154s-0.299-0.208-0.377-0.182c-0.077,0.026-0.208,0.051-0.312-0.015c-0.104-0.063-0.272-0.143-0.337-0.194c-0.066-0.051-0.234-0.09-0.312-0.09s-0.065-0.053-0.182,0.103c-0.117,0.157,0,0.209-0.208,0.182c-0.209-0.024,0.025-0.038,0.144-0.194c0.115-0.155-0.014-0.247-0.144-0.207c-0.13,0.039-0.039,0.117-0.247,0.156c-0.207,0.038-0.207-0.092-0.077-0.117c0.13-0.026,0.363-0.143,0.363-0.194c0-0.053-0.026-0.196-0.13-0.196s-0.078-0.129-0.233-0.297c-0.156-0.17-0.351-0.274-0.508-0.249c-0.154,0.026-0.272,0.065-0.35-0.076c-0.078-0.144-0.169-0.17-0.222-0.247c-0.051-0.078-0.182,0-0.221-0.039s-0.039-0.039-0.039-0.039s-0.169,0.039-0.077-0.078c0.09-0.117,0.129-0.338,0.09-0.325c-0.038,0.013-0.104,0.196-0.168,0.183c-0.064-0.013-0.014-0.04-0.144-0.117c-0.13-0.078-0.337-0.013-0.337,0.052c0,0.065-0.065,0.117-0.065,0.117s-0.039-0.038-0.078-0.117c-0.039-0.078-0.221-0.091-0.312-0.013c-0.09,0.078-0.142-0.196-0.207-0.196s-0.194,0.065-0.26,0.184c-0.064,0.116-0.038,0.285-0.092,0.272c-0.05-0.013-0.063-0.233-0.05-0.312c0.012-0.079,0.155-0.208,0.05-0.234c-0.103-0.026-0.259,0.13-0.323,0.143c-0.065,0.013-0.195,0.104-0.273,0.209c-0.077,0.103-0.116,0.168-0.195,0.207c-0.077,0.039-0.193,0-0.167-0.039c0.025-0.039-0.222-0.181-0.261-0.13c-0.04,0.052-0.155,0.091-0.272,0.144c-0.117,0.052-0.222-0.065-0.247-0.117s-0.079-0.064-0.091-0.234c-0.013-0.168,0.027-0.351,0.065-0.454c0.038-0.104-0.195-0.312-0.286-0.3c-0.091,0.015-0.182,0.105-0.272,0.091c-0.092-0.012-0.052-0.038-0.195-0.038c-0.143,0-0.026-0.025,0-0.143c0.025-0.116-0.052-0.273,0.092-0.377c0.142-0.104,0.091-0.351,0-0.363c-0.092-0.014-0.261,0.039-0.377,0.026c-0.116-0.014-0.208,0.091-0.169,0.207c0.039,0.117-0.065,0.195-0.104,0.183c-0.039-0.013-0.09-0.078-0.234,0.026c-0.142,0.103-0.194,0.064-0.337-0.052c-0.143-0.118-0.299-0.234-0.325-0.416c-0.026-0.182-0.04-0.364,0.013-0.468c0.051-0.104,0.051-0.285-0.026-0.312c-0.078-0.025,0.09-0.155,0.181-0.181c0.092-0.026,0.234-0.143,0.26-0.195c0.026-0.052,0.156-0.04,0.298-0.04c0.143,0,0.169,0,0.312,0.078c0.143,0.078,0.169-0.039,0.169-0.078c0-0.039,0.052-0.117,0.208-0.104c0.156,0.013,0.376-0.052,0.416-0.013s0.116,0.195,0.194,0.143c0.079-0.051,0.104-0.143,0.131,0.014c0.025,0.155,0.09,0.39,0.208,0.429c0.116,0.039,0.052,0.194,0.168,0.207c0.115,0.013,0.17-0.246,0.131-0.337c-0.04-0.09-0.118-0.363-0.183-0.428c-0.064-0.065-0.064-0.234,0.064-0.286c0.13-0.052,0.442-0.312,0.532-0.389c0.092-0.079,0.338-0.144,0.261-0.248c-0.078-0.104-0.104-0.168-0.104-0.247s0.078-0.052,0.117,0s0.194-0.078,0.155-0.143c-0.038-0.064-0.026-0.155,0.065-0.143c0.091,0.013,0.116-0.065,0.078-0.117c-0.039-0.052,0.091-0.117,0.182-0.091c0.092,0.026,0.325-0.013,0.364-0.065c0.038-0.052-0.078-0.104-0.078-0.208c0-0.104,0.155-0.195,0.247-0.208c0.091-0.013,0.207,0,0.221-0.039c0.012-0.039,0.143-0.143,0.155-0.052c0.014,0.091,0,0.247,0.104,0.247c0.104,0,0.232-0.117,0.272-0.129c0.038-0.013,0.286-0.065,0.338-0.078c0.052-0.013,0.363-0.039,0.325-0.13c-0.039-0.09-0.078-0.181-0.118-0.22c-0.039-0.039-0.077,0.013-0.13,0.078c-0.051,0.065-0.143,0.065-0.168,0.013c-0.026-0.051,0.012-0.207-0.078-0.156c-0.092,0.052-0.104,0.104-0.157,0.078c-0.052-0.026-0.103-0.117-0.103-0.117s0.129-0.064,0.038-0.182c-0.09-0.117-0.221-0.091-0.35-0.025c-0.13,0.064-0.118,0.051-0.273,0.09s-0.234,0.078-0.234,0.078s0.209-0.129,0.299-0.208c0.091-0.078,0.209-0.117,0.286-0.195c0.078-0.078,0.285,0.039,0.285,0.039s0.105-0.104,0.105-0.039s-0.027,0.234,0.051,0.234c0.079,0,0.299-0.104,0.21-0.131c-0.093-0.026,0.129,0,0.219-0.065c0.092-0.065,0.194-0.065,0.247-0.09c0.052-0.026,0.092-0.143,0.182-0.143c0.092,0,0.13,0.117,0,0.195s-0.143,0.273-0.208,0.325c-0.064,0.052-0.026,0.117,0.078,0.104c0.104-0.013,0.194,0.013,0.286-0.013s0.143,0.026,0.168,0.065c0.026,0.039,0.104-0.039,0.104-0.039s0.169-0.039,0.221,0.026c0.053,0.064,0.092-0.039,0.053-0.104c-0.039-0.064-0.092-0.129-0.13-0.208c-0.039-0.078-0.091-0.104-0.194-0.078c-0.104,0.026-0.13-0.026-0.195-0.064c-0.065-0.04-0.118,0.052-0.065-0.04c0.053-0.09,0.078-0.117,0.117-0.195c0.039-0.078,0.209-0.221,0.039-0.259c-0.169-0.04-0.222-0.065-0.247-0.143c-0.026-0.078-0.221-0.221-0.272-0.221c-0.053,0-0.233,0-0.247-0.065c-0.013-0.065-0.143-0.208-0.208-0.273c-0.064-0.065-0.312-0.351-0.351-0.377c-0.039-0.026-0.091-0.013-0.208,0.143c-0.116,0.157-0.22,0.183-0.312,0.144c-0.091-0.039-0.104-0.026-0.193-0.13c-0.093-0.104,0.09-0.117,0.051-0.182c-0.04-0.064-0.247-0.091-0.377-0.104c-0.13-0.013-0.221-0.156-0.416-0.169c-0.194-0.013-0.428,0.026-0.493,0.026c-0.064,0-0.064,0.091-0.09,0.234c-0.027,0.143,0.09,0.182-0.027,0.208c-0.116,0.026-0.169,0.039-0.052,0.091c0.117,0.052,0.273,0.26,0.273,0.26s0,0.117-0.092,0.182c-0.09,0.065-0.182,0.13-0.233,0.053c-0.053-0.079-0.195-0.065-0.155,0.013c0.038,0.078,0.116,0.117,0.116,0.195c0,0.077,0.117,0.272,0.039,0.337c-0.078,0.065-0.168,0.014-0.233,0.026s-0.131-0.104-0.078-0.13c0.051-0.026-0.014-0.221-0.014-0.221s-0.155,0.221-0.143,0.104c0.014-0.117-0.064-0.13-0.064-0.221c0-0.091-0.079-0.13-0.194-0.104c-0.118,0.026-0.26-0.04-0.482-0.079c-0.22-0.039-0.311-0.064-0.493-0.156c-0.182-0.091-0.247-0.026-0.338-0.013c-0.091,0.013-0.052-0.182-0.169-0.207c-0.116-0.027-0.181,0.025-0.207-0.144c-0.026-0.168,0.039-0.208,0.324-0.39c0.286-0.182,0.247-0.26,0.468-0.286c0.22-0.026,0.325,0.026,0.325-0.039s0.052-0.325,0.052-0.195S16.95,9.109,16.832,9.2c-0.116,0.091-0.052,0.104,0.04,0.104c0.091,0,0.259-0.091,0.259-0.091s0.208-0.091,0.26-0.013c0.053,0.078,0.053,0.156,0.144,0.156s0.285-0.104,0.116-0.195c-0.168-0.091-0.272-0.078-0.376-0.182s-0.078-0.065-0.195-0.039c-0.116,0.026-0.116-0.039-0.156-0.039s-0.104,0.026-0.13-0.026c-0.025-0.052,0.014-0.065,0.145-0.065c0.129,0,0.285,0.039,0.285,0.039s0.155-0.052,0.194-0.065c0.039-0.013,0.247-0.039,0.208-0.155c-0.04-0.117-0.169-0.117-0.208-0.156s0.078-0.09,0.143-0.117c0.065-0.026,0.247,0,0.247,0s0.117,0.013,0.117-0.039S17.897,8.2,17.976,8.239s0,0.156,0.117,0.13c0.116-0.026,0.143,0,0.207,0.039c0.065,0.039-0.013,0.195-0.077,0.221c-0.065,0.025-0.169,0.077-0.026,0.09c0.144,0.014,0.246,0.014,0.246,0.014s0.092-0.091,0.131-0.169c0.038-0.078,0.104-0.026,0.155,0c0.052,0.025,0.247,0.065,0.065,0.117c-0.183,0.052-0.221,0.117-0.26,0.182c-0.038,0.065-0.053,0.104-0.221,0.065c-0.17-0.039-0.26-0.026-0.299,0.039c-0.039,0.064-0.013,0.273,0.053,0.247c0.063-0.026,0.129-0.026,0.207-0.052c0.078-0.026,0.39,0.026,0.467,0.013c0.078-0.013,0.209,0.13,0.248,0.104c0.039-0.026,0.117,0.052,0.194,0.104c0.078,0.052,0.052-0.117,0.194-0.013c0.144,0.104,0.065,0.104,0.144,0.104c0.076,0,0.246,0.013,0.246,0.013s0.014-0.129,0.144-0.104c0.13,0.026,0.245,0.169,0.232,0.064c-0.012-0.103,0.013-0.181-0.09-0.259c-0.104-0.078-0.272-0.13-0.299-0.169c-0.026-0.039-0.052-0.091-0.013-0.117c0.039-0.025,0.221,0.013,0.324,0.079c0.104,0.065,0.195,0.13,0.273,0.078c0.077-0.052,0.17-0.078,0.208-0.117c0.038-0.04,0.13-0.156,0.13-0.156s-0.391-0.051-0.441-0.117c-0.053-0.065-0.235-0.156-0.287-0.156s-0.194,0.091-0.246-0.039s-0.052-0.286-0.105-0.299c-0.05-0.013-0.597-0.091-0.674-0.13c-0.078-0.039-0.39-0.13-0.507-0.195s-0.286-0.156-0.389-0.156c-0.104,0-0.533,0.052-0.611,0.039c-0.078-0.013-0.312,0.026-0.403,0.039c-0.091,0.013,0.117,0.182-0.077,0.221c-0.195,0.039-0.169,0.065-0.13-0.13c0.038-0.195-0.131-0.247-0.299-0.169c-0.169,0.078-0.442,0.13-0.377,0.221c0.065,0.091-0.012,0.157,0.117,0.247c0.13,0.091,0.183,0.117,0.35,0.104c0.17-0.013,0.339,0.025,0.339,0.025s0,0.157-0.064,0.182c-0.065,0.026-0.169,0.026-0.196,0.104c-0.025,0.078-0.155,0.117-0.155,0.078s0.065-0.169-0.026-0.234c-0.09-0.065-0.117-0.078-0.221-0.013c-0.104,0.065-0.116,0.091-0.169-0.013C16.053,8.291,15.897,8.2,15.897,8.2s-0.104-0.129-0.182-0.194c-0.077-0.065-0.22-0.052-0.234,0.013c-0.013,0.064,0.026,0.129,0.078,0.247c0.052,0.117,0.104,0.337,0.013,0.351c-0.091,0.013-0.104,0.026-0.195,0.052c-0.091,0.026-0.13-0.039-0.13-0.143s-0.04-0.195-0.013-0.234c0.026-0.039-0.104,0.027-0.234,0c-0.13-0.025-0.233,0.052-0.104,0.092c0.13,0.039,0.157,0.194,0.039,0.233c-0.117,0.039-0.559,0-0.702,0s-0.35,0.039-0.39-0.039c-0.039-0.078,0.118-0.129,0.208-0.129c0.091,0,0.363,0.012,0.467-0.13c0.104-0.143-0.13-0.169-0.233-0.169c-0.104,0-0.183-0.039-0.299-0.155c-0.118-0.117,0.078-0.195,0.052-0.247c-0.026-0.052-0.156-0.014-0.272-0.014c-0.117,0-0.299-0.09-0.299,0.014c0,0.104,0.143,0.402,0.052,0.337c-0.091-0.064-0.078-0.156-0.143-0.234c-0.065-0.078-0.168-0.065-0.299-0.052c-0.129,0.013-0.35,0.052-0.415,0.039c-0.064-0.013-0.013-0.013-0.156-0.078c-0.142-0.065-0.208-0.052-0.312-0.117C12.091,7.576,12.182,7.551,12,7.538c-0.181-0.013-0.168,0.09-0.35,0.065c-0.182-0.026-0.234,0.013-0.416,0c-0.182-0.013-0.272-0.026-0.299,0.065c-0.025,0.091-0.078,0.247-0.156,0.247c-0.077,0-0.169,0.091,0.078,0.104c0.247,0.013,0.105,0.129,0.325,0.117c0.221-0.013,0.416-0.013,0.468-0.117c0.052-0.104,0.091-0.104,0.117-0.065c0.025,0.039,0.22,0.272,0.22,0.272s0.131,0.104,0.183,0.13c0.051,0.026-0.052,0.143-0.156,0.078c-0.104-0.065-0.299-0.051-0.377-0.116c-0.078-0.065-0.429-0.065-0.52-0.052c-0.09,0.013-0.247-0.039-0.299-0.039c-0.051,0-0.221,0.13-0.221,0.13S10.532,8.252,10.494,8.2c-0.039-0.052-0.104,0.052-0.156,0.065c-0.052,0.013-0.208-0.104-0.364-0.052C9.818,8.265,9.87,8.317,9.649,8.304s-0.272-0.052-0.35-0.039C9.22,8.278,9.22,8.278,9.22,8.278S9.233,8.33,9.143,8.382C9.052,8.434,8.986,8.499,8.921,8.421C8.857,8.343,8.818,8.343,8.779,8.33c-0.04-0.013-0.118-0.078-0.286-0.04C8.324,8.33,8.064,8.239,8.013,8.239c-0.04,0-0.313-0.015-0.491-0.033c2.109-2.292,5.124-3.74,8.478-3.74c2.128,0,4.117,0.589,5.83,1.598c-0.117,0.072-0.319,0.06-0.388,0.023c-0.078-0.043-0.158-0.078-0.475-0.061c-0.317,0.018-0.665,0.122-0.595,0.226c0.072,0.104-0.142,0.165-0.197,0.113c-0.055-0.052-0.309,0.06-0.293,0.165c0.016,0.104-0.039,0.225-0.175,0.199c-0.134-0.027-0.229,0.06-0.237,0.146c-0.007,0.087-0.309,0.147-0.332,0.147c-0.024,0-0.412-0.008-0.27,0.095c0.097,0.069,0.15,0.027,0.27,0.052c0.119,0.026,0.214,0.217,0.277,0.243c0.062,0.026,0.15,0,0.189-0.052c0.04-0.052,0.095-0.234,0.095-0.234s0,0.173,0.097,0.208c0.095,0.035,0.331-0.026,0.395-0.017c0.064,0.008,0.437,0.061,0.538,0.112c0.104,0.052,0.356,0.087,0.428,0.199c0.071,0.113,0.08,0.503,0.119,0.546c0.04,0.043,0.174-0.139,0.205-0.182c0.031-0.044,0.198-0.018,0.254,0.042c0.056,0.061,0.182,0.208,0.175,0.269C21.9,8.365,21.877,8.459,21.83,8.425c-0.048-0.034-0.127-0.025-0.096-0.095c0.032-0.069,0.048-0.217-0.015-0.217c-0.064,0-0.119,0-0.119,0s-0.12-0.035-0.199,0.095s-0.015,0.26,0.04,0.26s0.184,0,0.184,0.034c0,0.035-0.136,0.139-0.128,0.2c0.009,0.061,0.11,0.268,0.144,0.312c0.031,0.043,0.197,0.086,0.244,0.096c0.049,0.008-0.111,0.017-0.07,0.077c0.04,0.061,0.102,0.208,0.189,0.243c0.087,0.035,0.333,0.19,0.363,0.26c0.032,0.069,0.222-0.052,0.262-0.061c0.04-0.008,0.032,0.182,0.143,0.191c0.11,0.008,0.15-0.018,0.245-0.096s0.072-0.182,0.079-0.26c0.009-0.078,0-0.138,0.104-0.113c0.104,0.026,0.158-0.018,0.15-0.104c-0.008-0.087-0.095-0.191,0.07-0.217c0.167-0.026,0.254-0.138,0.357-0.138c0.103,0,0.389,0.043,0.419,0c0.032-0.043,0.167-0.243,0.254-0.251c0.067-0.007,0.224-0.021,0.385-0.042c1.582,1.885,2.561,4.284,2.673,6.905c-0.118,0.159-0.012,0.305,0.021,0.408c0.001,0.03,0.005,0.058,0.005,0.088c0,0.136-0.016,0.269-0.021,0.404C27.512,16.406,27.512,16.408,27.51,16.41zM17.794,12.084c-0.064,0.013-0.169-0.052-0.169-0.143s-0.091,0.169-0.04,0.247c0.053,0.078-0.104,0.169-0.155,0.169s-0.091-0.116-0.078-0.233c0.014-0.117-0.077-0.221-0.221-0.208c-0.143,0.014-0.208,0.13-0.259,0.169c-0.053,0.039-0.053,0.259-0.04,0.312s0.013,0.235-0.116,0.221c-0.118-0.013-0.092-0.233-0.079-0.312c0.014-0.078-0.039-0.273,0.014-0.376c0.053-0.104,0.207-0.143,0.312-0.156s0.324,0.065,0.363,0.052c0.04-0.014,0.222-0.014,0.312,0C17.729,11.837,17.858,12.071,17.794,12.084zM18.027,12.123c0.04,0.026,0.311-0.039,0.364,0.026c0.051,0.065-0.054,0.078-0.183,0.13c-0.129,0.052-0.169,0.039-0.221,0.104s-0.221,0.09-0.299,0.168c-0.078,0.079-0.217,0.125-0.246,0.065c-0.04-0.078,0.013-0.039,0.025-0.078c0.013-0.039,0.245-0.129,0.245-0.129S17.988,12.097,18.027,12.123zM16.988,11.668c-0.038,0.013-0.182-0.026-0.3-0.026c-0.116,0-0.091-0.078-0.143-0.064c-0.051,0.013-0.168,0.039-0.247,0.078c-0.078,0.039-0.208,0.03-0.208-0.04c0-0.104,0.052-0.078,0.221-0.143c0.169-0.065,0.352-0.247,0.429-0.169c0.078,0.078,0.221,0.169,0.312,0.182C17.144,11.5,17.026,11.655,16.988,11.668zM15.659,7.637c-0.079,0.026-0.347,0.139-0.321,0.199c0.01,0.023,0.078,0.069,0.19,0.052c0.113-0.018,0.276-0.035,0.355-0.043c0.078-0.009,0.095-0.139,0.009-0.147C15.805,7.689,15.736,7.611,15.659,7.637zM14.698,7.741c-0.061,0.026-0.243-0.043-0.338,0.018c-0.061,0.038-0.026,0.164,0.07,0.172c0.095,0.009,0.259-0.06,0.276-0.008c0.018,0.052,0.078,0.286,0.234,0.208c0.156-0.078,0.147-0.147,0.19-0.156c0.043-0.009-0.008-0.199-0.078-0.243C14.983,7.689,14.758,7.715,14.698,7.741zM14.385,7.005c0.017,0.044-0.008,0.078,0.113,0.095c0.121,0.018,0.173,0.035,0.243,0.035c0.069,0,0.042-0.113-0.018-0.19c-0.061-0.078-0.043-0.069-0.199-0.113c-0.156-0.043-0.312-0.043-0.416-0.035c-0.104,0.009-0.217-0.017-0.243,0.104c-0.013,0.062,0.07,0.112,0.174,0.112S14.368,6.962,14.385,7.005zM14.611,7.481c0.043,0.095,0.043,0.051,0.165,0.061C14.896,7.551,14.991,7.421,15,7.378c0.009-0.044-0.061-0.13-0.225-0.113c-0.165,0.017-0.667-0.026-0.736,0.034c-0.066,0.058,0,0.233-0.026,0.251c-0.026,0.017,0.009,0.095,0.077,0.078c0.069-0.017,0.104-0.182,0.157-0.182C14.299,7.447,14.568,7.386,14.611,7.481zM12.982,7.126c0.052,0.043,0.183,0.008,0.173-0.035c-0.008-0.043,0.053-0.217-0.051-0.225C13,6.858,12.854,6.962,12.697,7.014c-0.101,0.033-0.078,0.13-0.009,0.13S12.931,7.083,12.982,7.126zM13.72,7.282c-0.087,0.043-0.114,0.069-0.191,0.052c-0.078-0.017-0.078-0.156-0.217-0.13c-0.138,0.026-0.164,0.104-0.207,0.139s-0.139,0.061-0.173,0.043c-0.034-0.017-0.234-0.129-0.234-0.129s-0.416-0.018-0.433-0.07c-0.017-0.052-0.086-0.138-0.277-0.121s-0.52,0.13-0.572,0.13c-0.052,0,0.062,0.104-0.009,0.104c-0.069,0-0.155-0.008-0.181,0.069c-0.018,0.053,0.078,0.052,0.189,0.052c0.112,0,0.295,0,0.347-0.026c0.052-0.026,0.312-0.087,0.303-0.009c-0.009,0.079,0.104,0.199,0.164,0.182c0.061-0.017,0.183-0.13,0.243-0.086c0.061,0.043,0.07,0.146,0.13,0.173c0.061,0.025,0.226,0.025,0.304,0c0.077-0.027,0.294-0.027,0.389-0.009c0.095,0.018,0.373,0.069,0.399,0.018c0.026-0.053,0.104-0.061,0.112-0.113s0.051-0.216,0.051-0.216S13.806,7.239,13.72,7.282zM18.105,16.239c-0.119,0.021-0.091,0.252,0.052,0.21C18.3,16.407,18.223,16.217,18.105,16.239zM19.235,15.929c-0.104-0.026-0.221,0-0.299,0.013c-0.078,0.013-0.299,0.208-0.299,0.208s0.143,0.026,0.233,0.026c0.092,0,0.144,0.051,0.221,0.09c0.078,0.04,0.221-0.052,0.272-0.052c0.053,0,0.118,0.156,0.131-0.013C19.508,16.032,19.339,15.955,19.235,15.929zM15.616,7.507c-0.043-0.104-0.259-0.139-0.304-0.035C15.274,7.563,15.659,7.611,15.616,7.507zM18.093,15.292c0.143-0.026,0.064-0.144-0.053-0.13C17.922,15.175,17.949,15.318,18.093,15.292zM19.82,16.095c-0.119,0.022-0.092,0.253,0.051,0.211C20.015,16.264,19.937,16.074,19.82,16.095zM18.247,15.708c-0.09,0.013-0.285-0.09-0.389-0.182c-0.104-0.091-0.299-0.091-0.377-0.091c-0.077,0-0.39,0.091-0.39,0.091c-0.013,0.13,0.117,0.091,0.273,0.091s0.429-0.026,0.479,0.039c0.053,0.064,0.286,0.168,0.352,0.221c0.064,0.052,0.272,0.065,0.285,0.013S18.338,15.695,18.247,15.708zM16.698,7.412c-0.13-0.009-0.295-0.009-0.399,0c-0.104,0.008-0.182-0.069-0.26-0.113c-0.077-0.043-0.251-0.182-0.354-0.199c-0.104-0.017-0.086-0.017-0.303-0.069c-0.11-0.027-0.294-0.061-0.294-0.086c0-0.026-0.052,0.121,0.043,0.165c0.095,0.043,0.251,0.121,0.363,0.164c0.114,0.043,0.329,0.052,0.399,0.139c0.069,0.086,0.303,0.156,0.303,0.156l0.277,0.026c0,0,0.191-0.043,0.39-0.026c0.199,0.017,0.493,0.043,0.659,0.035c0.163-0.008,0.189-0.061,0.208-0.095c0.016-0.035-0.304-0.104-0.383-0.095C17.271,7.42,16.827,7.42,16.698,7.412zM17.182,9.404c-0.034,0.039,0.157,0.095,0.191,0.043C17.407,9.396,17.271,9.309,17.182,9.404zM17.764,9.585c0.086-0.035,0.043-0.139-0.079-0.104C17.547,9.521,17.676,9.62,17.764,9.585z",
+ "raph_warning": "M29.225,23.567l-3.778-6.542c-1.139-1.972-3.002-5.2-4.141-7.172l-3.778-6.542c-1.14-1.973-3.003-1.973-4.142,0L9.609,9.853c-1.139,1.972-3.003,5.201-4.142,7.172L1.69,23.567c-1.139,1.974-0.207,3.587,2.071,3.587h23.391C29.432,27.154,30.363,25.541,29.225,23.567zM16.536,24.58h-2.241v-2.151h2.241V24.58zM16.428,20.844h-2.023l-0.201-9.204h2.407L16.428,20.844z",
+ "raph_arrowleftalt": "M16,30.534c8.027,0,14.534-6.507,14.534-14.534c0-8.027-6.507-14.534-14.534-14.534C7.973,1.466,1.466,7.973,1.466,16C1.466,24.027,7.973,30.534,16,30.534zM18.335,6.276l3.536,3.538l-6.187,6.187l6.187,6.187l-3.536,3.537l-9.723-9.724L18.335,6.276z",
+ "raph_arrowalt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM13.665,25.725l-3.536-3.539l6.187-6.187l-6.187-6.187l3.536-3.536l9.724,9.723L13.665,25.725z",
+ "raph_code": "M8.982,7.107L0.322,15.77l8.661,8.662l3.15-3.15L6.621,15.77l5.511-5.511L8.982,7.107zM21.657,7.107l-3.148,3.151l5.511,5.511l-5.511,5.511l3.148,3.15l8.662-8.662L21.657,7.107z",
+ "raph_arrowleft": "M21.871,9.814 15.684,16.001 21.871,22.188 18.335,25.725 8.612,16.001 18.335,6.276",
+ "raph_arrow": "M10.129,22.186 16.316,15.999 10.129,9.812 13.665,6.276 23.389,15.999 13.665,25.725",
+ "raph_pensil": "M25.31,2.872l-3.384-2.127c-0.854-0.536-1.979-0.278-2.517,0.576l-1.334,2.123l6.474,4.066l1.335-2.122C26.42,4.533,26.164,3.407,25.31,2.872zM6.555,21.786l6.474,4.066L23.581,9.054l-6.477-4.067L6.555,21.786zM5.566,26.952l-0.143,3.819l3.379-1.787l3.14-1.658l-6.246-3.925L5.566,26.952z",
+ "raph_pen": "M13.587,12.074c-0.049-0.074-0.11-0.147-0.188-0.202c-0.333-0.243-0.803-0.169-1.047,0.166c-0.244,0.336-0.167,0.805,0.167,1.048c0.303,0.22,0.708,0.167,0.966-0.091l-7.086,9.768l-2.203,7.997l6.917-4.577L26.865,4.468l-4.716-3.42l-1.52,2.096c-0.087-0.349-0.281-0.676-0.596-0.907c-0.73-0.529-1.751-0.369-2.28,0.363C14.721,6.782,16.402,7.896,13.587,12.074zM10.118,25.148L6.56,27.503l1.133-4.117L10.118,25.148zM14.309,11.861c2.183-3.225,1.975-4.099,3.843-6.962c0.309,0.212,0.664,0.287,1.012,0.269L14.309,11.861z",
+ "raph_plus": "M25.979,12.896 19.312,12.896 19.312,6.229 12.647,6.229 12.647,12.896 5.979,12.896 5.979,19.562 12.647,19.562 12.647,26.229 19.312,26.229 19.312,19.562 25.979,19.562",
+ "raph_minus": "M25.979,12.896,19.312,12.896,5.979,12.896,5.979,19.562,25.979,19.562",
+ "raph_tshirt": "M20.1,4.039c-0.681,1.677-2.32,2.862-4.24,2.862c-1.921,0-3.56-1.185-4.24-2.862L1.238,8.442l2.921,6.884l3.208-1.361V28h17.099V14.015l3.093,1.312l2.922-6.884L20.1,4.039z",
+ "raph_raphael": "M27.777,18.941c0.584-0.881,0.896-1.914,0.896-2.998c0-1.457-0.567-2.826-1.598-3.854l-6.91-6.911l-0.003,0.002c-0.985-0.988-2.35-1.6-3.851-1.6c-1.502,0-2.864,0.612-3.85,1.6H12.46l-6.911,6.911c-1.031,1.029-1.598,2.398-1.598,3.854c0,1.457,0.567,2.826,1.598,3.854l6.231,6.229c0.25,0.281,0.512,0.544,0.789,0.785c1.016,0.961,2.338,1.49,3.743,1.49c1.456,0,2.825-0.565,3.854-1.598l6.723-6.725c0.021-0.019,0.034-0.032,0.051-0.051l0.14-0.138c0.26-0.26,0.487-0.54,0.688-0.838c0.004-0.008,0.01-0.015,0.014-0.021L27.777,18.941zM26.658,15.946c0,0.678-0.197,1.326-0.561,1.879c-0.222,0.298-0.447,0.559-0.684,0.784L25.4,18.625c-1.105,1.052-2.354,1.35-3.414,1.35c-0.584,0-1.109-0.09-1.523-0.195c-2.422-0.608-5.056-2.692-6.261-5.732c0.649,0.274,1.362,0.426,2.11,0.426c2.811,0,5.129-2.141,5.415-4.877l3.924,3.925C26.301,14.167,26.658,15.029,26.658,15.946zM16.312,5.6c1.89,0,3.426,1.538,3.426,3.427c0,1.89-1.536,3.427-3.426,3.427c-1.889,0-3.426-1.537-3.426-3.427C12.886,7.138,14.423,5.6,16.312,5.6zM6.974,18.375c-0.649-0.648-1.007-1.512-1.007-2.429c0-0.917,0.357-1.78,1.007-2.428l2.655-2.656c-0.693,2.359-0.991,4.842-0.831,7.221c0.057,0.854,0.175,1.677,0.345,2.46L6.974,18.375zM11.514,11.592c0.583,4.562,4.195,9.066,8.455,10.143c0.693,0.179,1.375,0.265,2.033,0.265c0.01,0,0.02,0,0.027,0l-3.289,3.289c-0.648,0.646-1.512,1.006-2.428,1.006c-0.638,0-1.248-0.177-1.779-0.5l0.001-0.002c-0.209-0.142-0.408-0.295-0.603-0.461c-0.015-0.019-0.031-0.026-0.046-0.043l-0.665-0.664c-1.367-1.567-2.227-3.903-2.412-6.671C10.669,15.856,10.921,13.673,11.514,11.592",
+ "raph_graphael": "M28.832,16.104c0-1.477-0.574-2.863-1.617-3.905l-7.002-7.001L20.211,5.2c-1.027-1.03-2.445-1.62-3.9-1.62c-1.455,0-2.871,0.59-3.9,1.621l-0.002-0.002l-7,7c-1.033,1.031-1.619,2.445-1.619,3.905c0,1.458,0.586,2.872,1.619,3.903l6.312,6.312c0.253,0.284,0.519,0.55,0.8,0.794c1.049,0.994,2.463,1.54,3.908,1.51c1.417-0.028,2.783-0.612,3.785-1.615l6.811-6.811c0.018-0.017,0.035-0.034,0.053-0.052l0.137-0.138c0.27-0.268,0.49-0.564,0.713-0.868l-0.002-0.002C28.516,18.244,28.832,17.198,28.832,16.104zM23.08,21.252l-0.051,0.006l-0.955,0.974c0.01,0-3.305,3.332-3.305,3.332c-1.121,1.119-2.906,1.337-4.261,0.511l0.002-0.002c-0.213-0.141-0.414-0.299-0.61-0.467c-0.016-0.015-0.032-0.027-0.047-0.042l-3.024-3.024h-0.001l-3.976-3.976c-1.34-1.339-1.342-3.581,0-4.921l2.689-2.689l0.052-0.005l0.956-0.973c-0.01,0,3.303-3.332,3.303-3.332c1.121-1.12,2.908-1.337,4.261-0.511v0.002c0.211,0.14,0.414,0.299,0.609,0.467c0.016,0.015,0.031,0.028,0.047,0.042l3.025,3.024l0,0l3.975,3.976c0.389,0.388,0.66,0.852,0.824,1.348l-2.617,0.008c-0.537-3.754-3.764-6.64-7.666-6.64c-4.277,0-7.744,3.467-7.745,7.746c0.001,4.277,3.468,7.743,7.745,7.744c3.919-0.001,7.156-2.911,7.671-6.688l2.635-0.009c-0.16,0.52-0.441,1.007-0.846,1.412L23.08,21.252zM16.311,17.184c0.002,0,0.002,0,0.004,0l5.476-0.018c-0.5,2.573-2.76,4.516-5.48,4.52c-3.084-0.005-5.578-2.5-5.584-5.582c0.006-3.084,2.5-5.579,5.584-5.584c2.707,0.005,4.96,1.929,5.472,4.485l-5.476,0.018c-0.596,0.002-1.078,0.488-1.076,1.084C15.233,16.702,15.715,17.184,16.311,17.184z",
+ "raph_page": "M23.024,5.673c-1.744-1.694-3.625-3.051-5.168-3.236c-0.084-0.012-0.171-0.019-0.263-0.021H7.438c-0.162,0-0.322,0.063-0.436,0.18C6.889,2.71,6.822,2.87,6.822,3.033v25.75c0,0.162,0.063,0.317,0.18,0.435c0.117,0.116,0.271,0.179,0.436,0.179h18.364c0.162,0,0.317-0.062,0.434-0.179c0.117-0.117,0.182-0.272,0.182-0.435V11.648C26.382,9.659,24.824,7.49,23.024,5.673zM25.184,28.164H8.052V3.646h9.542v0.002c0.416-0.025,0.775,0.386,1.05,1.326c0.25,0.895,0.313,2.062,0.312,2.871c0.002,0.593-0.027,0.991-0.027,0.991l-0.049,0.652l0.656,0.007c0.003,0,1.516,0.018,3,0.355c1.426,0.308,2.541,0.922,2.645,1.617c0.004,0.062,0.005,0.124,0.004,0.182V28.164z",
+ "raph_page2": "M23.024,5.673c-1.744-1.694-3.625-3.051-5.168-3.236c-0.084-0.012-0.171-0.019-0.263-0.021H7.438c-0.162,0-0.322,0.063-0.436,0.18C6.889,2.71,6.822,2.87,6.822,3.033v25.75c0,0.162,0.063,0.317,0.18,0.435c0.117,0.116,0.271,0.179,0.436,0.179h18.364c0.162,0,0.317-0.062,0.434-0.179c0.117-0.117,0.182-0.272,0.182-0.435V11.648C26.382,9.659,24.824,7.49,23.024,5.673zM22.157,6.545c0.805,0.786,1.529,1.676,2.069,2.534c-0.468-0.185-0.959-0.322-1.42-0.431c-1.015-0.228-2.008-0.32-2.625-0.357c0.003-0.133,0.004-0.283,0.004-0.446c0-0.869-0.055-2.108-0.356-3.2c-0.003-0.01-0.005-0.02-0.009-0.03C20.584,5.119,21.416,5.788,22.157,6.545zM25.184,28.164H8.052V3.646h9.542v0.002c0.416-0.025,0.775,0.386,1.05,1.326c0.25,0.895,0.313,2.062,0.312,2.871c0.002,0.593-0.027,0.991-0.027,0.991l-0.049,0.652l0.656,0.007c0.003,0,1.516,0.018,3,0.355c1.426,0.308,2.541,0.922,2.645,1.617c0.004,0.062,0.005,0.124,0.004,0.182V28.164z",
+ "raph_plugin": "M26.33,15.836l-3.893-1.545l3.136-7.9c0.28-0.705-0.064-1.505-0.771-1.785c-0.707-0.28-1.506,0.065-1.785,0.771l-3.136,7.9l-4.88-1.937l3.135-7.9c0.281-0.706-0.064-1.506-0.77-1.786c-0.706-0.279-1.506,0.065-1.785,0.771l-3.136,7.9L8.554,8.781l-1.614,4.066l2.15,0.854l-2.537,6.391c-0.61,1.54,0.143,3.283,1.683,3.895l1.626,0.646L8.985,26.84c-0.407,1.025,0.095,2.188,1.122,2.596l0.93,0.369c1.026,0.408,2.188-0.095,2.596-1.121l0.877-2.207l1.858,0.737c1.54,0.611,3.284-0.142,3.896-1.682l2.535-6.391l1.918,0.761L26.33,15.836z",
+ "raph_svg": "M31.274,15.989c0-2.473-2.005-4.478-4.478-4.478l0,0c0.81-0.811,1.312-1.93,1.312-3.167c0-2.474-2.005-4.479-4.479-4.479c-1.236,0-2.356,0.501-3.167,1.312c0-2.473-2.005-4.478-4.478-4.478c-2.474,0-4.479,2.005-4.479,4.478c-0.811-0.81-1.93-1.312-3.167-1.312c-2.474,0-4.479,2.005-4.479,4.479c0,1.236,0.501,2.356,1.312,3.166c-2.474,0-4.479,2.005-4.479,4.479c0,2.474,2.005,4.479,4.479,4.479c-0.811,0.81-1.312,1.93-1.312,3.167c0,2.473,2.005,4.478,4.479,4.478c1.236,0,2.356-0.501,3.167-1.312c0,2.473,2.005,4.479,4.479,4.479c2.473,0,4.478-2.006,4.478-4.479l0,0c0.811,0.811,1.931,1.312,3.167,1.312c2.474,0,4.478-2.005,4.478-4.478c0-1.237-0.501-2.357-1.312-3.168c0.001,0,0.001,0,0.001,0C29.27,20.467,31.274,18.463,31.274,15.989zM23.583,21.211c0.016,0,0.031-0.001,0.047-0.001c1.339,0,2.424,1.085,2.424,2.425c0,1.338-1.085,2.424-2.424,2.424s-2.424-1.086-2.424-2.424c0-0.017,0.001-0.031,0.001-0.047l-3.541-3.542v5.009c0.457,0.44,0.743,1.06,0.743,1.746c0,1.339-1.086,2.424-2.424,2.424c-1.339,0-2.425-1.085-2.425-2.424c0-0.687,0.286-1.306,0.743-1.746v-5.009l-3.541,3.542c0,0.016,0.001,0.031,0.001,0.047c0,1.338-1.085,2.424-2.424,2.424s-2.424-1.086-2.424-2.424c0-1.34,1.085-2.425,2.424-2.425c0.015,0,0.031,0.001,0.046,0.001l3.542-3.541H6.919c-0.44,0.458-1.06,0.743-1.746,0.743c-1.339,0-2.424-1.085-2.424-2.424s1.085-2.424,2.424-2.424c0.686,0,1.305,0.285,1.746,0.744h5.008l-3.542-3.542c-0.015,0-0.031,0.001-0.046,0.001c-1.339,0-2.424-1.085-2.424-2.424S7.001,5.92,8.34,5.92s2.424,1.085,2.424,2.424c0,0.015-0.001,0.031-0.001,0.046l3.541,3.542V6.924c-0.457-0.441-0.743-1.06-0.743-1.746c0-1.339,1.086-2.425,2.425-2.425c1.338,0,2.424,1.085,2.424,2.425c0,0.686-0.286,1.305-0.743,1.746v5.008l3.541-3.542c0-0.015-0.001-0.031-0.001-0.046c0-1.339,1.085-2.424,2.424-2.424s2.424,1.085,2.424,2.424c0,1.339-1.085,2.424-2.424,2.424c-0.016,0-0.031-0.001-0.047-0.001l-3.541,3.542h5.008c0.441-0.458,1.061-0.744,1.747-0.744c1.338,0,2.423,1.085,2.423,2.424s-1.085,2.424-2.423,2.424c-0.687,0-1.306-0.285-1.747-0.743h-5.008L23.583,21.211z",
+ "raph_bookmark": "M17.396,1.841L6.076,25.986l7.341-4.566l1.186,8.564l11.32-24.146L17.396,1.841zM19.131,9.234c-0.562-0.264-0.805-0.933-0.541-1.495c0.265-0.562,0.934-0.805,1.496-0.541s0.805,0.934,0.541,1.496S19.694,9.498,19.131,9.234z",
+ "raph_hammer": "M7.831,29.354c0.685,0.353,1.62,1.178,2.344,0.876c0.475-0.195,0.753-1.301,1.048-1.883c2.221-4.376,4.635-9.353,6.392-13.611c0-0.19,0.101-0.337-0.049-0.595c0.983-1.6,1.65-3.358,2.724-5.138c0.34-0.566,0.686-1.351,1.163-1.577l0.881-0.368c1.12-0.288,1.938-0.278,2.719,0.473c0.396,0.383,0.578,1.015,0.961,1.395c0.259,0.26,1.246,0.899,1.613,0.8c0.285-0.077,0.52-0.364,0.72-0.728l0.696-1.286c0.195-0.366,0.306-0.718,0.215-0.999c-0.117-0.362-1.192-0.84-1.552-0.915c-0.528-0.113-1.154,0.081-1.692-0.041c-1.057-0.243-1.513-0.922-1.883-2.02c-2.608-1.533-6.119-2.53-10.207-1.244c-1.109,0.349-2.172,0.614-2.901,1.323c-0.146,0.412,0.143,0.494,0.446,0.489c-0.237,0.216-0.62,0.341-0.399,0.848c2.495-1.146,7.34-1.542,7.669,0.804c0.072,0.522-0.395,1.241-0.682,1.835c-0.905,1.874-2.011,3.394-2.813,5.091c-0.298,0.017-0.366,0.18-0.525,0.287c-2.604,3.8-5.451,8.541-7.9,12.794c-0.326,0.566-1.098,1.402-1.002,1.906C5.961,28.641,7.146,29,7.831,29.354z",
+ "raph_users": "M21.053,20.8c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68h-0.34c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888C28.469,23.686,22.185,21.252,21.053,20.8zM8.583,20.628c-0.099-0.18-0.148-0.31-0.148-0.31s-0.432,0.239-0.432-0.432s0.432,0.432,0.864-2.159c0,0,1.199-0.336,0.959-3.119H9.538c0,0,0.143-0.591,0.237-1.334c-0.004-0.308,0.006-0.636,0.037-0.996l0.038-0.426c-0.021-0.492-0.107-0.939-0.312-1.226C8.818,9.619,8.53,8.947,6.947,8.467c-1.583-0.48-1.008-0.385-2.159-0.336C3.636,8.179,2.676,8.802,2.676,9.139c0,0-0.72,0.048-1.008,0.336c-0.271,0.271-0.705,1.462-0.757,1.885v0.281c0.047,0.653,0.258,2.449,0.469,2.872l-0.286,0.096c-0.239,2.783,0.959,3.119,0.959,3.119c0.432,2.591,0.864,1.488,0.864,2.159s-0.432,0.432-0.432,0.432s-0.383,1.057-1.343,1.439c-0.061,0.024-0.139,0.056-0.232,0.092v5.234h0.575c-0.029-1.278,0.077-2.927,0.746-3.594C2.587,23.135,3.754,22.551,8.583,20.628zM30.913,11.572c-0.04-0.378-0.127-0.715-0.292-0.946c-0.719-1.008-1.008-1.679-2.59-2.159c-1.584-0.48-1.008-0.385-2.16-0.336C24.72,8.179,23.76,8.802,23.76,9.139c0,0-0.719,0.048-1.008,0.336c-0.271,0.272-0.709,1.472-0.758,1.891h0.033l0.08,0.913c0.02,0.231,0.022,0.436,0.027,0.645c0.09,0.666,0.21,1.35,0.33,1.589l-0.286,0.096c-0.239,2.783,0.96,3.119,0.96,3.119c0.432,2.591,0.863,1.488,0.863,2.159s-0.432,0.432-0.432,0.432s-0.053,0.142-0.163,0.338c4.77,1.9,5.927,2.48,6.279,2.834c0.67,0.667,0.775,2.315,0.746,3.594h0.48v-5.306c-0.016-0.006-0.038-0.015-0.052-0.021c-0.959-0.383-1.343-1.439-1.343-1.439s-0.433,0.239-0.433-0.432s0.433,0.432,0.864-2.159c0,0,0.804-0.229,0.963-1.841v-1.227c-0.001-0.018-0.001-0.033-0.003-0.051h-0.289c0,0,0.215-0.89,0.292-1.861V11.572z",
+ "raph_user": "M20.771,12.364c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888c-0.512-0.511-6.796-2.944-7.928-3.396c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68H20.771z",
+ "raph_mail": "M28.516,7.167H3.482l12.517,7.108L28.516,7.167zM16.74,17.303C16.51,17.434,16.255,17.5,16,17.5s-0.51-0.066-0.741-0.197L2.5,10.06v14.773h27V10.06L16.74,17.303z",
+ "raph_picture": "M2.5,4.833v22.334h27V4.833H2.5zM25.25,25.25H6.75V6.75h18.5V25.25zM11.25,14c1.426,0,2.583-1.157,2.583-2.583c0-1.427-1.157-2.583-2.583-2.583c-1.427,0-2.583,1.157-2.583,2.583C8.667,12.843,9.823,14,11.25,14zM24.251,16.25l-4.917-4.917l-6.917,6.917L10.5,16.333l-2.752,2.752v5.165h16.503V16.25z",
+ "raph_bubble": "M16,5.333c-7.732,0-14,4.701-14,10.5c0,1.982,0.741,3.833,2.016,5.414L2,25.667l5.613-1.441c2.339,1.317,5.237,2.107,8.387,2.107c7.732,0,14-4.701,14-10.5C30,10.034,23.732,5.333,16,5.333z",
+ "raph_codetalk": "M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM13.704,19.47l-2.338,2.336l-6.43-6.431l6.429-6.432l2.339,2.341l-4.091,4.091L13.704,19.47zM20.775,21.803l-2.337-2.339l4.092-4.09l-4.092-4.092l2.337-2.339l6.43,6.426L20.775,21.803z",
+ "raph_talkq": "M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.868,21.375h-1.969v-1.889h1.969V21.375zM16.772,18.094h-1.777l-0.176-8.083h2.113L16.772,18.094z",
+ "raph_talke": "M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.982,21.375h-1.969v-1.889h1.969V21.375zM16.982,17.469v0.625h-1.969v-0.769c0-2.321,2.641-2.689,2.641-4.337c0-0.752-0.672-1.329-1.553-1.329c-0.912,0-1.713,0.672-1.713,0.672l-1.12-1.393c0,0,1.104-1.153,3.009-1.153c1.81,0,3.49,1.121,3.49,3.009C19.768,15.437,16.982,15.741,16.982,17.469z",
+ "raph_home": "M27.812,16l-3.062-3.062V5.625h-2.625v4.688L16,4.188L4.188,16L7,15.933v11.942h17.875V16H27.812zM16,26.167h-5.833v-7H16V26.167zM21.667,23.167h-3.833v-4.042h3.833V23.167z",
+ "raph_linkedin": "M27.25,3.125h-22c-1.104,0-2,0.896-2,2v22c0,1.104,0.896,2,2,2h22c1.104,0,2-0.896,2-2v-22C29.25,4.021,28.354,3.125,27.25,3.125zM11.219,26.781h-4v-14h4V26.781zM9.219,11.281c-1.383,0-2.5-1.119-2.5-2.5s1.117-2.5,2.5-2.5s2.5,1.119,2.5,2.5S10.602,11.281,9.219,11.281zM25.219,26.781h-4v-8.5c0-0.4-0.403-1.055-0.687-1.213c-0.375-0.211-1.261-0.229-1.665-0.034l-1.648,0.793v8.954h-4v-14h4v0.614c1.583-0.723,3.78-0.652,5.27,0.184c1.582,0.886,2.73,2.864,2.73,4.702V26.781z",
+ "raph_github": "M28.436,15.099c-1.201-0.202-2.451-0.335-3.466-0.371l-0.179-0.006c0.041-0.09,0.072-0.151,0.082-0.16c0.022-0.018,0.04-0.094,0.042-0.168c0-0.041,0.018-0.174,0.046-0.35c0.275,0.01,0.64,0.018,1.038,0.021c1.537,0.012,3.145,0.136,4.248,0.331c0.657,0.116,0.874,0.112,0.389-0.006c-0.491-0.119-1.947-0.294-3.107-0.37c-0.779-0.053-1.896-0.073-2.554-0.062c0.019-0.114,0.041-0.241,0.064-0.371c0.093-0.503,0.124-1.009,0.126-2.016c0.002-1.562-0.082-1.992-0.591-3.025c-0.207-0.422-0.441-0.78-0.724-1.104c0.247-0.729,0.241-1.858-0.015-2.848c-0.211-0.812-0.285-0.864-1.021-0.708C22.19,4.019,21.69,4.2,21.049,4.523c-0.303,0.153-0.721,0.391-1.024,0.578c-0.79-0.278-1.607-0.462-2.479-0.561c-0.884-0.1-3.051-0.044-3.82,0.098c-0.752,0.139-1.429,0.309-2.042,0.511c-0.306-0.189-0.75-0.444-1.067-0.604C9.973,4.221,9.473,4.041,8.847,3.908c-0.734-0.157-0.81-0.104-1.02,0.708c-0.26,1.003-0.262,2.151-0.005,2.878C7.852,7.577,7.87,7.636,7.877,7.682c-1.042,1.312-1.382,2.78-1.156,4.829c0.059,0.534,0.15,1.024,0.277,1.473c-0.665-0.004-1.611,0.02-2.294,0.064c-1.162,0.077-2.618,0.25-3.109,0.369c-0.484,0.118-0.269,0.122,0.389,0.007c1.103-0.194,2.712-0.32,4.248-0.331c0.29-0.001,0.561-0.007,0.794-0.013c0.07,0.237,0.15,0.463,0.241,0.678L7.26,14.759c-1.015,0.035-2.264,0.168-3.465,0.37c-0.901,0.151-2.231,0.453-2.386,0.54c-0.163,0.091-0.03,0.071,0.668-0.106c1.273-0.322,2.928-0.569,4.978-0.741l0.229-0.02c0.44,1.022,1.118,1.802,2.076,2.41c0.586,0.373,1.525,0.756,1.998,0.816c0.13,0.016,0.508,0.094,0.84,0.172c0.333,0.078,0.984,0.195,1.446,0.262h0.011c-0.009,0.006-0.017,0.01-0.025,0.016c-0.56,0.291-0.924,0.744-1.169,1.457c-0.11,0.033-0.247,0.078-0.395,0.129c-0.529,0.18-0.735,0.217-1.271,0.221c-0.556,0.004-0.688-0.02-1.02-0.176c-0.483-0.225-0.933-0.639-1.233-1.133c-0.501-0.826-1.367-1.41-2.089-1.41c-0.617,0-0.734,0.25-0.288,0.615c0.672,0.549,1.174,1.109,1.38,1.537c0.116,0.24,0.294,0.611,0.397,0.824c0.109,0.227,0.342,0.535,0.564,0.748c0.522,0.498,1.026,0.736,1.778,0.848c0.504,0.074,0.628,0.074,1.223-0.002c0.287-0.035,0.529-0.076,0.746-0.127c0,0.244,0,0.525,0,0.855c0,1.766-0.021,2.334-0.091,2.5c-0.132,0.316-0.428,0.641-0.716,0.787c-0.287,0.146-0.376,0.307-0.255,0.455c0.067,0.08,0.196,0.094,0.629,0.066c0.822-0.051,1.403-0.355,1.699-0.891c0.095-0.172,0.117-0.518,0.147-2.318c0.032-1.953,0.046-2.141,0.173-2.42c0.077-0.166,0.188-0.346,0.25-0.395c0.104-0.086,0.111,0.084,0.111,2.42c-0.001,2.578-0.027,2.889-0.285,3.385c-0.058,0.113-0.168,0.26-0.245,0.33c-0.135,0.123-0.192,0.438-0.098,0.533c0.155,0.154,0.932-0.088,1.356-0.422c0.722-0.572,0.808-1.045,0.814-4.461l0.003-2.004l0.219,0.021l0.219,0.02l0.036,2.621c0.041,2.951,0.047,2.994,0.549,3.564c0.285,0.322,0.572,0.5,1.039,0.639c0.625,0.188,0.813-0.102,0.393-0.605c-0.457-0.547-0.479-0.756-0.454-3.994c0.017-2.076,0.017-2.076,0.151-1.955c0.282,0.256,0.336,0.676,0.336,2.623c0,2.418,0.069,2.648,0.923,3.07c0.399,0.195,0.511,0.219,1.022,0.221c0.544,0.002,0.577-0.006,0.597-0.148c0.017-0.115-0.05-0.193-0.304-0.348c-0.333-0.205-0.564-0.467-0.709-0.797c-0.055-0.127-0.092-0.959-0.117-2.672c-0.036-2.393-0.044-2.502-0.193-2.877c-0.201-0.504-0.508-0.902-0.897-1.166c-0.101-0.066-0.202-0.121-0.333-0.162c0.161-0.016,0.317-0.033,0.468-0.055c1.572-0.209,2.403-0.383,3.07-0.641c1.411-0.543,2.365-1.445,2.882-2.724c0.046-0.114,0.092-0.222,0.131-0.309l0.398,0.033c2.051,0.173,3.706,0.42,4.979,0.743c0.698,0.177,0.831,0.198,0.668,0.105C30.666,15.551,29.336,15.25,28.436,15.099zM22.422,15.068c-0.233,0.512-0.883,1.17-1.408,1.428c-0.518,0.256-1.33,0.451-2.25,0.544c-0.629,0.064-4.137,0.083-4.716,0.026c-1.917-0.188-2.991-0.557-3.783-1.296c-0.75-0.702-1.1-1.655-1.039-2.828c0.039-0.734,0.216-1.195,0.679-1.755c0.421-0.51,0.864-0.825,1.386-0.985c0.437-0.134,1.778-0.146,3.581-0.03c0.797,0.051,1.456,0.051,2.252,0c1.886-0.119,3.145-0.106,3.61,0.038c0.731,0.226,1.397,0.834,1.797,1.644c0.18,0.362,0.215,0.516,0.241,1.075C22.808,13.699,22.675,14.517,22.422,15.068zM12.912,11.762c-1.073-0.188-1.686,1.649-0.863,2.587c0.391,0.445,0.738,0.518,1.172,0.248c0.402-0.251,0.62-0.72,0.62-1.328C13.841,12.458,13.472,11.862,12.912,11.762zM19.425,11.872c-1.073-0.188-1.687,1.647-0.864,2.586c0.392,0.445,0.738,0.519,1.173,0.247c0.401-0.25,0.62-0.72,0.62-1.328C20.354,12.569,19.985,11.971,19.425,11.872zM16.539,15.484c-0.023,0.074-0.135,0.184-0.248,0.243c-0.286,0.147-0.492,0.096-0.794-0.179c-0.187-0.169-0.272-0.258-0.329-0.081c-0.053,0.164,0.28,0.493,0.537,0.594c0.236,0.094,0.405,0.097,0.661-0.01c0.254-0.106,0.476-0.391,0.476-0.576C16.842,15.303,16.595,15.311,16.539,15.484zM16.222,14.909c0.163-0.144,0.2-0.44,0.044-0.597s-0.473-0.133-0.597,0.043c-0.144,0.206-0.067,0.363,0.036,0.53C15.865,15.009,16.08,15.034,16.222,14.909z",
+ "raph_flickr": "M21.77,8.895c-2.379,0-4.479,1.174-5.77,2.969c-1.289-1.795-3.39-2.969-5.77-2.969c-3.924,0-7.105,3.181-7.105,7.105c0,3.924,3.181,7.105,7.105,7.105c2.379,0,4.48-1.175,5.77-2.97c1.29,1.795,3.391,2.97,5.77,2.97c3.925,0,7.105-3.182,7.105-7.105C28.875,12.075,25.694,8.895,21.77,8.895zM21.769,21.822c-3.211,0-5.821-2.61-5.821-5.821c0-3.213,2.61-5.824,5.821-5.824c3.213,0,5.824,2.611,5.824,5.824C27.593,19.212,24.981,21.822,21.769,21.822z",
+ "raph_lock": "M22.335,12.833V9.999h-0.001C22.333,6.501,19.498,3.666,16,3.666S9.666,6.502,9.666,10h0v2.833H7.375V25h17.25V12.833H22.335zM11.667,10C11.667,10,11.667,10,11.667,10c0-2.39,1.944-4.334,4.333-4.334c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h-8.668V10z",
+ "raph_clip": "M23.898,6.135c-1.571-1.125-3.758-0.764-4.884,0.808l-8.832,12.331c-0.804,1.122-0.546,2.684,0.577,3.488c1.123,0.803,2.684,0.545,3.488-0.578l6.236-8.706l-0.813-0.583l-6.235,8.707h0c-0.483,0.672-1.42,0.828-2.092,0.347c-0.673-0.481-0.827-1.419-0.345-2.093h0l8.831-12.33l0.001-0.001l-0.002-0.001c0.803-1.119,2.369-1.378,3.489-0.576c1.12,0.803,1.379,2.369,0.577,3.489v-0.001l-9.68,13.516l0.001,0.001c-1.124,1.569-3.316,1.931-4.885,0.808c-1.569-1.125-1.93-3.315-0.807-4.885l7.035-9.822l-0.813-0.582l-7.035,9.822c-1.447,2.02-0.982,4.83,1.039,6.277c2.021,1.448,4.831,0.982,6.278-1.037l9.68-13.516C25.83,9.447,25.47,7.261,23.898,6.135z",
+ "raph_star": "M15.999,22.77l-8.884,6.454l3.396-10.44l-8.882-6.454l10.979,0.002l2.918-8.977l0.476-1.458l3.39,10.433h10.982l-8.886,6.454l3.397,10.443L15.999,22.77L15.999,22.77z",
+ "raph_star2": "M30.373,12.329H19.391l-3.39-10.433l-0.476,1.458l-2.918,8.977L1.628,12.329l8.882,6.454l-3.396,10.44l8.884-6.454l8.886,6.457l-3.397-10.443L30.373,12.329z M17.175,21.151L16,20.298l-1.175,0.854l-3.902,2.834l1.49-4.584l0.45-1.382l-1.177-0.855l-3.9-2.834h6.275l0.45-1.381L16,8.366l1.489,4.581l0.449,1.381h6.281l-3.906,2.836l-1.178,0.854l0.449,1.384l1.493,4.584L17.175,21.151z",
+ "raph_plus": "M25.979,12.896 19.312,12.896 19.312,6.229 12.647,6.229 12.647,12.896 5.979,12.896 5.979,19.562 12.647,19.562 12.647,26.229 19.312,26.229 19.312,19.562 25.979,19.562",
+ "raph_chat": "M15.985,5.972c-7.563,0-13.695,4.077-13.695,9.106c0,2.877,2.013,5.44,5.147,7.108c-0.446,1.479-1.336,3.117-3.056,4.566c0,0,4.015-0.266,6.851-3.143c0.163,0.04,0.332,0.07,0.497,0.107c-0.155-0.462-0.246-0.943-0.246-1.443c0-3.393,3.776-6.05,8.599-6.05c3.464,0,6.379,1.376,7.751,3.406c1.168-1.34,1.847-2.892,1.847-4.552C29.68,10.049,23.548,5.972,15.985,5.972zM27.68,22.274c0-2.79-3.401-5.053-7.599-5.053c-4.196,0-7.599,2.263-7.599,5.053c0,2.791,3.403,5.053,7.599,5.053c0.929,0,1.814-0.116,2.637-0.319c1.573,1.597,3.801,1.744,3.801,1.744c-0.954-0.804-1.447-1.713-1.695-2.534C26.562,25.293,27.68,23.871,27.68,22.274z",
+ "raph_quote": "M14.505,5.873c-3.937,2.52-5.904,5.556-5.904,9.108c0,1.104,0.192,1.656,0.576,1.656l0.396-0.107c0.312-0.12,0.563-0.18,0.756-0.18c1.128,0,2.07,0.411,2.826,1.229c0.756,0.82,1.134,1.832,1.134,3.037c0,1.157-0.408,2.14-1.224,2.947c-0.816,0.807-1.801,1.211-2.952,1.211c-1.608,0-2.935-0.661-3.979-1.984c-1.044-1.321-1.565-2.98-1.565-4.977c0-2.259,0.443-4.327,1.332-6.203c0.888-1.875,2.243-3.57,4.067-5.085c1.824-1.514,2.988-2.272,3.492-2.272c0.336,0,0.612,0.162,0.828,0.486c0.216,0.324,0.324,0.606,0.324,0.846L14.505,5.873zM27.465,5.873c-3.937,2.52-5.904,5.556-5.904,9.108c0,1.104,0.192,1.656,0.576,1.656l0.396-0.107c0.312-0.12,0.563-0.18,0.756-0.18c1.104,0,2.04,0.411,2.808,1.229c0.769,0.82,1.152,1.832,1.152,3.037c0,1.157-0.408,2.14-1.224,2.947c-0.816,0.807-1.801,1.211-2.952,1.211c-1.608,0-2.935-0.661-3.979-1.984c-1.044-1.321-1.565-2.98-1.565-4.977c0-2.284,0.449-4.369,1.35-6.256c0.9-1.887,2.256-3.577,4.068-5.067c1.812-1.49,2.97-2.236,3.474-2.236c0.336,0,0.612,0.162,0.828,0.486c0.216,0.324,0.324,0.606,0.324,0.846L27.465,5.873z",
+ "raph_slideshare": "M28.952,12.795c-0.956,1.062-5.073,2.409-5.604,2.409h-4.513c-0.749,0-1.877,0.147-2.408,0.484c0.061,0.054,0.122,0.108,0.181,0.163c0.408,0.379,1.362,0.913,2.206,0.913c0.397,0,0.723-0.115,1-0.354c1.178-1.007,1.79-1.125,2.145-1.125c0.421,0,0.783,0.193,0.996,0.531c0.4,0.626,0.106,1.445-0.194,2.087c-0.718,1.524-3.058,3.171-5.595,3.171c-0.002,0-0.002,0-0.004,0c-0.354,0-0.701-0.033-1.033-0.099v3.251c0,0.742,1.033,2.533,4.167,2.533s3.955-3.701,3.955-4.338v-4.512c2.23-1.169,4.512-1.805,5.604-3.895C30.882,12.05,29.907,11.733,28.952,12.795zM21.942,17.521c0.796-1.699-0.053-1.699-1.54-0.425s-3.665,0.105-4.408-0.585c-0.743-0.689-1.486-1.22-2.814-1.167c-1.328,0.053-4.46-0.161-6.267-0.585c-1.805-0.425-4.895-3-5.15-2.335c-0.266,0.69,0.211,1.168,1.168,2.335c0.955,1.169,5.075,2.778,5.075,2.778s0,3.453,0,4.886c0,1.435,2.973,3.61,4.512,3.61s2.708-1.062,2.708-1.806v-4.512C17.775,21.045,21.146,19.221,21.942,17.521zM20.342,13.73c1.744,0,3.159-1.414,3.159-3.158c0-1.745-1.415-3.159-3.159-3.159s-3.158,1.414-3.158,3.159C17.184,12.316,18.598,13.73,20.342,13.73zM12.019,13.73c1.744,0,3.158-1.414,3.158-3.158c0-1.745-1.414-3.159-3.158-3.159c-1.745,0-3.159,1.414-3.159,3.159C8.86,12.316,10.273,13.73,12.019,13.73z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_2.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_2.json.svn-base
new file mode 100644
index 000000000..42a476e22
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/raphael_2.json.svn-base
@@ -0,0 +1,64 @@
+{"size": 32,
+"fill": true,
+"data": {
+ "raph_twitter": "M23.295,22.567h-7.213c-2.125,0-4.103-2.215-4.103-4.736v-1.829h11.232c1.817,0,3.291-1.469,3.291-3.281c0-1.813-1.474-3.282-3.291-3.282H11.979V6.198c0-1.835-1.375-3.323-3.192-3.323c-1.816,0-3.29,1.488-3.29,3.323v11.633c0,6.23,4.685,11.274,10.476,11.274h7.211c1.818,0,3.318-1.463,3.318-3.298S25.112,22.567,23.295,22.567z",
+ "raph_gear2": "M17.047,27.945c-0.34,0.032-0.688,0.054-1.046,0.054l0,0c-0.32,0-0.631-0.017-0.934-0.043l0,0l-2.626,3.375l-0.646-0.183c-0.758-0.213-1.494-0.48-2.202-0.8l0,0L8.979,30.07l0.158-4.24c-0.558-0.39-1.079-0.825-1.561-1.302l0,0L3.424,25.42l-0.379-0.557c-0.445-0.654-0.824-1.339-1.16-2.032l0,0l-0.292-0.605l2.819-3.12c-0.176-0.661-0.293-1.343-0.353-2.038l0,0l-3.736-1.975l0.068-0.669c0.08-0.801,0.235-1.567,0.42-2.303l0,0l0.165-0.653l4.167-0.577c0.297-0.627,0.647-1.221,1.041-1.78l0,0l-1.59-3.914l0.48-0.47c0.564-0.55,1.168-1.048,1.798-1.503l0,0l0.546-0.394l3.597,2.259c0.606-0.279,1.24-0.509,1.897-0.685l0,0l1.304-4.046l0.672-0.051c0.362-0.027,0.751-0.058,1.174-0.058l0,0c0.422,0,0.81,0.031,1.172,0.058l0,0l0.672,0.051l1.318,4.088c0.632,0.176,1.244,0.401,1.831,0.674l0,0l3.647-2.291l0.548,0.394c0.63,0.455,1.235,0.954,1.798,1.501l0,0l0.482,0.47l-1.639,4.031c0.357,0.519,0.679,1.068,0.954,1.646l0,0l4.297,0.595l0.167,0.653c0.188,0.735,0.342,1.501,0.42,2.303l0,0l0.068,0.669l-3.866,2.044c-0.058,0.634-0.161,1.258-0.315,1.866l0,0l2.913,3.218l-0.293,0.608c-0.335,0.695-0.712,1.382-1.159,2.034l0,0l-0.379,0.555l-4.255-0.912c-0.451,0.451-0.939,0.866-1.461,1.241l0,0l0.162,4.323l-0.615,0.278c-0.709,0.319-1.444,0.587-2.202,0.8l0,0l-0.648,0.183L17.047,27.945L17.047,27.945zM20.424,29.028c0.227-0.076,0.45-0.157,0.671-0.244l0,0l-0.152-4.083l0.479-0.307c0.717-0.466,1.37-1.024,1.95-1.658l0,0l0.386-0.423l4.026,0.862c0.121-0.202,0.238-0.409,0.351-0.62l0,0l-2.754-3.045l0.171-0.544c0.243-0.783,0.381-1.623,0.422-2.5l0,0l0.025-0.571l3.658-1.933c-0.038-0.234-0.082-0.467-0.132-0.7l0,0l-4.07-0.563l-0.219-0.527c-0.327-0.787-0.76-1.524-1.277-2.204l0,0l-0.342-0.453l1.548-3.808c-0.179-0.157-0.363-0.31-0.552-0.458l0,0l-3.455,2.169L20.649,7.15c-0.754-0.397-1.569-0.698-2.429-0.894l0,0l-0.556-0.127l-1.248-3.87c-0.121-0.006-0.239-0.009-0.354-0.009l0,0c-0.117,0-0.235,0.003-0.357,0.009l0,0l-1.239,3.845l-0.564,0.12c-0.875,0.188-1.709,0.494-2.486,0.896l0,0l-0.508,0.264L7.509,5.249c-0.188,0.148-0.372,0.301-0.55,0.458l0,0l1.507,3.708L8.112,9.869c-0.552,0.709-1.011,1.485-1.355,2.319l0,0l-0.218,0.529l-3.939,0.545c-0.05,0.233-0.094,0.466-0.131,0.7l0,0l3.531,1.867l0.022,0.575c0.037,0.929,0.192,1.82,0.459,2.653l0,0l0.175,0.548l-2.667,2.95c0.112,0.212,0.229,0.419,0.351,0.621l0,0l3.916-0.843l0.39,0.423c0.601,0.657,1.287,1.229,2.043,1.703l0,0l0.488,0.305l-0.149,4.02c0.221,0.087,0.445,0.168,0.672,0.244l0,0l2.479-3.188l0.566,0.07c0.427,0.054,0.843,0.089,1.257,0.089l0,0c0.445,0,0.894-0.039,1.353-0.104l0,0l0.571-0.08L20.424,29.028L20.424,29.028zM21.554,20.75l0.546,0.839l-3.463,2.253l-1.229-1.891l0,0c-0.447,0.109-0.917,0.173-1.406,0.173l0,0c-3.384,0-6.126-2.743-6.126-6.123l0,0c0-3.384,2.742-6.126,6.126-6.126l0,0c3.38,0,6.123,2.742,6.123,6.126l0,0c0,1.389-0.467,2.676-1.25,3.704l0,0L21.554,20.75M19.224,21.073l0.108-0.069l-0.987-1.519l0.572-0.572c0.748-0.75,1.207-1.773,1.207-2.912l0,0c-0.004-2.278-1.848-4.122-4.123-4.126l0,0c-2.28,0.004-4.122,1.846-4.126,4.126l0,0c0.004,2.275,1.848,4.119,4.126,4.123l0,0c0.509,0,0.999-0.104,1.473-0.286l0,0l0.756-0.29L19.224,21.073L19.224,21.073z",
+ "raph_gear": "M26.974,16.514l3.765-1.991c-0.074-0.738-0.217-1.454-0.396-2.157l-4.182-0.579c-0.362-0.872-0.84-1.681-1.402-2.423l1.594-3.921c-0.524-0.511-1.09-0.977-1.686-1.406l-3.551,2.229c-0.833-0.438-1.73-0.77-2.672-0.984l-1.283-3.976c-0.364-0.027-0.728-0.056-1.099-0.056s-0.734,0.028-1.099,0.056l-1.271,3.941c-0.967,0.207-1.884,0.543-2.738,0.986L7.458,4.037C6.863,4.466,6.297,4.932,5.773,5.443l1.55,3.812c-0.604,0.775-1.11,1.629-1.49,2.55l-4.05,0.56c-0.178,0.703-0.322,1.418-0.395,2.157l3.635,1.923c0.041,1.013,0.209,1.994,0.506,2.918l-2.742,3.032c0.319,0.661,0.674,1.303,1.085,1.905l4.037-0.867c0.662,0.72,1.416,1.351,2.248,1.873l-0.153,4.131c0.663,0.299,1.352,0.549,2.062,0.749l2.554-3.283C15.073,26.961,15.532,27,16,27c0.507,0,1.003-0.046,1.491-0.113l2.567,3.301c0.711-0.2,1.399-0.45,2.062-0.749l-0.156-4.205c0.793-0.513,1.512-1.127,2.146-1.821l4.142,0.889c0.411-0.602,0.766-1.243,1.085-1.905l-2.831-3.131C26.778,18.391,26.93,17.467,26.974,16.514zM20.717,21.297l-1.785,1.162l-1.098-1.687c-0.571,0.22-1.186,0.353-1.834,0.353c-2.831,0-5.125-2.295-5.125-5.125c0-2.831,2.294-5.125,5.125-5.125c2.83,0,5.125,2.294,5.125,5.125c0,1.414-0.573,2.693-1.499,3.621L20.717,21.297z",
+ "raph_wrench": "M26.834,14.693c1.816-2.088,2.181-4.938,1.193-7.334l-3.646,4.252l-3.594-0.699L19.596,7.45l3.637-4.242c-2.502-0.63-5.258,0.13-7.066,2.21c-1.907,2.193-2.219,5.229-1.039,7.693L5.624,24.04c-1.011,1.162-0.888,2.924,0.274,3.935c1.162,1.01,2.924,0.888,3.935-0.274l9.493-10.918C21.939,17.625,24.918,16.896,26.834,14.693z",
+ "raph_magic": "M23.043,4.649l-0.404-2.312l-1.59,1.727l-2.323-0.33l1.151,2.045l-1.032,2.108l2.302-0.463l1.686,1.633l0.271-2.332l2.074-1.099L23.043,4.649zM26.217,18.198l-0.182-1.25l-0.882,0.905l-1.245-0.214l0.588,1.118l-0.588,1.118l1.245-0.214l0.882,0.905l0.182-1.25l1.133-0.56L26.217,18.198zM4.92,7.672L5.868,7.3l0.844,0.569L6.65,6.853l0.802-0.627L6.467,5.97L6.118,5.013L5.571,5.872L4.553,5.908l0.647,0.786L4.92,7.672zM10.439,10.505l1.021-1.096l1.481,0.219l-0.727-1.31l0.667-1.341l-1.47,0.287l-1.069-1.048L10.16,7.703L8.832,8.396l1.358,0.632L10.439,10.505zM17.234,12.721c-0.588-0.368-1.172-0.618-1.692-0.729c-0.492-0.089-1.039-0.149-1.425,0.374L2.562,30.788h6.68l9.669-15.416c0.303-0.576,0.012-1.041-0.283-1.447C18.303,13.508,17.822,13.09,17.234,12.721zM13.613,21.936c-0.254-0.396-0.74-0.857-1.373-1.254c-0.632-0.396-1.258-0.634-1.726-0.69l4.421-7.052c0.064-0.013,0.262-0.021,0.543,0.066c0.346,0.092,0.785,0.285,1.225,0.562c0.504,0.313,0.908,0.677,1.133,0.97c0.113,0.145,0.178,0.271,0.195,0.335c0.002,0.006,0.004,0.011,0.004,0.015L13.613,21.936z",
+ "raph_download": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,28.792c-1.549,0-2.806-1.256-2.806-2.806s1.256-2.806,2.806-2.806c1.55,0,2.806,1.256,2.806,2.806S17.55,28.792,16,28.792zM16,21.087l-7.858-6.562h3.469V5.747h8.779v8.778h3.468L16,21.087z",
+ "raph_firefox": "M28.4,22.469c0.479-0.964,0.851-1.991,1.095-3.066c0.953-3.661,0.666-6.854,0.666-6.854l-0.327,2.104c0,0-0.469-3.896-1.044-5.353c-0.881-2.231-1.273-2.214-1.274-2.21c0.542,1.379,0.494,2.169,0.483,2.288c-0.01-0.016-0.019-0.032-0.027-0.047c-0.131-0.324-0.797-1.819-2.225-2.878c-2.502-2.481-5.943-4.014-9.745-4.015c-4.056,0-7.705,1.745-10.238,4.525C5.444,6.5,5.183,5.938,5.159,5.317c0,0-0.002,0.002-0.006,0.005c0-0.011-0.003-0.021-0.003-0.031c0,0-1.61,1.247-1.436,4.612c-0.299,0.574-0.56,1.172-0.777,1.791c-0.375,0.817-0.75,2.004-1.059,3.746c0,0,0.133-0.422,0.399-0.988c-0.064,0.482-0.103,0.971-0.116,1.467c-0.09,0.845-0.118,1.865-0.039,3.088c0,0,0.032-0.406,0.136-1.021c0.834,6.854,6.667,12.165,13.743,12.165l0,0c1.86,0,3.636-0.37,5.256-1.036C24.938,27.771,27.116,25.196,28.4,22.469zM16.002,3.356c2.446,0,4.73,0.68,6.68,1.86c-2.274-0.528-3.433-0.261-3.423-0.248c0.013,0.015,3.384,0.589,3.981,1.411c0,0-1.431,0-2.856,0.41c-0.065,0.019,5.242,0.663,6.327,5.966c0,0-0.582-1.213-1.301-1.42c0.473,1.439,0.351,4.17-0.1,5.528c-0.058,0.174-0.118-0.755-1.004-1.155c0.284,2.037-0.018,5.268-1.432,6.158c-0.109,0.07,0.887-3.189,0.201-1.93c-4.093,6.276-8.959,2.539-10.934,1.208c1.585,0.388,3.267,0.108,4.242-0.559c0.982-0.672,1.564-1.162,2.087-1.047c0.522,0.117,0.87-0.407,0.464-0.872c-0.405-0.466-1.392-1.105-2.725-0.757c-0.94,0.247-2.107,1.287-3.886,0.233c-1.518-0.899-1.507-1.63-1.507-2.095c0-0.366,0.257-0.88,0.734-1.028c0.58,0.062,1.044,0.214,1.537,0.466c0.005-0.135,0.006-0.315-0.001-0.519c0.039-0.077,0.015-0.311-0.047-0.596c-0.036-0.287-0.097-0.582-0.19-0.851c0.01-0.002,0.017-0.007,0.021-0.021c0.076-0.344,2.147-1.544,2.299-1.659c0.153-0.114,0.55-0.378,0.506-1.183c-0.015-0.265-0.058-0.294-2.232-0.286c-0.917,0.003-1.425-0.894-1.589-1.245c0.222-1.231,0.863-2.11,1.919-2.704c0.02-0.011,0.015-0.021-0.008-0.027c0.219-0.127-2.524-0.006-3.76,1.604C9.674,8.045,9.219,7.95,8.71,7.95c-0.638,0-1.139,0.07-1.603,0.187c-0.05,0.013-0.122,0.011-0.208-0.001C6.769,8.04,6.575,7.88,6.365,7.672c0.161-0.18,0.324-0.356,0.495-0.526C9.201,4.804,12.43,3.357,16.002,3.356z",
+ "raph_ie": "M27.998,2.266c-2.12-1.91-6.925,0.382-9.575,1.93c-0.76-0.12-1.557-0.185-2.388-0.185c-3.349,0-6.052,0.985-8.106,2.843c-2.336,2.139-3.631,4.94-3.631,8.177c0,0.028,0.001,0.056,0.001,0.084c3.287-5.15,8.342-7.79,9.682-8.487c0.212-0.099,0.338,0.155,0.141,0.253c-0.015,0.042-0.015,0,0,0c-2.254,1.35-6.434,5.259-9.146,10.886l-0.003-0.007c-1.717,3.547-3.167,8.529-0.267,10.358c2.197,1.382,6.13-0.248,9.295-2.318c0.764,0.108,1.567,0.165,2.415,0.165c5.84,0,9.937-3.223,11.399-7.924l-8.022-0.014c-0.337,1.661-1.464,2.548-3.223,2.548c-2.21,0-3.729-1.211-3.828-4.012l15.228-0.014c0.028-0.578-0.042-0.985-0.042-1.436c0-5.251-3.143-9.355-8.255-10.663c2.081-1.294,5.974-3.209,7.848-1.681c1.407,1.14,0.633,3.533,0.295,4.518c-0.056,0.254,0.24,0.296,0.296,0.057C28.814,5.573,29.026,3.194,27.998,2.266zM13.272,25.676c-2.469,1.475-5.873,2.539-7.539,1.289c-1.243-0.935-0.696-3.468,0.398-5.938c0.664,0.992,1.495,1.886,2.473,2.63C9.926,24.651,11.479,25.324,13.272,25.676zM12.714,13.046c0.042-2.435,1.787-3.49,3.617-3.49c1.928,0,3.49,1.112,3.49,3.49H12.714z",
+ "raph_opera": "M15.954,2.046c-7.489,0-12.872,5.432-12.872,13.581c0,7.25,5.234,13.835,12.873,13.835c7.712,0,12.974-6.583,12.974-13.835C28.929,7.413,23.375,2.046,15.954,2.046zM15.952,26.548L15.952,26.548c-2.289,0-3.49-1.611-4.121-3.796c-0.284-1.037-0.458-2.185-0.563-3.341c-0.114-1.374-0.129-2.773-0.129-4.028c0-0.993,0.018-1.979,0.074-2.926c0.124-1.728,0.386-3.431,0.89-4.833c0.694-1.718,1.871-2.822,3.849-2.822c2.5,0,3.763,1.782,4.385,4.322c0.429,1.894,0.56,4.124,0.56,6.274c0,2.299-0.103,5.153-0.763,7.442C19.473,24.979,18.242,26.548,15.952,26.548z",
+ "raph_chrome": "M16.277,8.655c-2.879,0-5.227,2.181-5.227,4.854s2.348,4.854,5.227,4.854c2.879,0,5.227-2.181,5.227-4.854S19.156,8.655,16.277,8.655zM29.535,13.486c-0.369-1.819-1.068-3.052-1.727-3.995c0.05,0.129,0.09,0.259,0.138,0.388c-2.34-6.355-11.704-9.8-18.937-5.43c-0.056,0.27-0.073,0.538-0.073,0.804c0-0.051-0.006-0.098-0.004-0.15c-1.743-0.134-3.854,2.061-5.731,6.083c-0.953,2.277-1.298,4.77-0.414,7.693c0.516,1.706,1.328,3.456,2.499,4.814c3.471,4.027,8.788,5.67,11.884,4.835c0.004,0.001,0.009,0.003,0.014,0.004c5.969-0.125,10.494-4.228,12.125-9.569C29.896,17.035,29.934,15.457,29.535,13.486zM6.043,23.04c-0.96-1.112-1.755-2.651-2.299-4.452c-0.733-2.42-0.612-4.65,0.379-7.015C5.129,9.42,6.111,8.005,6.956,7.154c0.15,0.742,0.521,1.628,1.113,2.649c0.218,0.379,0.459,0.701,0.692,1.012c0.179,0.237,0.356,0.474,0.513,0.729c0.124,0.202,0.239,0.445,0.354,0.737c-0.239,2.754,0.892,5.138,3.148,6.679l-2.546,2.25l-0.202,0.171c-0.208,0.171-0.447,0.373-0.651,0.589c-1.36,1.444-0.25,2.831,0.286,3.498l0.068,0.087c0.237,0.297,0.513,0.62,0.815,0.938C8.963,25.725,7.375,24.585,6.043,23.04zM28.354,18.67c-1.6,5.232-5.937,8.7-11.07,8.859c-2.485-0.583-4.362-1.78-5.586-3.557c0.004-0.004,0.01-0.008,0.015-0.013l4.944-3.836c2.226-0.124,3.854-0.888,4.847-2.278c1.222-1.412,1.792-3.025,1.693-4.861c1.817,0.377,3.389,0.903,4.855,1.883l0.116,0.078l0.134,0.043c0.156,0.049,0.311,0.076,0.459,0.081C28.87,16.309,28.74,17.402,28.354,18.67zM28.609,14.037c-1.951-1.306-4.062-1.867-6.594-2.285c0.531,2.358-0.084,4.072-1.326,5.512c-0.882,1.235-2.382,1.822-4.394,1.875l-5.22,4.052c-0.497,0.409-0.591,0.819-0.282,1.229c0.849,1.277,1.929,2.202,3.122,2.878c-0.013,0-0.026,0.002-0.039,0.003c-0.001-0.001-0.004-0.002-0.006-0.004c-0.02,0.003-0.041,0.004-0.062,0.005c-0.08,0.001-0.16-0.001-0.239-0.01c-0.156-0.021-0.314-0.064-0.459-0.118c-0.898-0.333-1.89-1.352-2.597-2.239c-0.581-0.73-1.206-1.433-0.411-2.275c0.258-0.273,0.582-0.514,0.789-0.698l2.521-2.229c0.172-0.137,0.35-0.277,0.535-0.423c0.053-0.042,0.107-0.084,0.162-0.127c0.564-0.442,0.483-0.32-0.108-0.642c-2.419-1.32-3.677-3.614-3.354-6.389c-0.149-0.41-0.317-0.792-0.518-1.124c-0.363-0.6-0.834-1.102-1.194-1.723c-0.9-1.556-1.847-3.902,0.013-3.682c-0.005-0.053-0.002-0.11-0.005-0.164c0.094,2.001,1.526,3.823,1.742,4.888c0.078,0.382,0.294,0.705,0.612,0.28c2.538-3.395,6.069-3.053,8.328-1.312c0.443,0.34,0.684,0.755,1.084,1.11c0.154,0.138,0.328,0.259,0.535,0.351c0.743,0.332,1.807,0.312,2.607,0.434c1.371,0.208,2.707,0.464,3.971,0.812c0.25,0.03,0.424-0.004,0.521-0.101c0.211-0.208-0.002-0.887-0.121-1.263c0.277,0.805,0.536,1.609,0.773,2.415C29.176,13.701,29.133,14.208,28.609,14.037z",
+ "raph_safari": "M16.154,5.135c-0.504,0-1,0.031-1.488,0.089l-0.036-0.18c-0.021-0.104-0.06-0.198-0.112-0.283c0.381-0.308,0.625-0.778,0.625-1.306c0-0.927-0.751-1.678-1.678-1.678s-1.678,0.751-1.678,1.678c0,0.745,0.485,1.376,1.157,1.595c-0.021,0.105-0.021,0.216,0,0.328l0.033,0.167C7.645,6.95,3.712,11.804,3.712,17.578c0,6.871,5.571,12.441,12.442,12.441c6.871,0,12.441-5.57,12.441-12.441C28.596,10.706,23.025,5.135,16.154,5.135zM16.369,8.1c4.455,0,8.183,3.116,9.123,7.287l-0.576,0.234c-0.148-0.681-0.755-1.191-1.48-1.191c-0.837,0-1.516,0.679-1.516,1.516c0,0.075,0.008,0.148,0.018,0.221l-2.771-0.028c-0.054-0.115-0.114-0.226-0.182-0.333l3.399-5.11l0.055-0.083l-4.766,4.059c-0.352-0.157-0.74-0.248-1.148-0.256l0.086-0.018l-1.177-2.585c0.64-0.177,1.111-0.763,1.111-1.459c0-0.837-0.678-1.515-1.516-1.515c-0.075,0-0.147,0.007-0.219,0.018l0.058-0.634C15.357,8.141,15.858,8.1,16.369,8.1zM12.146,3.455c0-0.727,0.591-1.318,1.318-1.318c0.727,0,1.318,0.591,1.318,1.318c0,0.425-0.203,0.802-0.516,1.043c-0.183-0.123-0.413-0.176-0.647-0.13c-0.226,0.045-0.413,0.174-0.535,0.349C12.542,4.553,12.146,4.049,12.146,3.455zM7.017,17.452c0-4.443,3.098-8.163,7.252-9.116l0.297,0.573c-0.61,0.196-1.051,0.768-1.051,1.442c0,0.837,0.678,1.516,1.515,1.516c0.068,0,0.135-0.006,0.2-0.015l-0.058,2.845l0.052-0.011c-0.442,0.204-0.824,0.513-1.116,0.895l0.093-0.147l-1.574-0.603l1.172,1.239l0.026-0.042c-0.19,0.371-0.306,0.788-0.324,1.229l-0.003-0.016l-2.623,1.209c-0.199-0.604-0.767-1.041-1.438-1.041c-0.837,0-1.516,0.678-1.516,1.516c0,0.064,0.005,0.128,0.013,0.191l-0.783-0.076C7.063,18.524,7.017,17.994,7.017,17.452zM16.369,26.805c-4.429,0-8.138-3.078-9.106-7.211l0.691-0.353c0.146,0.686,0.753,1.2,1.482,1.2c0.837,0,1.515-0.679,1.515-1.516c0-0.105-0.011-0.207-0.031-0.307l2.858,0.03c0.045,0.095,0.096,0.187,0.15,0.276l-3.45,5.277l0.227-0.195l4.529-3.92c0.336,0.153,0.705,0.248,1.094,0.266l-0.019,0.004l1.226,2.627c-0.655,0.166-1.142,0.76-1.142,1.468c0,0.837,0.678,1.515,1.516,1.515c0.076,0,0.151-0.007,0.225-0.018l0.004,0.688C17.566,26.746,16.975,26.805,16.369,26.805zM18.662,26.521l-0.389-0.6c0.661-0.164,1.152-0.759,1.152-1.47c0-0.837-0.68-1.516-1.516-1.516c-0.066,0-0.13,0.005-0.193,0.014v-2.86l-0.025,0.004c0.409-0.185,0.77-0.459,1.055-0.798l1.516,0.659l-1.104-1.304c0.158-0.335,0.256-0.704,0.278-1.095l2.552-1.164c0.19,0.618,0.766,1.068,1.447,1.068c0.838,0,1.516-0.679,1.516-1.516c0-0.069-0.006-0.137-0.016-0.204l0.65,0.12c0.089,0.517,0.136,1.049,0.136,1.591C25.722,21.826,22.719,25.499,18.662,26.521z",
+ "raph_view": "M16,8.286C8.454,8.286,2.5,16,2.5,16s5.954,7.715,13.5,7.715c5.771,0,13.5-7.715,13.5-7.715S21.771,8.286,16,8.286zM16,20.807c-2.649,0-4.807-2.157-4.807-4.807s2.158-4.807,4.807-4.807s4.807,2.158,4.807,4.807S18.649,20.807,16,20.807zM16,13.194c-1.549,0-2.806,1.256-2.806,2.806c0,1.55,1.256,2.806,2.806,2.806c1.55,0,2.806-1.256,2.806-2.806C18.806,14.451,17.55,13.194,16,13.194z",
+ "raph_noview": "M11.478,17.568c-0.172-0.494-0.285-1.017-0.285-1.568c0-2.65,2.158-4.807,4.807-4.807c0.552,0,1.074,0.113,1.568,0.285l2.283-2.283C18.541,8.647,17.227,8.286,16,8.286C8.454,8.286,2.5,16,2.5,16s2.167,2.791,5.53,5.017L11.478,17.568zM23.518,11.185l-3.056,3.056c0.217,0.546,0.345,1.138,0.345,1.76c0,2.648-2.158,4.807-4.807,4.807c-0.622,0-1.213-0.128-1.76-0.345l-2.469,2.47c1.327,0.479,2.745,0.783,4.229,0.783c5.771,0,13.5-7.715,13.5-7.715S26.859,13.374,23.518,11.185zM25.542,4.917L4.855,25.604L6.27,27.02L26.956,6.332L25.542,4.917z",
+ "raph_cloud": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h15.875c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z",
+ "raph_cloud2": "M7.562,24.812c-3.313,0-6-2.687-6-6l0,0c0.002-2.659,1.734-4.899,4.127-5.684l0,0c0.083-2.26,1.937-4.064,4.216-4.066l0,0c0.73,0,1.415,0.19,2.01,0.517l0,0c1.266-2.105,3.57-3.516,6.208-3.517l0,0c3.947,0.002,7.157,3.155,7.248,7.079l0,0c2.362,0.804,4.062,3.034,4.064,5.671l0,0c0,3.313-2.687,6-6,6l0,0H7.562L7.562,24.812zM24.163,14.887c-0.511-0.095-0.864-0.562-0.815-1.079l0,0c0.017-0.171,0.027-0.336,0.027-0.497l0,0c-0.007-2.899-2.352-5.245-5.251-5.249l0,0c-2.249-0.002-4.162,1.418-4.911,3.41l0,0c-0.122,0.323-0.406,0.564-0.748,0.63l0,0c-0.34,0.066-0.694-0.052-0.927-0.309l0,0c-0.416-0.453-0.986-0.731-1.633-0.731l0,0c-1.225,0.002-2.216,0.993-2.22,2.218l0,0c0,0.136,0.017,0.276,0.045,0.424l0,0c0.049,0.266-0.008,0.54-0.163,0.762l0,0c-0.155,0.223-0.392,0.371-0.657,0.414l0,0c-1.9,0.313-3.352,1.949-3.35,3.931l0,0c0.004,2.209,1.792,3.995,4.001,4.001l0,0h15.874c2.209-0.006,3.994-1.792,3.999-4.001l0,0C27.438,16.854,26.024,15.231,24.163,14.887L24.163,14.887",
+ "raph_cloudDown": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h3.404l-0.707-0.707c-0.377-0.377-0.585-0.879-0.585-1.413c0-0.533,0.208-1.035,0.585-1.412l0.556-0.557c0.4-0.399,0.937-0.628,1.471-0.628c0.027,0,0.054,0,0.08,0.002v-0.472c0-1.104,0.898-2.002,2-2.002h3.266c1.103,0,2,0.898,2,2.002v0.472c0.027-0.002,0.054-0.002,0.081-0.002c0.533,0,1.07,0.229,1.47,0.63l0.557,0.552c0.78,0.781,0.78,2.05,0,2.828l-0.706,0.707h2.403c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M21.033,20.986l-0.556-0.555c-0.39-0.389-0.964-0.45-1.276-0.137c-0.312,0.312-0.568,0.118-0.568-0.432v-1.238c0-0.55-0.451-1-1-1h-3.265c-0.55,0-1,0.45-1,1v1.238c0,0.55-0.256,0.744-0.569,0.432c-0.312-0.313-0.887-0.252-1.276,0.137l-0.556,0.555c-0.39,0.389-0.39,1.024-0.001,1.413l4.328,4.331c0.194,0.194,0.451,0.291,0.707,0.291s0.512-0.097,0.707-0.291l4.327-4.331C21.424,22.011,21.423,21.375,21.033,20.986z",
+ "raph_cloudUp": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h2.312c-0.126-0.266-0.2-0.556-0.2-0.859c0-0.535,0.208-1.04,0.587-1.415l4.325-4.329c0.375-0.377,0.877-0.585,1.413-0.585c0.54,0,1.042,0.21,1.417,0.587l4.323,4.329c0.377,0.373,0.585,0.878,0.585,1.413c0,0.304-0.073,0.594-0.2,0.859h1.312c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M16.706,17.916c-0.193-0.195-0.45-0.291-0.706-0.291s-0.512,0.096-0.707,0.291l-4.327,4.33c-0.39,0.389-0.389,1.025,0.001,1.414l0.556,0.555c0.39,0.389,0.964,0.449,1.276,0.137s0.568-0.119,0.568,0.432v1.238c0,0.549,0.451,1,1,1h3.265c0.551,0,1-0.451,1-1v-1.238c0-0.551,0.256-0.744,0.569-0.432c0.312,0.312,0.887,0.252,1.276-0.137l0.556-0.555c0.39-0.389,0.39-1.025,0.001-1.414L16.706,17.916z",
+ "raph_location": "M16,3.5c-4.142,0-7.5,3.358-7.5,7.5c0,4.143,7.5,18.121,7.5,18.121S23.5,15.143,23.5,11C23.5,6.858,20.143,3.5,16,3.5z M16,14.584c-1.979,0-3.584-1.604-3.584-3.584S14.021,7.416,16,7.416S19.584,9.021,19.584,11S17.979,14.584,16,14.584z",
+ "raph_volume0": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z",
+ "raph_volume1": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z",
+ "raph_volume2": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z",
+ "raph_volume3": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z M23.28,6.746c-0.393-0.391-1.025-0.389-1.414,0.002c-0.391,0.389-0.391,1.023,0.002,1.413h-0.002c2.009,2.009,3.248,4.773,3.248,7.839c0,3.063-1.239,5.828-3.246,7.838c-0.391,0.39-0.391,1.023,0.002,1.415c0.194,0.194,0.45,0.291,0.706,0.291s0.513-0.098,0.708-0.293c2.363-2.366,3.831-5.643,3.829-9.251C27.115,12.389,25.647,9.111,23.28,6.746z",
+ "raph_key": "M18.386,16.009l0.009-0.006l-0.58-0.912c1.654-2.226,1.876-5.319,0.3-7.8c-2.043-3.213-6.303-4.161-9.516-2.118c-3.212,2.042-4.163,6.302-2.12,9.517c1.528,2.402,4.3,3.537,6.944,3.102l0.424,0.669l0.206,0.045l0.779-0.447l-0.305,1.377l2.483,0.552l-0.296,1.325l1.903,0.424l-0.68,3.06l1.406,0.313l-0.424,1.906l4.135,0.918l0.758-3.392L18.386,16.009z M10.996,8.944c-0.685,0.436-1.593,0.233-2.029-0.452C8.532,7.807,8.733,6.898,9.418,6.463s1.594-0.233,2.028,0.452C11.883,7.6,11.68,8.509,10.996,8.944z",
+ "raph_ruler": "M6.63,21.796l-5.122,5.121h25.743V1.175L6.63,21.796zM18.702,10.48c0.186-0.183,0.48-0.183,0.664,0l1.16,1.159c0.184,0.183,0.186,0.48,0.002,0.663c-0.092,0.091-0.213,0.137-0.332,0.137c-0.121,0-0.24-0.046-0.33-0.137l-1.164-1.159C18.519,10.96,18.519,10.664,18.702,10.48zM17.101,12.084c0.184-0.183,0.48-0.183,0.662,0l2.156,2.154c0.184,0.183,0.184,0.48,0.002,0.661c-0.092,0.092-0.213,0.139-0.334,0.139s-0.24-0.046-0.33-0.137l-2.156-2.154C16.917,12.564,16.917,12.267,17.101,12.084zM15.497,13.685c0.184-0.183,0.48-0.183,0.664,0l1.16,1.161c0.184,0.183,0.182,0.48-0.002,0.663c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.24-0.046-0.332-0.138l-1.16-1.16C15.314,14.166,15.314,13.868,15.497,13.685zM13.896,15.288c0.184-0.183,0.48-0.181,0.664,0.002l1.158,1.159c0.183,0.184,0.183,0.48,0,0.663c-0.092,0.092-0.212,0.138-0.332,0.138c-0.119,0-0.24-0.046-0.332-0.138l-1.158-1.161C13.713,15.767,13.713,15.471,13.896,15.288zM12.293,16.892c0.183-0.184,0.479-0.184,0.663,0l2.154,2.153c0.184,0.184,0.184,0.481,0,0.665c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-2.153-2.155C12.11,17.371,12.11,17.075,12.293,16.892zM10.302,24.515c-0.091,0.093-0.212,0.139-0.332,0.139c-0.119,0-0.238-0.045-0.33-0.137l-2.154-2.153c-0.184-0.183-0.184-0.479,0-0.663s0.479-0.184,0.662,0l2.154,2.153C10.485,24.036,10.485,24.332,10.302,24.515zM10.912,21.918c-0.093,0.093-0.214,0.139-0.333,0.139c-0.12,0-0.24-0.045-0.33-0.137l-1.162-1.161c-0.184-0.183-0.184-0.479,0-0.66c0.184-0.185,0.48-0.187,0.664-0.003l1.161,1.162C11.095,21.438,11.095,21.735,10.912,21.918zM12.513,20.316c-0.092,0.092-0.211,0.138-0.332,0.138c-0.119,0-0.239-0.046-0.331-0.138l-1.159-1.16c-0.184-0.184-0.184-0.48,0-0.664s0.48-0.182,0.663,0.002l1.159,1.161C12.696,19.838,12.696,20.135,12.513,20.316zM22.25,21.917h-8.67l8.67-8.67V21.917zM22.13,10.7c-0.09,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-1.16-1.159c-0.184-0.183-0.184-0.479,0-0.663c0.182-0.183,0.479-0.183,0.662,0l1.16,1.159C22.312,10.221,22.313,10.517,22.13,10.7zM24.726,10.092c-0.092,0.092-0.213,0.137-0.332,0.137s-0.24-0.045-0.33-0.137l-2.154-2.154c-0.184-0.183-0.184-0.481,0-0.664s0.482-0.181,0.664,0.002l2.154,2.154C24.911,9.613,24.909,9.91,24.726,10.092z",
+ "raph_power": "M21.816,3.999c-0.993-0.481-2.189-0.068-2.673,0.927c-0.482,0.995-0.066,2.191,0.927,2.673c3.115,1.516,5.265,4.705,5.263,8.401c-0.01,5.154-4.18,9.324-9.333,9.333c-5.154-0.01-9.324-4.18-9.334-9.333c-0.002-3.698,2.149-6.89,5.267-8.403c0.995-0.482,1.408-1.678,0.927-2.673c-0.482-0.993-1.676-1.409-2.671-0.927C5.737,6.152,2.667,10.72,2.665,16C2.667,23.364,8.634,29.332,16,29.334c7.365-0.002,13.333-5.97,13.334-13.334C29.332,10.722,26.266,6.157,21.816,3.999z M16,13.833c1.104,0,1.999-0.894,1.999-2V2.499C17.999,1.394,17.104,0.5,16,0.5c-1.106,0-2,0.895-2,1.999v9.333C14,12.938,14.894,13.833,16,13.833z",
+ "raph_unlock": "M20.375,12.833h-2.209V10c0,0,0,0,0-0.001c0-2.389,1.945-4.333,4.334-4.333c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h2V9.999h-0.001c-0.001-3.498-2.836-6.333-6.334-6.333S16.166,6.502,16.166,10v2.833H3.125V25h17.25V12.833z",
+ "raph_flag": "M26.04,9.508c0.138-0.533,0.15-1.407,0.028-1.943l-0.404-1.771c-0.122-0.536-0.665-1.052-1.207-1.146l-3.723-0.643c-0.542-0.094-1.429-0.091-1.97,0.007l-4.033,0.726c-0.542,0.098-1.429,0.108-1.973,0.023L8.812,4.146C8.817,4.165,8.826,4.182,8.83,4.201l2.701,12.831l1.236,0.214c0.542,0.094,1.428,0.09,1.97-0.007l4.032-0.727c0.541-0.097,1.429-0.107,1.973-0.022l4.329,0.675c0.544,0.085,0.906-0.288,0.807-0.829l-0.485-2.625c-0.1-0.541-0.069-1.419,0.068-1.952L26.04,9.508zM6.667,3.636C6.126,3.75,5.78,4.279,5.894,4.819l5.763,27.378H13.7L7.852,4.409C7.736,3.867,7.207,3.521,6.667,3.636z",
+ "raph_tag": "M14.263,2.826H7.904L2.702,8.028v6.359L18.405,30.09l11.561-11.562L14.263,2.826zM6.495,8.859c-0.619-0.619-0.619-1.622,0-2.24C7.114,6,8.117,6,8.736,6.619c0.62,0.62,0.619,1.621,0,2.241C8.117,9.479,7.114,9.479,6.495,8.859z",
+ "raph_search": "M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",
+ "raph_zoomout": "M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM8.854,11.884v4.001l9.665-0.001v-3.999L8.854,11.884z",
+ "raph_zoomin": "M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM15.687,9.051h-4v2.833H8.854v4.001h2.833v2.833h4v-2.834h2.832v-3.999h-2.833V9.051z",
+ "raph_cross": "M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248",
+ "raph_check": "M2.379,14.729 5.208,11.899 12.958,19.648 25.877,6.733 28.707,9.561 12.958,25.308",
+ "raph_settings": "M16.015,12.03c-2.156,0-3.903,1.747-3.903,3.903c0,2.155,1.747,3.903,3.903,3.903c0.494,0,0.962-0.102,1.397-0.27l0.836,1.285l1.359-0.885l-0.831-1.276c0.705-0.706,1.142-1.681,1.142-2.757C19.918,13.777,18.171,12.03,16.015,12.03zM16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM26.174,20.809c-0.241,0.504-0.513,0.99-0.826,1.45L22.19,21.58c-0.481,0.526-1.029,0.994-1.634,1.385l0.119,3.202c-0.507,0.23-1.028,0.421-1.569,0.57l-1.955-2.514c-0.372,0.051-0.75,0.086-1.136,0.086c-0.356,0-0.706-0.029-1.051-0.074l-1.945,2.5c-0.541-0.151-1.065-0.342-1.57-0.569l0.117-3.146c-0.634-0.398-1.208-0.88-1.712-1.427L6.78,22.251c-0.313-0.456-0.583-0.944-0.826-1.448l2.088-2.309c-0.226-0.703-0.354-1.451-0.385-2.223l-2.768-1.464c0.055-0.563,0.165-1.107,0.301-1.643l3.084-0.427c0.29-0.702,0.675-1.352,1.135-1.942L8.227,7.894c0.399-0.389,0.83-0.744,1.283-1.07l2.663,1.672c0.65-0.337,1.349-0.593,2.085-0.75l0.968-3.001c0.278-0.021,0.555-0.042,0.837-0.042c0.282,0,0.56,0.022,0.837,0.042l0.976,3.028c0.72,0.163,1.401,0.416,2.036,0.75l2.704-1.697c0.455,0.326,0.887,0.681,1.285,1.07l-1.216,2.986c0.428,0.564,0.793,1.181,1.068,1.845l3.185,0.441c0.135,0.535,0.247,1.081,0.302,1.643l-2.867,1.516c-0.034,0.726-0.15,1.43-0.355,2.1L26.174,20.809z",
+ "raph_settingsalt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM24.386,14.968c-1.451,1.669-3.706,2.221-5.685,1.586l-7.188,8.266c-0.766,0.88-2.099,0.97-2.979,0.205s-0.973-2.099-0.208-2.979l7.198-8.275c-0.893-1.865-0.657-4.164,0.787-5.824c1.367-1.575,3.453-2.151,5.348-1.674l-2.754,3.212l0.901,2.621l2.722,0.529l2.761-3.22C26.037,11.229,25.762,13.387,24.386,14.968z",
+ "raph_feed": "M4.135,16.762c3.078,0,5.972,1.205,8.146,3.391c2.179,2.187,3.377,5.101,3.377,8.202h4.745c0-9.008-7.299-16.335-16.269-16.335V16.762zM4.141,8.354c10.973,0,19.898,8.975,19.898,20.006h4.743c0-13.646-11.054-24.749-24.642-24.749V8.354zM10.701,25.045c0,1.815-1.471,3.287-3.285,3.287s-3.285-1.472-3.285-3.287c0-1.813,1.471-3.285,3.285-3.285S10.701,23.231,10.701,25.045z",
+ "raph_bug": "M28.589,10.903l-5.828,1.612c-0.534-1.419-1.338-2.649-2.311-3.628l3.082-5.44c0.271-0.48,0.104-1.092-0.38-1.365c-0.479-0.271-1.09-0.102-1.36,0.377l-2.924,5.162c-0.604-0.383-1.24-0.689-1.9-0.896c-0.416-1.437-1.652-2.411-3.058-2.562c-0.001-0.004-0.002-0.008-0.003-0.012c-0.061-0.242-0.093-0.46-0.098-0.65c-0.005-0.189,0.012-0.351,0.046-0.479c0.037-0.13,0.079-0.235,0.125-0.317c0.146-0.26,0.34-0.43,0.577-0.509c0.023,0.281,0.142,0.482,0.352,0.601c0.155,0.088,0.336,0.115,0.546,0.086c0.211-0.031,0.376-0.152,0.496-0.363c0.105-0.186,0.127-0.389,0.064-0.607c-0.064-0.219-0.203-0.388-0.414-0.507c-0.154-0.087-0.314-0.131-0.482-0.129c-0.167,0.001-0.327,0.034-0.481,0.097c-0.153,0.063-0.296,0.16-0.429,0.289c-0.132,0.129-0.241,0.271-0.33,0.426c-0.132,0.234-0.216,0.496-0.25,0.783c-0.033,0.286-0.037,0.565-0.009,0.84c0.017,0.16,0.061,0.301,0.094,0.449c-0.375-0.021-0.758,0.002-1.14,0.108c-0.482,0.133-0.913,0.36-1.28,0.653c-0.052-0.172-0.098-0.344-0.18-0.518c-0.116-0.249-0.263-0.486-0.438-0.716c-0.178-0.229-0.384-0.41-0.618-0.543C9.904,3.059,9.737,2.994,9.557,2.951c-0.18-0.043-0.352-0.052-0.516-0.027s-0.318,0.08-0.463,0.164C8.432,3.172,8.318,3.293,8.23,3.445C8.111,3.656,8.08,3.873,8.136,4.092c0.058,0.221,0.181,0.384,0.367,0.49c0.21,0.119,0.415,0.138,0.611,0.056C9.31,4.556,9.451,4.439,9.539,4.283c0.119-0.21,0.118-0.443-0.007-0.695c0.244-0.055,0.497-0.008,0.757,0.141c0.081,0.045,0.171,0.115,0.27,0.208c0.097,0.092,0.193,0.222,0.286,0.388c0.094,0.166,0.179,0.368,0.251,0.608c0.013,0.044,0.023,0.098,0.035,0.146c-0.911,0.828-1.357,2.088-1.098,3.357c-0.582,0.584-1.072,1.27-1.457,2.035l-5.16-2.926c-0.48-0.271-1.092-0.102-1.364,0.377C1.781,8.404,1.95,9.016,2.43,9.289l5.441,3.082c-0.331,1.34-0.387,2.807-0.117,4.297l-5.828,1.613c-0.534,0.147-0.846,0.699-0.698,1.231c0.147,0.53,0.697,0.843,1.231,0.694l5.879-1.627c0.503,1.057,1.363,2.28,2.371,3.443l-3.194,5.639c-0.272,0.481-0.104,1.092,0.378,1.363c0.239,0.137,0.512,0.162,0.758,0.094c0.248-0.068,0.469-0.229,0.604-0.471l2.895-5.109c2.7,2.594,5.684,4.123,5.778,1.053c1.598,2.56,3.451-0.338,4.502-3.976l5.203,2.947c0.24,0.138,0.514,0.162,0.762,0.094c0.246-0.067,0.467-0.229,0.603-0.471c0.272-0.479,0.104-1.091-0.377-1.362l-5.701-3.229c0.291-1.505,0.422-2.983,0.319-4.138l5.886-1.627c0.53-0.147,0.847-0.697,0.696-1.229C29.673,11.068,29.121,10.756,28.589,10.903z",
+ "raph_link": "M15.667,4.601c-1.684,1.685-2.34,3.985-2.025,6.173l3.122-3.122c0.004-0.005,0.014-0.008,0.016-0.012c0.21-0.403,0.464-0.789,0.802-1.126c1.774-1.776,4.651-1.775,6.428,0c1.775,1.773,1.777,4.652,0.002,6.429c-0.34,0.34-0.727,0.593-1.131,0.804c-0.004,0.002-0.006,0.006-0.01,0.01l-3.123,3.123c2.188,0.316,4.492-0.34,6.176-2.023c2.832-2.832,2.83-7.423,0-10.255C23.09,1.77,18.499,1.77,15.667,4.601zM14.557,22.067c-0.209,0.405-0.462,0.791-0.801,1.131c-1.775,1.774-4.656,1.774-6.431,0c-1.775-1.774-1.775-4.653,0-6.43c0.339-0.338,0.725-0.591,1.128-0.8c0.004-0.006,0.005-0.012,0.011-0.016l3.121-3.123c-2.187-0.316-4.489,0.342-6.172,2.024c-2.831,2.831-2.83,7.423,0,10.255c2.833,2.831,7.424,2.831,10.257,0c1.684-1.684,2.342-3.986,2.023-6.175l-3.125,3.123C14.565,22.063,14.561,22.065,14.557,22.067zM9.441,18.885l2.197,2.197c0.537,0.537,1.417,0.537,1.953,0l8.302-8.302c0.539-0.536,0.539-1.417,0.002-1.952l-2.199-2.197c-0.536-0.539-1.416-0.539-1.952-0.002l-8.302,8.303C8.904,17.469,8.904,18.349,9.441,18.885z",
+ "raph_calendar": "M11.758,15.318c0.312-0.3,0.408-0.492,0.408-0.492h0.024c0,0-0.012,0.264-0.012,0.528v5.469h-1.871v1.031h4.87v-1.031H13.33v-7.436h-1.055l-2.027,1.967l0.719,0.744L11.758,15.318zM16.163,21.207c0,0.205,0.024,0.42,0.06,0.647h5.457v-1.031h-4.197c0.023-1.931,4.065-2.362,4.065-5.146c0-1.463-1.114-2.436-2.674-2.436c-1.907,0-2.675,1.607-2.675,1.607l0.875,0.587c0,0,0.6-1.08,1.716-1.08c0.887,0,1.522,0.563,1.522,1.403C20.312,17.754,16.163,18.186,16.163,21.207zM12,3.604h-2v3.335h2V3.604zM23,4.77v3.17h-4V4.77h-6v3.168H9.002V4.77H6.583v21.669h18.833V4.77H23zM24.417,25.438H7.584V10.522h16.833V25.438zM22,3.604h-2v3.335h2V3.604z",
+ "raph_picker": "M22.221,10.853c-0.111-0.414-0.261-0.412,0.221-1.539l1.66-3.519c0.021-0.051,0.2-0.412,0.192-0.946c0.015-0.529-0.313-1.289-1.119-1.642c-1.172-0.555-1.17-0.557-2.344-1.107c-0.784-0.396-1.581-0.171-1.979,0.179c-0.42,0.333-0.584,0.7-0.609,0.75L16.58,6.545c-0.564,1.084-0.655,0.97-1.048,1.147c-0.469,0.129-1.244,0.558-1.785,1.815c-1.108,2.346-1.108,2.346-1.108,2.346l-0.276,0.586l1.17,0.553l-3.599,7.623c-0.38,0.828-0.166,1.436-0.166,2.032c0.01,0.627-0.077,1.509-0.876,3.21l-0.276,0.586l3.517,1.661l0.276-0.585c0.808-1.699,1.431-2.326,1.922-2.717c0.46-0.381,1.066-0.6,1.465-1.42l3.599-7.618l1.172,0.554l0.279-0.589c0,0,0,0,1.105-2.345C22.578,12.166,22.419,11.301,22.221,10.853zM14.623,22.83c-0.156,0.353-0.413,0.439-1.091,0.955c-0.577,0.448-1.264,1.172-2.009,2.6l-1.191-0.562c0.628-1.48,0.75-2.474,0.73-3.203c-0.031-0.851-0.128-1.104,0.045-1.449l3.599-7.621l3.517,1.662L14.623,22.83z",
+ "raph_no": "M16,2.939C9.006,2.942,3.338,8.61,3.335,15.605C3.335,22.6,9.005,28.268,16,28.27c6.994-0.002,12.662-5.67,12.664-12.664C28.663,8.61,22.995,2.939,16,2.939zM25.663,15.605c-0.003,1.943-0.583,3.748-1.569,5.264L10.736,7.513c1.515-0.988,3.32-1.569,5.265-1.573C21.337,5.951,25.654,10.269,25.663,15.605zM6.335,15.605c0.004-1.943,0.584-3.75,1.573-5.266l13.355,13.357c-1.516,0.986-3.32,1.566-5.264,1.569C10.664,25.26,6.346,20.941,6.335,15.605z",
+ "raph_commandline": "M2.021,9.748L2.021,9.748V9.746V9.748zM2.022,9.746l5.771,5.773l-5.772,5.771l2.122,2.123l7.894-7.895L4.143,7.623L2.022,9.746zM12.248,23.269h14.419V20.27H12.248V23.269zM16.583,17.019h10.084V14.02H16.583V17.019zM12.248,7.769v3.001h14.419V7.769H12.248z",
+ "raph_photo": "M24.25,10.25H20.5v-1.5h-9.375v1.5h-3.75c-1.104,0-2,0.896-2,2v10.375c0,1.104,0.896,2,2,2H24.25c1.104,0,2-0.896,2-2V12.25C26.25,11.146,25.354,10.25,24.25,10.25zM15.812,23.499c-3.342,0-6.06-2.719-6.06-6.061c0-3.342,2.718-6.062,6.06-6.062s6.062,2.72,6.062,6.062C21.874,20.78,19.153,23.499,15.812,23.499zM15.812,13.375c-2.244,0-4.062,1.819-4.062,4.062c0,2.244,1.819,4.062,4.062,4.062c2.244,0,4.062-1.818,4.062-4.062C19.875,15.194,18.057,13.375,15.812,13.375z",
+ "raph_printer": "M24.569,12.125h-2.12c-0.207-1.34-1.247-2.759-2.444-3.967c-1.277-1.24-2.654-2.234-3.784-2.37c-0.062-0.008-0.124-0.014-0.198-0.015H8.594c-0.119,0-0.235,0.047-0.319,0.132c-0.083,0.083-0.132,0.2-0.132,0.32v5.9H6.069c-1.104,0-2,0.896-2,2V23h4.074v2.079c0,0.118,0.046,0.23,0.132,0.318c0.086,0.085,0.199,0.131,0.319,0.131h13.445c0.118,0,0.232-0.046,0.318-0.131s0.138-0.199,0.138-0.318V23h4.074v-8.875C26.569,13.021,25.674,12.125,24.569,12.125zM21.589,24.626H9.043V21.5h12.546V24.626zM21.589,13.921c0-0.03,0-0.063-0.003-0.096c-0.015-0.068-0.062-0.135-0.124-0.2H9.043v-6.95h6.987v0.001c0.305-0.019,0.567,0.282,0.769,0.971c0.183,0.655,0.229,1.509,0.229,2.102c0.001,0.433-0.019,0.725-0.019,0.725l-0.037,0.478l0.48,0.005c0.002,0,1.109,0.014,2.196,0.26c1.044,0.226,1.86,0.675,1.938,1.184c0.003,0.045,0.003,0.091,0.003,0.133V13.921z",
+ "export": "M24.086,20.904c-1.805,3.113-5.163,5.212-9.023,5.219c-5.766-0.01-10.427-4.672-10.438-10.435C4.636,9.922,9.297,5.261,15.063,5.25c3.859,0.007,7.216,2.105,9.022,5.218l3.962,2.284l0.143,0.082C26.879,6.784,21.504,2.25,15.063,2.248C7.64,2.25,1.625,8.265,1.624,15.688c0.002,7.42,6.017,13.435,13.439,13.437c6.442-0.002,11.819-4.538,13.127-10.589l-0.141,0.081L24.086,20.904zM28.4,15.688l-7.15-4.129v2.297H10.275v3.661H21.25v2.297L28.4,15.688z",
+ "import": "M15.067,2.25c-5.979,0-11.035,3.91-12.778,9.309h3.213c1.602-3.705,5.271-6.301,9.565-6.309c5.764,0.01,10.428,4.674,10.437,10.437c-0.009,5.764-4.673,10.428-10.437,10.438c-4.294-0.007-7.964-2.605-9.566-6.311H2.289c1.744,5.399,6.799,9.31,12.779,9.312c7.419-0.002,13.437-6.016,13.438-13.438C28.504,8.265,22.486,2.252,15.067,2.25zM10.918,19.813l7.15-4.126l-7.15-4.129v2.297H-0.057v3.661h10.975V19.813z",
+ "raph_run": "M17.41,20.395l-0.778-2.723c0.228-0.2,0.442-0.414,0.644-0.643l2.721,0.778c0.287-0.418,0.534-0.862,0.755-1.323l-2.025-1.96c0.097-0.288,0.181-0.581,0.241-0.883l2.729-0.684c0.02-0.252,0.039-0.505,0.039-0.763s-0.02-0.51-0.039-0.762l-2.729-0.684c-0.061-0.302-0.145-0.595-0.241-0.883l2.026-1.96c-0.222-0.46-0.469-0.905-0.756-1.323l-2.721,0.777c-0.201-0.228-0.416-0.442-0.644-0.643l0.778-2.722c-0.418-0.286-0.863-0.534-1.324-0.755l-1.96,2.026c-0.287-0.097-0.581-0.18-0.883-0.241l-0.683-2.73c-0.253-0.019-0.505-0.039-0.763-0.039s-0.51,0.02-0.762,0.039l-0.684,2.73c-0.302,0.061-0.595,0.144-0.883,0.241l-1.96-2.026C7.048,3.463,6.604,3.71,6.186,3.997l0.778,2.722C6.736,6.919,6.521,7.134,6.321,7.361L3.599,6.583C3.312,7.001,3.065,7.446,2.844,7.907l2.026,1.96c-0.096,0.288-0.18,0.581-0.241,0.883l-2.73,0.684c-0.019,0.252-0.039,0.505-0.039,0.762s0.02,0.51,0.039,0.763l2.73,0.684c0.061,0.302,0.145,0.595,0.241,0.883l-2.026,1.96c0.221,0.46,0.468,0.905,0.755,1.323l2.722-0.778c0.2,0.229,0.415,0.442,0.643,0.643l-0.778,2.723c0.418,0.286,0.863,0.533,1.323,0.755l1.96-2.026c0.288,0.097,0.581,0.181,0.883,0.241l0.684,2.729c0.252,0.02,0.505,0.039,0.763,0.039s0.51-0.02,0.763-0.039l0.683-2.729c0.302-0.061,0.596-0.145,0.883-0.241l1.96,2.026C16.547,20.928,16.992,20.681,17.41,20.395zM11.798,15.594c-1.877,0-3.399-1.522-3.399-3.399s1.522-3.398,3.399-3.398s3.398,1.521,3.398,3.398S13.675,15.594,11.798,15.594zM27.29,22.699c0.019-0.547-0.06-1.104-0.23-1.654l1.244-1.773c-0.188-0.35-0.4-0.682-0.641-0.984l-2.122,0.445c-0.428-0.364-0.915-0.648-1.436-0.851l-0.611-2.079c-0.386-0.068-0.777-0.105-1.173-0.106l-0.974,1.936c-0.279,0.054-0.558,0.128-0.832,0.233c-0.257,0.098-0.497,0.22-0.727,0.353L17.782,17.4c-0.297,0.262-0.568,0.545-0.813,0.852l0.907,1.968c-0.259,0.495-0.437,1.028-0.519,1.585l-1.891,1.06c0.019,0.388,0.076,0.776,0.164,1.165l2.104,0.519c0.231,0.524,0.541,0.993,0.916,1.393l-0.352,2.138c0.32,0.23,0.66,0.428,1.013,0.6l1.715-1.32c0.536,0.141,1.097,0.195,1.662,0.15l1.452,1.607c0.2-0.057,0.399-0.118,0.596-0.193c0.175-0.066,0.34-0.144,0.505-0.223l0.037-2.165c0.455-0.339,0.843-0.747,1.152-1.206l2.161-0.134c0.152-0.359,0.279-0.732,0.368-1.115L27.29,22.699zM23.127,24.706c-1.201,0.458-2.545-0.144-3.004-1.345s0.143-2.546,1.344-3.005c1.201-0.458,2.547,0.144,3.006,1.345C24.931,22.902,24.328,24.247,23.127,24.706z",
+ "raph_magnet": "M20.812,19.5h5.002v-6.867c-0.028-1.706-0.61-3.807-2.172-5.841c-1.539-2.014-4.315-3.72-7.939-3.687C12.076,3.073,9.3,4.779,7.762,6.792C6.2,8.826,5.617,10.928,5.588,12.634V19.5h5v-6.866c-0.027-0.377,0.303-1.789,1.099-2.748c0.819-0.979,1.848-1.747,4.014-1.778c2.165,0.032,3.195,0.799,4.013,1.778c0.798,0.959,1.126,2.372,1.099,2.748V19.5L20.812,19.5zM25.814,25.579c0,0,0-2.354,0-5.079h-5.002c0,2.727,0,5.08,0,5.08l5.004-0.001H25.814zM5.588,25.58h5c0,0,0-2.354,0-5.08h-5C5.588,23.227,5.588,25.58,5.588,25.58z",
+ "raph_nomagnet": "M10.59,17.857v-5.225c-0.027-0.376,0.303-1.789,1.099-2.748c0.819-0.979,1.849-1.748,4.014-1.778c1.704,0.026,2.699,0.508,3.447,1.189l3.539-3.539c-1.616-1.526-4.01-2.679-6.986-2.652C12.077,3.073,9.3,4.779,7.762,6.793C6.2,8.826,5.617,10.928,5.59,12.634V19.5h3.357L10.59,17.857zM5.59,20.5v2.357L7.947,20.5H5.59zM20.812,13.29v6.21h5.002v-6.866c-0.021-1.064-0.252-2.283-0.803-3.542L20.812,13.29zM25.339,4.522L4.652,25.209l1.415,1.416L26.753,5.937L25.339,4.522zM20.812,25.58h5.002c0,0,0-2.354,0-5.08h-5.002C20.812,23.227,20.812,25.58,20.812,25.58zM10.59,25.58c0,0,0-0.827,0-2.064L8.525,25.58H10.59z",
+ "raph_flip": "M15.5,21.082h1.001v-2.001H15.5V21.082zM15.5,25.082h1.001v-2H15.5V25.082zM15.5,29.082h1.001v-2H15.5V29.082zM15.5,32.127h1.001v-1.045H15.5V32.127zM15.5,17.083h1.001v-2H15.5V17.083zM15.5,1.083h1.001v-2H15.5V1.083zM15.5,5.083h1.001v-2H15.5V5.083zM15.5,9.083h1.001v-2H15.5V9.083zM15.5,13.083h1.001v-2H15.5V13.083zM18.832,1.203v25.962h14.093L18.832,1.203zM19.832,5.136l11.41,21.03h-11.41V5.136zM13.113,27.165V1.203L-0.979,27.165H13.113z",
+ "raph_flipv": "M21.45,16.078v-1.001h-2.001v1.001H21.45zM25.45,16.078v-1.001h-2v1.001H25.45zM29.45,16.078v-1.001h-2v1.001H29.45zM32.495,16.078v-1.001H31.45v1.001H32.495zM17.451,16.078v-1.001h-2v1.001H17.451zM1.451,16.078v-1.001h-2v1.001H1.451zM5.451,16.078v-1.001h-2v1.001H5.451zM9.452,16.078v-1.001h-2v1.001H9.452zM13.452,16.078v-1.001h-2v1.001H13.452zM1.571,12.745h25.962V-1.348L1.571,12.745zM5.504,11.745l21.03-11.41v11.41H5.504zM27.533,18.464H1.571l25.962,14.093V18.464z",
+ "raph_connect": "M25.06,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h4.69v-3.999H25.06zM20.375,15.719c0-3.435-2.784-6.219-6.219-6.219c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h6.834c0.833,2.452,3.15,4.219,5.884,4.219C17.591,21.938,20.375,19.153,20.375,15.719z",
+ "raph_disconnect": "M9.219,9.5c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h1.897c0.833,2.452,3.15,4.219,5.884,4.219c3.435,0,6.219-2.784,6.219-6.219S12.653,9.5,9.219,9.5zM27.685,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h2.065v-3.999H27.685z",
+ "raph_folder": "M29.124,12.75c-0.004-2.208-1.792-3.997-3.999-4V8.749H12.868c-0.505-1.622-2.011-2.808-3.805-2.811H6.188c-2.208,0.002-3.997,1.792-4.001,4v14.188c0.004,2.206,1.793,3.995,4.001,3.999h18.938c2.205-0.004,3.995-1.793,3.999-3.999V12.75zM6.188,7.937h2.875c1.046-0.004,1.917,0.834,1.983,1.876l0.058,0.937h14.022c1.093,0.002,1.997,0.906,1.999,2v0.495c-0.591-0.345-1.268-0.557-2-0.558H6.187c-0.732,0.001-1.41,0.214-2,0.559V9.937C4.19,8.843,5.094,7.939,6.188,7.937zM25.125,26.125H6.188c-1.093-0.002-1.997-0.908-2.001-2v-7.438h0.001c0.002-1.095,0.906-1.999,2-2.001h18.938c1.093,0.002,1.991,0.901,2,1.991v7.447C27.122,25.219,26.218,26.123,25.125,26.125z",
+ "raph_man": "M21.021,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.103,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.578,5.192-0.35,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.166,1.213-0.166,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.463,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.602,21.541,22.443,18.912,21.021,16.349zM15.808,13.757c2.362,0,4.278-1.916,4.278-4.279s-1.916-4.279-4.278-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757z",
+ "raph_woman": "M21.022,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.104,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.579,5.192-0.351,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.167,1.213-0.167,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.464,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.603,21.541,22.444,18.912,21.022,16.349zM15.808,13.757c2.363,0,4.279-1.916,4.279-4.279s-1.916-4.279-4.279-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757zM18.731,4.974c1.235,0.455,0.492-0.725,0.492-1.531s0.762-1.792-0.492-1.391c-1.316,0.422-2.383,0.654-2.383,1.461S17.415,4.489,18.731,4.974zM15.816,4.4c0.782,0,0.345-0.396,0.345-0.884c0-0.488,0.438-0.883-0.345-0.883s-0.374,0.396-0.374,0.883C15.442,4.005,15.034,4.4,15.816,4.4zM12.884,4.974c1.316-0.484,2.383-0.654,2.383-1.461S14.2,2.474,12.884,2.052c-1.254-0.402-0.492,0.584-0.492,1.391S11.648,5.428,12.884,4.974z",
+ "raph_notebook": "M24.875,1.375H8c-1.033,0-1.874,0.787-1.979,1.792h1.604c1.102,0,2,0.898,2,2c0,1.102-0.898,2-2,2H6v0.999h1.625c1.104,0,2.002,0.898,2.002,2.002c0,1.104-0.898,2.001-2.002,2.001H6v0.997h1.625c1.102,0,2,0.898,2,2c0,1.104-0.898,2.004-2,2.004H6v0.994h1.625c1.102,0,2,0.898,2,2.002s-0.898,2.002-2,2.002H6v0.997h1.624c1.104,0,2.002,0.897,2.002,2.001c0,1.104-0.898,2.002-2.002,2.002H6.004C6.027,28.252,6.91,29.125,8,29.125h16.875c1.104,0,2-0.896,2-2V3.375C26.875,2.271,25.979,1.375,24.875,1.375zM25.25,8.375c0,0.552-0.447,1-1,1H14c-0.553,0-1-0.448-1-1V4c0-0.552,0.447-1,1-1h10.25c0.553,0,1,0.448,1,1V8.375zM8.625,25.166c0-0.554-0.449-1.001-1-1.001h-3.25c-0.552,0-1,0.447-1,1.001c0,0.552,0.449,1,1,1h3.25C8.176,26.166,8.625,25.718,8.625,25.166zM4.375,6.166h3.251c0.551,0,0.999-0.448,0.999-0.999c0-0.555-0.448-1-0.999-1H4.375c-0.553,0-1,0.445-1,1C3.374,5.718,3.822,6.166,4.375,6.166zM4.375,11.167h3.25c0.553,0,1-0.448,1-1s-0.448-1-1-1h-3.25c-0.553,0-1,0.448-1,1S3.822,11.167,4.375,11.167zM4.375,16.167h3.25c0.551,0,1-0.448,1-1.001s-0.448-0.999-1-0.999h-3.25c-0.553,0-1.001,0.446-1.001,0.999S3.822,16.167,4.375,16.167zM3.375,20.165c0,0.553,0.446,1.002,1,1.002h3.25c0.551,0,1-0.449,1-1.002c0-0.552-0.448-1-1-1h-3.25C3.821,19.165,3.375,19.613,3.375,20.165z",
+ "raph_diagram": "M6.812,17.202l7.396-3.665v-2.164h-0.834c-0.414,0-0.808-0.084-1.167-0.237v1.159l-7.396,3.667v2.912h2V17.202zM26.561,18.875v-2.913l-7.396-3.666v-1.158c-0.358,0.152-0.753,0.236-1.166,0.236h-0.832l-0.001,2.164l7.396,3.666v1.672H26.561zM16.688,18.875v-7.501h-2v7.501H16.688zM27.875,19.875H23.25c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C29.875,20.771,28.979,19.875,27.875,19.875zM8.125,19.875H3.5c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C10.125,20.771,9.229,19.875,8.125,19.875zM13.375,10.375H18c1.104,0,2-0.896,2-2V3.75c0-1.104-0.896-2-2-2h-4.625c-1.104,0-2,0.896-2,2v4.625C11.375,9.479,12.271,10.375,13.375,10.375zM18,19.875h-4.625c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2H18c1.104,0,2-0.896,2-2v-4.625C20,20.771,19.104,19.875,18,19.875z",
+ "raph_barchart": "M21.25,8.375V28h6.5V8.375H21.25zM12.25,28h6.5V4.125h-6.5V28zM3.25,28h6.5V12.625h-6.5V28z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/symbol.json.svn-base b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/symbol.json.svn-base
new file mode 100644
index 000000000..b22fbe280
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/.svn/text-base/symbol.json.svn-base
@@ -0,0 +1,28 @@
+{"data": {
+ "airplane": "m150.70285,1c-3.11894,0 -5.89383,1.28033 -8.23512,3.60274c-2.33931,2.3205 -4.27426,5.64559 -5.8844,9.79826c-3.21983,8.30419 -5.20047,19.96969 -6.28387,33.94021c-1.08127,13.94364 -1.26349,30.17972 -0.81427,47.56012c-38.52657,15.80524 -116.66563,48.43882 -122.94262,55.72521c-8.35709,9.701 -5.65693,20.81889 -2.28924,28.1994l128.45827,-26.14551c2.71532,34.07207 6.57611,67.81866 9.94048,94.2617c-12.56244,3.67662 -36.01244,10.93625 -40.85281,15.43805c-6.66802,6.2016 -6.66797,26.22952 -6.66797,26.22952l52.57557,-4.27612c1.23827,8.63303 2.01266,13.67035 2.01266,13.67035l0.07683,0.45456l0.41484,0l0.96791,0l0.41483,0l0.07683,-0.45456c0,0 0.77292,-5.03741 2.01265,-13.67035l52.59094,4.27612c0,0 0.00006,-20.02792 -6.66798,-26.22952c-4.84218,-4.50354 -28.3093,-11.77963 -40.86818,-15.45499c3.35742,-26.36189 7.2114,-59.97935 9.92513,-93.94165l126.95265,25.84239c3.36765,-7.38051 6.08325,-18.4984 -2.27386,-28.1994c-6.19934,-7.19621 -82.45026,-39.10397 -121.45232,-55.11919c0.466,-17.60567 0.29471,-34.06301 -0.79893,-48.16614l0,-0.03367c-1.08395,-13.95511 -3.0667,-25.60925 -6.28384,-33.90654c-1.60968,-4.15152 -3.52888,-7.47695 -5.86903,-9.79826c-2.34131,-2.32241 -5.11617,-3.60274 -8.23509,-3.60274z",
+ "arrows_recycle": "m184.80963,97.86072l-33.85641,-5.99613l12.47342,-6.51318c6.86035,-3.58231 13.08063,-7.05022 13.8228,-7.70647c1.84358,-1.63009 -21.11545,-37.10833 -23.99486,-37.07896c-1.26575,0.01435 -10.08571,13.75221 -19.59988,30.53185c-9.58302,16.90081 -19.12026,29.77207 -21.38301,28.85762c-26.78106,-10.82179 -48.63238,-21.77106 -48.63238,-24.36867c0,-1.7743 8.40277,-17.60187 18.67293,-35.17241l18.67294,-31.94638l50.91241,0l50.91241,0l13.28955,21.01844l13.28966,21.01844l13.86403,-7.11266c9.61084,-4.93073 13.27039,-5.63875 11.92874,-2.30832c-11.81259,29.32658 -29.43884,63.52189 -32.57199,63.19018c-2.16919,-0.22948 -19.17931,-3.11553 -37.80035,-6.41334zm-157.90158,130.83841c-12.88431,-22.18782 -24.43164,-42.96199 -25.66062,-46.16496c-1.26128,-3.28671 2.41348,-15.03122 8.43637,-26.96236l10.67094,-21.13916l-10.90837,-6.44379c-14.51679,-8.57526 -9.12079,-11.21638 29.38814,-14.38432l30.43462,-2.50365l11.93788,31.54266c6.56593,17.34845 12.77805,33.78311 13.80486,36.52168c1.07085,2.85602 -4.05412,0.95576 -12.01902,-4.45653l-13.88588,-9.43578l-9.69341,18.71187c-5.33128,10.2917 -9.769,19.85884 -9.86144,21.26031c-0.09266,1.40147 16.26999,3.00525 36.36115,3.56384l36.52929,1.01558l2.3839,26.7207c1.3112,14.69647 2.11298,26.91713 1.78191,27.15706c-0.33105,0.23969 -17.62818,1.53915 -38.43802,2.88736l-37.83614,2.4512l-23.42616,-40.34174zm144.19484,39.20346c-22.11887,-33.38463 -22.50333,-30.90141 10.37228,-66.98763l21.10391,-23.16492l-2.24142,16.92821l-2.24152,16.92822l23.64932,0c13.0071,0 23.64944,-1.04019 23.64944,-2.31137c0,-1.27139 -7.21684,-15.55066 -16.03735,-31.73212c-8.82051,-16.18146 -16.00386,-30.77765 -15.96307,-32.436c0.09158,-3.71849 46.32753,-34.42394 48.52559,-32.22591c0.87094,0.87095 9.45139,16.38289 19.06769,34.47134l17.48441,32.8876l-23.52576,37.94727c-12.93936,20.87074 -25.37122,39.98283 -27.62622,42.47105c-2.25526,2.48822 -14.86537,5.52936 -28.02258,6.75787c-25.11388,2.34528 -24.43022,1.7804 -28.11249,23.22583c-0.64439,3.75308 -8.1586,-4.76279 -20.08223,-22.75946z",
+ "beverage": "m55.65598,297.84982c-28.13961,-15.0867 0.71402,-44.87836 24.17752,-35.2438c17.46051,-0.03983 34.92112,-0.01355 52.38168,-0.02121c0,-34.34088 0,-68.68181 0,-103.02271c-43.73869,-52.76227 -87.47738,-105.52454 -131.21606,-158.28681c98.99732,-0.36748 197.99556,-0.36708 296.99286,0c-42.95236,53.02298 -85.90472,106.04595 -128.85707,159.06893c0,34.08022 0,68.1604 0,102.24059c25.78079,0.22986 51.60571,-0.625 77.34869,0.87012c20.26866,5.44482 12.15504,38.73355 -7.54306,35.2244c-61.09291,-0.21259 -122.20532,0.38715 -183.28456,-0.8295zm127.03334,-186.51904c19.68919,-7.503 16.9212,-39.96898 -4.19951,-43.27924c-31.86026,-8.77637 -38.74004,46.49459 -5.25272,45.19753c3.23363,0.02124 6.51921,-0.43665 9.45222,-1.91829z",
+ "bicycle": "m69.04492,242.61508c10.78542,-0.13551 -10.27161,-0.62888 -14.0067,-0.90082c-31.20993,-0.75682 -57.11145,-31.7867 -53.74048,-62.58058c0.6826,-30.81444 30.36186,-57.88344 61.25282,-54.78261c8.04092,-3.41573 19.45538,7.85678 24.44781,2.47261c12.82323,-22.6207 25.24759,-45.47771 38.58752,-67.7975c11.3629,-1.62186 24.90015,-2.8755 35.9539,0.19863c5.11031,8.04987 -4.18097,10.24141 -9.97878,8.99869c-6.4711,0 -12.9422,0 -19.41331,0c-4.68463,8.54676 -9.49177,17.02541 -14.27853,25.51514c27.18877,0 54.37757,0 81.56634,0c0.60545,-2.89218 7.47321,-9.12369 1.38461,-8.44633c-11.06171,-1.39418 -4.14218,-14.17861 4.04941,-10.54169c11.49847,0.42252 23.4034,-1.13349 34.55679,1.17167c5.95799,11.9574 -11.26917,9.39215 -18.65384,9.51889c-5.46606,-1.78406 -6.59882,3.68022 -8.76302,7.4192c-8.77467,8.98817 -3.32066,18.46121 2.57677,27.22322c2.16318,3.98602 3.70422,9.51816 8.96812,5.7937c10.73436,-2.35877 22.43681,-2.44432 33.11809,0.31375c22.31958,6.63104 40.2153,27.32498 41.71356,50.76672c1.35196,14.39882 -1.7262,29.2406 -10.68872,40.85638c-10.3952,14.88928 -27.26529,23.04211 -45.01289,24.69595m-13.91446,0.14534c-16.17995,-4.15208 -31.09747,-13.81174 -39.74602,-28.39511c-5.65977,-7.28935 -6.39555,-18.57542 -9.40382,-25.8875c-7.93416,-0.10381 -15.86833,-0.20763 -23.80251,-0.31143c-16.06972,-25.85139 -30.2338,-52.8877 -45.73496,-79.09947c-3.0216,8.9735 -20.19933,21.18202 -10.71458,29.44228c23.80356,19.97299 26.97348,58.9857 6.61392,82.50262c-9.33031,10.45926 -22.27345,17.66695 -35.57853,21.74126m1.02195,-14.22214c25.6753,-5.59119 42.08234,-35.19554 33.20155,-59.88542c-2.74454,-8.04132 -10.29613,-20.88658 -16.96593,-21.01822c-7.10979,12.27542 -13.50588,24.99036 -21.29804,36.85445c-17.11086,3.00977 -1.43426,-17.82442 2.18629,-24.90399c3.88173,-8.63774 17.97784,-22.6107 0.22043,-22.40381c-12.4663,-1.24055 -25.71457,-0.04088 -35.79932,8.23351c-21.64245,14.32193 -25.73868,47.07928 -9.34899,66.82591c11.09536,14.38573 30.25585,20.50179 47.804,16.29758zm179.64028,-0.00356c21.91476,-5.14897 37.68491,-27.67265 34.8483,-50.02701c-1.50024,-24.84305 -26.27582,-44.93475 -50.90707,-41.59564c-18.45729,-1.74684 -0.78658,15.19781 1.85167,23.43547c2.5099,8.7469 16.33638,19.49011 8.6171,28.02017c-17.31352,0.72531 -35.05154,-0.50934 -52.31752,1.23642c3.1011,22.89496 24.76817,41.83401 48.14848,40.08203c3.28111,-0.02676 6.57803,-0.30434 9.75905,-1.15144zm-70.7294,-51.16617c2.08536,-17.91364 12.23944,-34.20847 27.04826,-44.4043c0.87492,-4.39421 -8.09195,-24.63332 -11.37527,-10.5231c-10.13445,18.42084 -20.32248,36.81699 -30.14639,55.40483c4.70622,0.11383 9.98186,0.93559 14.4734,-0.47743zm52.9005,-0.88846c-5.84201,-10.98254 -11.81374,-21.89917 -17.91992,-32.73703c-12.24919,6.45949 -20.3076,20.12949 -22.21249,33.77383c13.37456,-0.2851 26.97348,0.69884 40.16722,-0.71251l-0.03476,-0.3243l0,0zm-57.29515,-39.61388c5.7617,-10.63408 11.63275,-21.21213 17.21649,-31.94065c-24.2798,-0.5443 -48.61469,-0.66353 -72.88629,0.11504c12.46696,21.42642 23.73018,43.6828 37.36159,64.35614c6.59126,-10.13849 12.18927,-21.81091 18.30821,-32.53052z",
+ "bulb": "m145.62592,297.06863c-17.67376,-4.68848 -27.91267,-23.96384 -26.70493,-41.44981c-0.45245,-22.83995 1.65483,-46.8734 -9.26703,-67.87447c-6.22532,-15.68024 -16.83022,-29.52451 -21.2558,-45.86502c-5.50718,-25.3512 1.29536,-54.08422 21.79177,-71.10346c23.11512,-19.80671 60.02821,-22.38829 85.47337,-5.55379c17.94666,12.36192 30.89558,32.75098 30.41452,55.00024c2.10583,16.62513 -4.45561,32.2625 -12.17442,46.55451c-5.53021,11.50751 -11.98869,22.76817 -17.00821,34.40399c-1.32327,23.85774 -0.56435,47.93431 -4.15358,71.58684c-5.97899,18.328 -28.51152,30.78922 -47.11569,24.30096zm46.67903,-42.65804c-10.48888,-5.65382 -25.56134,-1.97798 -37.75313,-3.19516c-9.95908,1.99197 -27.6553,-4.08569 -32.94975,5.03105c12.10807,4.73648 26.33759,1.18594 39.22778,1.96957c10.31409,-0.9906 22.18068,0.93939 31.4751,-3.80547zm-0.78554,-10.63885c1.54361,-14.36404 -21.1709,-7.03433 -30.39838,-9.17262c-12.21318,2.47205 -31.64935,-5.2915 -39.33047,5.74487c4.5516,11.09071 24.85052,3.29074 35.50985,5.75148c11.3671,-0.4028 23.15991,0.40741 34.21899,-2.32373zm0.14142,-25.16705c2.9986,-27.98152 20.10725,-51.27968 30.01392,-76.87566c8.14517,-30.64574 -7.9861,-65.65708 -37.19159,-78.52086c-29.06958,-14.40719 -67.79967,-3.52343 -84.22785,24.70715c-15.82867,23.31919 -12.80788,55.00346 2.66266,77.68118c11.03862,19.81914 19.84574,42.09169 18.41109,65.15663c22.91359,0 45.82719,0 68.7408,0c0.53035,-4.04942 1.06052,-8.09911 1.59097,-12.14844zm-50.72687,-39.64223c-9.07846,-15.78525 -18.39817,-31.69214 -24.71996,-48.79948c5.68369,-7.35728 7.33711,-15.55251 9.10273,-24.19695c15.95243,-3.13345 -2.03056,18.17914 13.0308,18.65942c13.36925,5.81685 7.50436,-28.2252 18.61179,-15.95465c-7.9733,13.46684 15.66168,26.8638 16.5291,7.59886c-1.14578,-14.54594 14.28561,-11.82063 8.26923,1.37553c0.49657,6.78834 11.54893,8.73447 11.73816,14.19425c-7.9566,17.25854 -14.87259,35.07664 -24.29411,51.59875c-2.12068,-6.39691 8.34081,-22.42969 11.68367,-31.84341c6.45049,-8.13736 11.99347,-30.06687 -4.82256,-27.07765c-9.75478,15.21495 -22.87704,-9.5907 -32.42833,4.99055c-8.10805,2.41856 -20.86024,-14.04196 -23.2123,1.78514c6.10664,18.79854 18.8132,34.81967 25.46149,53.42416c-2.25594,-1.33008 -3.54053,-3.66359 -4.94971,-5.75453zm-12.74261,-68.89435c-4.41462,-2.15457 1.86072,11.45412 -0.00009,0l0.00009,0zm26.38611,1.60738c-5.73064,-9.69846 -2.6572,11.76727 0,0zm25.57564,0c-5.73064,-9.69846 -2.65724,11.76727 0,0zm-119.06653,-71.66327c-10.12879,-10.27977 -21.32492,-19.92564 -30.13364,-31.25677c22.0061,18.21614 42.14793,38.73141 61.97966,59.29806c5.2662,7.2365 -9.18723,-6.75771 -11.87724,-9.10345c-6.7307,-6.23349 -13.37324,-12.56173 -19.96879,-18.93784zm156.40887,29.39093c17.12013,-21.33164 33.0936,-43.69485 51.55162,-63.89019c-3.09076,8.6951 -13.04016,19.09942 -19.29597,28.05458c-10.44716,12.99739 -20.21251,26.73974 -32.1591,38.39317c-1.49106,1.57605 -3.71758,-2.15694 -0.09639,-2.55756l-0.00015,0zm-37.0826,-20.23703c5.91515,-16.91904 14.49518,-33.02397 24.06741,-48.16613c-0.22247,8.40011 -10.37453,24.32112 -15.25424,34.73693c-2.76042,4.19142 -5.08876,10.87586 -8.81317,13.4292zm-75.7492,-21.69804c-4.12045,-6.01025 -16.5241,-20.00493 -14.20815,-21.91343c11.95872,13.25933 24.12167,26.94502 32.71223,42.62532c-7.31573,-5.61084 -12.5797,-13.71475 -18.50409,-20.71189zm47.35616,-4.73013c-0.83392,-5.64444 1.75482,-32.58975 3.19298,-14.29333c0.00511,11.46356 1.20168,24.36872 -1.98915,34.80271c-1.36639,-6.70823 -1.03488,-13.69191 -1.20383,-20.50938z",
+ "careful": "m1,1c2.24496,29.70385 10.76853,56.9168 23.28125,80.81181l23.28125,-36.31875l-6.72569,-2.48334l-9.3125,-3.31111l4.86319,-8.48472l17.07292,-30.21389l-52.46042,0zm71.49931,0l-16.86597,29.8l7.24306,2.58681l9.82986,3.51805l-5.5875,8.69167l-33.525,52.46041c24.12122,36.61169 59.3948,61.88649 99.85071,67.36043l0,107.09373l-66.22223,0l0,26.48889l165.55556,0l0,-26.48889l-66.22223,0l0,-107.09373c70.57336,-9.43671 125.94405,-78.40826 132.44444,-164.41737l-226.50069,0z",
+ "cart_2": "m0.99397,46.01759l0,36.55115l57.8652,0l28.28396,104.41602l159.23965,0l52.21094,-125.30758l-237.55595,0l0,-15.65959zm53.21769,184.47131c0,12.97459 -10.51804,23.49266 -23.49261,23.49266c-12.97436,0 -23.49244,-10.51807 -23.49244,-23.49266c0,-12.97456 10.51808,-23.49228 23.49244,-23.49228c12.97457,0 23.49261,10.51772 23.49261,23.49228zm148.8,0c0,12.97459 -10.51817,23.49266 -23.4928,23.49266c-12.97446,0 -23.49258,-10.51807 -23.49258,-23.49266c0,-12.97456 10.51813,-23.49228 23.49258,-23.49228c12.97462,0 23.4928,10.51772 23.4928,23.49228z",
+ "coat_hanger": "m24.72351,255.83636c-16.41191,-2.33228 -27.73119,-20.33411 -22.38228,-36.1741c3.30628,-15.35616 20.22842,-19.55692 31.44893,-27.66121c35.64961,-21.14748 71.50229,-41.94997 107.26245,-62.9095c1.87845,-10.22399 -5.70195,-16.59309 -13.7997,-21.39916c-16.20296,-12.86633 -15.31998,-38.50921 -1.59858,-52.83282c16.08138,-18.88601 49.91904,-12.94907 59.95362,9.38958c9.73412,9.92804 -0.18503,34.24562 -13.8385,22.54042c-1.42418,-13.2976 -12.78993,-28.89017 -27.7881,-20.44456c-15.64833,8.98737 -6.40202,29.9363 8.0513,34.15588c9.75604,6.53233 8.45554,18.64742 8.97318,28.8608c42.85536,25.5808 86.25137,50.28574 128.51941,76.82744c16.8277,13.06401 9.90717,44.50819 -11.28448,48.76941c-16.06598,2.31227 -32.54915,0.68361 -48.77617,1.31593c-68.2437,0.05267 -136.50528,0.51715 -204.74109,-0.43811zm248.30083,-21.61086c12.28671,-12.24121 -10.69217,-18.82494 -18.26138,-24.82121c-34.85875,-20.46407 -69.60597,-41.14412 -104.87569,-60.89026c-41.32713,23.46544 -82.56062,47.16515 -123.11867,71.93832c-8.58788,3.43668 -2.61073,17.17589 5.37386,15.06004c78.53457,-0.16875 157.07672,0.41405 235.60527,-0.42499c1.73874,-0.22235 3.69772,0.07922 5.27661,-0.86191z",
+ "document": "m58.5474,213.36578c-0.05885,-70.73299 -0.11767,-141.466 -0.17652,-212.19898c53.12881,0.81297 106.48294,-1.9259 159.43185,2.08758c25.82027,9.16723 22.09921,66.23434 21.6799,108.85904c-1.13266,32.14426 15.08594,95.86641 -27.03937,105.4444c-21.00172,0.00113 -21.08437,8.97424 -18.9407,25.20605c2.4877,24.31731 -4.73431,78.79115 -39.2352,44.26363l-95.71997,-73.66171zm162.59977,-23.1226c0.08537,-63.57991 -0.62674,-117.82272 -4.15146,-159.71279c-31.317,-14.24883 -73.63496,-7.31453 -109.06839,-7.53106c-13.9288,6.77649 33.0414,29.27771 43.00333,38.00857c37.81908,18.77271 49.10266,52.9127 42.57201,91.49594c0,15.00871 0,30.01746 0,45.02617c6.97418,-0.00844 21.40269,-3.46487 27.64452,-7.28687z",
+ "gift": "m160.05605,46.22016c5.12212,-9.27578 14.49356,-21.35899 -1.60765,-24.27403c-4.48517,-2.30248 -8.9718,-6.3767 -13.45119,-1.83809c-9.96648,3.93713 -18.60622,9.44305 -8.12337,19.74747c4.64861,6.65461 8.87668,21.1743 14.1424,22.77341c3.14276,-5.39672 6.08684,-10.9068 9.03981,-16.40877zm-22.01753,25.61161c-9.14935,-16.32981 -16.51206,-33.84869 -27.71044,-48.91321c-13.62003,-14.54198 -40.45641,-8.05964 -46.55505,10.6975c-8.10131,18.54466 9.37865,40.68638 29.16686,38.36525c15.01618,0.2515 30.1178,0.92769 45.09863,-0.14954zm76.02873,0.55127c19.45964,-2.60851 30.65027,-27.10658 19.57069,-43.3727c-9.81836,-17.35883 -38.06532,-17.96398 -47.9265,-0.32358c-8.53876,14.26143 -15.94994,29.16402 -23.78549,43.81643c17.32285,0.99046 34.80862,0.75943 52.1413,-0.12016zm32.22711,20.88692c6.6339,-5.83724 32.32317,-12.71885 12.86739,-18.26252c-4.81963,-1.36767 -10.43866,-7.64191 -14.77026,-5.92492c-9.40594,11.6946 -23.86844,18.55521 -38.9686,17.83661c-2.95601,0.97167 -18.03316,-1.47781 -13.95946,1.30438c10.65262,6.07415 21.03697,12.6707 32.05554,18.0621c7.71764,-4.11029 15.20781,-8.63805 22.77539,-13.01566zm-151.5623,3.30481c5.67309,-3.30481 11.34617,-6.60963 17.01924,-9.91444c-17.34076,-0.86164 -37.18572,1.63783 -50.29088,-12.30952c-3.69488,-4.13725 -7.23799,-8.87396 -12.35892,-3.66532c-6.13381,4.22582 -25.00066,8.5563 -10.4742,13.71487c12.64928,7.47227 25.20959,15.12685 38.17151,22.0463c6.1765,-2.89648 11.99872,-6.5165 17.93326,-9.87188zm83.14041,36.87479c7.35168,-5.90694 25.15858,-11.53461 25.75348,-17.87329c-16.62141,-9.56481 -32.75868,-20.2142 -50.14796,-28.29874c-5.98431,-2.2704 -10.83618,1.22306 -15.65312,4.25735c-14.24385,8.47255 -28.83041,16.41927 -42.61077,25.63122c18.02219,11.14435 36.26101,21.95917 54.67725,32.43958c9.39328,-5.26857 18.66512,-10.75249 27.98112,-16.15611zm73.75499,18.43738c7.62694,-4.81227 15.25389,-9.62453 22.88087,-14.43683c-0.06244,-16.11785 0.19498,-32.24243 -0.24597,-48.35465c-15.39334,8.58929 -30.56776,17.60745 -45.48607,26.99785c-1.63162,16.62392 -0.80414,33.52276 -0.44952,50.23046c7.87193,-4.6378 15.55261,-9.59819 23.30069,-14.43683zm-178.87355,-10.1545c0.77462,-13.73913 2.44441,-29.40098 -14.12444,-33.4709c-10.46331,-4.88007 -24.96637,-17.38377 -33.02728,-17.25835c-0.25115,15.4809 -0.11823,30.96465 -0.14541,46.44691c15.45605,9.64543 30.63783,19.75522 46.42746,28.8476c1.53102,-7.98021 0.53017,-16.43968 0.86967,-24.56526zm110.68056,53.19621c9.14198,-5.77156 18.28395,-11.54312 27.42593,-17.31468c-0.04233,-16.63979 0.64572,-33.30351 -0.10625,-49.92543c-10.04709,2.88116 -21.5385,11.78691 -32.12366,17.31859c-7.92599,4.64276 -15.85202,9.28555 -23.77802,13.92833c0.1563,17.76723 -0.42728,35.56691 0.57802,53.30783c9.47523,-5.53633 18.69861,-11.49898 28.00397,-17.31464zm-38.32249,-9.33929c0,-8.88464 0,-17.76929 0,-26.6539c-18.35233,-10.72505 -36.64592,-21.55176 -55.0698,-32.1535c-1.01884,16.98993 -0.43661,34.04375 -0.59025,51.06303c18.34824,11.48767 36.50635,23.28906 55.08669,34.3983c0.72301,-8.85316 0.45901,-17.77696 0.57336,-26.65393zm106.97165,35.71599c7.47931,-4.98045 14.95862,-9.96091 22.43796,-14.94136c-0.31207,-15.79037 0.77045,-31.79442 -0.80399,-47.41055c-15.55414,8.87424 -30.56544,18.97736 -45.84236,28.4509c0.367,16.33781 -0.75356,32.86267 0.93411,49.06088c7.89078,-4.84329 15.54118,-10.07089 23.27428,-15.15987zm-179.49486,-8.85234c-0.06088,-8.2791 -0.12183,-16.55821 -0.18272,-24.8373c-15.452,-9.6673 -30.70933,-19.65799 -46.39347,-28.94519c-0.98154,15.8615 -0.42208,31.78482 -0.5697,47.67464c15.58812,10.31845 31.00088,20.91034 46.79801,30.90671c0.60526,-8.24165 0.30488,-16.53903 0.34788,-24.79886zm111.24078,54.40674c9.07924,-6.02985 18.15848,-12.05969 27.23772,-18.08952c-0.02109,-16.81348 0.32051,-33.6342 -0.13127,-50.44193c-18.48172,11.39566 -36.8398,23.00107 -55.0625,34.8063c-2.05943,16.23506 -0.72412,32.97392 -0.72713,49.38643c5.65578,3.44495 20.11658,-11.82266 28.68318,-15.66129zm-38.71758,-7.19754c-1.09789,-11.59346 4.72185,-27.9119 -10.01297,-32.40633c-14.85952,-9.4117 -29.65931,-18.92612 -44.71436,-28.02278c-2.19433,15.91664 0.10065,32.49809 -1.58499,48.60945c18.05386,13.0511 36.5795,25.52769 55.44263,37.37666c1.51289,-8.30347 0.57193,-17.09903 0.86969,-25.55701zm-63.13967,-3.06479c-21.97403,-14.66875 -43.94805,-29.33749 -65.92206,-44.00621c0.02491,-45.26978 -0.60055,-90.55044 0.20291,-135.81172c11.00354,-6.78941 22.71307,-12.35508 34.0373,-18.58421c-7.3143,-20.93821 3.23879,-46.38257 24.44761,-54.21996c17.77897,-7.29492 39.21008,-0.71179 50.54502,14.64528c8.23304,-4.22243 16.4661,-8.44486 24.69915,-12.66729c8.27725,4.26063 16.55455,8.52126 24.83179,12.78188c11.86055,-14.06895 32.18082,-22.09776 49.79013,-14.21312c21.13718,7.42951 32.65843,32.817 25.07826,53.72234c11.40756,6.44052 23.81024,11.47337 34.26968,19.33245c0.46368,45.00166 0.00415,90.00995 -0.0379,135.01437c-43.72298,28.93527 -86.73743,58.97507 -131.17026,86.81018c-12.92032,-0.00348 -24.07242,-14.03217 -36.06157,-19.72c-11.59096,-7.66315 -23.15266,-15.37048 -34.71011,-23.08398z",
+ "globe": "m33.11721,223.16701l233.44794,0.08913l-7.57544,11.19618l-218.20762,-0.26738l-7.66489,-11.01793zm1.60428,-148.93458l230.3285,-0.26738l6.68439,11.48557l-243.78651,0.08913l6.77362,-11.30732zm-22.73061,74.62911l275.61135,-0.26738l-0.35626,11.48558l-275.07684,-0.17825l-0.17825,-11.03995zm275.8395,1.06528c0,76.03723 -61.86858,137.89429 -137.92784,137.89429c-76.0264,0 -137.88345,-61.86824 -137.88345,-137.89429c0,-76.02642 61.86823,-137.88347 137.88345,-137.88347c76.05927,-0.01117 137.92784,61.85705 137.92784,137.88347zm-137.91701,-148.93459c-82.09525,0 -148.90104,66.8058 -148.90104,148.92339c0,82.12878 66.8058,148.93457 148.90104,148.93457c82.13995,0 148.93459,-66.80579 148.93459,-148.93457c0,-82.11759 -66.79463,-148.92339 -148.93459,-148.92339zm41.78581,148.93459c0,81.25211 -22.01353,137.89429 -41.78581,137.89429c-19.74991,0 -41.76309,-56.64218 -41.76309,-137.89429c0,-81.27448 22.00233,-137.88347 41.76309,-137.88347c19.76112,-0.01117 41.78581,56.60899 41.78581,137.88347zm-41.78581,-148.93459c-34.29579,0 -52.80304,76.73613 -52.80304,148.92339c0,72.2093 18.50725,148.93457 52.80304,148.93457c34.29614,0 52.83693,-76.73643 52.83693,-148.93457c-0.01118,-72.18726 -18.54079,-148.92339 -52.83693,-148.92339zm97.86217,148.93459c0,76.03723 -43.91597,137.89429 -97.86217,137.89429c-53.93499,0 -97.82862,-61.86824 -97.82862,-137.89429c0,-76.02642 43.89363,-137.88347 97.82862,-137.88347c53.9462,-0.01117 97.86217,61.85705 97.86217,137.88347zm-97.86217,-148.93459c-60.01537,0 -108.86856,66.8058 -108.86856,148.92339c0,82.12878 48.85319,148.93457 108.86856,148.93457c60.03773,0 108.88008,-66.80579 108.88008,-148.93457c0,-82.11759 -48.84235,-148.92339 -108.88008,-148.92339z",
+ "handle_care": "m163.84105,276.49316c0,-16.9874 0,-26.73244 0,-43.71985c0,-23.90417 32.58113,-58.75496 53.7084,-83.18626c5.78004,-5.69962 16.17278,-7.90976 21.66074,-2.49817c4.87456,4.80672 4.50662,16.61058 0.6333,22.48335c-7.09361,10.6588 -14.18712,21.31755 -21.28073,31.97632c-3.55533,6.07231 5.16899,10.98973 10.38702,4.49673c27.24385,-36.8876 34.70512,-44.36621 34.70512,-59.20624c0,-30.31093 0,-29.89459 0,-60.20548c0,-8.67812 6.34686,-16.98743 14.45584,-16.98743c7.71677,0 14.4277,7.99146 14.4277,15.52406c0,48.96381 0,67.40421 0,116.36799c0,15.08096 -47.62817,60.69775 -47.62817,81.9498c0,4.99628 0,9.99255 0,14.98889c-27.02963,0 -54.05942,0 -81.08914,0c0.00577,-7.32791 0.01431,-14.65582 0.02008,-21.9837zm-28.64365,0c0,-16.98746 0,-26.73244 0,-43.71985c0,-23.90422 -32.58104,-58.75496 -53.70833,-83.18626c-5.78003,-5.69962 -16.17277,-7.90976 -21.66072,-2.49817c-4.87465,4.80672 -4.50671,16.61058 -0.6334,22.48335c7.09362,10.6588 14.18714,21.31755 21.28075,31.97632c3.55531,6.07231 -5.16901,10.98973 -10.38705,4.49673c-27.24375,-36.8876 -34.70512,-44.36621 -34.70512,-59.20624c0,-30.31093 0,-29.89459 0,-60.20548c0,-8.67812 -6.34683,-16.98743 -14.45581,-16.98743c-7.71679,0 -14.42771,7.99146 -14.42771,15.52406c0,48.96381 0,67.40417 0,116.36799c0,15.08092 47.62818,60.69775 47.62818,81.9498c0,4.99628 0,9.99255 0,14.98889c27.02971,0 54.05941,0 81.08913,0c-0.00577,-7.32791 -0.01433,-14.65582 -0.02,-21.9837zm-42.88594,-214.71311l48.62654,36.4699l0,57.20769l-48.62654,-36.46989l0,-57.20769zm114.41537,0l-48.62654,36.4699l0,57.20769l48.62654,-36.46989l0,-57.20769zm-114.41537,-17.87738l57.20769,-42.90577l57.20769,42.90575l-57.20769,42.90577l-57.20769,-42.90574z",
+ "headphones": "m262.24301,276.32291c0,3.88873 -3.15054,7.03928 -7.03929,7.03928h-45.07771c-3.88873,0 -7.03928,-3.15054 -7.03928,-7.03928v-95.76917c0,-3.88843 3.15054,-7.03928 7.03928,-7.03928h45.07771c3.88875,0 7.03929,3.15085 7.03929,7.03928v95.76917zm-166.89014,0c0,3.88873 -3.15116,7.03928 -7.03929,7.03928h-45.07832c-3.88813,0 -7.03928,-3.15054 -7.03928,-7.03928v-95.76917c0,-3.88843 3.15115,-7.03928 7.03928,-7.03928h45.07832c3.88813,0 7.03929,3.15085 7.03929,7.03928v95.76917zm54.45998,-259.68797c-81.57039,0 -147.78664,65.61743 -148.80356,146.9389h25.82451c0.83739,-67.21309 55.56696,-121.44394 122.97905,-121.44394c67.41208,0 122.14168,54.23085 122.96928,121.44394h25.82391c-1.00656,-81.32147 -67.24229,-146.9389 -148.7932,-146.9389zm-148.59421,221.43015h25.35591v-74.64095h-25.35591v74.64095zm271.35417,-74.651v74.64127h26.29248v-74.64127h-26.29248z",
+ "hippie": "m126.57668,297.48117c-48.56062,-7.34268 -92.01251,-39.97321 -112.69057,-84.50511c-24.94552,-52.66977 -15.84542,-119.75688 23.8283,-162.85019c38.79855,-45.4432 106.09586,-61.79809 161.96931,-41.65034c58.35461,19.93039 100.52045,79.22475 99.29117,141.02438c1.2113,60.65196 -39.29578,118.84778 -96.0322,139.80408c-24.24886,9.49326 -50.68127,11.39462 -76.36598,8.17719zm8.7399,-92.17508c-0.08942,-7.31126 -0.17882,-14.62254 -0.26825,-21.93381c-20.52584,20.53458 -41.05166,41.06917 -61.57751,61.60378c17.64819,14.10371 39.22342,22.83827 61.57751,25.75548c0.29533,-21.80725 0.53749,-43.61626 0.26825,-65.42545zm48.5128,61.24323c14.52351,-4.28751 28.46933,-11.11562 40.24649,-20.66127c-9.32077,-13.4882 -22.68102,-24.26074 -33.95442,-36.33005c-8.88936,-8.88591 -17.77875,-17.77179 -26.66811,-26.6577c0,29.29706 0,58.59412 0,87.89117c6.88846,-0.91629 13.69307,-2.3291 20.37604,-4.24216zm-48.28273,-180.43147c0,-19.30317 0,-38.60634 0,-57.90951c-51.85052,5.59066 -97.82003,47.52976 -105.87597,99.4242c-5.92087,34.10992 2.2166,70.93011 24.35439,97.89821c27.17386,-27.16779 54.34772,-54.33559 81.52158,-81.50337c0,-19.30317 0,-38.60635 0,-57.90952zm116.00552,130.27736c29.94273,-44.68748 25.57903,-109.31516 -11.64191,-148.59046c-19.65836,-21.7875 -47.20416,-36.42821 -76.45694,-39.59642c0,38.6003 0,77.20061 0,115.80091c26.61343,26.23764 52.37032,53.38443 79.88922,78.67319c3.85712,4.56624 5.79269,-4.75352 8.20963,-6.28722z",
+ "house": "m21.15257,177.09065c0,-27.41002 0,-54.82008 0,-82.2301c-6.68203,1.86892 -13.14774,5.87402 -20.15257,5.63974c7.71781,-7.14793 21.82513,-9.41176 32.30949,-14.09891c45.79581,-16.133 91.60535,-32.4141 138.27387,-45.86145c13.50775,-0.66366 26.30505,7.15431 39.33269,10.42321c29.47861,10.57565 59.53784,19.97857 88.07501,32.90813c-6.51614,8.73929 -28.58875,5.06429 -25.73117,21.53019c-2.00067,45.62614 -0.83817,91.32375 -1.14786,136.98345c-18.99269,5.63184 -37.89932,11.84375 -56.94553,17.1149c-64.67134,-0.05981 -129.3426,-0.11945 -194.01394,-0.17902c0,-27.40996 0,-54.82036 0,-82.23004l0,-0.00011zm26.14161,31.25392c0,-16.12061 0,-32.24124 0,-48.36197c16.55636,0 33.11272,0 49.66908,0c0,32.24136 0,64.4827 0,96.724c38.34103,0 76.68204,0 115.02308,0c0,-54.026 0,-108.05197 0,-162.07799c-62.73987,0 -125.47972,0 -188.2196,0c0,54.02602 0,108.05199 0,162.07799c7.84248,0 15.68497,0 23.52745,0c0,-16.12067 0,-32.2413 0,-48.36203zm99.33812,-27.44867c0,-6.97108 0,-13.94214 0,-20.9133c13.07082,0 26.14162,0 39.21243,0c0,13.94221 0,27.88445 0,41.82658c-13.07082,0 -26.14162,0 -39.21243,0c0,-6.97108 0,-13.94214 0,-20.91328zm33.9841,1.30707c0,-5.66399 0,-11.32797 0,-16.99203c-9.58527,0 -19.17052,0 -28.75577,0c0,11.32805 0,22.65611 0,33.98409c9.58525,0 19.1705,0 28.75577,0c0,-5.66399 0,-11.32797 0,-16.99205zm-86.2673,28.75577c0,-15.24922 0,-30.4985 0,-45.7478c-14.8136,0 -29.62717,0 -44.44075,0c0.28782,29.49963 -0.86703,59.06848 1.39272,88.50464c7.32339,4.61035 18.6494,2.34561 27.75799,2.99103c5.09669,0 10.19335,0 15.29005,0c0,-15.24927 0,-30.49857 0,-45.74786zm150.9678,34.15282c7.18895,-2.37781 14.3779,-4.75565 21.56683,-7.13347c-0.32449,-45.85204 0.98636,-91.75861 -1.60782,-137.55795c-6.33264,-8.04385 -23.37172,10.13716 -33.97191,1.44468c-8.98801,-5.39767 -16.23575,-5.6667 -13.48424,6.8141c-0.6041,45.64783 -1.40456,91.35368 0.49997,136.97478c-2.32346,17.3029 19.61401,-1.57974 26.99716,-0.54214zm17.56241,-152.88132c5.81549,-2.74289 29.11139,-6.01917 13.28293,-11.03122c-31.02148,-13.18587 -62.53795,-25.50377 -94.87346,-35.06522c-13.26736,-1.87402 -25.71394,5.23786 -38.28336,8.42139c-7.2287,0.92986 -14.03493,6.61982 -2.78639,8.23806c33.43919,12.5762 66.81393,25.55496 101.06847,35.75281c7.2216,-1.29286 14.41238,-4.37938 21.59181,-6.31581zm-104.48328,-16.97943c-12.19943,-4.63456 -24.39883,-9.26913 -36.59824,-13.9037c-25.6514,8.95505 -51.55341,17.25012 -76.89988,27.03273c49.99152,1.67495 100.06706,0.58957 150.09639,0.77469c-12.19943,-4.6346 -24.39885,-9.26915 -36.59827,-13.90372z",
+ "keep_up": "m79,1l-21.3,35.5l-21.3,35.5l19.88,0l0,184.60001l45.44,0l0,-184.60001l19.88,0l-21.3,-35.5l-21.3,-35.5zm142.00002,0l-21.30002,35.5l-21.29999,35.5l19.88,0l0,184.60001l45.43999,0l0,-184.60001l19.88,0l-21.3,-35.5l-21.29999,-35.5zm-213.00002,269.80002l0,28.39999l284,0l0,-28.39999l-284,0z",
+ "new_born": "m137.15491,103.06109c-14.77614,-3.80736 -27.4188,-14.09921 -33.90258,-27.59863c-3.9915,-8.31045 -4.89106,-12.46352 -4.90182,-22.63058c-0.01103,-10.43683 0.90331,-14.55167 5.14873,-23.17045c6.5289,-13.25453 17.58841,-22.50933 32.02396,-26.7982c7.85696,-2.33434 19.44511,-2.4919 27.41292,-0.37272c10.68681,2.84234 20.56245,9.23503 27.27812,17.65763c11.44406,14.35284 14.51639,32.93808 8.33334,50.41059c-2.37558,6.7131 -5.38321,11.61306 -10.48294,17.07855c-7.51927,8.05854 -15.46124,12.82613 -25.72244,15.44125c-6.92987,1.76612 -18.2959,1.75824 -25.18729,-0.01743zm46.99359,76.71874c0,-11.66681 -0.15546,-21.21237 -0.34546,-21.21237c-0.55267,0 -23.15134,19.0079 -23.15134,19.47273c0,0.59862 22.40039,22.95203 23.00027,22.95203c0.2731,0 0.49652,-9.54558 0.49652,-21.21239zm-8.12837,89.58151c3.13896,-3.60342 5.94908,-9.57928 7.16283,-15.23215c0.75183,-3.5016 0.8862,-7.28795 0.60019,-16.91275l-0.36856,-12.40109l-33.73602,-33.39706c-29.396,-29.10065 -33.79212,-33.21501 -34.172,-31.98175c-0.2398,0.77843 -0.30579,13.66176 -0.14668,28.62961l0.28934,27.21429l28.53863,28.41072c15.69623,15.6259 28.73599,28.41826 28.97726,28.42744c0.24127,0.00919 1.52603,-1.23157 2.85503,-2.75726zm-21.12221,12.22665c0.5526,-0.21207 -6.52711,-7.73318 -19.03375,-20.22046c-15.75389,-15.72952 -20.00713,-19.64691 -20.36126,-18.75351c-0.82094,2.07094 -0.552,9.37703 0.49458,13.43619c3.03795,11.78281 12.81967,21.70416 24.49419,24.84378c3.43257,0.92316 12.65175,1.36725 14.40625,0.694zm-14.69553,16.96454c-19.19916,-3.63824 -34.22623,-17.37338 -40.35254,-36.88327l-1.52992,-4.87216l0,-51.56241c0,-48.09848 0.08022,-51.82547 1.1941,-55.47855c5.75462,-18.87271 18.67331,-31.86444 36.79293,-37.00092c7.28899,-2.06625 19.90268,-2.05429 27.24492,0.02586c17.6541,5.00159 31.24332,18.57871 36.39166,36.35935l1.50121,5.18457l0,50.90973l0,50.90971l-1.50121,5.18457c-2.97653,10.27997 -9.29736,19.97147 -17.27997,26.49481c-4.88281,3.99017 -14.22415,8.68716 -20.0538,10.08334c-6.28586,1.50537 -16.34073,1.79504 -22.40738,0.64539z",
+ "officer_2": "m144.87212,278.09424c0,-7.03476 0,-14.06952 0,-21.10431c34.12148,-0.13669 68.24295,-0.27335 102.36444,-0.41003c0,-6.63841 0,-13.27682 0,-19.91524c-26.94872,-0.26555 -53.89742,-0.53107 -80.84613,-0.79662c30.82893,-41.42374 61.65785,-82.8475 92.48683,-124.27124c13.28885,-1.73074 25.24835,9.13577 26.16702,22.30508c1.37796,55.08076 0.61356,110.19873 0.82785,165.29666c-46.99997,0 -94,0 -141.00003,0c0.00002,-7.03473 0,-14.06952 0.00002,-21.10431zm-0.19199,-87.83214c-0.06876,-13.74153 -0.13754,-27.48306 -0.20631,-41.22459c-14.64618,18.8075 -27.62093,39.06267 -43.91019,56.48129c-14.42976,9.56055 -27.65941,-6.01018 -38.58159,-13.69254c-15.26907,-12.11603 -30.9411,-23.83286 -45.24117,-37.08727c-8.74276,-13.13181 5.83314,-31.80238 20.70509,-26.84245c13.32168,6.5739 23.96796,17.78835 36.01906,26.44797c7.16664,7.87663 15.75377,12.89487 20.74445,-0.10861c10.61151,-12.96709 19.11472,-28.05023 32.18712,-38.75249c13.16731,-7.35264 29.1156,-2.93422 43.48628,-4.27982c21.93321,0.06611 43.87927,-0.19524 65.80286,0.42785c-29.83961,40.18141 -59.99303,80.13989 -90.45013,119.85524c-0.51442,-13.73006 -0.41658,-27.48491 -0.55545,-41.22459zm49.58183,-93.47518c-17.8813,-2.9394 -31.59131,-19.77306 -31.46613,-37.7664c-6.28482,-0.26553 -12.56969,-0.53107 -18.85452,-0.79661c5.37549,-6.77119 10.75095,-13.54238 16.12643,-20.31357c26.79919,0 53.59842,0 80.39761,0c-0.07553,16.83184 2.11966,36.40314 -12.31944,48.47567c-8.59595,8.79105 -21.9399,12.10719 -33.88396,10.40091zm-44.65282,-80.96436c-3.48923,-6.17941 -15.89734,-17.4112 -0.91945,-14.28427c30.58981,-0.43799 61.18378,-0.21775 91.77567,-0.27203c0,9.29378 0,18.58757 0,27.88137c-27.24594,0 -54.49188,0 -81.73782,0c-3.03946,-4.44169 -6.07892,-8.88338 -9.11839,-13.32506z",
+ "officer": "m127.65893,298.12302c-11.91827,-4.4541 -8.85096,-18.47458 -9.45842,-28.44775c-0.14007,-38.77051 -0.03694,-77.54163 -0.06789,-116.31239c21.30015,-0.31718 42.6003,-0.76093 63.90377,-0.70047c-0.02318,44.52536 0.58119,89.061 -0.14537,133.57832c-0.57059,11.93384 -13.89935,13.46393 -23.22325,12.30963c-10.33765,0.00372 -20.67488,-0.15573 -31.00884,-0.42734zm-30.7055,-116.03563c-6.74483,-0.72377 -12.32703,-17.61749 -4.40458,-17.57693c6.23801,-0.08125 12.47601,-0.16251 18.71403,-0.24377c1.007,8.20691 -1.59957,19.89343 -12.37878,18.21895l-1.93067,-0.39824l0,0zm99.85623,-0.00661c-6.98207,-0.87273 -10.75342,-15.40816 -5.67188,-17.55357c6.66685,-0.08684 13.33371,-0.17369 20.00055,-0.26053c1.00876,8.20958 -1.60458,19.90276 -12.38809,18.21675l-1.94055,-0.40263c0,0 -0.00003,0 -0.00003,0zm-107.61794,-56.49044c0.54922,-13.57674 -1.08583,-27.43726 1.69075,-40.79832c4.06557,-10.40357 13.92722,-19.77089 25.33163,-20.63995c23.60493,0.19927 47.27207,-1.00478 70.82676,0.54259c14.04367,3.09693 25.24931,16.9698 23.91605,31.57756c0.32544,21.70094 0.15948,43.40639 0.24002,65.10946c-7.41772,0.09508 -14.83545,0.19016 -22.25314,0.28525c0,-19.53377 0,-39.06755 0,-58.60133c-4.34856,-5.08821 -8.05232,1.74921 -6.5546,6.09985c-0.01697,13.17788 -0.03394,26.35577 -0.05093,39.53365c-21.48996,0 -42.97992,0 -64.46988,0c-0.17615,-15.26811 -0.35229,-30.53623 -0.52844,-45.80434c-4.21338,-4.81828 -7.17517,1.78474 -5.83627,5.79053c-0.07101,17.56546 -0.14203,35.13091 -0.21304,52.69639c-7.42339,0.09512 -14.84679,0.19028 -22.27019,0.28539c0.0571,-12.02556 0.11414,-24.05119 0.17128,-36.07671zm56.41985,-70.72921c-11.43472,-2.06434 -20.27027,-12.69278 -20.54277,-24.26873c16.53569,0 33.07137,0 49.60706,0c0.58516,15.06838 -14.48488,27.02206 -29.06429,24.26873zm-25.62941,-33.78068c2.8164,-2.81977 5.23412,-6.59949 9.76779,-5.28442c14.97531,0 29.95061,0 44.9259,0c-0.48174,3.25565 0.91423,8.389 -0.64331,10.56883c-19.77167,0 -39.54332,0 -59.31499,0c1.75487,-1.76147 3.50974,-3.52295 5.26459,-5.28442zm18.8918,-9.34585c-4.62387,-0.06122 -9.24773,-0.12243 -13.8716,-0.18365c0.48279,-3.24875 -0.91532,-8.37839 0.64332,-10.55128c16.34338,0 32.6868,0 49.0302,0c-0.48172,3.25588 0.91423,8.38858 -0.64331,10.56913c-11.722,-0.07703 -23.43608,0.45157 -35.1586,0.1658zm24.67688,286.6952c-6.54985,-2.25 -11.37944,-9.11417 -10.08943,-16.07803c-0.23178,-33.13365 0.30627,-66.28789 -0.62375,-99.40492c-7.52885,-8.41364 -5.32481,11.97667 -5.61325,16.63527c-0.40672,29.85049 0.65932,59.77377 -0.79054,89.57779c-1.03221,6.81601 -14.93086,10.39682 -2.36958,9.16388c6.49333,0.08212 12.9946,0.3678 19.48656,0.10602z",
+ "recycle_2": "m70.51852,115.61727c18.49814,35.46731 22.10944,46.23824 15.99329,47.70097c-11.94749,2.85741 -9.54662,19.19937 7.17589,48.84396c20.97182,37.17758 62.04919,60.008 100.6335,55.93118c14.9762,-1.5824 31.90746,-4.84808 37.62502,-7.25717c5.71753,-2.40912 2.20903,2.0788 -7.79668,9.97308c-50.05432,39.49167 -111.87362,36.74075 -161.19199,-7.17288c-19.66416,-17.50925 -46.71899,-68.66641 -46.71899,-88.33963c0,-5.57329 -4.46041,-10.97359 -9.91201,-12.0006c-8.91546,-1.67957 -7.71816,-6.10193 11.90882,-43.98632c12.00147,-23.16548 23.29887,-43.78072 25.10535,-45.81163c1.80651,-2.03091 14.03651,16.92264 27.17781,42.11903zm159.00744,68.37661c-18.49815,-35.4673 -22.10944,-46.23827 -15.99332,-47.70097c11.94749,-2.85736 9.54663,-19.19936 -7.17586,-48.84396c-20.97183,-37.17759 -62.04924,-60.00801 -100.63353,-55.9312c-14.9762,1.58238 -31.90743,4.84812 -37.62498,7.25722c-5.71756,2.40907 -2.20905,-2.07883 7.79666,-9.9731c50.05433,-39.49169 111.87363,-36.74079 161.192,7.1729c19.66417,17.50919 46.71898,68.66639 46.71898,88.33957c0,5.57333 4.46045,10.97359 9.91199,12.0006c8.9155,1.6796 7.71817,6.10193 -11.90878,43.98634c-12.00146,23.16545 -23.29889,43.7807 -25.10535,45.81163c-1.80652,2.03091 -14.03651,-16.92262 -27.17781,-42.11902z",
+ "shield_1": "m235.43118,0.99993c-25.8405,20.89055 -61.5569,21.09333 -87.59367,0.62283c-25.04173,19.6952 -59.05148,20.25899 -84.60652,1.69064l-45.9514,49.35802c28.26655,30.91131 28.10226,80.57548 -0.48303,111.27486c-3.79379,10.48137 -5.78214,9.97594 -6.19602,20.53111c-0.97335,25.41245 4.72666,49.11902 22.58091,66.97356c15.9491,15.9491 37.5927,22.71344 58.38308,20.29993c34.71738,1.92664 51.36115,18.07672 58.34494,27.73621c9.4303,-10.32108 24.09528,-26.91339 68.66653,-28.98181c26.60716,-4.12497 36.22241,-10.78885 48.70973,-23.10918c16.80759,-16.80759 22.6846,-38.091 22.18927,-61.73892c-0.20569,-9.81746 -1.32416,-13.23065 -6.84674,-25.76584c-28.71786,-30.84172 -28.73875,-80.82797 -0.07623,-111.70699l-47.12085,-47.18442z",
+ "smoking": "m1.00013,234.70761c0,-6.75858 0,-13.51718 0,-20.27576c85.15819,0 170.31638,0 255.47457,0c0,13.51718 0,27.03435 0,40.55151c-85.15819,0 -170.31638,0 -255.47457,0c0,-6.75858 0,-13.51717 0,-20.27576zm262.90899,-0.33792c0,-6.87125 0,-13.74248 0,-20.61369c4.50577,0 9.01147,0 13.51718,0c0,13.74245 0,27.48491 0,41.22737c-4.50571,0 -9.01141,0 -13.51718,0c0,-6.87125 0,-13.74246 0,-20.61368zm21.62747,0c0,-6.87125 0,-13.74248 0,-20.61369c4.50574,0 9.01147,0 13.51718,0c0,13.74245 0,27.48491 0,41.22737c-4.50571,0 -9.01144,0 -13.51718,0c0,-6.87125 0,-13.74246 0,-20.61368zm-21.62747,-38.40129c2.33044,-12.44823 -4.64667,-27.35672 -18.89619,-26.91631c-16.51076,-0.91339 -33.27669,-0.16469 -49.68698,-1.22891c-15.92004,-5.44565 -24.6412,-22.87308 -22.39098,-39.09009c-2.60393,-4.6821 -13.75305,-3.34301 -18.33653,-8.47466c-22.34129,-12.77989 -25.34413,-47.04951 -6.6355,-64.35941c6.55362,-6.74706 19.10332,-12.28213 27.40872,-10.56472c0,4.27357 0,8.54715 0,12.82071c-17.16693,0.19163 -30.20795,18.71787 -25.17886,34.95034c3.93155,16.28817 21.44681,21.17548 36.06943,21.4035c9.34369,7.54165 -5.73552,20.54516 2.38481,30.40595c5.4973,13.38734 21.79352,9.01994 33.15524,10.07909c16.32292,0.98282 36.22006,-2.88133 48.06549,11.43753c10.15674,11.08647 7.03754,26.81902 7.55853,40.56599c-4.50571,0 -9.01141,0 -13.51718,0c0,-3.67633 0,-7.35268 0,-11.02902zm21.44409,-5.02264c1.06424,-17.34164 -3.94,-36.41237 -18.82684,-46.85637c-14.2328,-10.82034 -32.68178,-7.49533 -49.35545,-8.05716c-10.44089,-9.26265 6.69904,-19.729 4.85689,-30.88184c1.16321,-14.61189 -8.86084,-28.86267 -23.32887,-32.0012c-8.26547,0.48857 -11.4507,-1.71243 -9.8101,-9.54141c-2.56769,-10.66179 12.99852,-3.08173 18.15088,-2.147c18.80948,6.74871 31.28568,27.05275 28.30017,46.93802c-0.48553,7.00495 -7.28169,16.99163 4.77028,14.2243c23.42943,-1.23563 45.83046,13.98601 54.11491,35.81352c6.09546,15.43478 4.5502,32.30844 4.8287,48.56076c-4.44968,0 -8.89935,0 -13.34903,0c-0.11716,-5.35051 -0.23438,-10.70122 -0.35153,-16.05162z",
+ "stairs": "m2.18934,245.58681c17.86729,-0.11601 35.73457,-0.23204 53.60186,-0.34804c0.11764,-18.34987 0.23526,-36.69974 0.35289,-55.04959c17.78193,0 35.56387,0 53.34581,0c0,-18.46245 0,-36.9249 0,-55.38734c18.2373,0 36.47458,0 54.71188,0c0,-18.01214 0,-36.02428 0,-54.03642c18.01213,0 36.02426,0 54.03641,0c0,-18.01213 0,-36.02428 0,-54.03642c26.79306,0 53.58612,0 80.37918,0c0,9.00607 0,18.01214 0,27.01821c-17.78702,0 -35.57397,0 -53.36099,0c0,18.23729 0,36.47458 0,54.71188c-18.01212,0 -36.02425,0 -54.03641,0c0,18.2373 0,36.47459 0,54.71188c-18.01215,0 -36.02426,0 -54.03641,0c0,18.23729 0,36.47459 0,54.71185c-18.2373,0 -36.47459,0 -54.71187,0c0,18.46246 0,36.9249 0,55.38733c-27.01822,0 -54.03642,0 -81.05463,0c1.20448,-8.94977 -2.05336,-19.04163 0.77228,-27.68333z",
+ "umbrella": "m138.31999,1l0,29.565c-75.13835,4.16908 -134.31995,48.17229 -134.31999,101.835c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c20.14798,0 36.5,7.84892 36.5,17.51999c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c9.59525,0 18.30284,1.83565 24.81999,4.745l0,144.17499c0,6.44742 -5.23262,11.68002 -11.67999,11.68002c-6.44734,0 -11.68,-5.2326 -11.68,-11.68002l0,-5.84l-23.36,0l0,5.84c0,19.34207 15.6979,35.04001 35.04,35.04001c19.34206,0 35.04001,-15.69794 35.04001,-35.04001l0,-144.17499c6.51714,-2.90935 15.22475,-4.745 24.81999,-4.745c20.14798,0 36.5,7.84892 36.5,17.51999c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c20.14798,0 36.5,7.84892 36.5,17.51999c0,-53.66274 -59.18159,-97.66592 -134.31999,-101.835l0,-29.565l-23.36002,0z",
+ "yin_yang": "m152.3828,1.00127c40.96666,0 74.20116,33.2665 74.20116,74.23316c0,40.96668 -33.2345,74.20117 -74.20116,74.20117c-40.96668,0 -74.20118,33.26653 -74.20118,74.23318c0,40.96667 33.2345,74.20117 74.20118,74.20117c81.93332,0 148.43431,-66.50104 148.43431,-148.43436c0,-81.93333 -66.50099,-148.43433 -148.43431,-148.43433zm0,51.0353c-12.80867,0 -23.19788,10.38917 -23.19788,23.19786c0,12.80871 10.38918,23.19786 23.19788,23.19786c12.80869,0 23.19785,-10.38917 23.19785,-23.19786c0,-12.80869 -10.38916,-23.19786 -23.19785,-23.19786zm0,148.43436c12.80206,0 23.19785,10.39577 23.19785,23.19786c0,12.80206 -10.39578,23.19788 -23.19785,23.19788c-12.80208,0 -23.19788,-10.39581 -23.19788,-23.19788c0,-12.80206 10.3958,-23.19786 23.19788,-23.19786zm145.10503,-50.94075c0,81.87245 -66.37071,148.24319 -148.24321,148.24319c-81.87246,0 -148.24321,-66.37074 -148.24321,-148.24319c0,-81.87248 66.37075,-148.24324 148.24321,-148.24324c81.8725,0 148.24321,66.37076 148.24321,148.24324z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/animal.json b/files_svgedit/svg-edit/extensions/shapelib/animal.json
new file mode 100644
index 000000000..3cf1a3c6c
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/animal.json
@@ -0,0 +1,21 @@
+{"data": {
+ "bat": "m143.40468,206.20782c-0.49527,-8.51843 -1.60919,-23.17813 -13.91826,-16.10698c-5.69614,2.11977 -22.79842,7.51244 -14.5293,-3.62979c-4.53243,-11.10219 -22.97476,5.42294 -24.24419,-2.29205c9.91943,-10.64906 -4.7813,-22.35199 -15.17139,-14.80321c-6.39341,1.76166 -19.4276,12.91188 -21.9789,9.37552c5.93793,-7.52516 19.31312,-22.93167 3.18112,-27.55084c-17.5302,-3.97589 -32.93319,8.09392 -48.1771,14.68205c-4.57452,3.57106 -10.39707,2.94862 -4.70683,-2.99597c19.7419,-30.64111 50.72646,-53.70857 85.10566,-65.43076c8.33369,-2.70812 21.16511,-8.70424 21.41656,4.97536c5.15313,12.59007 8.81947,28.33097 22.08977,34.80917c15.28362,8.49702 4.32793,-24.52711 20.16156,-12.05241c6.66379,4.32207 20.92268,-3.91697 22.87737,0.71265c-3.88257,5.55579 -5.70456,15.41883 4.55382,10.3489c17.81406,-7.0078 30.89859,-22.70471 39.67026,-39.22318c9.16278,-1.3768 18.27335,5.56162 26.62798,9.24753c27.74529,15.70954 44.86571,45.39448 52.13728,75.65768c-7.5513,-4.24557 -14.87186,-12.828 -24.02185,-16.20273c-9.75534,-4.87419 -20.75789,-5.73363 -31.48114,-5.39867c-5.02554,5.98985 -7.99353,13.42558 -3.62529,20.86708c3.80284,14.25407 -12.13176,-4.90576 -17.88498,-6.20744c-10.74191,-7.67955 -21.03323,3.92213 -18.67635,14.82222c-2.42909,2.10051 -9.92085,-3.5218 -14.32263,-2.86926c-9.05026,-2.72606 -15.42468,1.20085 -9.97261,10.61331c-7.98315,-0.97417 -19.64474,-13.28291 -26.70493,-1.69363c-3.0779,2.89514 -4.66377,8.66307 -8.40561,10.34547z",
+ "bull": "m247.95622,28.12305c-12.19972,2.23394 -21.61887,16.95667 -20.74588,29.01591c1.44209,13.7284 17.93463,5.12075 22.80087,1.23941c-2.90906,11.49207 -26.14024,13.85409 -24.83565,-0.12387c-17.69467,13.05878 -30.95056,33.52913 -52.86781,40.14553c-19.77757,4.59067 -40.50726,3.0742 -60.45068,0.39017c-12.12445,-1.13604 -23.69794,-7.26224 -35.91985,-5.97962c-13.09134,3.59118 -23.59412,13.16467 -36.65408,16.93906c-13.77014,6.03062 -8.51065,22.6805 -9.70401,34.47604c0.36829,17.55977 -2.85913,36.16287 -15.09811,49.55722c-7.11563,10.54993 -7.76443,24.43282 -13.48046,35.44298c18.99679,-0.19772 7.54522,-25.59486 17.99728,-35.91756c14.58305,-6.75189 14.16003,-25.2986 16.19452,-38.95529c1.4834,-5.51941 0.74519,-25.08188 6.61763,-22.44334c7.21924,16.22275 11.33028,34.35388 9.69645,52.12326c-9.5553,8.96404 -24.74576,15.34862 -22.54872,31.87126c0.72458,14.96526 -8.38036,25.74033 -15.4907,37.48604c4.56749,6.89259 1.00608,20.69472 14.11573,16.65324c8.77115,1.68887 13.10825,-2.37698 4.45589,-8.42346c-13.07829,-12.56499 5.13552,-29.16821 12.20585,-40.168c7.30689,-12.28131 22.16195,-12.86801 33.02653,-20.13979c15.00671,-8.95824 25.97935,-22.79263 35.92999,-36.78595c8.71432,9.26259 -13.75776,17.74474 -17.07076,27.20334c-7.22755,7.75058 -20.15694,21.85651 -2.99889,26.65347c13.26358,4.53796 25.75887,13.79143 25.35975,28.30255c0.22051,9.84615 24.38135,18.76527 19.43611,2.77341c-8.3609,-14.92882 -28.34064,-20.79163 -33.65835,-37.70844c-3.6715,-12.98383 11.61318,-19.27325 18.93525,-8.74269c12.96419,-1.41862 26.57983,-10.04028 40.80356,-11.3647c14.66299,-5.4577 18.06927,14.52957 29.8145,19.76668c9.79047,9.67969 18.77974,21.93582 17.54285,36.4783c1.1926,12.30893 9.52699,25.16873 23.92239,23.90201c16.80026,-2.80963 -5.10118,-20.70317 -12.79568,-24.81631c-11.14896,-13.29695 -9.30676,-32.20113 -16.24597,-47.51259c-5.00217,-4.52083 0.22685,-26.45532 0.40694,-10.76334c-0.90044,17.98242 24.73294,7.66248 22.97939,-6.09152c4.36166,-10.95654 -11.58513,-4.19417 -9.47617,-15.24252c-1.73091,-13.74937 -0.74355,-30.75096 -12.6731,-40.17292c-6.8737,-6.7591 -4.7831,-7.41829 2.70201,-2.07212c14.59439,7.55807 11.75914,24.79303 12.78276,38.37691c4.22589,17.80225 21.30753,-5.24332 20.80711,-14.89757c2.92691,-20.96336 12.92174,-42.46973 32.42046,-52.68139c-5.2402,-2.56694 -30.94765,6.73531 -28.79092,-4.9679c10.59921,9.00244 25.18661,-0.80075 37.71524,1.85265c16.62164,0.68233 20.74963,-22.79317 2.53195,-23.94116c-11.78333,-6.98062 -21.92947,-19.31897 -37.15829,-18.35906c-22.07759,7.39931 -8.43927,-13.11165 -2.53694,-22.37832zm21.60802,9.50184c-1.66193,5.79599 -12.61478,17.62506 0.56973,12.83867c1.89221,-3.91013 1.1131,-8.97168 -0.56973,-12.83867zm-3.4996,26.34877c5.90985,9.81916 -11.80539,1.02993 0,0zm24.39551,10.15293c-2.05029,4.18517 5.51468,4.9676 -0.32553,4.96455c-3.08926,4.10121 -4.4324,-5.29953 0.32553,-4.96455z",
+ "camel": "m105.23692,274.01276c10.42601,-6.85904 -13.23158,-12.66162 -16.74452,-19.13904c-10.34003,-12.71768 -13.56136,-29.62202 -16.44211,-45.3219c4.95107,-8.43617 2.94567,-17.1517 4.73958,-25.91959c8.77055,-13.01825 13.62244,-28.29056 22.43666,-41.26205c9.81532,2.07159 20.42883,10.03517 30.26162,13.06094c8.8764,15.9576 -7.35719,29.2457 -5.44854,44.69498c3.72314,14.40366 -6.25101,26.40735 -8.25558,39.83173c0.06986,12.69931 11.61848,25.55493 24.23922,16.82416c-0.64038,-9.26088 -18.64324,-12.13185 -10.58395,-25.1562c2.65187,-13.46596 11.34413,-24.24693 17.91676,-35.55937c-3.71349,-13.26427 1.2287,-30.0778 9.59569,-40.02118c8.49532,8.2068 14.36288,22.63718 15.66277,34.12883c0.16464,13.17332 17.70532,21.98904 17.37173,37.50392c1.31061,13.71669 7.73416,26.77841 16.64259,34.21387c4.65822,9.68192 33.56361,4.63116 18.16859,-6.87111c-12.71291,-11.47281 -27.33986,-23.63953 -29.27029,-41.92267c-5.27388,-10.85303 6.84843,-26.2316 -8.03899,-30.76501c0.92262,-14.70679 -2.97293,-31.40077 5.40811,-44.51862c12.07202,-10.31686 29.7518,-11.08165 41.29709,-22.49498c14.0099,-9.28757 21.96306,-24.50421 26.44456,-40.2729c6.78918,-7.60537 17.33322,-24.04447 29.06323,-15.49826c11.50851,7.1165 3.01477,-10.78561 9.62354,-14.73589c-5.45358,-19.67866 -27.58679,-10.231 -41.40082,-15.14074c-12.54193,-8.39989 -25.52765,-3.55679 -34.67496,6.0378c-6.85069,3.08698 -3.14447,11.16754 3.57637,8.12783c-4.82072,16.0155 -11.46542,33.6401 -26.07742,43.1243c-16.7653,7.33572 -26.11705,-14.39821 -36.07204,-23.83146c-10.86565,-10.63506 -17.60231,-26.15123 -31.2878,-33.45204c-19.0355,-4.82 -33.49794,11.89507 -47.87449,21.30644c-14.26775,7.14342 -31.39994,10.67369 -41.13367,24.60683c-16.15372,19.41527 -5.91326,48.70807 -22.89915,67.80049c-6.99636,10.58755 -22.39972,18.21231 -20.28306,32.7636c7.50211,15.58318 0.92728,34.18239 5.02367,50.94881c3.02735,12.11708 7.50982,27.68176 22.18437,29.48123c11.54434,7.31882 17.83198,-8.01192 5.60827,-12.45197c-14.75563,-6.55614 -16.77197,-25.01053 -17.95741,-39.18628c-3.25454,-14.0275 7.86033,-23.30806 12.45064,-34.31837c-3.87635,-10.75487 9.79252,-25.37375 18.46243,-23.19664c-6.47958,9.9541 -15.94005,22.87103 -0.60315,31.06966c-0.20134,0.50305 2.25023,-9.18846 6.19941,-12.10042c-0.58951,-7.59273 -8.29086,-14.05685 -0.12206,-21.73929c14.33151,-9.55606 11.17263,18.16365 8.19696,26.02383c-0.15744,12.07039 -16.33567,21.65707 -8.0749,33.75336c9.04985,14.91904 13.29631,32.04613 16.76897,48.94904c4.98299,14.02148 17.57185,24.27618 33.31381,20.65268l2.58825,-0.02829z",
+ "cat": "m111.55353,268.57376c-12.38409,-9.66019 -26.54234,-3.66064 -40.17431,-4.38614c-11.9392,-10.23105 -26.45395,2.16507 -37.70551,-7.68756c-14.55057,-12.97847 10.67308,-21.10451 5.29292,-36.51207c-0.60409,-22.18257 -10.10326,-42.27484 -20.08909,-60.91698c-7.07184,-14.82233 -4.56518,-31.85568 -6.84103,-47.71686c-8.17014,-11.38815 -16.33076,-25.48726 -6.60928,-39.55753c10.981,-11.86565 5.81937,-27.47561 1.50418,-41.19728c11.10318,3.26597 23.84772,18.14071 38.4552,15.16287c9.93419,-6.39761 15.9648,-0.073 17.62218,11.6365c5.20781,15.03792 8.24681,35.60265 24.68163,40.4529c17.26196,4.92876 36.58965,6.02341 50.24171,20.484c24.96439,23.38795 36.53986,60.25828 35.56061,95.79604c2.26117,16.61917 23.11539,7.79897 33.43477,10.24997c17.3054,-0.76804 33.91818,4.66769 50.66774,8.39909c14.94962,3.97684 27.61282,-8.59756 41.65988,-10.10515c2.37341,14.53128 -16.06888,20.58582 -26.14133,25.0639c-11.95706,5.08662 -24.89989,5.20694 -37.1826,1.47655c-26.55344,-6.62021 -54.69701,-4.88251 -79.92953,6.75992c-13.61838,5.01505 -26.84254,14.51093 -41.6569,13.32327l-2.79124,-0.72549l0,0.00003z",
+ "chick": "m76.6114,300.49948c-0.94218,-11.68399 1.80264,-23.81186 -2.78349,-35.22473c-7.45612,-25.10127 -23.93798,-47.16536 -31.36633,-72.21014c-3.21228,-16.80365 -8.65163,-34.79272 -2.2363,-51.43718c9.2771,-20.44891 24.58445,-39.1077 45.00853,-51.46853c11.45798,-6.87112 33.39433,1.8131 33.44485,-16.51133c3.62297,-20.89642 15.43811,-40.3082 30.48538,-56.28489c17.86485,-17.49571 47.98021,-20.77926 71.28149,-10.72216c13.19823,4.36545 26.92773,11.92505 29.85556,25.342c-2.0408,13.23198 13.36339,22.40786 12.41484,34.53756c-13.98409,-0.03379 -27.4267,2.25514 -39.10866,9.99602c-8.20006,3.8867 -26.4511,6.08187 -12.88864,15.86904c12.71146,21.22634 12.39029,48.02362 0.02443,69.35255c-8.24092,16.61523 -18.78058,33.14909 -36.37866,43.00504c-13.36313,9.14961 -27.77914,16.93257 -42.68192,23.79149c-11.62872,11.1774 5.32764,27.26614 9.71201,38.8335c3.36447,3.54044 4.524,10.84882 11.15869,9.08932c15.28535,0.25418 32.76015,-1.9313 44.98404,7.81229c-8.94319,8.25949 -25.89421,-1.41025 -38.02573,4.80051c-8.78024,5.75812 -19.06332,7.43823 -31.36371,7.58014c-13.23612,4.30203 -27.23189,-3.61423 -39.08569,1.66962c-4.11388,0.41238 -8.38321,3.40195 -12.45068,2.1799zm58.28394,-16.2124c-4.84233,-9.87674 -20.53861,1.56897 -6.10292,2.32874c2.30783,-0.47092 12.8125,3.03821 6.10292,-2.32874zm-17.85122,-4.32443c14.82944,-9.3367 7.74453,-25.48042 -1.79045,-35.63309c-3.24258,-2.97528 -4.73457,-8.94336 -9.13439,-9.94019c-6.73362,0 -13.46722,0 -20.20084,0c-4.65086,8.49229 -2.48404,17.86589 0.89217,26.43201c3.51066,10.88467 6.16319,28.60654 23.56189,23.00385c2.6806,-0.4599 4.89924,-2.07458 6.67162,-3.86258z",
+ "cormorant": "m143.5415,0.99936c-4.24326,11.41716 -19.29625,4.15632 -24.74561,12.50427c0.52748,6.07653 -8.29025,7.80436 -13.00653,8.43892c-8.50133,3.84879 -22.80692,-4.79845 -26.45377,4.01417c10.96676,1.70561 23.50823,0.97173 33.37776,7.63992c6.81084,8.30698 18.80501,9.32233 23.86815,19.00227c5.01492,11.90637 0.21405,24.79235 -6.1066,35.16777c-5.40714,11.63457 -14.24293,22.0266 -17.15868,34.6068c0.20795,13.02319 4.72718,25.69211 3.20084,38.80902c0.9605,10.14279 6.64024,19.14648 10.04536,28.64983c5.00912,10.57565 9.93535,21.70013 17.62276,30.53665c7.02892,8.87558 29.89705,11.67009 23.64502,24.91443c-4.01926,11.10844 -7.40147,24.48637 -19.39478,29.5565c-9.50977,5.9848 -21.3932,8.93677 -29.06369,17.37073c3.84956,0.36453 28.16327,-14.36331 23.8996,1.69739c-9.52658,11.2518 16.95053,-0.69223 23.42963,-2.18207c4.74442,-0.99915 4.29691,14.62488 8.52766,3.80228c5.95903,-10.08762 6.23502,-21.34366 11.26126,-30.51312c2.4781,-10.25645 3.82962,7.94009 9.64467,10.12222c7.07556,9.50238 7.79694,-14.07236 11.23129,-19.70615c2.62747,-8.54028 4.63826,-23.31885 8.02322,-27.91885c0.19868,-2.83281 6.58795,3.93147 5.0274,-3.78851c0.90347,-23.48584 -1.83659,-48.86755 -15.67365,-68.59196c-9.60602,-8.62669 -13.22336,-21.57266 -21.36568,-31.47811c-10.01912,-4.8186 -8.05391,-19.66993 -20.19205,-21.12443c-2.75856,-10.2361 2.62035,-22.86311 4.63016,-33.73514c2.78795,-10.12834 8.4742,-20.66132 3.52232,-31.15684c-3.76698,-10.86702 -11.83783,-21.03737 -23.57631,-23.51091c-5.21049,-2.63619 -9.89668,-4.17218 -2.89241,-7.84742c4.71588,-7.73713 -7.28709,7.39913 -1.58588,-2.982l0.25854,-2.29765l-0.00003,0zm-57.08003,24.11987c12.78673,0.33177 -8.83535,0.35227 0,0zm92.46721,218.72338c11.05893,4.6954 0.80228,21.55537 -5.46918,26.98338c-13.1071,-3.20859 2.39713,-19.21964 5.46918,-26.98338l0,0zm-10.64413,31.82323c-5.88483,2.41168 -15.44353,4.13849 -3.83093,0.46683l1.97208,-0.34274l1.85886,-0.12408z",
+ "cow": "m28.0749,243.56958c-11.25466,-1.13762 -0.26117,-18.72878 -4.5063,-26.87576c-0.04291,-11.99254 -4.49496,-23.80263 -3.04635,-35.73141c8.85702,-21.03091 1.47632,-43.99974 -0.46577,-65.6628c-0.878,-4.78294 -0.85219,-17.06834 -3.03475,-6.14601c-6.04425,18.41563 -0.13999,41.17824 -5.30961,59.82921c-8.64015,10.38419 -15.16653,-6.09071 -6.91858,-12.40807c9.63606,-15.16887 7.3071,-35.6004 7.63113,-54.51396c-0.41477,-11.95865 4.38277,-26.97649 18.58104,-27.31744c12.14677,-0.91866 23.64877,4.86966 35.90276,4.15359c35.73927,0.55689 71.83095,0.86755 107.11801,-5.64501c17.61354,-4.0591 35.14902,3.10693 52.79015,0.20057c9.91351,1.07068 15.15811,-3.56471 10.78886,-12.26689c7.38425,-5.09429 13.06598,9.66071 16.34573,-3.48148c11.89191,-8.19559 13.54935,15.99933 26.71921,9.16614c15.88589,2.05862 -6.90274,16.26875 6.39813,23.38159c8.04169,6.20473 20.35629,21.57409 4.35831,26.00379c-13.75446,-0.96602 -27.54028,-0.06377 -41.30312,0.60226c-6.36993,10.6367 -19.62016,18.61491 -18.16837,32.55296c-1.1003,16.62756 -12.74783,33.02081 -28.69196,38.18489c-6.81386,-1.34894 -9.78644,0.85432 -8.9351,7.83342c-3.52046,9.11967 -4.14098,18.73875 -3.72333,28.43974c-1.04204,5.34808 1.17265,9.50755 4.32187,13.62691c-3.70361,6.41692 -24.92326,2.61598 -16.88379,-9.5238c2.05592,-15.92261 -0.36317,-31.91132 -2.16568,-47.74242c-8.4565,-6.01532 -18.70856,-3.81294 -27.26753,1.0208c-18.88187,6.9252 -40.73763,13.48228 -60.10471,4.59438c-10.79734,-3.01547 -27.0833,-5.25847 -35.10848,3.84904c-3.611,13.73518 -2.64567,28.48619 -5.7238,42.42607c-0.05178,7.28806 6.88112,13.54532 -4.86428,11.51134c-4.90851,0.11278 -9.83028,0.26732 -14.73372,-0.06165zm10.02217,-15.5108c1.93175,-6.52728 -2.78621,-23.11049 -3.1906,-7.64299c-1.60691,4.90746 0.4367,28.47777 2.83738,12.83046c0.15187,-1.72662 0.25968,-3.45683 0.35322,-5.18747z",
+ "crow_2": "m299.86716,62.24508c-8.36279,-13.35279 -25.79254,-10.94299 -38.7652,-13.97612c-10.77151,-4.46517 -27.26852,-8.74568 -34.93257,4.02601c-10.22766,11.92024 -19.30536,24.77381 -27.38379,38.20519c-16.9417,18.56395 -37.51366,33.44937 -58.19264,47.49408c-17.41919,8.55826 -36.48907,15.23247 -50.59015,29.17691c-26.77713,17.17799 -59.39612,20.30975 -89.00278,30.37996c5.24787,1.82477 28.48156,-4.80739 12.86404,2.45506c-11.61908,3.82678 4.57293,7.38318 9.74338,4.83008c-4.08242,4.36552 -5.2054,4.72249 -0.18473,4.65681c-9.12115,5.09712 20.25491,-1.58305 4.07883,5.5506c-7.04263,2.05971 -24.35976,21.06046 -8.48079,12.5005c14.76321,-6.14401 30.50038,-9.23448 45.85791,-13.45705c-11.48634,11.80891 -27.85513,19.19374 -35.74965,34.16698c0.17943,3.86479 12.21982,-7.85281 17.31087,-9.77229c28.95095,-17.49719 59.28473,-33.71347 91.89844,-43.16046c4.45381,1.07288 5.32478,12.99994 14.00563,6.90237c0.76199,7.59987 19.82927,-11.92125 14.84979,3.30377c8.25793,-13.03635 -0.01482,14.1528 7.62892,18.26904c3.90089,5.15268 19.92041,12.26512 6.86195,14.03082c-5.77165,8.63597 8.09146,-3.46425 11.11865,4.62627c11.3129,4.10901 3.07231,8.32173 -5.11652,5.83363c-6.27592,-0.83809 -7.57079,7.40965 -1.22719,2.29182c7.57507,5.19347 19.60568,3.32813 29.26515,5.56088c9.65308,0.80066 21.35422,-9.88435 25.01279,-7.29437c-8.89755,-6.38512 -21.77765,1.41119 -31.54323,-3.51736c-2.05963,-6.62599 22.89082,2.37143 22.94131,-8.82851c11.68727,-1.08766 -9.82895,-2.59717 -14.00406,0.04509c-14.38026,0.76889 -21.75813,-12.59969 -31.88164,-20.19017c0.30659,-15.75429 11.86186,-29.28856 23.95569,-38.18524c15.77855,-9.50124 31.96706,-21.73888 36.43575,-40.70174c4.63271,-16.88809 7.21239,-34.29048 9.31848,-51.60873c2.84918,-11.17406 11.03882,-21.49306 23.60089,-20.65947c6.77469,-0.94415 13.57404,-1.72816 20.30646,-2.95438z",
+ "crow": "m65.63132,15.69366c7.23991,-11.19251 23.71874,-13.17996 36.20271,-14.69413c13.92134,1.25098 24.65079,12.10254 32.81262,22.59631c9.49452,8.5772 21.08662,15.85565 25.83853,28.41352c12.01437,5.95259 26.19815,9.13653 33.55229,21.87244c11.11548,14.36729 17.52112,31.75739 23.31628,48.60368c0.92021,12.5585 6.47,24.01521 8.36046,36.46043c3.24197,12.33818 5.82637,24.53572 9.31963,36.76498c3.88237,12.71416 9.39792,24.81319 13.2628,37.54517c7.05891,11.17328 13.48564,22.96204 17.86821,35.4054c-10.48648,-0.88873 0.96857,15.8573 2.93524,22.45895c2.86746,13.58783 -12.84537,5.80856 -15.59308,-0.46634c-9.70456,9.1796 -29.57259,11.24072 -38.3669,-0.80743c-9.26392,-12.20752 -14.38051,-27.69696 -27.16855,-36.53391c-5.02811,-4.18506 -9.90665,-22.45958 -11.7061,-6.32031c6.38489,16.05743 -18.74254,6.90547 -27.66772,9.78912c-15.99664,-3.21661 6.07263,-12.35889 12.86923,-11.27576c6.38602,-6.35408 17.01372,-16.99594 1.7589,-20.33147c-10.44731,-4.15326 -23.84068,-14.68553 -29.71439,0.99188c-7.37552,3.90117 -20.59412,22.40862 -5.95329,23.77255c5.91614,12.10878 -17.0737,3.35048 -23.49316,6.21452c-6.05255,1.90814 -21.13758,-1.4375 -7.08788,-4.49867c12.08796,-1.9845 17.85132,-16.8317 25.44044,-25.82515c-0.25166,-11.53856 -9.48829,-20.69617 -16.41167,-29.40816c-7.36517,-12.27962 -17.64172,-22.79747 -22.75925,-36.23717c-3.35689,-13.95544 -9.74807,-26.85826 -12.98938,-40.84583c-3.65936,-14.01762 -7.85575,-29.82359 0.01893,-43.25633c3.58914,-11.78534 5.08364,-22.78083 -2.44828,-32.4814c-10.40722,-8.4583 -25.19866,-5.06594 -37.19873,-10.67507c-1.4463,-9.05923 17.76661,-12.5158 26.11695,-14.53937c3.17027,-0.11009 5.59681,-2.76167 8.88516,-2.69248z",
+ "dog": "m100.16203,296.98279c-8.8212,-9.63385 1.38332,-24.43997 -0.42293,-36.27057c0.75693,-11.26283 0.70357,-22.55605 0.97627,-33.83612c-5.62751,-3.03004 -11.14646,-9.8163 -17.39571,-9.15442c-9.39647,12.28885 -8.36188,28.63301 -15.80033,41.86707c-4.14935,12.68604 -14.20047,25.1369 -28.95629,23.20023c-15.78228,0.24448 -5.31179,-12.67972 3.94138,-14.51392c15.5036,-7.47278 14.489,-27.14363 17.24157,-41.59114c1.02824,-10.18478 3.24236,-20.5625 3.54647,-30.63432c-6.4542,-14.31418 -15.78849,-28.37114 -13.67442,-44.85196c-0.91037,-17.78856 4.2768,-37.23788 -5.08019,-53.53189c-5.56927,-15.61405 3.8713,-31.59072 2.9399,-47.52759c0.9721,-14.78285 -5.20505,-30.54867 1.20562,-44.61136c13.7762,-15.53139 12.97964,13.29988 18.95111,20.54415c5.64886,15.40877 24.7487,10.76537 35.50636,4.24826c7.2022,-4.10769 16.87807,-28.32801 24.44378,-14.32351c3.37997,14.22579 -6.14093,25.38077 -12.22646,36.88495c-6.86581,22.01683 5.86861,44.08519 20.93388,59.44197c24.83763,26.97977 44.07555,59.68134 54.0882,95.03609c1.31316,14.68071 3.98535,28.23558 12.82726,40.18617c10.20438,10.1714 26.16472,9.68739 39.32852,13.25957c9.22101,2.52521 30.75206,5.14639 26.47435,17.3808c-14.74448,2.4689 -30.09541,0.23105 -44.90068,-1.32291c-17.28331,-2.73001 -35.00906,-7.2897 -49.09666,-18.1597c-14.62904,-9.61427 -18.7715,20.00995 -34.01671,10.65375c-2.19362,-7.70334 10.66454,-19.74266 -6.53938,-19.26297c-6.33104,0.30879 -15.00338,1.82024 -19.76239,4.89166c1.07452,12.16098 2.04812,24.36316 4.2893,36.36713c-1.78267,6.00809 -14.15643,12.93057 -18.82182,5.63058z",
+ "duck": "m185.95239,299.43112c-13.71118,-7.29123 11.45862,-7.3541 17.23322,-7.85522c14.99724,-0.2811 17.02971,-18.28448 15.48773,-29.74414c-2.1938,-4.69699 -0.04752,-14.89349 -7.7746,-13.37029c-15.43901,-0.71622 -30.7112,-4.55923 -44.14467,-12.22302c-0.82443,12.88171 -7.29927,24.66777 -11.6053,36.85115c-5.66316,6.16721 14.39644,28.18469 0.43378,18.34869c-9.04433,-8.40845 0.06526,8.74658 -11.16418,3.91656c-15.23827,-0.31436 -31.02578,2.40784 -45.91216,-1.24551c-5.00268,-2.09833 -20.66561,0.51883 -9.25531,-6.49301c6.4804,-1.18185 12.15667,4.48007 17.05421,-2.03778c11.5948,4.79346 30.04866,4.82639 34.25867,-10.28015c7.00595,-11.43338 11.29851,-24.25136 11.56012,-37.68254c-8.2043,-6.31854 -14.70296,-14.48831 -18.43434,-24.21049c-8.62861,-14.22275 -24.3753,-22.02206 -37.28508,-31.87471c-17.12926,-11.15475 -36.8522,-23.99915 -40.20823,-46.00098c-4.08031,-16.32172 0.02216,-34.19492 11.59384,-46.57394c7.80417,-11.16946 22.31328,-21.55052 18.99293,-36.88489c-8.43674,-15.00933 -26.68094,1.9423 -34.96601,9.23433c-9.98,7.06196 -20.71845,24.17017 -34.34288,16.49594c-1.7172,-11.61691 13.7034,-18.90693 17.498,-29.74388c7.8585,-12.19844 12.51045,-26.37627 18.95516,-38.92993c11.65712,-10.85135 30.93148,-10.91782 42.45155,0.28526c14.7008,11.44654 23.86826,29.5425 22.42876,48.35335c1.4173,12.98959 -4.14301,29.91504 8.25453,38.93287c17.92052,9.9613 39.04935,12.35098 57.26444,21.89838c22.77972,10.51788 39.86913,29.49796 59.04057,45.11781c11.7964,10.71736 23.92368,21.11819 35.13879,32.44618c-7.49713,-2.24278 -14.43054,-6.05879 -21.60767,-9.15805c9.28815,12.08043 13.46152,26.94177 15.66077,41.78857c3.61584,15.73579 13.73315,31.11919 8.65729,47.77711c-4.42633,13.85214 -18.52838,-8.55096 -25.42393,-12.47198c-7.88147,-7.42908 -15.67812,-16.62666 -27.10399,-17.90884c-2.06194,13.35767 -4.18094,27.25305 -1.83514,40.63339c1.37479,11.84998 25.0215,4.73886 21.59566,13.51175c-19.80942,-2.16162 -39.69846,-0.3399 -59.55595,-0.59872l-2.94055,-0.30328l0,0z",
+ "eagle": "m42.43982,248.02586c11.79883,-9.19574 37.51548,5.68584 36.59332,-18.29665c11.6873,-8.23552 20.68873,-26.28419 1.79099,-32.32607c-10.7688,-5.1657 -15.8233,11.42451 -19.57125,12.4706c-7.77777,-10.83765 -3.38924,-28.5033 -0.32791,-39.95343c9.78217,-6.08578 25.82187,-13.03094 14.50231,-26.59097c-2.34529,-14.80103 -3.78094,-32.06657 -17.7612,-41.01302c-10.43393,-6.26692 -25.16679,-12.24148 -20.04643,-26.95332c-6.73619,-10.16047 -14.53631,-24.05076 -10.06464,-36.59579c10.19879,-1.80737 9.00111,23.96806 10.94535,18.5213c-3.83083,-8.28799 9.1568,-27.37077 8.41371,-9.7762c-0.78397,6.31187 -0.27625,19.10084 3.19139,6.43372c9.40052,-13.9652 0.18064,24.20846 9.40782,9.05938c6.50935,-2.10711 4.52592,9.32912 10.80828,3.67456c6.87772,5.25431 11.91442,6.4291 11.89108,15.161c9.16496,3.3132 16.00232,8.79374 14.18665,17.50479c17.88632,-4.31568 2.59483,17.992 15.32488,24.21275c6.86198,10.87837 9.94656,21.77702 9.45206,34.69591c14.12406,-3.90332 23.43909,-19.96727 38.02612,-24.96548c16.37712,-7.58971 22.24484,-26.45808 25.80173,-42.75597c1.58806,-7.86366 11.55658,-7.47865 8.4944,1.35465c11.47125,-12.36288 6.68346,-30.36211 9.92291,-45.39627c1.03862,-8.40902 -2.33224,-26.94658 4.74805,-28.67765c10.56419,9.48252 -2.34641,30.44621 7.95137,36.7387c7.25935,-13.5451 4.68625,-29.74639 5.07938,-44.52987c-0.17744,-8.53332 8.28981,-14.18234 7.88048,-2.00179c3.55096,10.5139 -0.40492,32.21981 1.64958,36.04613c8.07187,-12.48013 6.34647,-29.28694 14.90497,-41.01045c11.77513,4.41697 -3.33727,24.23894 -2.9549,34.73938c1.57841,8.06398 13.11919,-23.61583 13.7003,-6.1498c-5.31714,4.6162 -4.42737,17.32646 1.51364,7.08835c2.29477,-8.40776 17.99155,-5.58858 7.86148,2.08536c-7.52231,6.5335 13.19769,6.07413 4.12683,13.25697c6.05191,9.99521 -10.41388,15.90605 -0.99213,23.11055c-0.5419,2.90166 7.51996,8.55031 3.95645,15.5176c3.55255,6.41606 -12.64786,10.58171 -2.07687,14.97137c0.61145,14.96265 -18.29834,25.28072 -14.15472,39.25008c-1.22144,16.83496 -13.92377,30.96262 -27.51764,39.86047c-12.55846,2.38141 -22.29991,7.42523 -33.09448,14.38452c-7.10794,0.12218 -9.63133,0.08891 -13.34837,5.21904c-5.85042,-4.53848 -15.49744,-11.39697 -13.84404,2.34781c2.50378,17.06932 24.15945,18.76619 35.67772,27.84688c12.28496,4.33621 28.35258,18.74889 15.04837,30.03174c-1.28722,16.03848 -22.62962,6.43207 -28.17253,11.98065c-7.95277,1.1889 -7.12421,6.80249 -14.18958,0.10867c-6.88124,9.22229 -22.27397,-0.76007 -29.61287,-4.75983c-11.90405,5.67993 -17.34648,-22.86903 -19.53539,-2.88507c-4.83576,13.58316 -24.476,-1.01483 -24.37943,16.35269c-8.98567,-1.84631 -9.40855,12.19781 -19.04626,10.78702c6.06173,-2.81454 10.18479,-18.90897 -0.69688,-11.14999c-8.89938,-6.76031 -3.76038,16.63571 -11.0985,4.45398c-1.61417,-15.81525 16.34735,-16.12735 26.46889,-18.96848c3.63502,-9.19174 8.23714,-21.27525 7.27283,-30.1396c-9.56728,3.84567 -17.9573,12.08994 -29.11918,12.79019c0.69484,8.35417 -5.77779,21.85307 -15.72966,14.08031c14.30752,5.57813 7.98567,-25.05467 -0.66062,-9.91721c-3.38933,9.9873 -2.96938,-14.429 -12.7722,-7.32185c-5.13792,3.73692 -1.64958,12.39018 -6.75386,2.35237c-0.99273,-2.02373 -1.14814,-4.89752 0.9282,-6.35475z",
+ "elk": "m55.44169,70.04322c-9.46609,7.85901 -22.89024,10.68682 -35.01687,12.13352c-10.34381,-1.03976 -26.56821,7.31529 -15.97385,18.70621c7.56154,15.8879 23.87035,2.81345 34.83344,1.97973c6.74288,1.81747 9.04052,25.43575 14.68986,9.83006c3.84105,-12.93275 21.02425,-8.87709 30.14005,-4.40716c14.1686,4.39434 8.46609,22.12076 16.61138,31.95892c12.24081,12.85411 -1.67636,29.24428 -12.4499,37.76401c-12.75361,7.58044 -18.55984,19.76834 -16.78767,34.30325c0.04941,14.73842 -3.99104,30.75432 3.85034,44.19391c11.85099,1.57538 1.64103,-19.88701 4.92331,-27.40918c1.21214,-13.46214 -1.9274,-30.30058 10.90484,-39.28947c11.4828,-10.01157 23.57063,-19.55112 36.47411,-27.62581c12.21095,-0.62399 10.39299,17.77295 13.97888,26.40175c2.87054,13.20355 4.12752,27.58423 3.69688,40.50841c3.125,10.64038 5.51489,24.0757 -1.41217,31.57294c12.91045,1.34732 24.73607,-12.8914 14.16034,-24.30435c-4.26125,-15.94153 -5.71083,-32.54619 -8.8824,-48.75049c-1.29825,-11.53598 -3.35872,-25.34232 4.83759,-34.86038c12.05826,-0.41389 24.32834,12.14566 37.60088,4.59509c11.65439,-7.49344 33.21696,-6.53802 31.62036,11.82347c-3.2142,14.87534 1.55244,29.61519 2.2346,43.81203c-3.42354,18.43187 -22.15714,27.36267 -29.50255,43.57849c6.98146,9.64319 17.6196,-4.17101 24.65466,-8.5957c-1.74142,-12.99426 11.64835,-19.92599 15.71536,-30.922c6.9856,-14.97188 -3.20459,-32.25409 -2.75711,-46.36688c-5.96602,-12.06912 6.08081,-14.98056 11.07512,-3.9678c8.02901,10.14059 21.03195,16.80963 23.7973,30.43394c7.39731,10.39175 10.8736,22.49284 15.64307,34.03711c4.08353,6.21262 10.6907,18.02594 12.81412,3.55118c3.85464,-8.67506 1.42859,-14.46745 -6.31488,-15.1647c-13.17899,-14.6283 -10.83514,-37.51031 -25.72766,-51.16437c-10.90161,-6.89407 -22.06673,-14.37312 -25.85289,-27.85638c-6.71298,-10.98305 -8.98033,-24.34339 -5.63237,-36.85001c4.36508,-2.10748 7.17406,6.33847 3.86676,-3.07584c-7.08252,-11.81364 -21.74017,-16.42101 -34.30881,-20.12214c-13.86351,-4.31435 -28.287,-5.60372 -42.65346,-3.49644c-12.2518,3.14196 -25.56529,6.21495 -37.68355,0.56779c-10.80199,-6.45414 -23.34553,-5.2407 -34.37726,-0.35921c-8.31817,4.58586 -24.95089,-0.17232 -13.39404,-9.69791c-4.65558,-4.05794 -21.26908,7.53993 -8.94252,-2.36752c5.90361,-6.02524 8.73024,-18.58166 6.56192,-25.10496c-2.33636,8.03588 -5.7029,7.70039 -5.40219,-0.79288c-2.03959,15.14413 -12.13537,5.38195 -10.55587,1.00194c0.66773,6.1233 -2.56635,12.84344 -5.72467,3.23117c-0.3636,6.21597 2.87773,15.15818 -3.77972,17.71219c10.15314,9.32419 -13.24982,2.42432 -13.20099,-4.96754c-6.18471,-9.39983 -7.12771,-4.31873 -4.60736,3.21883c-4.59348,-3.34352 -10.47613,-9.66862 -5.36225,0.14767c5.84781,13.3303 21.7189,7.94385 31.61781,10.45553z",
+ "fish": "m127.20683,242.3436c1.50244,-15.94504 5.02446,-32.41927 12.88557,-46.10178c7.51215,-8.98547 19.63693,-8.71681 29.76314,-11.79086c-14.18819,-3.80443 -27.43222,-10.54059 -40.42705,-17.66788c-21.27006,-9.23157 -42.92073,4.06975 -62.09324,13.40138c-14.23518,6.80144 -28.31641,14.82532 -43.64474,18.1933c-10.05519,-6.98578 -1.65744,-26.80461 5.41335,-35.17271c8.9525,-11.55655 22.2043,-17.52696 31.90982,-28.07993c4.26963,-14.90575 -15.40321,-18.57297 -24.24153,-24.42971c-13.70577,-6.20512 -25.35116,-16.36843 -35.77064,-27.71589c24.19748,-1.40994 45.60231,13.61476 67.43612,22.73716c11.80957,4.27464 22.94788,10.28683 33.98999,16.23396c5.06265,-0.02556 22.24189,3.73252 20.52978,-2.03984c-12.8773,-0.57095 -11.58655,-17.22836 -2.92075,-23.83247c12.73701,-10.02242 28.26479,-15.93932 38.86842,-29.21478c4.65193,-3.7341 7.09996,-12.86792 11.03157,-15.74994c16.95282,13.24852 26.87143,34.14735 36.22475,53.96581c15.23062,3.44089 30.61246,6.23184 46.13637,7.07419c15.15991,6.93107 28.10406,19.01068 39.97369,31.27808c8.99451,6.78525 11.39157,25.24843 -0.83481,28.95241c-30.16479,16.24658 -63.84666,21.21309 -97.06413,22.77441c-4.67992,-0.32996 -8.75485,0.18372 -8.78621,6.33609c-2.92581,8.76227 -4.12184,18.94467 -9.62984,26.07907c-6.07878,-1.55455 -0.31998,-19.45975 -6.56294,-10.95245c-12.27982,13.32922 -27.04962,23.32567 -42.18671,32.26515c0,-2.18091 -0.00002,-4.36198 0.00002,-6.54276z",
+ "hare": "m95.22337,299.53546c-10.68459,-4.81824 3.25798,-14.45154 8.53654,-18.71286c3.55556,-3.28177 -20.37717,0.46036 -10.27298,-10.93198c11.08577,-9.30692 6.89815,-25.05217 -4.18282,-32.37115c-15.24973,-10.2968 -34.81611,-19.10942 -40.44992,-38.33635c-5.69662,-11.9756 7.81301,-24.58835 -0.87631,-35.40263c-6.99412,-14.0412 1.177,-28.68323 6.25594,-41.69022c2.33568,-17.99253 -11.97227,-32.2212 -19.84076,-47.00306c-9.74298,-14.12588 -15.35928,-30.58578 -16.16633,-47.73895c-2.11884,-7.3217 0.22601,-18.6921 8.68694,-8.82097c17.71845,14.18765 37.17033,27.65002 49.57116,47.06949c2.34735,7.01447 11.74658,27.34441 12.27144,8.93449c0.24582,-25.30315 7.97399,-52.90002 27.77682,-69.85634c13.46954,-12.2734 20.73361,9.21683 21.36209,20.13735c3.50587,21.487 -2.30553,42.79486 -8.78146,63.09225c-2.37738,9.43285 -8.56868,35.2823 9.08899,25.75117c40.67693,-15.70451 89.96005,0.78945 116.45525,34.52606c12.17961,16.33485 17.5135,37.32133 17.39308,57.47189c-6.27155,11.83836 17.03061,-0.22177 8.58704,13.43613c-4.97064,15.1297 -19.01465,23.33925 -28.85207,34.75906c-10.01038,9.15085 -2.58298,28.71576 -19.13725,31.59863c-24.15469,7.44629 -49.5191,10.70804 -74.66498,12.6066c-14.07156,2.88287 -20.90056,-13.20758 -7.41347,-19.89679c6.46608,-9.96799 24.96535,-10.66653 30.46185,-12.24564c-13.13484,1.28516 -29.33337,-4.0759 -40.40141,4.05872c-6.70294,10.88138 -12.07141,25.20364 -26.12755,28.30951c-6.3168,1.75439 -12.8116,3.16129 -19.27982,1.25558z",
+ "he_hen": "m176.04681,296.29803c-8.82596,-3.77927 -18.43298,1.74493 -27.86224,-3.75964c7.62581,-0.4744 19.08463,-0.03574 17.06104,-11.34488c3.33665,-13.20654 -3.43475,-27.06163 2.20258,-38.55534c-8.82878,-8.42361 -18.09561,-18.39673 -22.80272,-30.16238c-0.9447,4.74663 -1.81537,8.52257 -3.158,0.33916c-0.76965,-4.00471 -0.30261,9.89931 -3.24527,0.14346c-3.10373,-8.67493 -11.4597,-31.29446 -14.05236,-10.31462c-1.0768,10.8262 -4.45592,3.14465 -6.0004,-3.72562c-1.56924,-13.22943 -7.23737,-25.48523 -8.72193,-38.68883c5.80227,-8.36407 -0.82715,-9.5029 -3.91098,-1.15848c-3.39584,13.23767 -6.30494,26.33923 -2.7624,39.9769c-4.70789,3.85124 -13.79493,-17.92216 -9.61541,-26.27414c3.62592,-9.45018 2.81974,-19.09607 3.42313,-25.48878c3.31529,-7.21146 -3.22571,-15.04807 0.25123,-22.73853c-8.88477,9.68631 -16.83011,16.38615 -14.33428,31.58234c-1.10283,3.79079 3.703,25.58844 0.64231,17.56184c-5.77861,-15.66916 -5.78305,-33.02271 -1.43442,-49.01125c0.00535,-12.20366 -9.89253,21.0744 -9.16187,4.76299c-0.93676,-12.30159 4.13303,-25.82869 8.93452,-35.55499c-5.46675,-6.50523 -23.17289,-1.89566 -14.79648,-15.70558c8.24343,-7.01884 7.35999,-16.67057 -3.85936,-8.18394c-17.3246,12.72424 -31.69814,29.07174 -47.58007,43.52234c15.25898,-19.61487 32.46107,-38.59572 53.7519,-51.75492c20.64337,-12.99951 50.5769,-14.34346 68.38963,4.28573c4.53072,7.97979 15.06177,13.26968 17.57275,20.45337c-1.84586,10.76744 5.10652,16.10654 5.85289,25.57021c4.38731,7.30244 -3.95828,20.43125 8.52597,16.64671c14.20137,-0.01996 33.63664,-3.16645 34.74754,-20.87874c5.66772,-25.50935 8.27689,-54.0092 26.4256,-74.31131c10.08655,-5.89642 3.82147,-4.32716 -3.54926,-5.29837c-6.51613,-7.58361 6.57724,-19.75743 13.02319,-21.14511c-1.112,-17.9227 10.53479,10.74471 13.86426,-2.41437c4.99586,0.09501 7.43144,12.08141 10.46855,2.29789c9.05719,7.66376 18.6297,19.25661 6.66562,29.92943c13.61102,6.52517 -13.86911,2.29947 -2.14532,12.29652c9.6759,9.35194 2.83621,26.62759 -5.10654,34.15639c-0.3085,5.66077 9.31277,13.88494 11.24728,20.75249c9.99454,19.34809 11.9986,42.36646 8.16797,63.56847c-5.39346,19.98318 -25.46588,28.67906 -39.65833,41.37386c-12.12337,9.93893 -7.85776,27.37115 -13.59781,40.42342c0.57072,7.5369 4.77751,16.1196 10.7547,20.66925c8.66214,4.84064 18.81006,7.96561 25.81393,15.05286c-6.39667,3.34055 -19.43893,-10.21753 -19.56508,0.39017c-9.50252,-12.34393 -23.7677,-4.06104 -34.21234,-13.55405c8.69193,1.65643 19.99033,0.8027 10.47188,-9.61145c-3.75841,-8.80696 -15.07852,-11.84618 -15.37883,-22.49022c-10.66643,6.69647 -17.92447,15.81358 -25.66988,24.90395c-12.85808,-0.80322 -13.41248,25.11618 0.47165,24.73163c5.7019,1.45825 27.10161,9.40335 10.25006,7.35107c-5.02289,-0.89746 -10.47203,-4.04099 -10.31842,1.85727c-2.30338,-0.41431 -4.35982,-1.56003 -6.48019,-2.47418z",
+ "hen": "m131.70792,299.20142c-2.65045,-8.04401 -50.59061,2.01245 -25.50379,-8.40613c9.71836,-2.24731 29.67359,0.57056 9.8335,-5.50568c22.5928,7.62228 32.60569,-19.08859 34.06422,-37.09636c-21.02885,-6.55212 -24.67069,-31.02429 -46.83106,-37.61485c-16.88445,-13.23645 -41.63732,-12.83168 -52.35418,-33.24014c-10.17476,-18.17259 -4.4284,-40.29292 -2.74405,-59.92338c4.00956,-20.72375 12.14967,-41.69897 10.53991,-62.75727c-16.41068,9.44812 -22.4106,-11.67328 -22.78485,-18.27062c-12.07958,3.08904 -19.7317,3.22594 -6.59584,-7.5194c5.87008,-8.14037 8.78346,-25.92081 18.16113,-23.25189c2.47408,-10.763 9.04029,4.89351 16.30021,-4.61621c4.44867,3.35889 13.85731,7.10325 3.42817,13.02555c18.83147,9.50194 34.07959,23.95835 41.92437,42.43233c7.86127,18.77559 23.52317,39.06593 48.8149,33.98585c22.90038,3.93186 49.73083,-9.80992 48.68822,-32.86776c0.44391,-16.33654 16.52325,-54.48924 38.19395,-35.09801c16.24046,6.22802 34.92778,21.65468 31.09642,39.16159c-2.21887,18.0508 -0.50452,36.25767 1.60162,54.45551c-13.60181,10.0825 -11.15982,27.59631 -20.65894,40.7838c7.8804,18.56862 0.29095,38.62871 -12.60841,53.70848c-12.90314,13.89935 -31.76248,26.24356 -52.66508,24.4381c-7.98578,13.29396 9.42929,24.99069 15.57339,25.73553c-16.01053,-5.1321 -13.75549,4.70874 -8.47672,15.2244c4.94576,19.6875 -10.58037,-17.53909 -20.60904,0.27255c-7.77597,7.68976 -38.86531,10.29276 -13.69539,1.07587c21.48048,-7.96875 -24.12099,-12.95142 -13.99879,5.00586c3.34996,7.49203 22.77361,10.79092 2.32814,7.93628c-9.02753,-4.74515 -13.85625,12.10397 -21.02202,8.92599zm43.09088,-34.62769c7.8596,-9.56569 10.12141,-37.24054 -6.87671,-17.06372c-13.43553,10.88889 -18.29311,29.6301 6.87671,17.06372z",
+ "mouse": "m0.99942,221.57315c18.97592,-5.2153 38.89368,-5.72223 58.37582,-7.77921c22.496,-2.19991 45.89505,-1.95135 67.14781,-10.93486c14.09158,-5.66957 18.06422,-22.34355 18.92189,-36.61246c3.853,-24.50212 17.5325,-49.94102 40.26784,-59.44455c8.81084,-4.72752 21.73279,1.24299 28.77051,-3.16475c-8.53821,-11.67851 9.86266,-25.18666 17.60304,-12.64201c9.90706,2.44754 20.13632,-4.12984 22.40773,-13.63184c8.92409,7.01573 17.55354,16.51189 28.21455,21.93088c10.14639,3.852 24.18005,17.58312 11.18048,27.34964c-8.74753,9.55273 -22.39651,8.48746 -31.55023,16.51577c-9.2032,7.60971 -8.39032,20.69223 -4.77994,31.13091c0.58701,11.39519 9.68161,13.02966 17.70996,16.03508c1.32019,7.11591 -9.48019,9.15216 -14.76065,10.85889c-11.37581,1.93378 -22.26419,-2.9012 -30.79645,-10.59497c-7.75803,-9.73157 -17.02081,0.98111 -14.42018,10.56955c-13.10742,11.20265 10.79541,5.32968 13.63931,12.79547c-11.33516,4.36475 -24.3324,2.06448 -36.29933,1.86723c-15.70055,0.23059 -28.91441,-10.20818 -44.0015,-12.87645c-9.31265,3.4888 -17.24791,11.49408 -27.66536,12.5939c-30.59707,5.30119 -61.77245,4.85931 -92.6703,6.59238c-8.95057,-0.1062 -18.97236,1.51553 -27.29502,-0.55859z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/arrow.json b/files_svgedit/svg-edit/extensions/shapelib/arrow.json
new file mode 100644
index 000000000..5f75f26a2
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/arrow.json
@@ -0,0 +1,28 @@
+{"data": {
+ "10": "m0.99679,148.19614c0.277,-34.75176 -0.17724,-69.54997 2.27791,-104.24061c60.32762,11.41171 119.94372,30.08407 179.25477,46.87597c3.18407,-17.04019 1.68541,-31.17523 4.4519,-46.93008c38.1039,33.15254 75.86421,66.77718 112.07695,102.003c-34.74261,39.95821 -74.59364,74.65916 -113.71667,110.1933c-1.26689,-16.54773 -2.53401,-33.09534 -3.80092,-49.64307c-57.66159,16.00916 -118.64064,32.56108 -176.67504,47.19652c-3.94662,-33.77068 -3.83062,-70.54794 -3.8689,-105.45503z",
+ "11": "m136.44681,226.75766l47.24773,-47.40907l-91.35118,0l-91.35098,0l0,-29.34846l0,-29.34849l90.303,0c49.66658,0 90.30293,-1.48752 90.30293,-3.30561c0,-1.81805 -19.77211,-23.15214 -43.93797,-47.40906l-43.93811,-44.1035l40.61224,0l40.61209,0l62.02386,62.14279l62.02383,62.14276l-62.14281,62.02386l-62.14279,62.02386l-42.75481,0l-42.75491,0l47.24786,-47.40909z",
+ "12": "m116.00724,294.49442c-8.01179,-8.01181 -6.96065,-12.86337 12.51841,-57.77466c9.83598,-22.67787 17.88353,-41.89153 17.88353,-42.69699c0,-0.8054 -27.16052,-1.46442 -60.3569,-1.46442l-60.3569,0l0,-42.47337l0,-42.47337l60.83526,0c46.90741,0 60.31158,-1.27951 58.54825,-5.58862c-1.25784,-3.07373 -9.83818,-23.47047 -19.06743,-45.32602c-17.39725,-41.19823 -17.39179,-52.24659 0.02688,-55.67119c8.66862,-1.70424 143.62872,129.24032 148.26757,143.85621c-44.95403,52.18671 -98.68933,106.81281 -148.18829,154.97751c-2.60997,0 -7.15958,-2.41428 -10.11037,-5.36508z",
+ "13": "m167.5984,129.81894c13.45454,0 26.90909,0 40.36363,0c0,13.45454 0,26.90909 0,40.36363c-13.45454,0 -26.90909,0 -40.36363,0c0,-13.45454 0,-26.90909 0,-40.36363zm-58.30304,0c14.9494,0 29.89909,0 44.8485,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89909,0 -44.8485,0c0,-13.45454 0,-26.90909 0,-40.36363zm-53.81818,0c14.9494,0 29.89908,0 44.84848,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89909,0 -44.84848,0c0,-13.45454 0,-26.90909 0,-40.36363zm-53.81818,0c14.9494,0 29.89908,0 44.84849,0c0,13.45454 0,26.90909 0,40.36363c-14.94941,0 -29.89908,0 -44.84849,0c0,-13.45454 0,-26.90909 0,-40.36363zm165.9394,83.23706c14.2021,-0.91132 28.40395,0.64389 42.60606,-0.26743c0.91125,-14.20201 0.48917,-28.40405 1.40042,-42.60606c13.29086,0 27.91505,0 41.20563,0c0,-13.45454 0,-26.9091 0,-40.36363c-13.45454,0 -26.90909,0 -40.36363,0c0,-14.94952 0,-29.899 0,-44.84848c-14.9494,0 -29.89908,0 -44.84848,0c0,-13.45454 0,-26.90909 0,-40.36363c14.9494,0 29.89908,0 44.84848,0c0,13.45454 0,26.90909 0,40.36363c13.29059,0 27.91478,-0.66666 41.20563,-0.66666c0.91125,14.20197 0.48918,29.0707 1.40044,43.27271c14.20209,0.91129 28.60425,-0.07731 42.80637,0.83398c0,13.29074 -0.20032,28.48132 -0.20032,41.77208c-14.9494,0 -29.89908,0 -44.84848,0c0,14.94951 0,29.89897 0,44.84848c-13.45454,0 -26.90909,0 -40.36363,0c0,13.45454 0,26.90909 0,40.36363c-14.9494,0 -29.89908,0 -44.84848,0c0,-13.29074 0,-29.0479 0,-42.33865z",
+ "14": "m158.38327,149.9911l-83.00266,-148.9972l149.24145,148.9972l-149.24145,148.99712l83.00266,-148.99712z",
+ "15": "m175.41861,150.04552l-148.89816,-149.05299l98.06119,0l148.89816,149.05299l-148.89816,149.05287l-98.06119,0l148.89816,-149.05287z",
+ "16": "m227.52928,183.22569c6.14276,-5.95375 12.01762,-12.81764 17.19296,-18.97911l-155.07133,-2.82724l-21.27044,24.3479l-67.38522,-2.09119c8.44345,-11.0853 17.69294,-24.10754 24.55062,-33.88853l-24.39403,-32.88164l71.89852,0l14.62907,20.54468l158.32403,0l-19.63887,-20.4987c6.06082,-6.45992 15.03049,-15.08081 19.89622,-19.60087l53.24701,52.24467l-53.36812,53.05513l-18.61044,-19.42511z",
+ "bent_up": "m1.00136,224.73827l204.13,0l0,-149.15997l-31.28999,0l62.57999,-74.57997l62.58002,74.57997l-31.29001,0l0,223.73997l-266.71,0z",
+ "callout": "m0.99757,0.99642l193.63145,0l0,111.75l53.81497,0l0,-37.25l50.55357,74.49999l-50.55357,74.50003l0,-37.25002l-53.81497,0l0,111.75l-193.63145,0z",
+ "chevron": "m0.99844,0.99688l223.49919,0l74.49986,149.00068l-74.49986,149.00134l-223.49919,0l74.49984,-149.00134l-74.49984,-149.00068z",
+ "corners": "m78.29672,150l-55.17469,-55.1747l0,27.58735l-22.12203,0l0,-121.41265l121.41265,0l0,22.12203l-27.58736,0l55.17471,55.17471l55.17471,-55.17471l-27.58736,0l0,-22.12203l121.41264,0l0,121.41265l-22.12204,0l0,-27.58735l-55.1747,55.1747l55.1747,55.17471l0,-27.58736l22.12204,0l0,121.41264l-121.41264,0l0,-22.12204l27.58736,0l-55.17471,-55.17468l-55.17471,55.17468l27.58736,0l0,22.12204l-121.41265,0l0,-121.41264l22.12203,0l0,27.58736l55.17469,-55.17471z",
+ "diamond": "m228.23334,205.75699c-12.96465,-22.71989 -62.74901,-33.9996 -160.88079,-36.45064l-66.35706,-1.65739l0,-19.88501l0,-19.88482l50.08599,0c59.04541,0 101.26503,-4.08251 135.71376,-13.12332c20.32901,-5.33509 27.0845,-8.73719 36.27359,-18.26725l11.29199,-11.71121l32.38853,32.49907l32.38852,32.49925l-32.75113,32.72415l-32.75122,32.72433l-5.40219,-9.46716z",
+ "dotted": "m164.76302,54.29618c-12.89404,-14.08136 13.13254,-37.91006 24.83243,-21.67826c9.98653,14.06865 -12.21164,31.95572 -24.83243,21.67826zm34.52623,32.04741c-10.53665,-15.50334 18.2944,-32.06738 27.41472,-16.58083c10.82574,16.19412 -18.42853,34.68893 -27.41472,16.58083zm39.30569,38.77469c-13.16362,-8.91086 -0.08168,-29.46533 13.54875,-27.63215c18.93346,2.88981 13.87328,34.44158 -4.59297,32.89478c-3.58466,-0.41574 -6.77832,-2.45136 -8.95578,-5.26263zm32.87781,34.23642c-11.00845,-13.99648 14.37656,-32.37918 25.04797,-19.05171c11.60712,14.82527 -14.29718,34.39392 -25.04797,19.05171zm-63.84386,0.7675c-12.23796,-11.58463 5.72536,-30.30273 19.24007,-25.41679c19.63696,6.28566 5.03751,36.50668 -12.48737,29.64096c-2.41074,-1.14194 -4.56958,-2.71278 -6.7527,-4.22417zm-52.05359,0c-14.38365,-13.43323 11.89731,-35.50046 24.20743,-21.44815c12.48965,14.64734 -10.94827,35.43011 -24.20743,21.44815zm-51.41751,-0.7675c-11.01524,-13.99239 14.38364,-32.38554 25.04439,-19.04626c11.57417,14.84886 -14.25791,34.38168 -25.04439,19.04626zm-48.97159,0.7675c-14.38364,-13.43323 11.89733,-35.50046 24.20746,-21.44815c12.48962,14.64734 -10.94829,35.43011 -24.20746,21.44815zm-51.41319,-0.75569c-12.62148,-16.51503 21.51373,-34.53826 27.20482,-13.82039c4.20761,13.86485 -18.57945,25.93829 -27.20482,13.82039zm232.73729,36.71002c-12.26451,-12.7252 9.54947,-34.95583 22.63777,-23.37347c16.16324,11.53831 -5.25334,38.27226 -20.09267,25.93422c-0.83693,-0.86462 -1.69453,-1.70929 -2.5451,-2.56075zm-37.22105,31.5554c-10.33875,-14.74719 16.53384,-30.93315 26.24101,-17.10368c12.66234,14.69044 -12.76988,34.70573 -24.48114,20.0298l-1.75987,-2.92612zm-33.2933,39.2449c-11.17,-10.21844 4.17313,-26.31229 16.33257,-23.575c18.50797,4.77472 6.84483,34.45702 -10.13109,28.82402c-2.6304,-0.90369 -4.76476,-2.91159 -6.20148,-5.24902z",
+ "hand_2": "m166.23018,238.662c7.92778,-2.90976 14.43034,-5.61938 2.1153,-5.69868c-10.87593,1.46172 -39.01099,-9.28242 -16.4619,-14.56342c14.10701,-5.508 46.21144,7.21423 46.38257,-14.54736c-2.55197,-13.63786 -43.96396,-2.98952 -30.34076,-21.27969c15.00345,-6.1348 44.75407,8.31958 49.78708,-10.66391c-4.61371,-18.40675 -33.47118,-6.65964 -47.97568,-11.74664c-14.06097,2.90031 -17.76392,-15.58949 -1.98296,-12.79868c36.48125,-1.96817 73.21696,0.92035 109.57253,-3.09619c5.87265,-3.2529 10.21371,-23.26295 2.80267,-24.61046c-52.95885,-1.09735 -106.01129,-0.08873 -158.88631,-3.36192c-18.99625,-0.19729 -4.48207,-20.48157 9.55508,-15.71787c13.37119,-4.37856 18.67023,-15.85947 28.4838,-27.19597c5.01488,-24.77942 -19.08717,-15.58241 -28.93028,-8.33138c-10.99126,7.20572 -29.89664,22.16276 -39.92577,30.01463c-8.79154,6.3571 -29.0466,13.41131 -41.36795,21.93291c-10.53185,3.7428 -22.05687,1.87943 -32.40108,2.55152c0,33.57336 0,67.14623 0,100.71958c29.2655,12.743 60.06093,23.93646 92.50566,22.65599c19.00592,-0.07739 38.55775,0.63341 57.06799,-4.26245zm-120.57521,10.76822c-14.93961,-5.74022 -29.85212,-11.55359 -44.65637,-17.63553c0.70846,-41.92598 1.41691,-83.85243 2.12533,-125.77841c11.81984,-0.44887 29.35853,5.41407 37.78343,-3.21891c22.65079,-7.26991 37.35686,-23.34933 57.21348,-35.41785c13.97373,-10.98014 25.13529,-14.72766 39.56827,-23.05481c10.96249,-5.06954 16.89815,-2.48073 29.24257,-0.27045c5.38396,8.81045 12.06773,13.36412 8.59946,30.1482c-7.23705,3.64039 -16.6288,28.10783 -2.4068,28.30228c39.59416,3.79424 79.82585,-1.53866 119.10855,5.09266c9.78171,13.24281 11.64719,42.99407 -6.25568,51.39202c-17.13269,4.95341 -35.19667,2.49629 -52.7989,3.09193c-0.00107,12.52824 2.07022,28.51608 -11.83537,34.80946c-10.26779,13.39197 -10.98985,33.06551 -27.53502,42.86476c-13.91499,14.25851 -33.72333,18.66306 -53.04445,18.19296c-31.68189,0.4295 -65.02994,3.46667 -95.10849,-8.51738l0,-0.00095z",
+ "hand": "m136.98543,214.15889c-14.70618,-5.74251 -4.62521,-24.05643 -14.3905,-33.27538c-12.96347,-7.75244 -2.12349,-24.16507 -12.57821,-33.28812c-7.48801,-6.64952 -5.24203,-16.62421 -3.67915,-25.18983c-29.75101,-0.23549 -59.53337,0.62366 -89.25697,-0.78464c-15.11522,1.28053 -20.03182,-18.26941 -12.80666,-28.85114c7.00419,-11.24166 21.87759,-8.31262 33.12609,-9.4029c64.97946,-0.76864 129.97618,-0.61134 194.95673,0.02921c17.26189,0.80067 37.01695,-1.19489 50.6566,11.68779c16.24808,15.16693 16.0166,39.34441 16.04852,59.94771c-0.42267,19.21857 -2.90109,42.02173 -20.4863,53.46951c-16.36914,10.95175 -36.93741,7.66907 -55.55533,8.62302c-27.94264,-0.30014 -56.07063,1.04456 -83.86891,-2.2673l-2.16592,-0.69792l0,0zm69.33224,-10.55814c9.631,-11.23128 -3.5211,-20.50227 -14.65393,-17.55965c-16.14473,-0.10535 -32.65453,-1.7021 -48.52592,1.75482c-13.67432,5.19589 -4.85582,21.54512 7.46478,18.25877c18.04872,1.02443 36.47603,1.82143 54.28616,-1.68709l1.42891,-0.76686zm65.93199,-2.17656c15.66348,-8.69865 15.78064,-28.60548 16.25079,-44.24881c-0.34195,-16.50655 1.70639,-34.58434 -7.04581,-49.36581c-7.23798,-10.84158 -20.71933,-14.52557 -33.13705,-14.12024c-23.36646,0.0377 -47.0793,-1.82723 -70.16504,2.52512c-15.66467,3.36275 -22.23152,20.93031 -23.45795,35.19015c-0.48341,13.80043 -1.82124,28.00842 1.22505,41.56039c7.24641,5.02983 15.89499,-9.13847 19.17191,-15.4227c4.31766,-11.67575 -0.61995,-26.25061 8.10953,-36.19362c8.72269,-9.46424 24.96402,-8.53419 32.52521,1.88722c8.3812,9.23244 -0.48325,21.69592 1.82307,32.51563c4.15211,9.93069 -0.70021,19.45959 -0.85791,28.5067c4.13835,6.87068 2.87872,15.02933 1.61143,22.50597c16.21062,-0.57724 32.86133,1.70529 48.65034,-2.71872c1.84845,-0.69202 3.61401,-1.59238 5.29642,-2.62128zm-126.53741,-35.9437c2.18771,-13.69858 -18.65493,-12.59653 -20.49308,-1.57007c-4.38604,12.23279 17.61123,15.56906 20.78048,7.03215c0.03699,-1.82657 -0.14053,-3.64476 -0.2874,-5.46208zm62.45076,0.42249c1.41585,-11.79691 -20.5592,-11.91444 -24.75133,-3.63126c-2.34377,5.03215 -10.03961,15.25429 1.13329,12.59268c7.54675,-1.70357 25.12254,3.75204 23.61804,-8.96143zm-62.44263,-31.11197c-0.75351,-2.94205 3.03209,-10.28735 -1.13232,-9.92064c-9.20967,1.01493 -19.08115,-0.45296 -27.70964,3.18962c-7.77171,10.63712 5.24397,21.0274 15.9218,17.53934c7.79146,0.11475 13.91219,-1.24452 12.92017,-10.80832zm61.0041,7.53122c8.85812,-9.53879 -4.95708,-21.9593 -14.94496,-15.6684c-10.39732,5.40628 -7.29182,25.10663 6.58635,19.17703c2.96956,-0.54494 6.1384,-1.30057 8.35861,-3.50864zm-53.18405,-38.39041c2.00339,-3.50816 4.00681,-7.01634 6.01019,-10.52453c-44.99024,0.24061 -90.00227,-0.61648 -134.97418,0.73022c-12.21447,-3.32573 -22.07768,15.22181 -6.82234,18.35822c24.02138,3.10667 48.39057,1.52395 72.56345,1.97845c19.07089,-0.00607 38.14179,-0.01187 57.21268,-0.01793c2.0034,-3.50815 4.00681,-7.01634 6.01019,-10.52452z",
+ "in_circle_1": "m5.82933,197.43428c40.71335,-0.01967 134.41318,-0.35846 180.09581,-0.39397c0,16.34004 0,32.68033 0,49.02061c32.58316,-32.50494 65.16631,-65.00987 97.74948,-97.51482c-31.92815,-31.66348 -63.85603,-63.3272 -95.78392,-94.99068c-0.78604,15.0691 -1.57207,30.13822 -2.35809,45.20756c-59.53047,-0.36446 -119.11517,1.07731 -178.59646,-1.67522c0.61495,-72.0702 150.25177,-122.40517 212.67849,-79.3467c34.44215,24.58492 61.89983,56.78898 72.41017,96.54306c3.07645,22.14599 2.45142,44.78936 0.58615,67.02389c-6.63419,36.33044 -31.19992,67.07545 -59.56813,89.58617c-20.38606,15.81168 -45.18452,26.98569 -71.36909,26.70041c-75.26421,9.28406 -124.16029,-34.86111 -155.84441,-100.16032z",
+ "inner": "m197.26169,150.29735l-74.64867,-74.64867l0,37.32433l-80.12502,0l0,-111.97301l215.02399,0l0,298.5947l-215.02399,0l0,-111.97301l80.12502,0l0,37.32433l74.64867,-74.64867z",
+ "left_right": "m0.99835,150.00092l86.49609,-86.49651l0,43.24814l125.35546,0l0,-43.24814l86.49605,86.49651l-86.49605,86.49605l0,-43.24803l-125.35546,0l0,43.24803l-86.49609,-86.49605z",
+ "left_up": "m0.99865,224.5l74.50004,-74.5l0,37.25l111.74991,0l0,-111.75l-37.25,0l74.5,-74.5l74.5,74.5l-37.25,0l0,186.25l-186.24989,0l0,37.25l-74.50005,-74.5z",
+ "pentagon": "m0.99791,0.9981l162.54547,0l135.45454,149.40899l-135.45454,149.40898l-162.54547,0z",
+ "recycle_3": "m28.22058,93.28644c0.00678,-2.58051 2.31667,-18.40222 5.13495,-35.15953c8.78786,-52.25238 8.91713,-52.48297 20.07468,-35.82898l6.60126,9.85321l19.30534,-9.74535c25.53492,-12.88995 56.00401,-17.65838 84.01221,-13.14781c11.88918,1.91477 24.50447,5.02692 28.034,6.91587c7.00751,3.7502 6.55832,6.97083 -4.61034,33.05528c-6.12129,14.29643 -6.70886,14.70388 -17.2827,11.98577c-17.99704,-4.62608 -47.30141,-3.16897 -61.44969,3.05553l-13.26538,5.83627l9.31132,9.7189c5.12125,5.34554 8.02238,10.51565 6.44702,11.48924c-1.57542,0.97362 -20.7427,2.87124 -42.59392,4.21677c-32.78424,2.01891 -39.72768,1.62653 -39.71874,-2.24516zm168.81314,144.07051l-14.20186,-18.81009l12.93088,-12.50398c13.30882,-12.86928 22.90733,-30.93761 27.13603,-51.08145l2.41319,-11.49524l-13.91847,2.22554c-7.65517,1.22421 -13.96558,1.06514 -14.02313,-0.35333c-0.26878,-6.62247 36.12752,-71.90508 39.66528,-71.14616c5.56261,1.19325 61.9985,50.07314 61.9985,53.6975c0,1.61765 -5.93121,3.88967 -13.18036,5.04884l-13.18039,2.10753l-1.30084,22.476c-1.66846,28.82635 -16.85831,62.09589 -38.00682,83.24434c-8.4704,8.47049 -16.91487,15.4008 -18.76544,15.4008c-1.85062,0 -9.75555,-8.46469 -17.56657,-18.81029zm-128.20031,52.72328c0,-2.07986 2.23119,-8.0961 4.95819,-13.36954c4.94765,-9.56766 4.91901,-9.61411 -13.52617,-21.86105c-28.85884,-19.16116 -50.30965,-53.17105 -57.05687,-90.46291l-2.21202,-12.22588l15.77176,-2.16168c32.51166,-4.45622 32.80855,-4.32152 39.31982,17.83711c4.39381,14.95265 9.79779,23.91347 21.44681,35.56244c8.5651,8.56514 16.76965,14.83324 18.23236,13.92926c1.46265,-0.90396 3.57973,-6.24536 4.70464,-11.86984c1.1249,-5.62448 3.47056,-10.22638 5.21256,-10.22638c3.99942,0 41.66188,59.38374 42.2598,66.63249c0.39931,4.84137 -19.96001,13.22382 -73.01952,30.06421c-3.38333,1.07379 -6.09135,0.25229 -6.09135,-1.84824z",
+ "turn_17": "m187.66985,234.28424l2.06375,-22.20483l-24.28615,-3.86421c-61.48712,-9.78288 -121.75832,-51.26649 -155.31676,-106.90179c-6.02069,-9.98148 -10.05047,-19.59818 -8.95503,-21.37048c2.51272,-4.06578 63.74106,-36.43469 68.91894,-36.43469c2.11224,0 7.18627,5.95309 11.27556,13.22911c17.44035,31.03078 62.57552,63.39609 94.35383,67.65826l12.88387,1.7281l-2.21523,-19.19039c-2.29968,-19.92216 -1.65292,-24.10554 3.72659,-24.10554c3.43987,0 106.12749,76.50481 109.06303,81.25475c2.22696,3.60321 -11.89679,16.9705 -62.46501,59.11911c-21.96555,18.30804 -42.4514,33.28745 -45.52422,33.28745c-4.91821,0 -5.33987,-2.65765 -3.52318,-22.20483z",
+ "turn_reverse": "m298.99997,168.62498c0,-51.43148 -133.41916,-93.12499 -297.99997,-93.12499l0,-74.49999l0,0c164.58081,0 297.99997,41.69347 297.99997,93.12499l0,74.49999c0,42.46484 -91.92749,79.55168 -223.49998,90.16789l0,37.25l-74.49999,-71.54289l74.49999,-77.45709l0,37.25l0,0c88.72033,-7.15858 161.96952,-26.67409 198.62153,-52.91789",
+ "u_turn": "m1.00059,299.00055l0,-167.62497l0,0c0,-72.00411 58.37087,-130.37499 130.375,-130.37499l0,0l0,0c34.57759,0 67.73898,13.7359 92.18906,38.18595c24.45006,24.45005 38.18593,57.61144 38.18593,92.18904l0,18.625l37.24997,0l-74.49995,74.50002l-74.50002,-74.50002l37.25,0l0,-18.625c0,-30.8589 -25.0161,-55.87498 -55.87498,-55.87498l0,0l0,0c-30.85892,0 -55.875,25.01608 -55.875,55.87498l0,167.62497z",
+ "up": "m1.49805,149.64304l148.50121,-148.00241l148.50121,148.00241l-74.25061,0l0,148.71457l-148.5012,0l0,-148.71457z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/dialog_balloon.json b/files_svgedit/svg-edit/extensions/shapelib/dialog_balloon.json
new file mode 100644
index 000000000..e3d147993
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/dialog_balloon.json
@@ -0,0 +1,9 @@
+{"data": {
+ "1": "m0.99786,35.96579l0,0c0,-19.31077 15.28761,-34.96524 34.14583,-34.96524l15.52084,0l0,0l74.50001,0l139.68748,0c9.05606,0 17.74118,3.68382 24.14478,10.24108c6.40356,6.55726 10.00107,15.45081 10.00107,24.72416l0,87.41311l0,0l0,52.44785l0,0c0,19.31078 -15.2876,34.96524 -34.14584,34.96524l-139.68748,0l-97.32507,88.90848l22.82506,-88.90848l-15.52084,0c-18.85822,0 -34.14583,-15.65446 -34.14583,-34.96524l0,0l0,-52.44785l0,0z",
+ "4": "m1,1l49.66667,0l0,0l74.5,0l173.83334,0l0,115.8889l0,0l0,49.66666l0,33.11111l-173.83334,0l-123.68433,97.37498l49.18433,-97.37498l-49.66667,0l0,-33.11111l0,-49.66666l0,0z",
+ "5": "m3.88165,296.34811l58.64952,-105.30074l0,0c-62.13446,-31.76456 -79.86445,-91.6022 -40.96117,-138.24044c38.90255,-46.63797 121.70818,-64.81269 191.29914,-41.98796c69.59094,22.8246 103.19446,79.17835 77.63046,130.19172c-25.56265,51.01335 -101.92546,79.99094 -176.41714,66.94487l-110.20081,88.39255z",
+ "6": "m4.33333,266.6662c0,-1.854 2.23757,-3.35571 5,-3.35571c2.76243,0 5,1.50171 5,3.35571c0,1.85394 -2.23757,3.35565 -5,3.35565c-2.76243,0 -5,-1.50171 -5,-3.35565zm10.25,-24.11072c0,-4.6351 5.59392,-8.38943 12.50001,-8.38943c6.90608,0 12.5,3.75433 12.5,8.38943c0,4.63489 -5.59392,8.38928 -12.5,8.38928c-6.90609,0 -12.50001,-3.75433 -12.50001,-8.38928zm23.75001,-36.55524c0,-12.81482 19.46685,-23.19473 43.50002,-23.19473c24.0331,0 43.49996,10.37991 43.49996,23.19473c0,12.81473 -19.46686,23.19455 -43.49996,23.19455c-24.03317,0 -43.50002,-10.37982 -43.50002,-23.19455zm-37.33334,-104.99994c0,-55.2486 66.67956,-100 149,-100c82.32047,0 149,44.7514 149,100c0,55.24866 -66.67953,100 -149,100c-82.32044,0 -149,-44.75134 -149,-100z",
+ "scream": "m299.67374,132.67729l-35.72574,1.97192l-9.55817,48.04506l-31.60561,-11.61551l-45.83566,36.86661l-17.45096,-21.51509l-146.98414,92.00807l81.6677,-102.60858l-67.83573,-13.33963l21.22697,-19.84731l-46.57336,-36.42733l33.47025,-8.80944l-10.52427,-47.94958l35.08694,5.02536l28.86619,-44.2482l25.5638,17.26465l59.09183,-26.49832l7.92432,24.02253l70.55626,-0.33542l-12.23108,23.15343l59.61954,25.93398l-28.50317,14.93327l29.75409,43.96953z",
+ "thought": "m12,1c-6.094,0 -11,4.906 -11,11l0,147c0,6.09399 4.906,11 11,11l49.15625,0c-2.03143,2.32526 -3.15625,4.84886 -3.15625,7.5c0,11.32597 20.36188,20.5 45.5,20.5c25.13812,0 45.5,-9.17403 45.5,-20.5c0,-2.65114 -1.12482,-5.17474 -3.15625,-7.5l142.15625,0c6.09399,0 11,-4.90601 11,-11l0,-147c0,-6.094 -4.90601,-11 -11,-11l-276,0zm54,199c-13.81215,0 -25,5.37016 -25,12c0,6.62984 11.18785,12 25,12c13.81216,0 25,-5.37016 25,-12c0,-6.62984 -11.18784,-12 -25,-12zm-25,30c-7.73481,0 -14,4.02762 -14,9c0,4.97238 6.26519,9 14,9c7.73481,0 14,-4.02762 14,-9c0,-4.97238 -6.26519,-9 -14,-9zm-24,22c-4.97238,0 -9,2.23756 -9,5c0,2.76242 4.02762,5 9,5c4.97238,0 9,-2.23758 9,-5c0,-2.76244 -4.02762,-5 -9,-5z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/electronics.json b/files_svgedit/svg-edit/extensions/shapelib/electronics.json
new file mode 100644
index 000000000..4d18a8c34
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/electronics.json
@@ -0,0 +1,20 @@
+{"data": {
+ "capacitor": "m292.103577,149.999374l-117.073944,-0.445328m-167.175035,0.445328l116.628588,0m0.44532,-72.035179l11.364601,0l0,144.640358l-11.364601,0l0,-144.640358zm38.244209,-0.569977l11.364594,0l0,144.640297l-11.364594,0l0,-144.640297zm-162.171733,68.98156l6.905184,0l0,6.905212l-6.905184,0l0,-6.905212zm291.101741,0.325241l6.905182,0l0,6.905212l-6.905182,0l0,-6.905212z",
+ "diode": "m180.228439,90.39769l21.70816,0l0,117.211075l-21.70816,0l0,-117.211075zm23.345947,59.602753l88.556381,0m-284.3409,-1.995804l85.541058,0l0,-65.011185l87.251961,66.722031l-87.250778,67.291931l0,-68.720001m-92.331572,-3.917542l6.811423,0l0,6.811447l-6.811423,0l0,-6.811447zm291.20439,2.03891l6.811401,0l0,6.811462l-6.811401,0l0,-6.811462z",
+ "gate_and": "m7.454795,178.082489l67.605378,0m-67.605378,-54.850876l67.605393,0.000015m-0.155602,-30.065033l0,113.750015c194.70015,10.208389 199.234482,-124.687454 0,-113.750015zm217.618942,56.662766l-70.312149,0m-221.397258,-29.817062l6.68369,0l0,6.683685l-6.68369,0l0,-6.683685zm-0.314375,54.532364l6.68369,0l0,6.683685l-6.68369,0l0,-6.683685zm291.95109,-27.976547l6.683685,0l0,6.683685l-6.683685,0l0,-6.683685z",
+ "gate_inverter": "m292.351624,149.998962l-70.506393,0m-0.189026,0a19.883057,19.883057 0 1 1-39.766113,0a19.883057,19.883057 0 1 139.766113,0zm-213.972072,2.405243l69.321826,0l0,-61.05407l101.250404,58.4571l-101.19664,58.840652l0,-56.176727m-76.061115,-3.699677l6.780182,0l0,6.779526l-6.780182,0l0,-6.779526zm291.428455,-2.135864l6.780518,0l0,6.780548l-6.780518,0l0,-6.780548z",
+ "gate_nand": "m8.042537,173.038879l60.699101,-0.672531m-60.699101,-49.879471l61.371335,0m-0.785973,-24.868042l0,104.835098c179.441437,9.408417 183.619827,-114.915443 0,-104.835098zm223.921448,50.643158l-64.591507,0m0.637238,0a11.937837,11.937837 0 1 1-23.87648,0a11.937837,11.937837 0 1 123.87648,0zm-227.445681,-29.373505l6.739111,0l0,6.739143l-6.739111,0l0,-6.739143zm-0.150617,50.613495l6.73911,0l0,6.739151l-6.73911,0l0,-6.739151zm291.47287,-24.654327l6.739105,0l0,6.739151l-6.739105,0l0,-6.739151z",
+ "gate_nor": "m292.610077,150.214462l-69.483139,-0.215668m0.147217,0.215668a12.942393,12.942393 0 1 1-25.884689,0a12.942393,12.942393 0 1 125.884689,0zm-215.590108,29.264374l63.620397,0m-63.620397,-54.805801l65.561368,-0.431335m-20.75433,-33.139984c129.343479,0 143.580387,58.405624 143.580387,58.405624l-0.347778,0c-18.514755,69.097885 -143.580379,58.057999 -143.580379,58.057999c59.7962,-58.405655 0.347775,-116.463623 0.347775,-116.463623zm-51.490408,30.117874l6.644974,0l0,6.645012l-6.644974,0l0,-6.645012zm0.003831,54.852463l6.644983,0l0,6.64502l-6.644983,0l0,-6.64502zm291.530706,-29.571609l6.644989,0l0,6.64502l-6.644989,0l0,-6.64502z",
+ "gate_or": "m7.681484,183.57515l71.7616,0m-71.7616,-60.67144l73.093784,-0.000015m-23.092442,-37.784157c143.186604,0 158.947315,64.65654 158.947315,64.65654l75.817307,0l-76.202316,0c-20.49614,76.493118 -158.94717,64.271667 -158.94717,64.271667c66.195942,-64.656525 0.385136,-128.928207 0.385136,-128.928207zm-56.684011,33.939781l6.677925,0l0,6.677956l-6.677925,0l0,-6.677956zm291.510831,27.410866l6.677948,0l0,6.677948l-6.677948,0l0,-6.677948zm-291.404498,33.607208l6.677927,0l0,6.677917l-6.677927,0l0,-6.677917z",
+ "gate_xor": "m80.450493,91.498093c129.22271,0 143.446312,58.351089 143.446312,58.351089l68.423569,0l-68.770889,0c-18.497391,69.033295 -143.446304,58.003708 -143.446304,58.003708c59.740372,-58.351089 0.347511,-116.354797 0.347511,-116.354797zm-22.576313,4.515259c43.415966,54.530457 0,108.018921 0,108.018921m-50.015199,-26.867355l63.560987,0m-63.560987,-54.7547l63.560987,0m-70.418914,-3.722206l6.82584,0l0,6.825867l-6.82584,0l0,-6.825867zm0.057968,54.832268l6.825839,0l0,6.825867l-6.825839,0l0,-6.825867zm291.170364,-27.096024l6.825836,0l0,6.825867l-6.825836,0l0,-6.825867z",
+ "inductor": "m7.783882,182.663147l59.679306,0c0,0 -30.829735,-67.744125 15.054253,-68.81945c42.462807,-0.995041 37.635605,69.357201 24.194321,69.357201c-13.441284,0 -12.903625,-68.81955 22.043701,-68.81955c34.947357,0 40.323868,68.819366 20.968399,68.819366c-19.355423,0 -11.828323,-68.819366 22.58139,-68.819366c34.409683,0 41.399155,68.81955 19.893112,68.81955c-21.506073,0 -9.67775,-68.81955 24.19429,-68.81955c33.87207,0 29.570831,68.819366 18.280151,68.819366c-11.290665,0 57.528732,-0.537659 57.528732,-0.537659m-291.202282,-3.571106l6.772959,0l0,6.772995l-6.772959,0l0,-6.772995zm291.221844,0.301132l6.772949,0l0,6.772995l-6.772949,0l0,-6.772995z",
+ "junction_1": "m0.99971,146.64024l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm7.44043,3.36145l283.11684,0m0.72388,-3.35979l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35944,-0.72348l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0z",
+ "junction_2": "m0.99971,146.64024l6.71786,0l0,6.7179l-6.71786,0l0,-6.7179zm7.44043,3.36145l121.77922,0c0,-29.3896 38.77921,-31.3896 38.77921,0l122.55841,0m0.72391,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35945,-0.72348l0,-6.71786l6.71794,0l0,6.71786l-6.71794,0z",
+ "junction_3": "m143.58945,150.00009c0,-3.49425 2.83032,-6.32455 6.32455,-6.32455c3.49423,0 6.32455,2.83031 6.32455,6.32455c0,3.49423 -2.83032,6.32455 -6.32455,6.32455c-3.49423,0 -6.32455,-2.83032 -6.32455,-6.32455zm-142.59006,-3.35985l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm7.44043,3.36145l283.11682,0m0.72394,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-145.6413,152.35712l0,-6.71786l6.7179,0l0,6.71786l-6.7179,0zm3.36145,-7.44043l0,-283.11688m-3.35947,-0.72348l0,-6.71786l6.71796,0l0,6.71786l-6.71796,0z",
+ "junction_tee": "m149.914,143.67554zm-148.91461,2.96471l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm7.44043,3.36145l283.11682,0m0.72394,-3.35979l6.71783,0l0,6.7179l-6.71783,0l0,-6.7179zm-141.61324,2.91669l-0.66661,-141.11688m-3.35947,-0.72348l0,-6.71786l6.71796,0l0,6.71786l-6.71796,0z",
+ "resistor": "m7.868202,151.620193l82.343018,0l11.393402,-32.392784l18.643684,62.356071l20.71521,-63.165901l18.12587,62.356071l19.679459,-61.546242l19.679443,61.951149l10.875488,-30.368195l82.860886,0m-291.18655,-2.813812l6.844604,0l0,6.844635l-6.844604,0l0,-6.844635zm291.194058,-0.465622l6.844604,0l0,6.844635l-6.844604,0l0,-6.844635z",
+ "source_AC_h": "m7.841724,149.837311l67.250737,0m149.928139,0.389923l67.250793,0m-67.653702,-0.227753a74.615135,74.615135 0 1 1-149.230286,0a74.615135,74.615135 0 1 1149.230286,0zm-126.528297,-1.996506c49.250984,-78.535637 61.230949,87.853104 103.826454,2.662094m-200.917796,-4.522659l6.717863,0l0,6.717896l-6.717863,0l0,-6.717896zm291.36706,0.642181l6.717865,0l0,6.717896l-6.717865,0l0,-6.717896z",
+ "source_DC": "m221.862747,94.98175l0,31.813873m-21.510544,-15.906944l43.020996,0m48.613678,39.407722l-121.593582,0m-162.447085,0l115.809275,0m1.040596,-37.757935l7.284134,0l0,75.963058l-7.284134,0l0,-75.963058zm37.461227,-41.623596l7.284134,0l0,158.169647l-7.284134,0l0,-158.169647zm-161.255614,75.613235l6.954941,0l0,6.954971l-6.954941,0l0,-6.954971zm291.012953,0.175003l6.954956,0l0,6.954971l-6.954956,0l0,-6.954971z",
+ "speaker": "m21.35352,187l77,0m-83.70878,3.11937l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0zm6.70878,-76.11937l77,0m-83.70878,3.11937l0,-6.71786l6.71793,0l0,6.71786l-6.71793,0zm155.70878,-32.61937l115,-83l0,296.5l-115,-82.5l0,-131zm-70.99999,0l70.99999,0l0,131l-70.99999,0l0,-131z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/flowchart.json b/files_svgedit/svg-edit/extensions/shapelib/flowchart.json
new file mode 100644
index 000000000..70f2333ac
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/flowchart.json
@@ -0,0 +1,25 @@
+{"data": {
+ "manual_input": "m1,103.64394l298,-30.9037l0,154.51852l-298,0z",
+ "callout_left_right": "m1,150.0006l58.10869,-58.1087l0,29.05434l46.81141,0l0,-87.16304l87.1598,0l0,87.16304l46.8114,0l0,-29.05434l58.1087,58.1087l-58.1087,58.10869l0,-29.05435l-46.8114,0l0,87.16306l-87.1598,0l0,-87.16306l-46.81141,0l0,29.05435l-58.10869,-58.10869z",
+ "card": "m1,60.5l59.5,-59.5l238.5,0l0,298l-298,0l0,-238.5z",
+ "collate": "m0,1l299,0l-149.5,149l149.5,149l-299.00031,0l149.50031,-149l-149.5,-149z",
+ "connector_offpage": "m0.99775,0.99775l297.99984,0l0,238.39982l-149.00002,59.60002l-148.99999,-59.60002l0.00017,-238.39982z",
+ "data_stored": "m50.83397,0.99813l249.16667,0c-27.52219,0 -49.83333,66.78392 -49.83333,149.16604c0,82.38213 22.31114,149.16603 49.83333,149.16603l-249.16667,0l0,0c-27.52219,0 -49.83333,-66.78391 -49.83333,-149.16603c0,-82.38212 22.31114,-149.16604 49.83333,-149.16604z",
+ "data": "m1.00038,249.33351l59.60001,-198.66668l238.40001,0l-59.60001,198.66668z",
+ "decision": "m0.99837,149.99953l148.79352,-102.86476l148.79387,102.86476l-148.79387,102.86476l-148.79352,-102.86476z",
+ "delay": "m1,1l149,0l0,0c82.29044,0 149,66.70957 149,149c0,82.29044 -66.70956,149 -149,149l-149,0z",
+ "display": "m1,149.99924l49.66672,-97.42307l198.66612,0c27.43034,0 49.66716,43.61774 49.66716,97.42307c0,53.80476 -22.23682,97.42308 -49.66716,97.42308l-198.66612,0l-49.66672,-97.42308z",
+ "document_multiple": "m1.00054,45.02563l253.99998,0l0,206.43799c-126.99997,0 -126.99997,78.65668 -253.99998,33.96539zm21.49946,-240.92902l0,-19.5l255,0l0,207l-22.5,1m-210.5,-207l0,-25l255,0l0,207l-21.5,0",
+ "document": "m1.00064,1.00098l298,0l0,242.19891c-149,0 -149,92.28223 -298,39.84915z",
+ "filter1": "m75.5,150l74.5,-149l74.5,149l-74.5,149l-74.5,-149zm0,0l149,0",
+ "or_junction": "m0.99865,149.9991l0,0c0,-82.29043 66.70957,-149 149.00001,-149l0,0c39.51724,0 77.41597,15.69817 105.3589,43.64109c27.94292,27.94292 43.64107,65.84166 43.64107,105.35891l0,0c0,82.29041 -66.70956,148.99998 -148.99997,148.99998l0,0c-82.29044,0 -149.00001,-66.70958 -149.00001,-148.99998zm149.00001,-149l0,297.99998m-149.00001,-148.99998l297.99998,0",
+ "preparation": "m1.00063,150.00006l59.58485,-82.24058l178.75446,0l59.58505,82.24058l-59.58505,82.24086l-178.75446,0l-59.58485,-82.24086z",
+ "process": "m1,51.87891l298,0l0,196.24391l-298,0zm37.25,-196.24391l0,196.24391m223.5,-196.24391l0,196.24391",
+ "punched_tape": "m1.00047,30.80047l0,0c0,16.45808 33.35479,29.8 74.50001,29.8c41.1452,0 74.49998,-13.34192 74.49998,-29.8l0,0c0,-16.45809 33.3548,-29.8 74.50002,-29.8c41.14522,0 74.49998,13.34192 74.49998,29.8l0,238.4c0,-16.45808 -33.35477,-29.80002 -74.49998,-29.80002c-41.14522,0 -74.50002,13.34193 -74.50002,29.80002c0,16.45807 -33.35478,29.79999 -74.49998,29.79999c-41.14522,0 -74.50001,-13.34192 -74.50001,-29.79999z",
+ "sequential_data_storage": "m150,299l0,0c-82.29043,0 -149,-66.70955 -149,-149l0,0c0,-82.29043 66.70957,-149 149,-149l0,0c39.51726,0 77.41599,15.69817 105.3589,43.64108c27.94292,27.94293 43.6411,65.84165 43.6411,105.35892l0,0c0,39.51726 -15.69818,77.41599 -43.6411,105.3589l43.6411,0l0,43.6411z",
+ "sort": "m-0.0038,150.00102l299.00334,0m-299.00334,-0.00002l149.50209,-150.00059l149.50131,150.00059l-149.50131,150.00018l-149.50209,-150.00018z",
+ "storage_internal": "m1,1l297.99997,0l0,297.99997l-297.99997,0zm37.25,-297.99997l0,297.99997m-37.25,-260.74997l297.99997,0",
+ "terminal": "m48.94167,99.12235l202.11729,0l0,0c26.47794,0 47.9425,22.7794 47.9425,50.8792c0,28.09979 -21.46457,50.87918 -47.9425,50.87918l-202.11729,0l0,0c-26.47791,0 -47.9425,-22.77939 -47.9425,-50.87918c0,-28.09981 21.46459,-50.8792 47.9425,-50.8792z",
+ "wave": "m1,37.20809c99.33355,-125.42461 198.66708,125.4246 298.00061,0l0,225.76426c-99.33353,125.42462 -198.66706,-125.42459 -298.00061,0z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/game.json b/files_svgedit/svg-edit/extensions/shapelib/game.json
new file mode 100644
index 000000000..675bc3767
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/game.json
@@ -0,0 +1,13 @@
+{"data": {
+ "cards_clubs": "m107.57338,275.50809c15.10838,-15.77673 27.93053,-34.56763 33.34637,-55.90254c-16.19595,12.31328 -31.05006,32.11845 -53.64258,31.36813c-17.05595,0.97891 -37.37346,0.99548 -49.37947,-13.26945c-26.83,-21.5751 -34.03729,-64.69673 -12.00568,-92.15404c15.07669,-19.82526 41.4039,-28.23172 65.56467,-25.25816c15.22319,-6.45935 -2.97749,-22.81502 -4.80785,-33.02267c-11.33012,-37.02704 15.36169,-81.44029 54.60988,-85.70572c28.15103,-4.0415 55.67099,14.18231 69.44571,37.83293c7.4856,16.54877 3.58533,35.33045 1.83887,52.49866c-5.88113,8.62766 -20.94342,29.50022 0.55099,27.85616c21.2518,-0.33633 43.69397,5.90277 57.70761,22.8026c20.49747,22.76067 22.37766,60.37286 1.7551,83.63007c-10.90869,14.16582 -27.2782,25.50356 -45.80551,24.87234c-18.13391,1.83067 -37.77023,-2.10338 -50.62924,-15.92061c-5.48438,-3.84309 -18.92297,-18.36311 -18.91833,-15.17883c13.43222,27.98354 28.62112,57.04413 55.49167,74.38477c9.60062,7.71954 -14.62323,2.41226 -20.4874,3.98563c-35.53012,0.0314 -71.06009,0.06342 -106.59021,0.09497c7.31842,-7.63818 14.6373,-15.27603 21.9554,-22.91422z",
+ "cards_diamonds": "m34.92883,153.9321c25.56111,-56.62673 71.64644,-104.95768 110.85236,-152.92286c45.60773,30.78102 85.01025,98.49872 119.29071,145.66264c-30.57587,54.55344 -74.58923,104.23671 -114.23947,153.1615c-42.74368,-44.7616 -79.29648,-95.90262 -115.90359,-145.90128z",
+ "cards_hearts": "m106.76112,245.09012c-77.74644,-57.80281 -105.54389,-94.36783 -105.76917,-139.13003c-0.20544,-40.80623 34.10907,-80.19025 69.67002,-79.96313c17.75755,0.11364 55.84863,15.13257 69.33681,27.33919c6.79614,6.1504 10.01512,5.54391 25.146,-4.73779c41.17987,-27.98239 81.39243,-28.56973 107.43585,-1.56907c41.62292,43.15273 34.04501,94.68497 -21.78392,148.13782c-29.68187,28.41864 -94.50056,78.8349 -101.35565,78.8349c-2.08591,0 -21.29187,-13.01038 -42.67994,-28.9119z",
+ "cards_spades": "m92.84135,287.13989c18.3756,-17.73279 31.81261,-40.18849 43.07161,-62.94162c6.87787,-9.075 0.36623,-17.01425 -9.00183,-9.3188c-24.07579,16.07495 -56.84848,21.58751 -82.91551,6.92194c-29.46779,-15.23779 -42.75618,-51.47162 -36.07021,-83.04361c4.23415,-31.99545 27.52112,-57.07481 52.80524,-75.08997c29.04437,-20.7771 60.40868,-38.61331 86.95355,-62.67224c11.08365,0.22219 19.42508,17.61496 31.35349,22.21747c31.67316,23.59131 69.20874,40.95643 94.15042,72.50237c12.60098,17.9752 19.78281,40.10946 20.58459,61.98948c-3.83926,29.67093 -21.5314,60.96272 -52.04169,69.41241c-26.37521,7.98038 -53.51129,-2.14038 -76.49545,-15.01619c-2.80743,-0.60251 -13.10471,-8.7151 -9.02362,-2.41039c13.74066,28.19803 28.79581,56.19804 50.59952,79.09325c1.28156,2.89285 11.33243,9.75613 5.98334,9.64709c-44.76935,0 -89.53856,0 -134.30794,0c4.78471,-3.7637 9.5696,-7.5275 14.35449,-11.2912z",
+ "chess_bishop": "m61.92021,296.91153c0.43627,-9.82327 20.22808,-4.98053 9.33225,-14.55078c3.63447,-11.80536 14.91982,-19.66748 21.741,-29.79436c5.22913,-8.62125 17.00826,-19.01086 11.31252,-29.67047c-10.46021,-5.58662 -7.49181,-18.00824 5.30239,-15.28014c8.2272,-7.58801 8.79371,-20.26302 11.57766,-30.59467c2.52694,-12.36574 4.07327,-24.95554 3.66998,-37.5896c-14.99698,0.03661 -30.27584,-0.68196 -44.73978,-4.74928c2.8019,-11.20453 20.86148,-8.79659 28.26084,-15.67982c-6.87532,-6.18329 13.89957,-5.56496 8.46355,-15.34472c-0.37302,-11.20033 -9.19685,-14.44135 -16.26585,-22.60765c-9.44371,-12.76132 5.36173,-25.51221 13.58463,-34.13964c9.16566,-9.37672 19.64847,-19.36716 22.45389,-32.62941c-3.77451,-3.10155 -12.3967,-7.54239 -3.59866,-11.78228c12.01596,-2.03703 24.83499,-2.28521 36.61118,1.05654c7.81644,7.61585 -11.93045,8.03119 -3.43417,17.63365c10.07373,12.07176 -3.50795,18.30174 -11.52704,25.27969c-4.66763,5.89621 -18.59915,13.67189 -16.20224,19.78346c13.63968,-0.47554 21.5871,-13.67976 31.31615,-21.49704c10.67101,-13.68708 20.99446,8.43092 27.81822,15.94714c8.40642,11.39094 2.60674,26.70086 -10.05556,31.59287c-6.28001,6.46729 -10.44972,24.88914 4.57674,22.14657c8.72636,3.17196 -8.52979,3.51371 1.37608,6.446c6.58298,2.52787 32.25821,8.30554 18.1142,16.0547c-12.00471,2.71368 -24.40523,2.6017 -36.6002,1.50584c-0.75204,18.52477 1.89484,36.97644 7.35446,54.6958c1.35513,5.04123 2.71027,10.08244 4.06541,15.12361c6.52129,-0.129 19.98573,-1.55484 13.76321,9.18311c-13.08994,7.21928 -5.0789,22.41203 2.17738,31.05447c8.99446,11.37192 22.40833,22.01788 22.98288,37.58719c3.59734,2.14404 15.56946,8.03415 12.10645,12.64545c-57.30759,-0.2937 -114.6481,0.84897 -171.9265,-1.25046l-1.98901,-0.18246l-1.62205,-0.39337l0,0z",
+ "chess_king": "m75.6993,294.60599c-8.08068,-9.43317 12.65705,-9.68567 9.39906,-20.14252c5.95673,-13.85672 21.44485,-22.24414 23.72572,-37.99019c-6.28166,-4.37628 -9.89445,-14.96013 2.0899,-13.70361c8.78859,-6.61539 7.6902,-20.15297 10.33321,-30.0876c2.47588,-16.03471 3.03656,-32.26408 4.10001,-48.43053c-10.16894,-0.78108 -20.58942,-0.23701 -30.49778,-2.84268c0.28501,-10.75136 20.44619,-6.62604 21.3638,-16.77121c14.65907,-0.2649 0.81196,-22.15992 -5.15776,-27.38371c-7.64118,-8.81222 -12.7306,-22.72323 -6.92168,-33.60618c8.30865,-5.52043 27.09519,-2.1601 26.24604,-16.66769c-5.65058,-3.22095 -12.82484,-1.17552 -19.15805,-1.74514c0.38948,-6.7649 0.77895,-13.52979 1.16843,-20.29469c8.37558,-0.64424 16.75118,-1.28853 25.12676,-1.93283c-4.25133,-4.41846 -10.61392,-7.6702 -12.20608,-13.92034c5.41558,-8.90246 18.46751,-8.1166 27.81776,-8.03243c9.09207,-0.62713 25.66919,5.43749 13.27614,15.20592c-1.00447,2.39887 -10.78024,8.36352 -4.73895,7.71326c7.73515,0 15.47028,0 23.20541,0c-0.02223,6.6133 -0.20001,13.29232 1.35312,19.76423c-5.90448,4.39723 -25.05112,-3.75612 -19.59946,9.81149c6.13853,5.67249 15.53992,5.52279 23.32581,8.02098c4.54138,0.45371 8.15405,1.63713 6.5175,6.94557c0.85359,9.85596 -1.63307,19.77049 -8.40776,27.25217c-4.79567,7.80693 -15.56667,17.58031 -12.3781,26.61691c6.03265,-0.98199 10.87871,2.97905 6.06032,7.43356c4.94479,3.66121 22.35728,2.82278 18.59119,11.98875c-8.82205,2.92029 -18.29916,1.70366 -27.45192,2.00166c2.43703,25.01987 5.80666,50.04211 11.43709,74.54305c3.28979,5.43672 16.35808,9.61523 5.63309,16.70296c-4.00256,13.19919 8.78183,23.08223 16.81097,31.55379c8.82797,6.61176 4.54482,19.91519 17.0338,22.03693c9.83562,9.52774 -13.5036,9.27408 -19.49568,9.29486c-39.66827,0.42773 -79.37933,1.02615 -119.03208,-0.25211c-3.24605,-0.40967 -7.25645,-0.31595 -9.56982,-3.08264z",
+ "chess_knight": "m100.17753,299.2356c-10.0382,0.34137 -24.72987,-4.84531 -14.46609,-16.41525c11.17445,-4.40472 -1.98608,-19.00409 9.21265,-25.88123c8.98889,-12.79953 21.20518,-24.48807 24.89179,-40.11865c-0.57252,-10.60066 -13.22608,-16.87427 -7.18922,-28.60765c-5.92265,-18.77635 -4.55389,-40.38806 6.25748,-57.26643c9.18032,-15.67659 20.32635,-32.28713 19.15084,-51.25797c-11.5139,4.80804 -23.70148,9.0206 -36.37307,6.83708c-11.91311,-1.1064 -22.59742,8.54017 -34.74928,3.29494c-12.31807,-2.55921 -19.64501,-19.02957 -10.4606,-28.65753c10.03679,-8.57325 24.78339,-8.84916 34.35549,-18.41713c12.62932,-10.46186 24.31081,-24.61204 41.71716,-26.46155c7.69322,-1.76131 10.99294,-9.49197 15.25148,-15.2854c3.53894,9.18849 9.69408,17.31353 18.95801,21.387c18.83824,10.9118 23.5276,33.98066 30.47462,52.94444c5.13654,14.85179 9.41592,30.35814 18.01733,43.6171c0.09145,6.36343 -9.56343,9.05308 -3.04225,16.51302c3.39153,20.2325 3.53752,40.95071 3.23686,61.41966c-5.72005,10.01691 -10.93028,21.19722 -3.29993,32.69295c5.09689,14.05096 17.7905,23.26645 24.03563,36.52565c3.53024,6.8656 -6.88226,16.83319 6.09091,15.10654c11.84755,6.2681 2.28101,21.56821 -9.50232,17.11713c-44.15834,1.12289 -88.41394,2.24417 -132.5675,0.9133z",
+ "chess_pawn": "m76.17518,297.98557c-10.50418,1.59836 -25.59558,-8.37918 -12.29734,-17.44669c11.25366,-5.8967 0.45475,-21.25174 12.35514,-28.71019c12.10069,-16.52 24.98341,-33.40712 31.01369,-53.22789c-0.84142,-9.49573 -19.64921,-25.21422 -0.595,-28.29408c15.7114,1.82648 9.96503,-21.69583 15.39529,-31.88779c3.26528,-15.46995 5.63882,-31.19783 5.05293,-47.04268c-10.94164,-0.30554 -22.10724,0.96841 -32.83411,-1.63306c-6.84238,-8.98132 15.45903,-13.45317 19.13895,-21.55999c7.72121,-11.65172 -11.3031,-24.52544 -3.15941,-38.29919c5.20168,-20.85055 29.26575,-34.36854 49.62741,-26.73076c21.08499,5.46792 36.67119,30.37529 26.64961,51.09357c-0.80009,3.99703 -7.062,9.17959 -4.97066,12.36269c9.12987,6.33601 19.70087,11.85771 25.48528,21.64108c-8.18987,5.93826 -21.89375,1.4159 -32.1122,4.23674c-9.29645,8.24593 -0.11353,25.10609 0.36266,36.41936c2.90009,12.9261 5.46037,25.96617 8.78381,38.77452c6.98657,2.72525 21.33679,5.88095 13.4649,17.20207c-11.22217,9.11032 -5.7289,23.62137 0.60231,33.84465c7.87996,15.78793 21.40668,27.84862 29.69345,43.27188c3.07736,7.12057 -7.92374,19.7316 5.78708,16.78259c14.86404,3.15744 5.96938,23.76761 -7.3875,18.8981c-49.21407,1.73288 -98.52922,2.43631 -147.74446,0.51953l-2.31185,-0.21448l0,0z",
+ "chess_queen": "m59.54884,298.46313c-11.18457,2.51251 -19.80814,-14.30008 -5.94004,-16.129c12.20336,0.23074 -3.0349,-11.94995 7.98012,-16.05304c12.67021,-12.36537 25.23749,-25.26018 33.3575,-41.17609c-4.09126,-5.42482 -10.84344,-10.60782 -9.96117,-18.03085c7.964,-2.71161 19.82806,-0.87375 20.29981,-13.44502c7.24239,-22.68985 9.1741,-46.67986 10.76167,-70.3136c-7.99255,-6.33596 -24.45116,-0.33371 -35.62089,-3.56097c-16.94488,-4.5746 6.31873,-13.33291 13.78075,-12.6113c6.70493,0.01006 16.63324,-4.12222 5.41084,-7.2804c9.46686,-0.43687 23.08297,-12.44518 7.51486,-16.77373c11.54188,-8.28655 2.64816,-26.31929 -2.17102,-36.68976c-7.265,-12.52285 -19.21146,-21.59242 -32.71435,-26.42871c-2.18616,-12.77 18.63421,-8.99565 27.07909,-9.65835c12.78728,0.48775 25.82639,-0.15282 36.96732,-7.11507c15.05278,-6.96464 27.8495,4.65901 41.61934,7.11611c13.92807,0.89699 28.41634,-2.50577 41.97807,1.44028c4.20209,2.98911 11.18788,7.71034 2.77457,9.97613c-16.06789,8.94404 -31.07338,22.15693 -35.10127,40.92605c-6.0766,10.44077 4.6955,19.50048 -5.15381,26.98807c-0.10249,8.80961 22.85634,10.04067 10.00395,14.37878c8.80815,4.77542 27.69864,1.76332 29.62625,12.3696c-7.99612,6.2903 -19.2092,3.80788 -28.79007,4.39512c-3.2489,1.10706 -11.41316,-2.70125 -10.17032,2.89742c-0.6366,25.08775 5.87923,49.75521 12.1806,73.83221c0.00804,11.79608 29.09497,5.10777 12.92737,18.49597c-11.94247,10.28146 5.56685,24.68452 11.63272,33.82986c8.25099,10.03221 22.89711,15.11021 21.67468,29.8362c8.40468,0.60507 18.40166,13.69095 6.78131,16.95151c-62.8902,1.31946 -125.82766,2.22778 -188.72791,1.83258z",
+ "chess_rock": "m70.40736,299.11804c-15.60727,2.87628 -15.90823,-19.81082 -1.8931,-20.53482c-4.2011,-9.73361 -0.98556,-21.67557 5.22356,-30.68398c8.90442,-15.05035 22.29623,-30.00999 19.52936,-48.8515c-0.95786,-9.8022 -13.10349,-27.37677 5.72565,-24.85997c5.09087,-9.77498 2.13017,-24.16621 5.9483,-35.39389c3.33424,-21.28385 10.75552,-43.9948 2.86147,-65.09612c-4.97705,-11.23243 -17.62387,-18.62589 -16.26645,-32.35733c-1.42947,-13.39034 -0.95647,-26.88279 0.60455,-40.23392c6.07738,0.50975 12.84039,-1.27954 18.38155,1.475c-0.04153,12.96106 12.26991,10.08973 10.7935,-0.92486c3.23881,-1.28251 8.60017,-0.18413 12.6562,-0.55014c18.03256,0 36.06522,0 54.09778,0c-2.06311,7.51434 3.5195,17.19948 10.5887,8.35272c-1.93379,-11.75267 14.25911,-7.86334 10.37854,2.24694c0.22855,13.39515 1.87041,27.25403 -1.89201,40.29753c-6.12787,5.2086 -6.22449,15.45995 -13.90137,21.60233c-6.16908,11.51656 -3.45045,25.43306 -2.7644,37.9428c2.61279,18.51363 6.92676,36.79671 8.00221,55.52328c-0.76923,10.18126 20.18948,7.18474 11.15244,19.71645c-9.87662,8.41151 -4.0954,22.61668 -0.18413,32.66171c7.71916,17.36203 23.99019,32.95758 21.5343,53.32025c-1.94743,8.89606 14.16618,5.88821 9.97758,17.34372c-0.12151,14.11871 -21.10172,5.04239 -30.39526,8.00793c-46.7146,0.56656 -93.44374,1.44144 -140.159,0.99585z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/math.json b/files_svgedit/svg-edit/extensions/shapelib/math.json
new file mode 100644
index 000000000..88c94971a
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/math.json
@@ -0,0 +1,9 @@
+{"data": {
+ "divide": "m150,0.99785l0,0c25.17819,0 45.58916,20.41097 45.58916,45.58916c0,25.17821 -20.41096,45.58916 -45.58916,45.58916c-25.17822,0 -45.58916,-20.41093 -45.58916,-45.58916c0,-25.1782 20.41093,-45.58916 45.58916,-45.58916zm0,296.25203c-25.17822,0 -45.58916,-20.41095 -45.58916,-45.58917c0,-25.17819 20.41093,-45.58916 45.58916,-45.58916c25.17819,0 45.58916,20.41096 45.58916,45.58916c0,25.17822 -20.41096,45.58917 -45.58916,45.58917zm-134.06754,-193.71518l268.13507,0l0,91.17833l-268.13507,0z",
+ "equal": "m0.99915,31.03476l297.3767,0l0,95.17349l-297.3767,0zm0,47.58677l297.3767,0l0,95.17349l-297.3767,0z",
+ "minus": "m0.99887,102.39503l297.49445,0l0,95.2112l-297.49445,0z",
+ "not_equal": "m40.81188,62.2131l103.7978,0l22.27972,-61.2131l65.67503,23.90375l-13.5795,37.30935l40.20317,0l0,69.88993l-65.64099,0l-12.71893,34.94495l78.35992,0l0,69.88991l-103.79779,0l-22.27972,61.21309l-65.67503,-23.90378l13.57949,-37.30933l-40.20319,0l0,-69.88991l65.64102,0l12.71894,-34.94498l-78.35995,0z",
+ "times": "m1.00089,73.36786l72.36697,-72.36697l76.87431,76.87368l76.87431,-76.87368l72.36765,72.36697l-76.87433,76.87431l76.87433,76.87431l-72.36765,72.36765l-76.87431,-76.87433l-76.87431,76.87433l-72.36697,-72.36765l76.87368,-76.87431l-76.87368,-76.87431z",
+ "plus": "m1.00211,102.40185l101.39974,0l0,-101.39975l95.45412,0l0,101.39975l101.3997,0l0,95.45412l-101.3997,0l0,101.3997l-95.45412,0l0,-101.3997l-101.39974,0z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/misc.json b/files_svgedit/svg-edit/extensions/shapelib/misc.json
new file mode 100644
index 000000000..ed58c4ccc
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/misc.json
@@ -0,0 +1,37 @@
+{"data": {
+ "3_ways": "m1,159.61292l52.87097,-52.87097l0,26.43549l69.69355,0l0,-79.30646l-26.43549,0l52.87096,-52.87097l52.87097,52.87097l-26.43549,0l0,79.30646l69.69356,0l0,-26.43549l52.87096,52.87097l-52.87096,52.87097l0,-26.43549l-192.25807,0l0,26.43549l-52.87097,-52.87097z",
+ "3D_plane_1": "m1,187.25l74.49999,-74.5l223.49998,0l-74.5,74.5l-223.49997,0z",
+ "3D_plane_2": "m112.75,75.50002l74.5,-74.50002l0,223.50002l-74.5,74.49998l0,-223.49998z",
+ "babe": "m299.04794,205.18787c-3.77606,12.02469 -14.23288,15.70245 -23.42029,7.51477c-4.99579,-3.63025 -15.93668,-4.01721 -8.27643,4.11765c4.3663,3.89154 12.96597,18.43826 2.6701,7.63031c-6.72076,-9.88528 -21.45963,-10.97299 -26.80637,-21.01428c-0.7126,-12.09052 -19.01982,-9.85156 -28.21417,-13.29294c-7.97734,0.2787 -20.34282,-8.29872 -23.22426,-8.2877c7.17442,8.54059 6.05238,22.25063 13.10196,29.89879c9.38933,2.61444 12.97119,14.02899 0.81691,15.99643c-14.79422,5.33719 -12.22833,-12.63193 -20.04561,-20.07751c-5.76567,-2.6597 -0.17117,23.97388 -5.6981,17.70459c0.14073,-11.08301 -5.26385,-21.19345 -7.43376,-31.72055c3.66939,-3.90994 3.24513,-15.0824 -1.24792,-6.28702c-9.32401,15.52066 -21.53839,29.02148 -33.42717,42.58749c-12.32529,3.3429 -25.61986,1.75922 -38.28926,0.99091c-13.33909,0.21539 -16.41985,-23.40515 -24.5597,-24.14911c-1.69956,6.7645 0.04348,10.7413 3.54543,14.16528c-5.43895,6.35352 -17.0083,4.24969 -24.32439,1.67859c-12.99512,4.18167 4.10523,-7.37332 9.39456,-5.37735c0.12955,-9.23239 1.69711,-21.43146 -1.15234,-30.31955c-4.26376,-4.21536 -13.54346,-25.27448 -12.61225,-10.56541c-2.43563,17.92097 -10.72475,34.53096 -12.64814,52.59737c-1.6411,10.13943 -15.83897,5.33594 -23.08624,5.82672c-7.30112,2.27881 -6.50991,0.30469 -13.11051,0.69199c7.01961,-9.43863 23.73587,-3.27213 28.50491,-13.30713c2.12957,-14.98691 1.05568,-30.67914 6.12082,-45.11276c-2.11474,-14.92252 -6.78208,-29.69904 -6.85915,-44.79436c2.37534,-9.86703 8.15515,-18.85688 7.95601,-29.33565c4.35726,-11.70351 7.18935,-24.90283 15.98966,-34.19202c9.32926,-10.04192 23.95938,-2.34001 28.82026,8.23518c5.23969,11.5593 -2.89557,23.16132 -3.7411,34.79802c10.97217,2.97472 2.07053,18.22128 16.21945,16.77118c11.11885,1.02463 7.90206,16.12445 0.58741,20.71976c-0.2656,7.05571 8.13246,16.23514 6.20955,25.48418c5.50479,6.05925 12.30074,9.05171 12.7784,-1.61943c3.7646,-14.17346 5.15414,-29.11295 11.81579,-42.45001c2.65157,-10.67883 13.6115,-24.48097 25.27724,-15.69678c10.81068,5.92413 13.54153,23.94177 22.32231,28.34891c10.75034,-9.00977 20.01573,4.53285 28.83136,9.38853c13.27853,7.35518 24.98924,17.12993 37.79256,25.23851c13.37863,6.81644 27.61211,12.28633 40.07347,20.72394c8.47791,4.65475 17.41223,-4.71762 19.34897,6.49048zm-149.77098,-49.39249c-1.45267,7.65393 4.38054,3.60388 0,0z",
+ "bevel": "m24.5,277l-24,23m276,-22l23,22m-23,-274l23,-24m-275,23l-23,-22m23,21.5l252,0l0,252l-252,0l0,-252zm-23.5,-23.5l299,0l0,299l-299,0l0,-299z",
+ "bone": "m273.3559,119.27242c-11.58661,5.90293 -23.89537,9.95385 -36.67676,12.27164c-53.42084,0.2984 -105.13121,0.41397 -158.74251,2.97562c-14.28426,-2.65407 -30.58815,0.18161 -42.82426,-9.13783c-9.06827,-7.25944 -28.17529,-2.4415 -25.05096,11.36483c6.17649,14.08824 -14.61965,21.70474 -7.59176,36.00003c6.11589,14.67987 24.54805,9.02721 35.59484,4.1729c20.29636,-4.79665 40.55842,-9.8537 60.92737,-14.38416c42.52868,-4.82219 82.54949,-1.83121 124.59118,1.02063c11.68694,2.54654 23.55803,4.03351 35.45654,5.38187c10.1839,0.16006 18.34979,7.46698 27.92017,8.65919c12.6539,-1.22533 16.41983,-19.19981 7.59747,-27.17406c-13.18918,-8.72406 6.75436,-24.14882 -8.14166,-31.38885c-4.25287,-2.31086 -8.733,-0.75754 -13.05966,0.23817z",
+ "chord": "m277.04315,255.07486c-47.63342,47.63342 -121.3194,57.33392 -179.65791,23.65366c-58.33851,-33.6824 -86.78111,-102.34741 -69.34571,-167.41564c17.43547,-65.06779 76.39998,-110.31287 143.76268,-110.31287l105.24094,254.07486z",
+ "circle_band": "m1,224.5l0,0c0,-82.29044 66.70957,-149 149,-149c82.29042,0 149,66.70956 149,149l-74.5,0c0,-41.14522 -33.3548,-74.5 -74.5,-74.5c-41.1452,0 -74.5,33.35478 -74.5,74.5z",
+ "circle_pie": "m299,150l0,0c0,82.29044 -66.70956,149 -149,149c-82.29044,0 -149,-66.70956 -149,-149c0,-82.29043 66.70956,-149 149,-149l0,149z",
+ "cube": "m30.42785,1.56129l-29.42785,29.42785l0,268.21907l264.28937,0.68124l33.35693,-30.10974l0,-268.21843l-268.21845,0zm236.46521,28.94674l0,269.42122m0,-269.42122l33.35693,-29.50804m-33.35693,30.791l-265.57233,-1.28296",
+ "dagger": "m1.57422,47.21264c-2.775,14.24454 5.08469,27.79975 11.2199,40.10517c13.07098,21.70464 28.2358,42.59465 47.26681,59.46329c12.98537,10.6889 24.68548,22.99878 39.38902,31.4678c19.22253,12.95224 39.86254,23.55869 61.26455,32.3793c15.9138,6.93546 32.60274,11.85577 49.65401,15.08282c4.95967,1.28564 18.82625,4.91663 10.19991,-3.60251c-7.15544,-3.02133 -14.76756,-5.22583 -21.96236,-8.37695c-34.92769,-14.34082 -72.04247,-26.94104 -100.21951,-53.10463c-4.66899,-6.20064 8.95855,3.3492 11.3067,5.96803c23.50703,16.73581 50.36192,27.95749 76.84653,39.04178c13.47301,4.46384 28.20039,13.97903 42.51408,7.22675c12.36502,-4.72467 -2.95702,-5.44891 -8.42033,-7.24844c-24.28337,-6.90491 -48.85286,-13.54227 -71.13893,-25.76019c-12.72568,-4.65573 -23.42126,-13.22678 -34.85331,-20.29132c-12.35065,-8.53128 -23.65424,-18.49934 -35.67798,-27.49634c-7.86864,-5.96642 -15.68669,-11.98865 -22.20108,-19.46664c-11.01625,-11.02383 -21.70009,-22.36108 -31.68482,-34.33246c-6.52307,-7.36439 -13.86146,-14.10685 -18.44664,-22.93894l-5.05655,-8.11652zm256.45175,139.13108c-1.50562,-0.04745 -3.06,0.28214 -4.36211,1.15021c-9.72246,4.86124 -7.63908,13.88922 -13.19478,20.83386c-4.16678,5.55569 -9.028,8.33356 -15.97261,10.41693c1.38892,2.77783 4.16675,6.94461 4.16675,10.41693c0,7.63907 -9.02798,14.58368 -15.97261,13.88922c-2.77786,-0.69446 -9.028,-4.16678 -11.11139,0c-0.69446,1.38895 -0.69446,2.77786 0,3.47232c0,2.77786 3.47231,4.16678 6.25015,5.55569c7.63908,2.08337 15.97263,-0.69446 22.22279,-4.86124c4.86122,-2.77783 8.33353,-7.63907 9.72246,-13.19479l1.38892,-9.02798c0.69446,-2.77783 3.47232,-3.47232 6.94463,-8.33353c4.16676,-5.55569 8.33354,-15.2782 13.88924,-19.44495c2.08337,-1.38892 4.16675,-2.0834 6.94461,-2.77786c-1.38892,-2.08337 -2.77786,-3.47229 -4.16678,-5.55566c-1.38892,-0.69449 -2.77783,-2.0834 -4.16675,-2.0834c-0.78128,-0.26041 -1.6792,-0.42728 -2.58252,-0.45575zm29.4061,26.21594c-2.61084,-0.02899 -5.33868,0.54254 -8.07312,1.32382l5.55569,3.47232c-1.38895,2.77783 -4.86121,8.33353 -4.16678,11.80585c0.69449,6.94461 10.41693,6.94461 14.58371,2.77783c4.86124,-5.55569 4.86124,-13.88922 -2.08337,-18.056c-1.82297,-0.91147 -3.78549,-1.30127 -5.81613,-1.32382zm-13.39011,3.40723c-0.54364,0.00192 -1.07498,0.00705 -1.60593,0.0217c-3.8486,0.21091 -7.69568,0.50116 -11.54541,0.67276c-2.41867,0.03116 -4.88754,-0.00473 -7.22676,0.69446c-3.17285,2.02515 -5.29396,5.38272 -6.53229,8.87607c-0.16666,0.50345 -0.30807,1.02072 -0.41234,1.54083c3.86218,1.74924 8.17189,1.5618 12.30499,1.41064c2.50439,-0.06696 5.00949,0.24561 7.50888,0.36893c1.7876,0.07916 3.57104,0.32327 5.36038,0.26044c2.19412,-0.07278 4.22598,-1.3168 5.38205,-3.16849c0.99927,-1.58255 1.9447,-3.21933 2.56085,-4.99146c0.49768,-1.59048 0.5896,-3.80087 -1.06339,-4.75272c-1.43857,-0.79446 -3.10013,-0.93906 -4.73105,-0.93317zm2.53915,15.9726c-0.69449,0.69446 -1.38892,0.69446 -2.0834,1.38892c-0.69446,3.47232 8.33356,11.80588 9.72247,4.16678c-3.47232,-1.38892 -5.55573,-2.77786 -7.63907,-5.55569z",
+ "diamonds": "m79.28394,70.5173l69.51914,-69.51918l69.53062,69.51918l-69.53062,69.5193l-69.51914,-69.5193zm-78.28265,78.73502l69.53064,-69.51916l69.51917,69.51916l-69.51917,69.53081l-69.53064,-69.53081zm158.04381,1.41991l69.53076,-69.50788l69.50775,69.50788l-69.50775,69.53059l-69.53076,-69.53059zm-78.26005,78.74646l69.50779,-69.51927l69.53087,69.51927l-69.53087,69.5197l-69.50779,-69.5197z",
+ "dog": "m244.35188,22.54387l-69.54898,69.54889c-119.32899,0.00291 -120.2569,-0.00142 -121.18423,0c-10.16035,0.01348 -20.31404,-0.04446 -30.47281,0.1654c-17.41192,-3.13311 -29.41997,20.08429 -17.10143,32.59326c9.91919,10.04415 24.91881,5.84701 37.58711,6.70858c0.082,39.19679 0.15858,78.39276 0.24066,117.58955c-1.93424,11.60912 7.01076,23.37389 18.92138,24.38115c10.04872,1.3252 21.64701,-4.10141 24.54638,-14.3645c2.0378,-20.77086 0.69009,-41.75818 1.06802,-62.62978c15.7105,0 58.3028,0.55273 93.34407,0.94731c0.05244,10.48698 0.11156,36.08763 0.16484,43.1525c-0.20064,9.60797 -0.94731,36.79358 17.44778,36.82019c18.39429,0.02664 19.96759,-19.29745 19.74867,-23.16328c-0.13904,-5.1078 0.14149,-42.99934 0.54108,-56.44814c2.24173,0.01166 4.87888,0.02997 6.54291,0.02997c-0.00998,-0.00999 -0.01997,-0.01997 -0.02995,-0.02997c0.10487,0.06078 0.2106,0.11987 0.31549,0.18065c0.19894,-16.80684 -0.38959,-50.0226 -0.04497,-66.82692c15.38005,-0.19313 30.76425,-0.09573 46.14514,-0.13486c13.52618,3.45377 34.10559,-4.10139 23.59946,-20.81667c-16.37396,-18.52205 -34.58011,-35.37009 -51.83061,-53.07936l0,-34.62398z",
+ "frame_half": "m1,1l297,0l-98.99899,98.99902l-99.00199,0l0,99.00198l-98.99902,98.99901z",
+ "hand_stop": "m136.25574,297.49808c-29.33714,-5.08954 -54.45634,-27.86633 -62.06976,-56.71431c-3.62096,-14.72525 -1.50079,-30.17319 -2.21442,-45.21799c-0.13461,-38.62221 -0.20337,-77.24464 -0.30453,-115.86696c3.44471,-11.98872 17.98409,-18.29414 29.04424,-12.36688c0.96214,-3.14931 0.25692,-8.79729 0.59418,-12.8885c-1.96137,-11.24498 6.05913,-22.68389 17.70836,-23.44487c6.68523,-0.04347 14.68906,5.03699 11.64235,-6.21321c-2.06573,-11.58701 7.02885,-24.78486 19.46753,-23.71677c11.8866,-1.10308 20.91313,10.99307 19.47894,22.20545c0.55293,6.69356 15.04739,-4.38583 20.11427,3.0555c6.46245,3.83537 10.88301,11.15349 9.66263,18.71955c0.37462,20.72639 -0.50464,41.58417 0.94255,62.21075c10.62856,-5.38028 25.7729,1.23052 27.94981,13.06696c-0.24077,36.77421 0.61372,73.57438 -0.64664,110.32743c-4.27835,37.80429 -40.23309,69.77301 -78.61711,67.50256c-4.25351,0.01132 -8.54422,0.05313 -12.75241,-0.65872zm26.24695,-10.04156c32.22029,-5.44516 57.56776,-36.59567 55.75252,-69.35173c0.24638,-31.65953 1.24834,-63.36566 0.07516,-95.00381c-0.74966,-11.56753 -19.92574,-8.76712 -18.68594,1.90652c-0.00584,23.46449 -0.01172,46.92897 -0.01762,70.39346c-5.97046,6.15695 -16.65688,2.44864 -23.81619,7.45261c-15.91585,6.94403 -26.02902,23.94809 -26.37592,41.0688c-8.5842,13.31046 -12.47054,-8.35147 -7.54663,-15.48785c5.69263,-21.52615 25.72418,-37.58736 47.72688,-39.6965c-0.18001,-49.52237 0.46608,-99.06258 -0.57811,-148.57061c-6.22968,-14.02401 -23.68619,-1.72364 -19.04016,10.55674c-0.45773,37.44105 -0.04761,74.89084 -0.68825,112.32923c-4.16106,6.65674 -12.04573,0.3437 -9.47389,-5.79948c-0.17776,-46.90031 -0.35556,-93.80062 -0.53333,-140.70093c-3.33864,-8.28292 -18.12991,-6.98883 -18.3627,2.10197c-0.18286,48.40011 -0.36572,96.80021 -0.5486,145.20032c-3.89212,5.48285 -11.88664,0.71593 -9.73376,-5.26897c-0.14377,-36.45805 0.40013,-72.93186 -0.55034,-109.37686c-0.24316,-10.84745 -18.40633,-10.5788 -18.64873,-0.51889c-0.36327,37.37112 0.09734,74.76224 -0.99649,112.11712c1.02982,9.51479 -12.37218,4.97615 -9.28424,-2.22137c-0.16375,-25.39479 0.44627,-50.81747 -0.58949,-76.18918c-6.1088,-15.65501 -24.37704,-2.73073 -19.28278,10.2811c0.06127,45.03139 -0.41048,90.08521 0.72834,135.10263c2.79378,34.58762 36.09247,63.06729 70.73276,60.79437c3.26721,-0.13614 6.52469,-0.50925 9.73752,-1.11868z",
+ "L_shape": "m1,1l149,0l0,149l149,0l0,149l-298,0l0,-298z",
+ "lightning_bolt": "m117.48906,0.99793l60.3351,83.60071l-24.88768,9.85823l75.99797,71.63888l-24.88768,11.96198l93.95412,119.94316l-159.33742,-91.91997l30.38835,-12.76016l-99.00077,-58.87717l35.47526,-18.19279l-104.52837,-61.76487l116.49113,-53.48799z",
+ "logo_apple": "m209.28954,1.00088c-43.04727,7.92585 -57.33284,43.96882 -57.8894,64.561c23.68694,1.71168 38.47275,-11.65597 44.5219,-19.4791c9.85237,-11.09263 12.25443,-26.71591 13.36751,-45.0819zm5.28372,71.19604c-31.11621,-0.01418 -48.48506,12.70539 -57.04939,12.84402c-9.82712,-0.76584 -38.46593,-12.28108 -55.16231,-12.46661c-58.47802,1.74345 -75.23289,65.28636 -74.50751,92.61087c4.76329,104.60263 68.59296,131.60016 79.02421,134.12564c8.36713,1.64984 36.57712,-12.89731 57.32939,-12.23529c22.65837,2.3606 38.49214,11.76068 47.58983,11.10309c11.51012,-0.79871 49.05655,-31.14218 60.37299,-77.89201c-22.81836,-19.29358 -36.89403,-36.77824 -38.15468,-53.37267c-0.584,-7.50279 10.70016,-49.91425 28.69514,-61.83392c2.59723,-14.65567 -24.13031,-33.25182 -45.08191,-32.83442c-1.03252,-0.02777 -2.05203,-0.0482 -3.05577,-0.04871z",
+ "man": "m125.90131,25.2503c0,-13.33112 10.79823,-24.12934 24.12934,-24.12934c13.33113,0 24.12932,10.79822 24.12932,24.12934c0,13.33112 -10.79819,24.12934 -24.12932,24.12934c-13.33113,0 -24.12934,-10.79822 -24.12934,-24.12934zm81.12696,68.30144v-12.18601c0,-12.82147 -10.38806,-23.21696 -23.21696,-23.21696h-67.63607c-12.82147,0 -23.21695,10.39549 -23.21695,23.21696v12.18601c-0.02242,0.2766 -0.03739,0.56071 -0.03739,0.84853v70.18918c0,5.4538 4.41839,9.87215 9.87218,9.87215c5.44633,0 9.87589,-4.41837 9.87589,-9.87215v-69.14999h6.62006v79.02961h0.04859v111.66646c0,7.25925 5.89491,13.15787 13.16164,13.15787c7.27048,0 13.16164,-5.89114 13.16164,-13.15787v-111.66646h8.68347v111.66646c0,7.25925 5.89856,13.15787 13.16162,13.15787c7.27045,0 13.16161,-5.89114 13.16161,-13.15787v-111.66646h0.04112v-79.02961h6.62007v69.14623c0,5.45381 4.42955,9.8759 9.8759,9.8759c5.45386,0 9.87218,-4.42209 9.87218,-9.8759v-70.18916c-0.00371,-0.29156 -0.02617,-0.56819 -0.0486,-0.8448z",
+ "maximize_2": "m1,149.99998l67.05,-67.05l0,33.52501l48.425,0l0,-48.425l-33.52501,0l67.05,-67.05l67.04999,67.05l-33.52499,0l0,48.425l48.42502,0l0,-33.52501l67.04997,67.05l-67.04997,67.04999l0,-33.52499l-48.42502,0l0,48.42502l33.52499,0l-67.04999,67.04997l-67.05,-67.04997l33.52501,0l0,-48.42502l-48.425,0l0,33.52499l-67.05,-67.04999z",
+ "moon": "m227,299.94119l0,0c-85.05185,0 -154,-66.92029 -154,-149.4706c0,-82.55034 68.94815,-149.4706 154,-149.4706l0,0c-48.47263,35.28521 -77,90.6619 -77,149.4706c0,58.80869 28.52737,114.18535 77,149.4706z",
+ "mythic_unicorn_2": "m182.0204,297.85391c-5.77818,-7.90314 -14.7635,-8.80438 -16.9241,-20.05347c-1.69348,-6.11859 -17.65829,-14.32483 -8.20955,-3.3428c7.2961,6.61768 15.96432,31.02682 -1.98563,23.31473c-13.65228,-5.01041 -14.2377,-20.48209 -17.89716,-32.06519c-11.90031,-8.25644 3.07674,-25.71408 -9.73651,-36.29276c-10.87482,-11.04288 -3.30119,-31.72456 -18.8404,-39.55457c-7.79965,-3.16566 -11.1757,18.69177 -12.48895,2.70163c-4.27309,-16.17242 -19.36451,7.86156 -29.42789,5.31358c-8.12057,-0.70595 13.58361,-6.35143 3.22626,-7.87068c-6.08933,3.33348 -11.72343,9.09727 -12.68681,-0.44351c-7.3251,-4.35046 -22.68599,-11.29797 -22.28696,-18.20909c6.3611,-1.99829 27.83545,3.78387 24.11403,-4.25029c-6.38573,-2.42343 -7.54573,-9.04803 0.27553,-4.60205c15.41352,0.48352 33.48255,-5.66917 46.30758,6.09853c6.68958,4.11612 13.26701,18.87857 16.84827,4.53223c11.5443,-13.92389 34.83883,-15.10329 41.95536,-33.13124c1.72211,-8.72215 -5.28903,-13.69839 -11.24521,-15.46512c-1.15878,-2.86641 -3.13139,-15.03612 -8.05675,-8.8949c0.22449,-5.37502 4.84473,-18.22859 -5.38927,-12.53831c-1.03801,-11.44846 8.74879,-22.87025 -4.19783,-31.20716c12.13029,2.25027 9.73825,-11.57887 7.09616,-13.77212c7.19073,-1.02106 15.62939,-7.49186 11.66467,-15.50808c7.80894,14.17675 8.07971,-17.19902 14.50877,-3.67512c11.83272,1.93988 -3.67599,-10.57163 7.20721,-7.77902c6.21443,0.21264 4.83423,-6.80917 10.41692,-1.50957c7.3886,-4.03149 -5.66409,-16.21531 6.26559,-7.74985c4.01033,3.484 16.77809,12.60911 14.48726,0.56772c11.33586,12.0923 20.25659,-11.23169 29.67625,-16.06186c3.73633,-4.47003 11.8613,-9.20071 4.36795,-0.66791c-4.97461,10.87669 -21.85179,22.64296 -17.31131,33.45053c-4.10985,3.74163 8.29224,8.44421 -1.58034,7.02768c-5.8488,6.31351 7.84134,18.1257 8.93388,28.06219c-3.13588,6.80826 -15.07657,14.53744 -19.90688,14.29315c1.76543,-8.76564 -2.06178,-20.19066 -13.24036,-15.23595c6.26202,11.45789 14.72818,22.40379 20.03253,34.86404c5.18462,12.24902 13.59059,26.39416 24.64981,10.62966c7.04883,-10.04763 27.18559,-9.90218 21.65419,6.41521c-2.82767,16.0232 4.74286,37.1706 -9.80374,48.20794c-8.77531,16.90973 -18.50392,-6.2874 -11.60965,-15.06308c-1.75673,-2.50781 -3.11575,-4.27809 2.02489,-7.7061c-1.06146,-2.57137 14.7939,-12.24554 6.80286,-18.18176c-9.0885,10.30594 -22.38708,22.23511 -18.69125,37.55475c2.99957,10.26601 -21.73944,27.86615 -19.76117,10.82875c0.44312,-6.62131 9.89648,-19.45415 7.72044,-21.10741c-6.90181,12.95006 -16.71997,25.39136 -31.55621,29.23625c-12.34084,0.73132 -18.80547,10.66779 -12.94504,21.69241c1.11998,15.62238 -7.12646,29.76141 -9.02499,44.972c3.52914,16.13283 25.01552,19.39287 27.93198,35.84959c5.01138,11.05234 -7.52405,9.41898 -13.36446,6.32639zm-30.55545,-48.12944c-1.80891,-7.29253 -5.53151,18.95699 -0.94273,5.02481l0.68695,-2.46143l0.25578,-2.56339z",
+ "page": "m249.3298,298.99744l9.9335,-39.73413l39.73413,-9.93355l-49.66763,49.66768l-248.33237,0l0,-298.00001l298.00001,0l0,248.33234",
+ "people_business_woman_1": "m152.09991,291.25156c-2.47678,-44.58551 4.65103,-89.4209 -0.87244,-133.89311c-8.95648,25.8877 -13.19429,53.17113 -13.68393,80.52692c-0.41364,17.0155 -0.16316,34.03816 -0.23213,51.05714c-6.59424,1.84573 -15.25726,1.21277 -19.31381,7.46753c-5.79991,2.60486 -12.31924,1.35736 -18.48087,1.65521c6.01304,-4.82208 13.37695,-9.59021 13.6609,-18.23849c6.31746,-52.60599 2.67181,-105.66583 3.06088,-158.49306c0.43537,-21.1868 -1.16552,-42.66898 2.64828,-63.61227c2.03822,-10.62624 19.15558,-5.1272 18.60609,-18.67488c3.03041,-11.80116 0.67964,-26.03735 9.52867,-35.60117c10.5938,-7.7376 21.95103,4.42952 20.767,15.48053c1.06621,11.41806 -1.19225,25.92375 9.12468,33.77226c11.50188,2.75379 13.11151,17.72176 18.13281,26.80961c4.23164,10.69022 9.72182,23.87735 0.08774,33.44124c-5.93716,8.68594 -16.90076,16.78377 -12.99744,28.7057c-0.60452,31.03065 -6.76558,61.62357 -9.34036,92.51013c-2.09418,17.62329 -2.81628,35.5533 -6.9491,52.84404c-0.55614,5.69342 -5.84515,19.49838 -12.14343,10.53711c-0.87442,-1.99588 -1.26941,-4.15509 -1.60355,-6.29443zm-31.23076,-126.74179c-4.61314,-4.02649 0.43039,13.47859 0.48324,1.7234l-0.48324,-1.7234l0,0zm6.80929,-33.43718c-1.88333,-6.96362 -7.13425,10.3817 -5.38842,14.89726c-0.28574,6.8293 0.74596,4.17953 2.10389,-0.81731c1.48602,-4.58557 2.79638,-9.27054 3.28453,-14.07996zm61.63647,-23.18116c5.52028,-11.36497 -2.7056,-23.94508 -11.13263,-31.31998c-8.36171,1.6476 -4.1756,17.26677 -4.09579,24.50607c-0.37729,9.19583 11.31773,21.60236 15.22842,6.8139zm-59.09369,-11.57291c-3.00658,-5.39182 -0.968,23.24248 0.49254,8.1709c0.11818,-2.72906 0.0034,-5.48079 -0.49254,-8.1709z",
+ "plant_tree_1": "m122.82124,295.43991c-9.60714,-8.11343 -1.74962,-22.4458 -1.18428,-32.9653c4.14859,-11.24323 3.96359,-85.81235 -10.94936,-86.09872c-15.83897,-4.80884 -33.8653,1.83771 -48.3958,-7.59918c-9.84084,-5.82912 -12.90007,-17.71764 -12.64209,-28.40579c0.19444,-11.07701 -10.96857,-15.73981 -14.56149,-25.02111c-4.85892,-11.57952 -0.66407,-24.81283 7.67092,-33.63805c7.87535,-8.99152 0.96225,-20.76784 4.99341,-30.60822c5.74977,-13.3805 22.92119,-7.46461 32.14548,-16.67288c9.90182,-6.99356 18.35265,-19.09785 32.07681,-17.29906c13.25371,0.83774 28.05221,3.21463 39.26759,-5.80136c10.45538,-8.74133 25.08881,-13.41753 38.21471,-8.04486c12.4521,3.84588 26.61226,11.87612 26.66945,26.64145c-3.79947,15.14795 10.55962,14.96229 20.88582,17.05112c12.22475,5.50745 24.82689,14.06517 29.88231,26.94686c1.34924,14.72554 -15.32854,26.93484 -7.76337,41.96729c2.96521,14.64848 -9.76962,22.78136 -18.92447,30.72028c-3.76666,14.33221 -18.04883,25.98621 -33.39958,22.57785c-12.36432,-2.02824 -19.98886,11.49191 -32.59709,10.30693c-8.35739,8.60075 -2.66228,82.40933 -1.11533,92.59302c6.29385,12.59021 -2.48013,26.51376 -16.65036,26.0885c-11.10333,1.33105 -23.19679,1.95465 -33.62328,-2.73877z",
+ "rectangle_2_rounded": "m50.66998,1l198.6639,0l0,0c13.17268,0 25.80577,5.2328 35.12022,14.54726c9.31445,9.31446 14.54727,21.94758 14.54727,35.12021l0,248.33141c0,0.00134 -0.00116,0.00247 -0.0025,0.00247l-297.99637,-0.00247l0,0c-0.00136,0 -0.0025,-0.0011 -0.0025,-0.0025l0.0025,-248.3289l0,0c0,-27.43059 22.23686,-49.66747 49.66748,-49.66747z",
+ "rectangle_3_rounded": "m50.66972,1l248.33028,0c0.0007,0 0.00134,0.00024 0.00177,0.00072c0.00049,0.00048 0.00076,0.00108 0.00076,0.0018l-0.00253,248.32779c0,27.43044 -22.23679,49.66722 -49.66722,49.66722l-248.3303,0l0,0c-0.00138,0 -0.00248,-0.00113 -0.00248,-0.0025l0.00248,-248.32779l0,0c0,-27.43045 22.23678,-49.66723 49.66724,-49.66723z",
+ "ribbon_up": "m0.99887,298.99884l37.37486,-124.16641l-37.37486,-124.16684l74.74943,0l0,-37.25092l0,0c0,-6.85776 4.18383,-12.41691 9.34372,-12.41691l130.81201,0c5.16063,0 9.34372,5.55916 9.34372,12.41691l0,37.25092l0,0l74.74974,0l-37.37488,124.16684l37.37488,124.16641l-102.7809,0c-5.15987,0 -9.3437,-5.55884 -9.3437,-12.41577c0,-6.85834 4.18384,-12.41724 9.3437,-12.41724l18.68744,0c5.16063,0 9.34372,-5.5603 9.34372,-12.41721c0,-6.85834 -4.18309,-12.41722 -9.34372,-12.41722l-130.81201,0c-5.15989,0 -9.34372,5.55888 -9.34372,12.41722c0,6.85693 4.18383,12.41721 9.34372,12.41721l18.68743,0c5.1606,0 9.34372,5.5589 9.34372,12.41724c0,6.85693 -4.18312,12.41577 -9.34372,12.41577zm121.79819,-30.86179l-0.71873,-217.77046m-149.49945,214.90504l0.71875,-213.47234m110.6871,199.14535l0.71873,41.54834m-74.03098,-1.43271l-0.71874,-40.11563",
+ "sflowchart_filter2": "m1,75.5l298,0l-149,74.5l149,74.5l-298,0l149,-74.5l-149,-74.5z",
+ "sign_no": "m0.99794,149.99951l0,0c0,-82.29002 66.70967,-148.99969 148.99992,-148.99969l0,0c39.51779,0 77.41692,15.69819 105.35898,43.64116c27.94318,27.94297 43.64124,65.84185 43.64124,105.35853l0,0c0,82.29103 -66.7092,149.00024 -149.00021,149.00024l0,0c-82.29025,0 -148.99992,-66.70921 -148.99992,-149.00024zm240.6012,66.65504l0,0c32.80489,-45.08388 27.92851,-107.33437 -11.49672,-146.75905c-39.42525,-39.42501 -101.67574,-44.30139 -146.75847,-11.49616l158.25519,158.25521zm-183.20167,-133.30872c-32.80512,45.08364 -27.92886,107.33413 11.49615,146.75825c39.4249,39.42525 101.67541,44.30159 146.75814,11.49672l-158.2543,-158.25497z",
+ "skull": "m74.9404,81.44109c-2.88919,16.35929 -10.26919,31.99403 -10.76614,48.86361c0.66122,9.76746 -5.89156,15.01402 -14.86213,14.8293c-9.64813,10.00099 1.19087,25.80647 12.10749,29.84357c11.14103,7.47832 24.96226,-0.87791 35.99846,5.83044c14.65424,11.4554 20.77205,31.76607 15.71635,49.57211c-5.02672,14.69893 20.70476,9.35306 11.02628,-2.39693c-7.47506,-11.48471 14.09103,-7.68764 8.56998,3.21603c-1.04326,8.75262 6.45616,11.58562 3.11867,20.06531c8.69472,4.98558 -0.72885,7.77708 -6.02475,8.71843c-12.40178,6.18225 2.24324,-11.07452 -7.58144,-16.17874c-8.99694,1.95532 -2.90059,17.02136 -5.98875,15.28125c-6.3575,-4.97824 -6.35281,-23.59047 -17.02285,-11.44621c-3.54128,-14.96387 2.92009,-30.54814 -2.05737,-45.42514c2.03897,-11.11034 -15.50281,-14.9426 -13.28409,-2.05647c0.88449,19.66696 -5.0876,39.29475 -1.66005,58.86481c4.72071,12.07065 17.92378,17.50833 26.2104,26.82291c6.80557,7.18207 15.6284,14.86087 26.22089,12.5997c12.0141,-0.52078 24.05035,-1.63034 36.01024,0.2771c15.04311,0.47446 26.52666,-11.41623 39.36443,-17.5242c15.0918,-11.98355 12.71564,-33.38867 11.21118,-50.43889c-1.84476,-10.52664 2.20334,-21.05807 1.44894,-31.48618c-10.88037,-13.31276 -19.80722,10.08708 -16.70779,20.14043c-0.00076,12.64635 2.42783,28.93701 -9.63577,37.17496c-9.95572,-0.25104 -19.43069,3.36517 -29.4632,1.4744c-8.14081,4.83435 -21.32692,4.71021 -24.01404,-6.79811c-1.07281,-10.22015 3.55807,-20.93494 -2.73401,-30.47318c5.52835,4.7614 15.17361,-4.11226 9.79822,6.56248c-6.55643,8.68922 5.55173,22.07874 10.10989,9.25331c1.51227,-8.60512 -6.54141,-20.02596 6.69714,-18.18237c2.6998,3.03528 -9.21959,24.26701 7.07346,18.90152c11.61606,-2.54445 -2.06659,-20.76607 13.66382,-20.82939c7.61295,-8.9626 5.56317,-25.76184 17.20825,-32.56114c12.98419,-8.78706 33.2569,-2.44315 42.52423,-17.32399c7.89911,-7.61507 4.18182,-28.72154 -9.44128,-21.72794c-17.02448,1.65962 -3.51318,-23.0582 -3.98819,-32.32024c4.01126,-8.06691 -4.87137,-25.04774 -1.81268,-26.84933c5.77948,8.84253 7.84946,19.18484 6.60651,29.51878c-0.10681,8.76352 -3.8233,32.51385 8.36014,17.87288c4.12442,-10.20347 2.92487,-21.76073 5.86331,-32.37626c5.66748,-22.91865 -4.48026,-45.85004 -15.79309,-65.262c-9.63495,-10.45038 -21.86679,-18.78104 -33.35342,-26.98327c-19.32092,-7.26658 -40.65421,-8.56836 -61.06006,-6.74718c-18.04979,3.12863 -37.13738,6.42709 -51.51633,18.73374c-14.01352,8.25707 -27.43441,19.22373 -32.97453,35.08961c-4.82798,12.78156 -13.28239,25.798 -9.43994,39.99647c3.67479,11.83601 1.72576,24.12813 2.32075,36.22574c6.26442,13.82637 12.1788,-7.07504 11.59255,-13.98853c0.3468,-13.11021 7.26362,-24.71465 12.36033,-36.35318zm115.06042,28.12622c12.88235,0.92311 29.19336,8.09689 29.54492,23.0528c1.95883,15.00865 -10.16846,29.55684 -25.7099,28.08501c-14.11661,-1.15955 -23.14499,-13.35332 -22.20761,-27.06258c-4.7262,-9.82969 2.6286,-20.35741 12.49942,-22.61709c1.91415,-0.64365 3.88168,-1.12543 5.87317,-1.45815zm-86.93419,1.27835c14.94448,-2.65778 31.94749,6.61306 31.99739,23.15527c1.40359,15.99194 -15.57494,19.12508 -27.15695,23.1313c-8.01422,5.17467 -16.3391,0.35667 -22.99829,-4.85698c-8.63997,-9.0434 -6.10048,-27.26721 3.02245,-35.52229c4.42388,-3.27404 9.90028,-4.56108 15.1354,-5.9073zm51.1378,42.18812c7.2348,9.94383 15.92023,25.10751 6.56407,36.39339c-8.30571,6.66107 -9.35284,-9.47466 -18.07048,-1.8754c-8.17816,-7.1624 -0.63536,-21.73717 5.10291,-29.01329c1.8913,-2.09525 4.05559,-3.93987 6.4035,-5.5047z",
+ "star_32": "m1,150l37.78866,-10.95375l-34.9264,-18.11479l39.19976,-3.37057l-30.72019,-24.58047l39.1037,4.34019l-25.33452,-30.10049l37.5051,11.88636l-18.97492,-34.46539l34.46528,18.97503l-11.88614,-37.50511l30.10025,25.33441l-4.34019,-39.10359l24.58048,30.72008l3.37057,-39.19964l18.11479,34.92639l10.95375,-37.78866l10.95375,37.78866l18.11479,-34.92639l3.37057,39.19964l24.58047,-30.72008l-4.34018,39.10359l30.10023,-25.33441l-11.88614,37.50511l34.4653,-18.97503l-18.97491,34.46539l37.50508,-11.88636l-25.33452,30.10049l39.10347,-4.34019l-30.71994,24.58047l39.1994,3.37057l-34.92581,18.11479l37.78842,10.95375l-37.78842,10.95375l34.92581,18.11479l-39.1994,3.37057l30.71994,24.58047l-39.10347,-4.34018l25.33452,30.10025l-37.50508,-11.88615l18.97491,34.4653l-34.4653,-18.97493l11.88614,37.5051l-30.10023,-25.33452l4.34018,39.10347l-24.58047,-30.71994l-3.37057,39.1994l-18.11479,-34.92581l-10.95375,37.78842l-10.95375,-37.78842l-18.11479,34.92581l-3.37057,-39.1994l-24.58048,30.71994l4.34019,-39.10347l-30.10025,25.33452l11.88614,-37.5051l-34.46528,18.97493l18.97492,-34.4653l-37.5051,11.88615l25.33452,-30.10025l-39.1037,4.34018l30.72019,-24.58047l-39.19976,-3.37057l34.9264,-18.11479l-37.78866,-10.95375z",
+ "sun": "m298.99939,149.99919l-60.12755,21.3835l0,-42.76601l60.12755,21.38251zm-43.65198,-105.36193l-27.38881,57.64266l-30.23897,-30.23995l57.62778,-27.40271zm-105.34804,-43.63768l21.38251,60.12764l-42.76602,0l21.38351,-60.12764zm-105.36263,43.63768l57.64236,27.40271l-30.23955,30.23995l-27.40281,-57.64266zm-43.63767,105.36193l60.12774,-21.38251l0,42.76601l-60.12774,-21.3835zm43.63767,105.34903l27.40281,-57.62877l30.23955,30.23996l-57.64236,27.38881zm105.36263,43.65096l-21.38351,-60.12753l42.76602,0l-21.38251,60.12753zm105.34804,-43.65096l-57.62778,-27.38881l30.23897,-30.23996l27.38881,57.62877zm-179.84834,-105.34903l0,0c0,-41.14515 33.35516,-74.5 74.50031,-74.5c41.14514,0 74.5,33.35485 74.5,74.5c0,41.14514 -33.35486,74.49998 -74.5,74.49998c-41.14514,0 -74.50031,-33.35484 -74.50031,-74.49998z",
+ "woman": "m150.04984,49.03255c13.33249,0 24.15346,-10.81348 24.15346,-24.15346c0,-13.34748 -10.82097,-24.16844 -24.15346,-24.16844c-13.34375,0 -24.16843,10.82096 -24.16843,24.16844c0,13.33998 10.82095,24.15346 24.16843,24.15346zm67.74049,104.1672l-21.67561,-80.39177c-0.20212,-0.72988 -0.48662,-1.42607 -0.83093,-2.06987c-2.46291,-7.53088 -9.53339,-12.9844 -17.88399,-12.9844h-54.86088c-8.70618,0 -16.01627,5.9214 -18.16845,13.95758c-0.14598,0.35184 -0.26575,0.7224 -0.37429,1.10417l-21.2901,80.38803c-1.41861,5.2701 1.71053,10.6862 6.98811,12.1048c5.27014,1.4111 10.68626,-1.71803 12.10487,-6.98813l16.71989,-63.14786h6.96569l-30.34438,114.25453h28.5927v78.87959c0,6.06738 4.91077,10.9819 10.98564,10.9819c6.05989,0 10.9819,-4.9108 10.9819,-10.9819v-78.87959h8.73613v78.87959c0,6.06738 4.91826,10.9819 10.99315,10.9819c6.05988,0 10.9819,-4.9108 10.9819,-10.9819v-78.87959h28.57767l-30.45665,-114.25453h7.14911l17.02679,63.14786c1.41859,5.2701 6.83472,8.39923 12.10481,6.98813c5.2589,-1.41859 8.38803,-6.83842 6.97693,-12.10854z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/music.json b/files_svgedit/svg-edit/extensions/shapelib/music.json
new file mode 100644
index 000000000..fe31aed7e
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/music.json
@@ -0,0 +1,21 @@
+{"data": {
+ "clef_alto": "m51.25065,150.28749c0,-49.53207 0,-99.06413 0,-148.5962c11.59261,0 23.18523,0 34.77784,0c0,99.06413 0,198.12827 0,297.1924c-11.59261,0 -23.18522,0 -34.77784,0c0,-49.53209 0,-99.06413 0,-148.59621zm51.37634,0c0,-49.53207 0,-99.06413 0,-148.5962c8.48285,-2.46703 12.93837,1.84261 11.08508,10.0007c0.12527,45.40251 0.25053,90.80502 0.37581,136.20751c21.44767,-15.32626 29.57346,-41.86327 36.21976,-66.10667c3.81448,15.78812 9.88112,35.01518 27.29865,40.16045c16.60112,4.98381 31.30354,-10.63891 31.13045,-26.64445c2.89955,-20.45341 3.30077,-41.70258 -1.14742,-61.93042c-4.16455,-12.79745 -16.64639,-23.36595 -30.52771,-22.52039c-11.42384,-5.25948 -24.23628,10.96936 -9.59547,16.90924c12.31264,13.08186 -1.99968,35.47687 -19.11742,30.23324c-16.59583,-3.55596 -21.00951,-25.43777 -11.40723,-37.80838c13.77419,-17.97563 39.16574,-20.24264 60.03438,-17.62625c27.15413,3.08944 47.80745,27.56302 50.7352,54.02297c3.73869,23.61245 -2.35521,50.29027 -22.12251,65.37829c-16.57411,13.95533 -40.93645,15.69794 -60.41183,7.1722c-4.73631,7.1261 -9.47264,14.25217 -14.20895,21.37825c4.65338,6.95274 9.30673,13.90549 13.96008,20.8582c23.58311,-10.57065 54.40877,-5.07518 69.99907,16.43117c21.95821,28.96715 17.67499,75.52599 -10.84692,98.64314c-17.91376,14.62869 -43.09233,14.67899 -64.38158,8.83109c-16.11131,-4.2995 -31.82996,-19.966 -26.84735,-37.82117c2.51375,-15.55998 23.9128,-21.41389 34.33803,-9.83356c14.19543,12.82462 -6.37968,25.74036 -5.32516,38.10141c15.79561,11.97195 41.38054,0.70062 45.05746,-18.39487c5.84576,-20.96526 4.47285,-43.25116 1.61388,-64.56879c-1.53316,-14.33195 -14.00139,-28.78069 -29.45882,-24.78352c-16.25957,3.69221 -24.37509,20.62003 -27.1602,35.64745c-3.41434,11.00523 -4.50349,-10.5222 -7.16806,-14.04636c-5.53896,-17.66304 -15.20212,-35.01096 -30.07851,-46.1468c-1.53252,4.76282 -0.13866,10.70403 -0.62897,15.96893c-0.11874,43.15994 -0.2375,86.31984 -0.35623,129.47978c-8.48793,2.46848 -12.93407,-1.8443 -11.0575,-10.00076c0,-46.19846 0,-92.39696 0,-138.59544z",
+ "clef_bass": "m21.53929,297.24106c0.11552,-13.50244 21.89277,-17.95071 30.83244,-27.31851c34.50853,-23.15955 68.13189,-49.8976 89.28437,-86.39645c22.47179,-37.29227 34.65842,-82.97259 25.51732,-126.22972c-4.84746,-26.84145 -30.93637,-48.32386 -58.5412,-44.96438c-18.18078,2.48732 -39.18159,6.6724 -49.70108,23.45858c-11.41858,8.57642 -5.13639,28.67733 10.08619,21.04295c19.47556,-7.4344 43.93666,7.72539 43.16644,29.21231c0.02258,20.3737 -20.60109,34.74615 -39.82058,32.83379c-21.40677,-0.21405 -42.59771,-17.48695 -42.15028,-39.87929c-1.48358,-36.0903 29.74187,-65.56665 63.16554,-73.13066c29.88613,-9.31284 64.6309,-5.56545 89.8325,13.80772c18.75227,12.81883 33.51952,32.25211 36.60045,55.18989c6.65193,29.82199 -1.94455,60.59844 -16.85703,86.54317c-19.16537,34.9521 -48.44911,63.56561 -82.44233,84.09172c-31.5721,20.13449 -64.41224,38.31845 -98.38529,54.07944c-0.19582,-0.78018 -0.39163,-1.56039 -0.58745,-2.34058zm226.81013,-147.1503c-16.25441,-7.36092 -12.66826,-37.2715 6.2514,-37.94421c14.1568,-3.30239 27.38025,11.49424 23.01007,25.17739c-2.75677,12.80446 -18.12839,18.35408 -29.26147,12.76682zm0,-81.82211c-16.25441,-7.36089 -12.66826,-37.2715 6.2514,-37.9442c14.1568,-3.30238 27.38025,11.49425 23.01007,25.17739c-2.82837,12.84788 -18.04926,18.33069 -29.26147,12.76681z",
+ "clef_treble": "m142.57787,298.08936c-19.93291,-3.16858 -30.69543,-32.78793 -10.77837,-43.63799c20.76305,-10.6983 33.11169,27.38725 10.4319,31.10985c-12.41878,4.65247 16.12379,12.44363 21.44362,4.62054c16.62259,-8.04572 14.05481,-28.98639 10.0555,-43.73428c-1.38792,-11.29834 -3.1236,-23.3942 -17.37872,-16.97299c-34.39165,2.76706 -61.61951,-32.12309 -58.88461,-64.7627c0.92851,-30.78641 26.14601,-51.87253 44.81895,-73.25146c-6.13037,-27.96899 -7.98138,-60.28084 9.78998,-84.65368c16.36949,-19.81244 24.67825,16.44271 27.44722,28.74505c6.15059,28.7567 -6.11317,58.97542 -26.51985,79.24646c1.94853,9.61536 3.86572,19.23715 5.85146,28.84491c21.56471,-4.16351 42.14922,14.0585 43.32542,35.40215c3.33209,19.27364 -9.02991,37.47516 -25.91515,45.75842c-0.27765,16.55051 8.86742,33.71834 5.58147,50.80913c-3.15567,17.67035 -22.97263,26.33539 -39.26881,22.47659zm22.51283,-75.40413c6.10963,-11.46864 -4.97238,-31.72308 -5.58083,-46.4445c0.2393,-25.67101 -26.99069,4.97273 -18.89308,17.57916c2.40038,7.45953 23.23523,21.13914 4.09677,12.70238c-19.98106,-11.95877 -19.06588,-42.72807 -0.80893,-55.71979c15.31693,-3.39279 5.96193,-23.83228 3.07584,-30.54592c-18.81245,17.14481 -40.13555,38.73356 -36.89114,66.48257c2.4439,26.00902 30.79729,41.78694 55.00137,35.94611zm12.65782,-4.96449c17.94263,-11.51868 17.35378,-41.74863 -2.27676,-51.12454c-20.94589,-11.06784 -6.59929,17.92804 -6.2155,28.9649c2.90686,4.22505 1.26024,28.84393 8.49226,22.15964zm-22.11331,-138.56764c11.03699,-13.35171 23.65346,-32.62746 15.90224,-50.28019c-16.69221,-11.01859 -25.9682,18.77171 -26.37872,31.81623c-0.15186,8.45836 -1.39836,37.61288 10.47649,18.46396l0,0z",
+ "note_16th": "m88.44206,298.30295c-13.87988,-2.82538 -24.35809,-16.50861 -20.88289,-30.73529c4.91499,-19.9595 23.53616,-33.76636 42.17206,-40.32825c12.41348,-4.12247 26.50006,-3.4993 38.15588,2.63036c1.0408,-76.23686 0.44647,-152.49294 0.60452,-228.73842c4.20728,-0.00103 9.6062,-1.35928 8.46304,4.73352c0.58707,13.69153 7.31578,26.22541 17.65646,35.05743c23.06891,21.49232 49.01909,44.8303 54.31831,77.58647c1.50432,13.81924 -0.10796,27.74641 -3.17799,41.24139c9.09166,16.96843 8.54382,37.52667 4.8522,55.93042c-2.39383,9.71803 -6.29839,19.07953 -11.26178,27.74855c-11.71941,5.45538 1.38908,-8.91675 1.22467,-14.09427c6.33897,-15.55397 7.06616,-32.87975 4.18297,-49.26376c-6.28082,-23.96758 -30.02579,-35.67821 -49.12051,-48.20921c-6.90894,-2.70374 -21.67717,-19.0106 -18.74876,-3.03152c-0.64005,43.31421 -0.53076,86.63467 -0.73126,129.95221c-8.01517,20.08276 -26.40254,35.40967 -47.75954,39.25299c-6.54287,1.13068 -13.39496,1.54416 -19.94739,0.2674zm133.16364,-163.77284c0.19041,-24.65028 -18.17068,-44.59457 -36.16211,-59.2127c-9.00275,-6.78731 -18.53905,-13.97798 -28.66229,-18.37087c0.62265,14.17498 7.10901,27.98635 14.87303,39.75766c14.63148,19.60416 36.7207,32.71725 48.97745,54.30224c1.46973,-5.35919 1.02641,-10.98389 0.97392,-16.47633z",
+ "note_2_16th": "m49.3958,299.54056c-16.81947,-3.04166 -22.61933,-24.29047 -12.59162,-37.02081c13.30804,-19.68834 41.77522,-32.96074 64.07959,-20.53789c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.99711c55.61466,-11.21983 111.34956,-21.8626 166.98527,-32.98482c-0.12048,77.7042 -0.24097,155.40843 -0.36145,233.1126c-8.71588,23.50243 -36.87907,39.79991 -61.40202,32.51219c-14.59976,-4.3703 -18.09988,-23.21532 -9.97012,-34.76195c11.13289,-17.22395 31.85399,-29.0497 52.68539,-25.82347c5.94469,-0.60136 14.69865,9.02304 12.18605,-1.86462c0,-54.46642 0,-108.93282 0,-163.39921c-51.0519,10.27703 -102.20471,20.06591 -153.28023,30.23172c-0.17435,63.38239 0.43399,126.77441 -0.45506,190.14903c-1.62524,19.24988 -20.10281,32.38318 -37.35132,37.51443c-6.81397,1.14908 -13.90893,1.86209 -20.78043,0.8699zm133.17406,-258.40903c26.23065,-5.16204 52.47366,-10.26209 78.69298,-15.48133c3.33676,-13.29303 -11.59628,-4.66015 -18.89926,-4.33564c-44.78732,8.84114 -89.60051,17.55139 -134.38097,26.42687c-3.33676,13.29303 11.59627,4.66015 18.89925,4.33564c18.56081,-3.65804 37.12405,-7.30357 55.688,-10.94555z",
+ "note_2_32nd": "m49.39585,299.53995c-16.81947,-3.04169 -22.61932,-24.29047 -12.59161,-37.02081c13.30804,-19.68835 41.77521,-32.96077 64.07959,-20.53792c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.9971c55.61465,-11.21984 111.34956,-21.86261 166.98528,-32.98483c-0.12048,77.70421 -0.24097,155.40842 -0.36145,233.11262c-8.71591,23.50241 -36.8791,39.7999 -61.40204,32.51218c-14.59978,-4.3703 -18.09987,-23.21533 -9.97015,-34.76193c11.13292,-17.22395 31.854,-29.0497 52.68541,-25.82347c5.9447,-0.60136 14.69868,9.02304 12.18605,-1.86462c0,-46.71117 0,-93.42232 0,-140.13348c-51.05188,10.27702 -102.20473,20.0659 -153.28023,30.23172c-0.22871,56.35212 0.56696,112.72466 -0.58765,169.06043c-3.51923,18.91183 -22.11423,32.00891 -40.05743,35.8262c-5.92716,0.70624 -12.00983,1.31848 -17.94172,0.38101zm133.17405,-235.14331c26.23065,-5.16204 52.47366,-10.26208 78.69298,-15.48132c3.33676,-13.29303 -11.59628,-4.66015 -18.89923,-4.33564c-44.78734,8.84113 -89.60054,17.55138 -134.381,26.42687c-3.33677,13.29303 11.59627,4.66015 18.89925,4.33564c18.56078,-3.65805 37.12405,-7.30357 55.688,-10.94555zm0,-23.26575c26.23065,-5.16204 52.47366,-10.26209 78.69298,-15.48133c3.33676,-13.29302 -11.59628,-4.66015 -18.89923,-4.33563c-44.78734,8.84113 -89.60054,17.55139 -134.381,26.42687c-3.33677,13.29303 11.59627,4.66016 18.89925,4.33564c18.56078,-3.65804 37.12405,-7.30358 55.688,-10.94555z",
+ "note_2_64th": "m49.39639,299.53995c-16.81947,-3.04169 -22.61932,-24.29047 -12.59161,-37.02081c13.30804,-19.68835 41.77522,-32.9608 64.07959,-20.53792c0.44453,-69.33055 0.18797,-138.66488 0.25596,-207.99711c55.61465,-11.21983 111.34957,-21.86261 166.98528,-32.98482c-0.12048,77.70421 -0.24097,155.40842 -0.36145,233.11262c-8.71591,23.50241 -36.8791,39.7999 -61.40205,32.51218c-14.59976,-4.3703 -18.09987,-23.21533 -9.97012,-34.76193c11.1329,-17.22395 31.85399,-29.0497 52.68539,-25.8235c5.94467,-0.60133 14.69868,9.02307 12.18605,-1.86459c0,-38.95592 0,-77.91182 0,-116.86773c-51.0519,10.27703 -102.20474,20.06591 -153.28024,30.23172c-0.23563,48.66071 0.58183,97.34513 -0.58977,145.98728c-3.69252,18.80173 -22.14742,31.83179 -40.05531,35.63361c-5.92716,0.70627 -12.00984,1.31848 -17.94173,0.38101zm133.17406,-211.87756c26.23067,-5.16204 52.47368,-10.26209 78.69298,-15.48133c3.33676,-13.29303 -11.59627,-4.66015 -18.89925,-4.33564c-44.78732,8.84113 -89.60051,17.55138 -134.38099,26.42688c-3.33676,13.29302 11.59627,4.66015 18.89925,4.33562c18.56079,-3.65804 37.12405,-7.30356 55.688,-10.94553zm0,-23.26575c26.23067,-5.16204 52.47368,-10.26208 78.69298,-15.48132c3.33676,-13.29303 -11.59627,-4.66015 -18.89925,-4.33564c-44.78732,8.84113 -89.60051,17.55138 -134.38099,26.42687c-3.33676,13.29303 11.59627,4.66015 18.89925,4.33564c18.56079,-3.65805 37.12405,-7.30357 55.688,-10.94555zm0,-23.26575c26.23067,-5.16204 52.47368,-10.26209 78.69298,-15.48133c3.33676,-13.29302 -11.59627,-4.66015 -18.89925,-4.33563c-44.78732,8.84113 -89.60051,17.55139 -134.38099,26.42687c-3.33676,13.29303 11.59627,4.66016 18.89925,4.33564c18.56079,-3.65804 37.12405,-7.30357 55.688,-10.94554z",
+ "note_2_8th": "m49.39571,299.54196c-16.81947,-3.04169 -22.61933,-24.29047 -12.59162,-37.02081c13.30804,-19.68834 41.77522,-32.96077 64.07959,-20.53792c0.44447,-69.55862 0.18803,-139.12106 0.25597,-208.68139c55.61337,-11.00192 111.35248,-21.38966 166.98529,-32.30051c-0.12051,77.70421 -0.24097,155.40842 -0.36145,233.11263c-8.71594,23.50241 -36.8791,39.7999 -61.40207,32.51218c-14.59976,-4.3703 -18.09987,-23.21533 -9.97012,-34.76193c11.1329,-17.22395 31.854,-29.0497 52.68538,-25.82347c5.9447,-0.60136 14.69872,9.02304 12.18608,-1.86462c-0.20636,-61.46065 0.51324,-122.93768 -0.53098,-184.38539c-9.07608,-3.36956 -25.21706,4.38308 -36.83795,5.01031c-38.86079,7.56314 -77.80466,14.7255 -116.5762,22.73074c1.16985,68.10055 0.62434,136.24279 0.45018,204.35774c2.05843,15.54877 -6.51154,30.19547 -19.54225,38.30072c-11.24453,8.17932 -25.1371,11.12784 -38.82984,9.35175z",
+ "note_3_16th": "m15.05685,274.22351c-14.31707,-1.91919 -18.42601,-20.36026 -8.93697,-29.99135c10.38879,-13.67648 30.27091,-22.30884 46.50806,-13.88651c0.66153,-52.11798 0.28726,-104.24728 0.38611,-156.37085c81.97754,-16.40272 164.06679,-32.26359 246.07988,-48.4937c-0.2363,57.62228 0.57657,115.26416 -0.57095,172.87157c-1.96915,14.86053 -17.13602,24.73001 -30.79037,27.8163c-11.96523,3.66803 -28.81345,-4.27913 -25.97942,-18.60889c3.50381,-15.4984 19.49126,-26.6657 34.85991,-28.02376c8.59586,-2.14986 20.61923,9.25734 16.69226,-5.91415c0.09525,-39.33675 -0.07153,-78.67297 -0.13177,-118.00977c-38.18202,7.50178 -76.35632,15.04294 -114.54555,22.50813c-0.23268,48.18274 0.55394,96.38557 -0.57504,144.55286c-2.30531,15.49788 -18.60167,25.74417 -33.19453,27.71848c-14.44766,3.90948 -29.61349,-11.1328 -21.45115,-25.13463c9.01589,-16.79831 32.00478,-28.23689 49.88007,-18.48071c0.13591,-41.88866 0.57454,-83.7979 -0.20747,-125.67833c-9.66763,-2.10095 -24.53024,4.47319 -35.97192,5.4189c-26.23273,5.15636 -52.45877,10.34411 -78.68841,15.51694c-0.35831,49.24326 0.12716,98.5107 -1.08934,147.73389c-6.17624,16.23714 -25.20985,26.82423 -42.27338,24.45558l0,0zm101.53641,-195.02805c18.87659,-3.72421 37.75267,-7.44825 56.62927,-11.17233c3.17946,-13.298 -14.34059,-1.80056 -21.35852,-2.54169c-31.16307,6.26984 -62.32049,12.56754 -93.49695,18.76997c-1.80596,13.61728 18.79422,-0.36912 26.46645,1.18459c10.58865,-2.07109 21.17471,-4.15247 31.75974,-6.24054zm119.43625,-23.77348c18.94301,-3.80857 37.98227,-7.27608 56.8645,-11.31118c2.82892,-13.23786 -18.20215,0.42724 -25.56601,-1.09475c-29.37257,5.74051 -58.85892,11.05022 -88.16765,17.02801c-3.13623,14.00632 18.26294,0.04643 25.92744,1.45249c10.31323,-2.02774 20.62746,-4.05219 30.94171,-6.07457z",
+ "note_3_32th": "m15.05685,274.22333c-14.31707,-1.91882 -18.42601,-20.36018 -8.93697,-29.99106c10.3888,-13.67676 30.27089,-22.30908 46.50806,-13.88647c0.66166,-52.11824 0.28732,-104.24765 0.38611,-156.37099c81.97754,-16.40273 164.06694,-32.2636 246.07988,-48.4937c-0.2363,57.6225 0.57663,115.26395 -0.57123,172.87143c-1.96881,14.86089 -17.13586,24.73018 -30.79025,27.81644c-11.96498,3.66806 -28.81322,-4.27921 -25.97935,-18.60878c3.50368,-15.49834 19.49123,-26.6657 34.86018,-28.02408c8.67697,-2.20874 20.51364,9.40097 16.68222,-5.83759c-0.09845,-33.39989 0.78769,-66.86396 -0.50803,-100.22556c-37.99194,7.33447 -75.93604,14.91556 -113.90202,22.38341c-0.40428,43.27432 0.22905,86.58281 -1.10269,129.83c-6.66052,18.05263 -29.74564,30.16772 -47.98743,22.50237c-14.38366,-7.43967 -7.95995,-27.06667 2.9687,-34.4792c10.34322,-10.82147 29.63336,-12.35156 40.562,-8.05225c0.25528,-36.18434 0.11931,-72.37016 0.15388,-108.55522c-38.40674,7.73776 -76.89246,15.09384 -115.31775,22.74432c-0.2578,42.95952 0.63174,85.96188 -0.70086,128.88727c-5.20541,16.91916 -25.24538,27.88303 -42.40446,25.48965zm99.21976,-176.85336c19.73389,-3.88507 39.47778,-7.71994 59.20331,-11.64712c1.63908,-13.07382 -17.1093,-0.27914 -24.42491,-1.54683c-30.21908,5.91451 -60.4242,11.89998 -90.63543,17.85444c-2.77443,12.63378 14.55762,1.2752 21.41661,2.10594c11.47932,-2.25961 22.95964,-4.51424 34.44042,-6.76643zm2.31665,-18.17461c18.87643,-3.72409 37.75285,-7.44817 56.62927,-11.17224c3.17953,-13.298 -14.34081,-1.80056 -21.35843,-2.5417c-31.16306,6.26989 -62.32067,12.56752 -93.49722,18.77c-1.80564,13.61723 18.7942,-0.36929 26.46687,1.1845c10.58833,-2.07081 21.17455,-4.15248 31.7595,-6.24056zm119.82236,-6.10279c19.00511,-3.73167 38.01025,-7.46333 57.01538,-11.195c2.25488,-12.51775 -14.43167,-1.31337 -21.22391,-2.14778c-31.1899,6.14801 -62.39635,12.21269 -93.57906,18.3969c-0.48149,12.89743 19.70058,-0.51178 28.22481,0.73691c9.85522,-1.92534 19.70935,-3.85638 29.56277,-5.79102zm-0.38611,-17.67059c18.94318,-3.80859 37.98227,-7.27608 56.86438,-11.31118c2.82913,-13.23785 -18.20197,0.42724 -25.56577,-1.09474c-29.37247,5.74053 -58.85913,11.0502 -88.1676,17.028c-3.13618,14.00631 18.26254,0.04646 25.92732,1.45247c10.31334,-2.02773 20.6273,-4.05214 30.94167,-6.07454z",
+ "note_3_64th": "m15.05833,274.22296c-14.317,-1.9187 -18.42625,-20.3604 -8.93719,-29.99104c10.38896,-13.67708 30.27131,-22.30949 46.50857,-13.88661c0.66169,-52.1188 0.28732,-104.24842 0.38611,-156.37186c81.97786,-16.40303 164.06815,-32.26401 246.08122,-48.49419c-0.23633,57.62288 0.57712,115.26462 -0.57092,172.87238c-1.96869,14.86116 -17.13614,24.73065 -30.79056,27.81697c-11.96483,3.66806 -28.81317,-4.27963 -25.97963,-18.60901c3.50381,-15.49847 19.49141,-26.66583 34.8607,-28.02443c7.61099,-2.92159 20.18073,9.65431 16.68201,-4.30438c0.21829,-27.96678 0.10867,-55.9346 0.13544,-83.90191c-38.27235,7.48128 -76.53494,15.0156 -114.80267,22.52314c-0.22958,36.48441 0.55602,72.99504 -0.58997,109.45938c-3.18001,15.89902 -20.29759,26.40845 -35.74976,27.23267c-14.89929,2.89737 -27.08599,-14.42255 -17.93506,-27.04372c9.64191,-15.67046 31.65898,-26.22467 48.93309,-16.72427c0.33206,-30.58104 0.14311,-61.16617 0.19254,-91.74873c-38.39642,7.82673 -76.92161,15.04803 -115.31823,22.87476c-0.25736,36.94054 0.62957,73.92738 -0.70087,110.83084c-5.2055,16.9194 -25.24553,27.88339 -42.40482,25.49002l0,0zm101.38524,-159.31403c18.83891,-3.75145 37.70946,-7.35722 56.50069,-11.3393c2.95145,-13.53962 -17.91554,0.08701 -25.35307,-1.30814c-29.80621,5.87558 -59.6283,11.67136 -89.42722,17.5835c-2.26596,13.04952 15.28052,1.23864 22.46973,2.11949c11.93564,-2.35683 23.87244,-4.70798 35.80987,-7.05554zm-2.1648,-17.54025c19.73418,-3.88531 39.47784,-7.72015 59.20348,-11.64717c1.63916,-13.07402 -17.10936,-0.27902 -24.42487,-1.54701c-30.21927,5.9147 -60.42458,11.89994 -90.63596,17.8548c-2.77449,12.63354 14.55767,1.27519 21.41672,2.10558c11.47937,-2.25951 22.95979,-4.51389 34.44062,-6.7662zm123.16869,-6.50159c18.66148,-3.66445 37.32301,-7.3289 55.98506,-10.99284c1.75296,-13.03485 -16.50751,-0.89732 -23.95999,-1.87753c-30.19955,5.92758 -60.38982,11.90097 -90.58421,17.8548c-3.55789,11.04535 8.5943,3.94657 14.87352,3.58826c14.56204,-2.85567 29.12408,-5.71393 43.68562,-8.57269zm-120.85203,-11.67342c18.8765,-3.72417 37.75323,-7.44803 56.62942,-11.17215c3.18001,-13.29807 -14.34068,-1.80056 -21.35812,-2.54169c-31.16348,6.26993 -62.3213,12.56734 -93.49802,18.77035c-1.80566,13.61685 18.79432,-0.36964 26.46704,1.18407c10.58839,-2.07059 21.17467,-4.1525 31.75968,-6.24059zm119.82291,-6.10266c19.0054,-3.73169 38.01082,-7.46337 57.01573,-11.19506c2.25491,-12.51782 -14.4313,-1.3134 -21.22379,-2.14781c-31.19003,6.14807 -62.39655,12.21279 -93.5799,18.39685c-0.48135,12.89765 19.70091,-0.51173 28.22522,0.73721c9.8551,-1.92541 19.70967,-3.85648 29.56273,-5.7912zm-0.38611,-17.67071c18.94363,-3.8086 37.9825,-7.27608 56.86485,-11.31125c2.82944,-13.23789 -18.20175,0.42725 -25.56567,-1.09475c-29.37276,5.7406 -58.85979,11.05029 -88.16818,17.02811c-3.13626,14.0062 18.26253,0.04649 25.9276,1.4525c10.31329,-2.02775 20.62709,-4.05215 30.94141,-6.07461z",
+ "note_3_8th": "m15.02169,274.2272c-14.31707,-1.91879 -18.42601,-20.36015 -8.93697,-29.99103c10.3888,-13.67676 30.27088,-22.3091 46.50806,-13.88649c0.66166,-52.11824 0.28732,-104.24764 0.38611,-156.37097c81.97754,-16.40273 164.06694,-32.2636 246.07985,-48.4937c-0.2363,57.6225 0.57663,115.26395 -0.5712,172.87141c-1.96884,14.86089 -17.13589,24.73018 -30.79025,27.81644c-11.965,3.66806 -28.81323,-4.27919 -25.97937,-18.60878c3.50368,-15.49834 19.49124,-26.66568 34.8602,-28.02408c8.2316,-2.53128 20.41348,9.51646 16.65692,-5.23953c-0.07721,-45.31436 0.85016,-90.69309 -0.45593,-135.96806c-37.90379,6.83744 -76.18053,14.4211 -114.18623,21.74638c-0.22679,54.0925 0.53969,108.20272 -0.57019,162.28107c-1.77496,14.91302 -17.02997,24.75598 -30.69292,27.71687c-13.90182,4.60379 -31.50981,-7.66069 -24.80507,-22.93971c8.1866,-17.99985 32.25569,-30.36769 50.72748,-20.3566c0.32813,-48.569 0.14423,-97.14091 0.19258,-145.71125c-38.34256,7.86306 -76.73341,15.50194 -115.11303,23.18613c-0.70871,54.82025 0.60002,109.69145 -0.90556,164.48224c-5.27564,16.97054 -25.17379,27.85027 -42.40448,25.48964z",
+ "note_32nd": "m96.7115,298.78342c-12.19044,-1.97687 -21.5796,-13.65018 -18.87752,-26.14322c3.19898,-16.4884 18.16196,-28.11014 32.8273,-34.56326c11.8622,-4.83313 26.35187,-5.63437 37.63535,1.13913c0.44954,-79.35593 0.19681,-158.71518 0.26346,-238.07262c3.98198,-0.1698 8.54333,-0.99947 7.45644,4.60387c0.32353,13.2127 8.16176,24.35488 17.90031,32.62089c20.68701,19.0793 43.62003,41.1507 45.44289,71.03391c1.94933,11.70761 -4.32771,23.23071 -1.67,34.59584c2.53688,11.20206 1.78056,22.8308 0.17831,34.09036c7.53368,20.20854 5.71452,43.47615 -2.49284,63.20886c0.75815,6.16689 -13.8391,16.22797 -7.44476,5.95023c8.63434,-18.74539 13.17647,-41.8004 3.81317,-61.08943c-11.33986,-18.69514 -31.97612,-28.28085 -48.89772,-41.04474c-11.778,-11.86667 -5.42902,11.18993 -7.18364,18.06325c-0.26184,33.71661 -0.28255,67.43445 -0.41075,101.15173c-5.27325,12.84436 -14.94577,23.71875 -27.82796,29.29456c-9.44402,4.40988 -20.29373,7.32529 -30.71203,5.16064zm114.86545,-145.34879c-7.29857,-26.18551 -30.51866,-43.93251 -53.18727,-56.72259c-6.20538,-0.86809 1.83978,14.15399 3.5831,18.80585c8.11926,15.92772 24.10783,25.32948 35.63724,38.48439c5.02966,4.16844 10.75517,12.77017 14.6803,15.07132c0.57034,-5.18866 0.22502,-10.51091 -0.71336,-15.63898zm0.91826,-35.72012c-0.11551,-22.00919 -16.64085,-39.55235 -32.65781,-52.65142c-7.46819,-4.94457 -16.49954,-13.27054 -24.16978,-14.26883c1.45969,12.25124 6.9503,24.24821 17.03656,31.76259c14.34996,13.93145 29.52126,27.82796 39.47783,45.32379c1.14618,-3.04146 0.13112,-6.92123 0.3132,-10.16613z",
+ "note_4th": "m126.58881,297.40149c-11.87886,-2.65546 -23.26585,-13.54025 -21.01448,-26.56512c0.1731,-16.24911 13.85612,-27.71617 25.94878,-36.50977c15.62231,-10.78831 37.15717,-14.20154 54.34061,-5.04248c1.02979,-75.90828 0.44815,-151.83525 0.60191,-227.75206c3.00182,0.70564 9.53603,-2.12083 8.02534,3.09698c-0.14726,78.93155 0.33716,157.8673 -0.38513,236.79541c-0.07584,10.70851 -0.22026,22.31233 -7.75522,30.804c-13.91748,17.52454 -37.15509,29.1525 -59.76181,25.17303z",
+ "note_64th": "m104.92412,299.31976c-12.00094,-1.27536 -20.94641,-13.79388 -17.06551,-25.49271c6.43043,-17.60776 24.98182,-29.7767 43.42287,-30.74879c7.6006,-2.50558 20.88075,10.01114 17.93382,-3.27145c0.48503,-79.47305 0.24155,-158.94821 0.30153,-238.42232c5.75809,-1.70799 6.23006,2.55972 6.32732,7.33913c1.78415,17.85563 19.14293,26.89136 29.82072,39.25721c15.39714,15.12255 27.5349,36.04512 24.51741,58.34038c-3.08612,10.64033 -0.83701,20.84729 0.30066,31.5748c0.06851,11.58006 -4.18433,22.62605 -0.40593,34.00638c1.68036,11.01886 -3.23894,22.12428 2.03442,32.51251c2.40002,18.25101 0.69795,38.47595 -10.52008,53.59502c-7.11406,1.93207 2.97337,-8.35378 2.33067,-11.88858c6.3118,-18.25085 7.27405,-41.79056 -8.5262,-55.64728c-12.36734,-10.82431 -26.50575,-19.43405 -39.98901,-28.77931c-0.71652,35.81755 -0.4848,71.65158 -0.68907,107.47679c-5.08496,13.03387 -16.00215,23.09641 -29.22493,27.57315c-6.53331,2.3526 -13.63996,3.72845 -20.5687,2.57507zm98.72386,-126.48091c-6.34319,-22.74789 -26.51086,-38.16362 -46.20412,-49.27464c-5.25957,0.57732 2.32552,14.64314 4.87614,19.57021c8.86444,13.06609 22.37558,21.98311 32.7415,33.78232c3.44377,1.45969 10.43367,15.90742 9.37975,5.93784c0.13239,-3.35165 -0.09975,-6.73082 -0.79327,-10.01572zm0.7843,-31.02991c0.01227,-19.15482 -14.53879,-34.37045 -28.41721,-45.78492c-6.00691,-3.41928 -16.78343,-14.40513 -20.81033,-10.93629c1.48004,11.20951 7.52783,21.1048 16.47551,27.9065c11.85971,11.75211 24.67769,23.13779 32.59132,38.04211c0.77432,-2.77734 0.04828,-6.25352 0.16071,-9.2274zm0.01279,-39.15976c-0.40309,-21.71703 -17.74644,-38.41104 -34.56728,-49.83583c-4.69977,-2.50358 -18.46306,-14.73891 -13.78862,-1.7836c3.12802,17.13914 19.8609,25.3779 30.46255,37.43516c7.16287,5.47251 13.39691,18.87303 18.00247,22.03555c0.14136,-2.61625 -0.03749,-5.23595 -0.10913,-7.85128z",
+ "note_8th": "m92.11929,299.44888c-12.88673,-2.17523 -24.85642,-14.0065 -22.42534,-27.8176c1.23042,-15.16177 13.28207,-27.36446 25.40788,-35.40434c16.13786,-10.9864 38.20284,-15.06764 55.98708,-5.59207c1.04205,-76.42476 0.44817,-152.86866 0.60602,-229.30206c11.21484,-2.71548 7.58873,11.96767 10.1358,18.75797c2.43044,19.96716 15.82285,35.63469 29.15343,49.62502c16.53877,17.58521 34.10059,36.23084 39.47629,60.59399c5.87012,28.26657 -3.51422,57.18356 -15.69261,82.51581c-0.88187,8.11874 -15.77403,19.86469 -8.67888,5.1937c11.94699,-25.09727 21.81674,-54.00095 13.66216,-81.79225c-7.76553,-27.73048 -31.97011,-50.88958 -60.78398,-55.04219c-0.18622,58.55498 0.45346,117.12103 -0.68288,175.66663c-2.83272,17.24548 -17.81155,30.04147 -32.83268,37.34811c-10.35778,4.50974 -22.04797,7.23831 -33.33228,5.2493z",
+ "note_half": "m126.15042,298.46863c-16.82465,-2.00256 -23.94094,-21.72537 -20.50175,-36.48892c5.91676,-23.32147 29.06407,-39.43811 52.28738,-42.05833c8.81128,-0.72736 18.52644,-0.60411 25.78337,4.94891c5.95566,-2.36537 1.76544,-11.69408 2.85246,-17.2854c0,-68.81003 0,-137.6201 0,-206.43012c14.97716,-2.18183 5.30603,19.02521 7.94768,27.71113c-0.09924,75.95386 0.62134,151.91534 -0.76007,227.86198c-7.30341,28.38443 -39.39244,46.36703 -67.60907,41.74075zm2.8452,-12.40747c22.98492,-7.3089 44.37535,-22.56259 55.31068,-44.49013c0.95541,-13.55527 -16.00528,-10.73553 -23.6718,-6.15868c-13.5024,6.76553 -26.21068,15.65268 -36.74068,26.51123c-6.99238,6.4256 -15.89267,26.17618 0.78696,25.05563l2.30408,-0.3252l2.01074,-0.59286l0,0z",
+ "note_whole": "m130.51953,195.65829c-18.47874,-2.9818 -38.13104,-9.41365 -49.81914,-24.96915c-4.87284,-6.5025 -6.85786,-14.78229 -6.23731,-22.81049c-0.81288,-10.41815 5.23877,-19.78279 13.11027,-26.04227c15.71593,-12.69998 36.4436,-17.12403 56.18739,-18.21444c21.01479,-0.84168 42.85126,2.6237 61.20964,13.32044c11.19275,6.86285 21.10484,18.66567 20.54733,32.45548c0.612,8.09668 -0.91914,16.68852 -6.59294,22.84065c-11.24144,13.63681 -28.92738,19.59387 -45.72455,22.87505c-14.06622,2.54445 -28.55254,2.69426 -42.68069,0.54472zm34.33258,-7.95905c9.06644,-1.9348 15.01314,-11.03741 14.88672,-20.03276c1.54852,-18.89767 -4.73529,-39.56404 -20.09192,-51.52234c-8.61502,-6.06224 -20.8895,-6.65757 -30.00668,-1.42353c-6.79661,4.10276 -9.33514,12.23845 -9.31819,19.7824c-0.73656,16.04378 3.97748,32.8201 14.66045,45.0217c7.49542,7.87076 19.3475,12.08484 29.86963,8.17453z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/object.json b/files_svgedit/svg-edit/extensions/shapelib/object.json
new file mode 100644
index 000000000..71ec7ec18
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/object.json
@@ -0,0 +1,19 @@
+{"data": {
+ "ball": "m1.36762,144.54343c-0.61252,-24.33647 11.43968,-48.24649 31.71385,-61.85355c33.0555,-25.12355 76.68359,-36.57172 117.69406,-29.65477c20.30775,-3.13354 29.29549,17.94864 22.15137,34.18353c-11.04268,10.79923 -30.25032,0.52836 -44.5518,6.11385c-46.3661,5.97041 -92.1348,26.12911 -123.47163,61.54787c-0.19116,-3.78908 -5.04203,-6.31387 -3.53584,-10.33693zm0.56006,21.59657c2.46893,-17.16783 19.59014,-26.10648 31.49495,-36.53964c40.07716,-28.36518 90.31613,-39.61352 138.89854,-37.70576c1.20387,19.56051 -8.00084,38.23036 -19.07559,53.7263c-15.20721,8.47826 -34.11861,-1.17561 -50.23914,6.54221c-28.27367,6.8441 -59.74523,15.46761 -77.84163,40.11734c-6.57559,19.79451 -20.47401,-0.35286 -21.54921,-12.00313c-1.52846,-4.62877 -1.3158,-9.384 -1.6879,-14.13731zm7.76269,-58.70418c2.42006,-21.53997 16.61662,-39.35048 29.64042,-55.76294c14.68114,-17.49181 34.66698,-30.31521 57.12629,-35.01287c17.80165,-4.64955 36.14864,-6.58389 54.39959,-8.53692c13.84103,10.63111 22.64574,29.11792 20.32661,46.60463c-10.75017,2.72292 -29.7578,-6.48294 -44.25362,-4.23798c-41.11142,0.38721 -83.13954,16.86419 -110.9226,47.60359c-2.31326,2.96635 -4.3931,6.11006 -6.31669,9.34248zm-2.20363,84.97105c15.37329,12.3277 15.8773,33.69405 25.32488,49.77684c-11.32475,-14.57886 -21.29314,-31.61081 -25.32488,-49.77684zm12.17333,11.7446c4.82258,-13.28815 19.94093,-31.96367 32.55468,-30.57486c5.04242,12.98813 7.22698,27.06129 15.42273,38.77007c22.00548,40.39473 62.27551,75.33984 110.15025,76.43997c7.82913,1.58691 28.58411,-3.6853 27.74063,-1.50394c-20.00963,9.82742 -43.17618,11.98239 -65.22374,11.19174c-40.94611,-2.71915 -81.7309,-22.38535 -106.34646,-55.65858c-6.96676,-11.95032 -10.92698,-25.33659 -14.29809,-38.66251zm33.70255,-33.88084c11.04849,-5.13829 31.74819,-20.7682 40.05036,-8.17067c20.26116,39.90601 54.51507,73.83781 96.68548,89.7942c21.8947,7.30453 46.52556,7.18939 67.87685,-1.92662c-8.90472,13.82597 -23.64018,22.69292 -37.52655,30.83714c-35.49046,15.14874 -78.39111,6.93469 -108.29421,-16.68286c-28.94243,-22.9118 -51.66176,-55.70389 -58.71476,-92.285l-0.04169,-0.84726l-0.03548,-0.71893l0,0l0,0zm14.80587,-143.69432c26.85995,-18.47492 60.14433,-27.13922 92.60995,-24.83766c-16.61871,10.60714 -37.47179,6.57748 -55.695,12.32051c-12.71339,2.76803 -25.33243,6.4903 -36.91495,12.51714zm23.19239,130.17215c17.68391,-8.37067 37.80864,-8.2348 56.92004,-7.08942c11.52194,17.94525 19.73788,38.80402 37.6284,51.74121c20.84937,18.617 51.18832,23.87227 77.45898,15.12419c9.02167,-6.09496 19.03778,-2.20023 14.1109,9.88971c-5.93085,20.07378 -26.98962,28.88977 -46.28781,29.86346c-39.48146,3.94382 -75.60028,-18.48682 -102.27098,-45.57831c-15.55914,-15.57706 -28.70033,-33.74123 -37.55954,-53.95085zm59.9713,-149.25921c14.39017,-11.41684 33.98842,-1.08634 48.71259,4.37706c14.6449,12.52997 16.60739,33.37817 20.47758,51.17717c6.47049,41.78263 3.85324,86.6684 -15.69031,124.8082c-4.67027,13.36929 -18.09242,20.61154 -26.69522,6.15724c-9.99724,-11.02568 -17.64142,-23.85532 -24.85538,-36.77173c-4.26648,-12.35977 9.69913,-21.07201 12.62395,-32.37317c5.6987,-11.2672 7.1479,-23.94022 7.7876,-36.27168c2.68518,-18.44756 0.04341,-37.58501 -4.80806,-55.44724c-3.40224,-9.88385 -8.92734,-19.45691 -17.55275,-25.65586zm41.36089,197.33399c28.32747,-32.0033 32.81847,-77.44762 30.6862,-118.36129c-1.29825,-24.12249 -4.96657,-49.05092 -17.68674,-70.0582c13.14473,0.40704 27.28206,12.75397 37.58124,21.8466c29.18982,37.11403 37.77368,91.40852 15.58273,134.05255c-8.72922,17.24329 -20.55305,32.80717 -34.43375,46.22929c-11.62009,-0.9548 -23.39864,-5.3515 -31.72969,-13.70895zm32.30334,13.89389c30.50691,-29.40305 52.59978,-71.66214 46.00664,-114.99303c-2.62479,-20.29454 -10.03497,-39.89902 -21.13239,-57.06778c20.32477,12.66527 31.62595,35.09759 41.79111,55.93748c14.61285,36.42265 6.66864,80.8159 -19.44537,109.92648c-13.41086,7.60643 -32.33356,8.77071 -47.21999,6.19685zm50.22404,-6.80072c10.46527,-18.28113 22.34006,-36.81323 23.43076,-58.50224c1.62656,-7.25171 -0.89633,14.22787 -1.77191,18.74721c-2.78329,15.96013 -6.41766,32.99399 -16.3092,46.01608c-2.27573,-1.26239 -1.2605,-7.4102 -5.34964,-6.26105z",
+ "bolt": "m178.14388,74.00616l-108.49727,68.79685l107.15599,23.63498l-99.04335,73.85934l-39.98779,-12.47227l28.36194,71.19228l112.7131,-31.06076l-47.58928,-12.98325l129.22581,-106.08589l-118.12698,-19.22734l114.07071,-71.6874l-65.0681,-10.76349l70.86891,-45.56109l-26.03423,-0.65478l-109.97452,62.50492l51.92505,10.50792z",
+ "bulb": "m148.28435,1.01645c-19.71313,-0.08707 -41.0383,4.93402 -53.87904,21.08005c-10.00002,11.90277 -20.52196,24.53872 -22.82235,40.47736c-5.18059,28.1529 -4.92928,57.93743 3.64143,85.4047c4.96631,13.63997 16.45209,23.50325 23.37698,36.11604c9.14968,13.20706 13.47519,29.26166 12.26267,45.27029c24.17088,0 48.34173,0 72.5126,0c0.07924,-23.9402 14.94635,-43.62665 28.19687,-62.22926c9.25131,-10.94521 15.23657,-24.20433 17.34691,-38.38177c4.07767,-25.40971 5.00331,-52.60092 -4.43568,-76.9665c-8.96201,-18.6421 -19.94247,-39.09958 -40.93047,-46.16479c-11.25407,-4.11034 -23.39734,-4.80265 -35.26991,-4.60611zm-36.97603,226.70836c24.34058,0 48.68115,0 73.0217,0c-4.36798,8.93942 -9.9079,18.74007 -6.84158,28.88942c-4.05983,8.82452 1.13719,17.61151 -5.54364,25.68655c-2.46005,11.06699 -16.46573,11.92905 -25.84717,12.23193c-10.13806,1.12546 -21.40701,-1.68927 -25.2739,-12.25085c-8.04343,-5.6481 1.65114,-12.52795 -4.58124,-18.87732c7.18661,-7.80208 -5.34555,-11.88156 -0.88777,-20.35059c-1.22452,-5.78517 -5.73284,-8.48584 -4.0464,-15.32915zm-0.15865,0.0249c24.34056,0 48.68114,0 73.02171,0c-1.83408,8.68544 -9.76653,16.89687 -6.75067,25.63821c1.71628,7.25716 -5.42461,13.19765 -1.14021,20.86113c-3.26378,9.1944 -9.79655,19.57855 -20.90657,19.54898c-10.7323,0.01825 -25.30243,3.58121 -31.95258,-7.11847c-2.51509,-6.44772 -10.6368,-10.31369 -4.40095,-17.31061c-7.73209,-5.79929 5.18552,-14.38748 -4.75156,-18.20934c4.72482,-9.15317 -5.09683,-14.41997 -3.11917,-23.40991l0,0zm-0.30553,-0.19208c24.34058,0 48.68115,0 73.02173,0c-1.83408,8.68544 -9.76651,16.89688 -6.75064,25.63823c1.71623,7.25714 -5.42465,13.19763 -1.14023,20.86111c-4.2211,6.69464 -8.74136,17.62585 -17.58711,18.4115c-9.70837,0.11472 -19.41676,0.2294 -29.12514,0.34415c-6.65182,-7.13144 -16.14077,-15.45563 -10.92694,-24.96432c-7.35572,-5.15384 5.77059,-13.49446 -4.37249,-16.88078c4.72483,-9.15317 -5.09684,-14.41994 -3.11918,-23.40988l0,0zm19.95543,64.05962c10.3149,0 20.62982,0 30.94472,0c-3.3429,2.41727 -5.36609,8.04688 -10.20465,6.82349c-4.97464,-0.38892 -10.5618,0.58282 -15.16096,-0.64023c-1.8597,-2.0611 -3.71941,-4.12219 -5.5791,-6.18326zm11.23076,-64.53401c-3.56728,-52.49875 -7.20926,-74.75493 -20.64074,-106.52489c-13.43148,-31.76996 -2.88758,-21.17014 27.12348,-24.60654c30.01106,-3.43639 13.46907,9.90684 13.48128,34.43486c0.01221,24.52803 1.7489,36.82391 3.69955,58.10826c-1.9278,20.61055 1.80084,20.75101 -2.79076,37.25708",
+ "car_smart": "m28.92024,238.37814c-20.54175,-8.15092 -27.36674,-32.3504 -27.6178,-52.52942c-2.7836,-14.94118 14.71887,-25.93048 8.95686,-41.2937c-2.18657,-22.71175 4.68564,-45.20703 14.9548,-65.22043c0.32475,-12.85873 10.87969,-17.84956 22.37955,-17.11762c37.15603,-4.71741 74.98359,-4.84966 112.15372,-0.39277c22.18198,4.11681 39.85953,19.32546 58.61859,30.81274c11.63586,8.63808 25.21985,14.32888 36.92355,22.63131c12.64026,10.62529 24.51556,22.47708 33.27448,36.57193c3.15143,14.09033 7.38165,28.09947 9.54742,42.2829c4.39661,13.27223 -4.6037,21.62047 -11.41214,30.84103c-10.34,12.57306 -29.90723,17.53416 -44.71561,10.78313c-10.28528,-3.75465 -14.07077,-19.70746 -25.7968,-18.60466c-44.20906,-0.65964 -88.41812,-1.31926 -132.62719,-1.97884c-10.24168,13.44736 -24.40165,28.14365 -42.91705,26.05086c-4.02312,-0.33679 -7.97831,-1.33774 -11.7224,-2.83646z",
+ "car": "m26.77284,183.48201c-8.08779,-6.80998 -23.25337,0.56996 -25.08215,-11.86069c-3.52016,-11.04616 7.23365,-19.6761 14.38957,-26.36473c12.51913,-6.23676 26.95447,-6.99092 40.49323,-9.84883c16.2238,-2.35439 33.11552,-4.36668 47.10119,-13.71207c15.9294,-9.9651 33.67083,-18.25834 52.86141,-18.11141c26.44141,-0.91634 53.7986,-0.02856 78.2453,11.26058c15.36688,6.93465 31.87709,10.4591 48.27711,13.85143c13.95395,1.83385 10.70889,16.88237 15.35007,26.15973c3.54291,10.65329 -4.11594,21.25732 -15.32654,21.59605c-11.85318,2.69405 -25.72552,2.95921 -34.00009,13.30453c-8.47623,9.38277 -23.69647,9.05888 -32.32811,0.09547c-3.56866,-2.21568 -5.9512,-7.58008 -10.70335,-6.65411c-44.31184,0.24008 -88.64653,-0.63266 -132.93902,0.78894c-11.57394,-0.92139 -16.38131,13.44077 -28.69251,12.44249c-6.30352,0.19554 -12.27285,-9.98318 -17.64611,-12.94739z",
+ "coud": "m193.50864,67.27344c-28.56444,0 -53.08249,14.81322 -65.08365,36.1982c-4.7932,-2.67596 -10.08009,-4.29625 -15.72245,-4.29625c-17.06268,0 -31.26126,13.72618 -35.64974,32.35901c-7.49058,-2.96072 -16.20005,-4.7533 -25.50328,-4.7533c-27.90971,0 -50.54951,15.27039 -50.54951,34.09579c0,16.99312 18.56764,30.96303 42.68829,33.54732c-1.08106,1.83421 -1.91961,3.65059 -1.91961,5.57599c0,18.02431 49.38134,32.72462 110.23999,32.72462c60.85864,0 110.24005,-14.70032 110.23999,-32.72462c0,-1.21274 -0.75272,-2.29501 -1.18832,-3.47357c2.66562,0.6629 5.30496,1.37115 8.22687,1.37115c16.28061,0.00005 29.5253,-11.06223 29.5253,-24.6806c0,-13.61838 -13.24469,-24.68059 -29.5253,-24.68059c-1.99515,0 -3.69165,0.68915 -5.57599,1.00551c1.64767,-5.44531 2.74228,-11.00153 2.74228,-16.91078c0,-36.04859 -32.63087,-65.35786 -72.94485,-65.35786z",
+ "drop": "m101.50413,119.73441c-169.70167,149.53423 29.55369,277.04852 105.31838,71.70643l58.26123,-190.46983l-163.57961,118.7634z",
+ "drop": "m115.15536,295.759c-42.01334,-15.78687 -72.12711,-65.94934 -65.28346,-108.74701c4.3154,-26.98718 95.35947,-190.81818 103.3105,-185.90417c2.59511,1.60386 25.68835,39.79974 51.31831,84.87975c41.0565,72.21342 46.5999,85.67899 46.5999,113.19665c0,55.77716 -44.6394,101.46498 -98.23825,100.54555c-15.6409,-0.26834 -32.60906,-2.05518 -37.707,-3.97076zm42.09262,-28.05386c1.39066,-7.22116 -1.85785,-10.74289 -9.90955,-10.74289c-18.35065,0 -43.80598,-23.24161 -49.49309,-45.18889c-6.0666,-23.41179 -22.15186,-26.19615 -24.52774,-4.24574c-4.57746,42.29059 76.21872,100.22086 83.93037,60.17752z",
+ "electric_guitar": "m168.96899,1.09303c-2.62799,0.19977 -5.017,2.04496 -6.96899,4.55579c0.009,13.46278 -11.116,25.03858 -14.875,34.35928c2.30499,1.8475 1.13,2.9332 -1.03101,4.4286c-0.17,2.5165 0.468,4.9685 2.468,7.3554c-2.591,41.8755 -6.024,92.17889 -8.718,134.4599c6.14801,0.138 12.354,1.117 18.81201,0.687c-0.007,-32.55499 2.539,-84.562 3.282,-116.00749c-0.101,-10.2094 -0.504,-24.029 13.12399,-28.8618c-6.94499,-14.7833 5.922,-35.70095 -5.562,-40.97666c-0.146,-0.00122 -0.293,-0.00885 -0.438,0c-0.03099,0.00187 -0.062,-0.00236 -0.093,0l0,-0.00001zm11.692,171.76396c-4.715,6.66701 -11.79199,10.17 -14.146,13.60501c-5.37599,8.46799 -14.379,-3.16701 -26.89,2.99599c0.065,-1.02399 0.153,-2.172 0.21899,-3.20599c-0.07199,-0.002 -0.14699,0.00101 -0.21899,0c-6.659,1.013 -12.157,-7.713 -12.594,-15.44901c5.55199,-11.89 -14.242,-18.006 -19.5,-5.82899c-3.943,13.605 -0.41,27.51199 4.78201,40.672c5.933,16.162 -8.871,30.179 -13.2192,45.17601c-4.1375,9.502 -4.2709,20.46999 2.68719,29.192c9.486,13.58398 29.413,18.62799 47.563,18.758c3.23401,0.224 6.44801,0.414 9.68701,0.58499c57.61699,3.284 34.35399,-35.13699 25.282,-68.41299c-5.82201,-21.66299 1.48199,-36.38 6.269,-42.614c2.659,-7.35001 6.02899,-23 -9.92101,-15.472l0,-0.00101zm-34.567,-128.4203c2.43501,-11.918 -8.10399,0.709 0,0z",
+ "guitar": "m158.45264,1.00012c-0.96039,0.00612 -1.8884,0.06411 -2.73161,0.18457c-4.49716,0.64245 -8.99768,2.5655 -8.99768,2.5655c0,0 0.00569,8.99612 -0.63676,15.42064c-0.64244,6.42453 -3.21147,17.34015 -3.21147,17.34015l3.15611,6.32144l0.05536,-1.172l10.62189,1.86414l0.94128,0.05537c0,0 1.28059,-1.28413 2.56551,-3.21148c1.2849,-1.92736 3.85747,-3.21148 3.85747,-3.21148c0,0 0.63675,-9.63641 0.63675,-16.70339c0,-7.06698 2.57472,-18.63212 2.57472,-18.63212c0,0 -4.66991,-0.84783 -8.83156,-0.82133zm-1.74417,42.52442l-10.62189,-0.58139l-0.05536,-0.11074l-5.5278,113.65688c0.19376,0.03734 0.44296,0.08304 0.44296,0.08304c0.14801,2.18161 0.8121,3.84209 1.8549,5.14021l11.84926,5.41707c0.3562,0.09476 0.71249,0.18806 1.07048,0.28609l1.28276,-123.83578l-0.29532,-0.05537zm-0.98744,123.89115l0,0.20302l-1.07048,-0.48911c-4.80661,-1.27875 -9.3821,-2.34575 -11.84926,-5.41707l-2.5009,-1.14432l0.20303,-4.07893c-2.16553,-0.41753 -15.40038,-2.83867 -20.1179,-0.47989c-5.13962,2.56979 -8.99552,6.42279 -10.28043,14.77466c-1.2849,8.3519 2.57119,23.77351 1.92873,34.05275c-0.64246,10.27924 -7.71416,19.91469 -10.92641,28.26657c-3.21227,8.35188 -6.4202,17.99007 -2.5655,32.12404c3.85472,14.13391 17.99164,23.77151 25.70107,26.9838c7.70942,3.21225 23.7631,5.14023 23.7631,5.14023c0,0 15.42752,2.58041 25.06432,1.93796c20.23672,-3.64624 28.72404,-15.65756 29.98303,-30.66595c1.259,-15.00839 -4.71521,-33.01251 -13.40884,-48.65207c-9.50552,-17.10013 8.59656,-39.76326 -0.76596,-52.52802c-9.74182,-13.28188 -16.9409,8.64334 -23.78156,3.87593c-2.77655,-1.93504 -6.09895,-3.00655 -9.37605,-3.90359z",
+ "helicopter": "m145.07504,214.22588c7.36339,2.46503 20.68225,-9.04681 7.26401,-9.72079c-9.08205,-5.71648 20.13416,-1.63675 8.22827,-13.70961c-12.73747,-2.77332 -22.69479,-12.46857 -27.12979,-24.871c-5.18111,-13.36012 -22.04633,-9.68964 -33.09622,-13.54991c-22.05075,-3.93678 -44.07657,-8.59007 -66.50366,-9.73877c-7.45861,8.40495 -10.97594,26.46114 -24.24853,25.75703c-13.26779,-6.6758 0.56035,-23.43509 -3.41489,-33.00934c-7.79329,-2.62592 -6.3066,-7.72096 1.2938,-8.36586c11.59587,-8.00312 1.94812,-23.47349 -0.57486,-34.01581c-6.13778,-10.01295 7.00565,-18.8414 12.01386,-7.02641c6.38165,12.3224 10.0863,25.85204 15.15507,38.7706c1.5816,8.28716 13.30507,3.58878 19.44516,6.06101c25.89155,2.78554 51.80775,5.58556 77.83869,6.66318c13.03992,-5.6261 26.8783,-10.34038 41.29993,-8.34114c10.08574,3.05644 15.78185,-0.7104 15.3338,-11.13895c5.72609,-15.02095 -14.03151,-8.3312 -22.93935,-10.54208c-35.53757,-1.72837 -71.18015,-2.25171 -106.70476,-0.12757c-7.88696,-1.96813 10.41693,-1.78943 13.19444,-2.24187c37.48436,-1.98021 75.04819,-1.00611 112.54227,-2.69012c10.81163,-3.98792 21.54251,3.11311 32.56555,1.91049c27.80304,1.13907 55.63103,1.5356 83.45552,1.62198c-7.86588,5.84674 -22.53885,0.05771 -32.94354,1.5061c-20.90826,-0.64194 -41.94905,-1.24406 -62.73434,1.6021c-8.09567,7.82163 -3.84563,24.5245 6.28453,28.41502c10.32359,5.55025 20.91692,10.41565 30.31529,17.0117c5.93991,11.31316 22.72864,20.80537 17.77679,35.05132c-5.67494,11.7886 -26.25294,4.37625 -31.4632,7.69153c3.85466,6.8309 17.16597,7.52176 19.55997,10.01913c-13.12518,3.78056 -0.61014,11.85339 6.85498,9.29091c9.21201,2.18106 -9.36668,3.71298 -12.4339,2.99583c-14.92371,0.12004 -29.83833,-0.52202 -44.7583,-0.72722c14.41679,-0.6433 28.87468,-0.63033 43.24721,-2.05975c-3.35245,-13.78374 -21.0649,-7.04161 -31.27078,-9.43388c-4.97525,-2.55072 -21.3748,0.68501 -13.06122,5.71829c4.63876,-2.08994 15.97667,-0.09111 5.65021,2.25237c-18.67735,0.60303 -37.42494,0.87289 -56.04201,-1.0285zm45.45972,-5.72816c-5.69293,-8.23618 -25.36656,-6.65369 -28.94688,0.84814c6.97417,5.6115 21.3663,3.65866 28.78714,0.2599l0.15974,-1.10805l0,0zm41.15115,-4.79669c-8.39107,-5.92067 -23.748,-6.57408 -31.28664,-1.76099c9.46599,4.52687 21.07687,2.68456 31.28664,1.76099zm-41.46053,-2.71213c8.91602,-7.60876 -15.73071,-6.19264 -21.17932,-5.80487c-13.47525,6.12955 5.46666,7.82239 11.1256,6.8177c3.37151,-0.02223 6.75697,-0.27522 10.05373,-1.01283z",
+ "katana": "m127.28507,65.14041c-7.0962,-0.54353 -19.86895,7.61395 -17.02093,-6.32892c4.93732,-8.55679 18.30521,-4.48845 16.78561,5.48313l0.17354,0.62374l0.06178,0.22205l0,0zm17.16403,-18.49577c-6.77293,11.60114 -22.03173,12.43076 -33.48896,16.75148c-5.30647,3.04373 -26.81981,5.02184 -18.62814,-4.27034c11.69819,-7.75446 26.08649,-9.62626 39.25734,-13.85468c4.24069,-0.99664 9.15976,-1.38791 12.85976,1.37354zm-35.03055,12.26915c-5.16663,-17.73298 -10.33324,-35.46593 -15.49986,-53.19891c6.32053,-8.5978 20.25586,-4.8693 18.32531,6.59137c4.01678,13.78642 8.03355,27.57289 12.05032,41.35935m-5.56697,9.33072c22.56753,79.08354 48.81091,157.2375 81.6054,232.70842m-75.6467,-234.76585c22.79797,74.42342 46.12929,148.92492 77.59851,220.23124c0.43317,5.52475 14.80417,22.08911 1.77542,17.81497c-4.05151,-1.9415 -10.97104,-0.62137 -11.72156,-6.31741c-30.74268,-74.29929 -57.39734,-150.28568 -79.92033,-227.47363",
+ "leaf_1": "m35.63904,285.5213c9.77121,-31.99348 23.14531,-59.08864 35.83149,-72.59245c13.5912,-14.46718 7.56125,-20.74258 -6.45918,-6.72212c-5.89857,5.89853 -7.58387,1.61555 -7.58387,-19.2735c0,-49.83961 25.83589,-80.67891 87.99842,-105.04016c52.59872,-20.61333 91.37741,-43.79435 107.45589,-64.23479l13.10197,-16.65652l0,28.9807c0,35.83507 -11.11781,89.97318 -23.42422,114.0641c-13.0549,25.55626 -57.80217,72.72934 -79.76038,84.08435c-19.67261,10.17316 -61.687,13.16808 -84.14172,5.99792c-11.19011,-3.57314 -14.7415,-0.84308 -20.53963,15.78944c-3.8556,11.06018 -7.0102,26.79501 -7.0102,34.96616c0,9.27652 -3.72057,14.8566 -9.90572,14.8566c-7.3461,0 -8.78352,-3.67429 -5.56284,-14.21973z",
+ "menorah": "m86.17095,270.72717c9.02267,-23.09398 33.59461,-36.70894 57.45916,-38.45409c0,-4.91623 0,-9.83244 0,-14.74866c-38.305,-2.75075 -76.20534,-18.86525 -101.66333,-48.29793c-23.2569,-24.97108 -35.58256,-58.55817 -37.27682,-92.42073c-13.45491,-9.58464 12.56556,-16.55834 15.7355,-5.95607c-7.24909,8.79617 -0.22592,22.59306 0.80432,33.36646c11.47956,50.91395 56.38975,91.60496 107.78628,98.82449c13.14264,5.82442 16.6395,-2.00252 14.39308,-13.99509c2.81267,-9.48175 -7.44086,-6.60333 -13.57417,-8.37358c-40.52152,-7.1041 -75.7263,-38.65041 -86.11595,-78.75394c-2.97659,-11.47399 -3.94458,-24.11363 -7.5694,-33.51495c7.70256,-6.02401 26.19639,-1.60448 15.97076,9.15671c1.09565,45.56244 38.91488,85.76277 83.65269,91.48959c9.24995,4.52249 8.18915,-3.21457 7.85701,-9.40932c4.90146,-15.06035 -9.71606,-12.79654 -19.53952,-16.50067c-27.62657,-9.39215 -47.87568,-36.35101 -49.79039,-65.51331c-13.2153,-11.51691 15.74928,-17.53994 15.95383,-5.55531c-7.59098,8.84892 0.96818,23.21689 5.54156,32.6564c10.3335,16.84724 28.24842,28.22102 47.83452,30.47823c0,-7.52246 0,-15.04491 0,-22.56738c-18.20905,-2.81535 -32.7534,-18.72141 -34.8131,-36.97318c-12.40635,-10.10166 14.58986,-14.97282 16.53119,-5.29626c-6.736,5.28018 -1.66743,13.75206 2.28733,19.47478c2.82583,3.38407 16.81124,15.16281 15.99458,6.28913c0,-10.03232 0,-20.06463 0,-30.09695c-8.52963,-5.41637 3.21713,-9.02356 -1.91258,-15.41792c2.95047,-6.63559 4.28693,-23.79965 6.49635,-24.00391c7.40089,10.5439 4.63795,25.17949 11.62167,34.34932c-3.85376,4.14688 -4.52328,8.74758 -3.86568,14.89357c0,8.05796 0,16.11592 0,24.17388c11.03737,-3.24367 21.02812,-12.42406 21.72646,-24.48188c-12.61211,-14.80839 30.69243,-11.52931 12.71999,1.59949c-1.87195,17.85434 -17.0993,32.57059 -34.44644,35.57887c0,7.49281 0,14.98562 0,22.47842c29.68999,-2.98224 55.87296,-29.1582 56.39926,-59.47436c-12.36238,-13.6567 27.91393,-12.75137 14.12813,-0.52898c-3.16423,14.80594 -6.23018,30.54218 -16.29872,42.63571c-12.70108,17.1765 -33.04718,27.37456 -53.98901,29.78134c0.16994,9.14496 -4.65584,28.46082 11.13493,20.75519c39.31322,-6.69104 72.74197,-39.63307 78.74797,-79.43351c5.73982,-8.84732 -8.70837,-25.00382 8.28397,-22.77648c10.50046,-2.44997 11.98193,6.34405 5.8692,11.72792c-2.04736,35.89314 -21.91298,70.45303 -53.09749,88.60141c-15.52945,9.13074 -33.16388,14.88533 -51.17824,15.85547c0.17836,7.53169 -0.4761,15.16116 0.61618,22.6142c35.31798,-2.81911 70.08339,-18.10321 93.11932,-45.67516c20.51892,-23.04272 31.08511,-53.43816 32.84753,-84.00375c-10.43478,-10.04525 11.39471,-11.61442 16.59445,-7.04305c-5.883,11.66189 -5.21661,27.04671 -9.11984,40.52295c-12.68921,53.08224 -58.41412,95.84925 -111.85593,105.51876c-7.32545,1.56883 -14.77785,2.36348 -22.20172,3.29227c-0.71042,9.09981 -0.50818,18.35449 11.59822,16.61531c20.59241,4.32626 40.36211,18.55411 46.94081,39.19469c-43.09088,0 -86.18179,0 -129.2727,0c0.31159,-0.88608 0.62314,-1.77219 0.93477,-2.65823zm-82.88959,-208.5947c-0.54892,-8.1144 4.33617,-25.42208 5.66115,-27.43132c2.27143,7.42761 12.58555,23.78434 4.72879,28.60384c-3.29131,-0.38358 -8.04816,1.57556 -10.38994,-1.17252zm34.52483,0.55147c-1.7146,-10.01769 5.4567,-19.41309 4.51432,-29.75311c3.2196,8.43034 16.36395,29.47998 1.96646,30.42084c-2.16732,-0.0773 -4.38702,0.03559 -6.48078,-0.66772zm35.62526,-0.17229c-1.52428,-9.82734 5.20364,-19.12723 4.61758,-29.264c3.98769,8.50923 17.39558,32.7104 -0.82941,30.07944l-1.91212,-0.12625l-1.87605,-0.68919l0,0zm34.60818,0.26421c-1.9521,-10.01891 5.40411,-19.48301 4.43661,-29.84504c3.27068,8.4848 16.29427,29.36411 1.98981,30.63179c-2.15335,-0.08198 -4.37302,0.0215 -6.42642,-0.78675zm69.2087,-0.38279c-1.5544,-10.07727 5.31645,-19.6095 4.34973,-30.05398c2.70531,5.08463 6.32187,13.73424 7.91895,20.50951c4.77353,11.03205 -3.95122,12.51878 -12.26868,9.54446zm35.71176,0.44493c-2.89404,-9.75608 5.30412,-19.55815 4.07715,-29.90718c3.42241,8.32418 12.40758,23.15913 6.53528,30.337c-3.53609,0.01955 -7.13571,0.41735 -10.61243,-0.42982zm34.8703,-0.20629c-2.23303,-8.13288 4.34842,-24.82986 5.07388,-28.23849c3.49849,8.39077 16.5291,33.58521 -2.7937,28.93562l-2.28018,-0.69713l0,0zm35.10023,-0.15336c-1.90784,-8.93159 5.20419,-21.786 4.83258,-28.71239c3.47043,8.02287 16.97986,32.30244 -0.94669,29.60343l-1.89111,-0.14957l-1.99478,-0.74147l0,0z",
+ "sun": "m238.69324,135.65587c0,46.60593 -40.30034,84.38748 -90.01332,84.38748c-49.71299,0 -90.01332,-37.78156 -90.01332,-84.38748c0,-46.6059 40.30033,-84.38747 90.01332,-84.38747c49.71298,0 90.01332,37.78154 90.01332,84.38747zm-7.30318,120.56636c-4.20586,5.25757 -51.12886,-47.27794 -57.30507,-44.69331c-6.17622,2.58458 -15.51068,86.52086 -22.0425,87.47173c-6.53188,0.9509 -17.76118,-85.09837 -24.12714,-87.15329c-6.36602,-2.05495 -43.23042,49.74286 -48.75608,45.85272c-5.52563,-3.89009 13.12091,-67.11951 10.04803,-73.73549c-3.07288,-6.61595 -73.34953,-9.72229 -74.79697,-17.10284c-1.44742,-7.38055 63.69369,-26.7453 64.2322,-34.0554c0.53854,-7.31011 -43.73452,-48.6129 -41.1993,-55.02096c2.53526,-6.40806 61.81988,21.03078 65.82475,15.40928c4.00487,-5.62149 -7.80805,-76.34053 -1.73039,-78.4587c6.07763,-2.11818 42.59449,47.54089 49.0827,47.30339c6.48817,-0.23753 26.02002,-62.46352 32.64861,-61.00949c6.62865,1.45401 3.32251,66.01247 8.45366,70.32287c5.13113,4.31043 55.87381,-16.15842 59.63792,-10.29998c3.76414,5.85843 -29.09575,62.86814 -27.11681,69.62658c1.97902,6.75845 62.18188,13.20758 61.3595,20.19514c-0.82245,6.98758 -75.2742,9.96732 -78.37666,16.73535c-3.10245,6.76802 28.36942,83.35484 24.16354,88.6124z",
+ "chair": "m118.11539,289.55515c-7.47328,-14.4328 15.76004,-21.83389 9.75156,-35.26642c-9.58212,-8.59285 -23.93785,-6.58557 -35.88018,-5.92961c-12.89955,-1.58955 -16.67669,11.62587 -24.11323,17.11729c-14.66394,-4.57965 -9.41961,-23.5907 3.95336,-25.69879c17.48831,-7.56879 36.79559,-3.21786 54.96046,-6.57193c13.14571,-7.65541 -3.09947,-24.09541 -13.42245,-25.84244c-17.08451,-6.9008 -38.18468,-7.0844 -51.24073,-21.62146c-5.1916,-11.32457 -3.84497,-32.04767 10.15321,-36.01445c6.34414,-10.73523 5.01785,-24.55999 3.35027,-36.47948c1.42348,-12.67513 -26.70474,-5.25126 -14.90233,-18.24577c10.64336,-8.15804 24.36629,-13.15867 37.81105,-12.959c10.96933,0.36309 11.71716,12.99065 -0.37628,9.89848c-12.30081,6.18077 -7.72121,23.86169 -7.25122,35.16668c5.93514,11.39347 22.04794,5.36764 32.49831,7.07384c14.8665,0.39955 21.73593,0.44463 35.83476,5.23605c14.25958,-1.05464 8.64325,-20.61657 0.17079,-21.97119c-13.03212,-2.87206 -25.91483,-10.25501 -33.20317,-21.62909c-4.07215,-13.26593 1.69855,-27.24597 4.77583,-40.18096c9.18196,-28.0861 34.13237,-54.57027 65.33606,-54.63913c19.15414,0.28833 38.85675,14.48402 42.13089,33.82922c2.48616,20.34066 -5.57245,41.0622 -0.32005,61.11538c12.75343,7.04288 -8.70227,17.78406 -9.16336,27.50478c-5.43883,14.13736 6.97403,30.55498 -3.65417,43.29654c-6.64983,9.38159 -22.16026,14.5639 -22.43275,27.04953c-3.81845,11.24202 -21.47061,10.39703 -30.28923,17.71931c-9.74564,2.86838 -15.08257,19.17726 -0.15649,15.9317c14.55153,-0.35892 29.03516,-5.81784 43.55118,-3.3181c10.39314,7.10063 -0.45073,21.22018 -10.9113,14.54475c-5.46445,0.08383 -25.63857,2.80356 -18.76688,8.69054c17.18895,4.015 35.8273,9.2104 46.95854,24.0352c10.43184,13.90863 -12.73763,17.22995 -17.34935,5.0022c-19.29245,-15.75378 -48.30531,-24.24933 -70.97163,-10.48508c-13.71143,5.73386 -10.53542,20.53958 -11.98199,31.56015c-5.57972,6.09451 -13.26627,-2.5275 -14.84946,-7.91876zm100.26077,-153.99353c-4.62421,-8.64436 -27.69229,-17.16811 -30.82967,-4.71919c1.76141,12.68575 19.62196,15.68971 29.15408,10.51048c1.73547,-1.32053 2.45361,-3.74493 1.67558,-5.79129z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/raphael.txt b/files_svgedit/svg-edit/extensions/shapelib/raphael.txt
new file mode 100644
index 000000000..7549cc09b
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/raphael.txt
@@ -0,0 +1,12 @@
+All Raphaël icons were retrieved from here:
+http://raphaeljs.com/icons/
+
+And fall under the MIT license:
+
+Copyright © 2008 Dmitry Baranovskiy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+The software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/raphael_1.json b/files_svgedit/svg-edit/extensions/shapelib/raphael_1.json
new file mode 100644
index 000000000..6f7f7ca06
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/raphael_1.json
@@ -0,0 +1,67 @@
+{"size": 32,
+"fill": true,
+"data": {
+ "raph_?": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z",
+ "raph_i": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M14.757,8h2.42v2.574h-2.42V8z M18.762,23.622H16.1c-1.034,0-1.475-0.44-1.475-1.496v-6.865c0-0.33-0.176-0.484-0.484-0.484h-0.88V12.4h2.662c1.035,0,1.474,0.462,1.474,1.496v6.887c0,0.309,0.176,0.484,0.484,0.484h0.88V23.622z",
+ "raph_$": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.255,23.88v2.047h-1.958v-2.024c-3.213-0.44-4.621-3.08-4.621-3.08l2.002-1.673c0,0,1.276,2.223,3.586,2.223c1.276,0,2.244-0.683,2.244-1.849c0-2.729-7.349-2.398-7.349-7.459c0-2.2,1.738-3.785,4.137-4.159V5.859h1.958v2.046c1.672,0.22,3.652,1.1,3.652,2.993v1.452h-2.596v-0.704c0-0.726-0.925-1.21-1.959-1.21c-1.32,0-2.288,0.66-2.288,1.584c0,2.794,7.349,2.112,7.349,7.415C21.413,21.614,19.785,23.506,17.255,23.88z",
+ "raph_temp": "M19.361,17.744V3.438c0-1.85-1.504-3.348-3.352-3.348c-1.852,0-3.35,1.498-3.35,3.348v14.193c-2.106,1.154-3.536,3.391-3.536,5.961c0,3.752,3.042,6.793,6.793,6.793c3.753,0,6.793-3.041,6.793-6.793C22.71,21.099,21.363,18.924,19.361,17.744zM15.917,29.27c-3.129,0-5.676-2.548-5.676-5.68c0-2.072,1.132-3.98,2.954-4.979l0.581-0.316V3.437c0-1.231,1.003-2.231,2.236-2.231c1.231,0,2.232,1,2.232,2.231v14.942l0.548,0.324c1.756,1.036,2.806,2.861,2.806,4.887C21.596,26.722,19.048,29.27,15.917,29.27zM18.225,19.666l-1.099-0.647V9.26h-2.233v9.695l-1.161,0.635c-1.464,0.805-2.375,2.334-2.375,4c0,2.514,2.047,4.561,4.56,4.561c2.515,0,4.56-2.047,4.56-4.561C20.479,21.988,19.616,20.485,18.225,19.666z",
+ "raph_thunder": "M25.371,7.306c-0.092-3.924-3.301-7.077-7.248-7.079c-2.638,0.001-4.942,1.412-6.208,3.517c-0.595-0.327-1.28-0.517-2.01-0.517C7.626,3.229,5.772,5.033,5.689,7.293c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h5.271l-2.166,3.398l1.977-0.411L10,30.875l9.138-10.102L17,21l2.167-2.023h4.269c3.312,0,6-2.688,6-6C29.434,10.34,27.732,8.11,25.371,7.306zM23.436,16.979H7.561c-2.209-0.006-3.997-1.792-4.001-4.001c-0.002-1.982,1.45-3.618,3.35-3.931c0.265-0.043,0.502-0.191,0.657-0.414C7.722,8.41,7.779,8.136,7.73,7.87C7.702,7.722,7.685,7.582,7.685,7.446C7.689,6.221,8.68,5.23,9.905,5.228c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.309c0.342-0.066,0.626-0.307,0.748-0.63c0.749-1.992,2.662-3.412,4.911-3.41c2.899,0.004,5.244,2.35,5.251,5.249c0,0.161-0.009,0.326-0.027,0.497c-0.049,0.517,0.305,0.984,0.815,1.079c1.86,0.344,3.274,1.966,3.271,3.923C27.43,15.186,25.645,16.973,23.436,16.979z",
+ "raph_snow": "M25.372,6.912c-0.093-3.925-3.302-7.078-7.248-7.08c-2.638,0.002-4.942,1.412-6.208,3.518c-0.595-0.327-1.28-0.518-2.01-0.518C7.627,2.834,5.773,4.639,5.69,6.898c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.875c3.312,0,6-2.688,6-6C29.434,9.944,27.732,7.715,25.372,6.912zM23.436,16.584H7.562c-2.209-0.006-3.997-1.793-4.001-4c-0.002-1.983,1.45-3.619,3.35-3.933c0.265-0.043,0.502-0.19,0.657-0.414C7.723,8.015,7.78,7.74,7.731,7.475C7.703,7.326,7.686,7.187,7.686,7.051c0.004-1.225,0.995-2.217,2.22-2.219c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.31c0.342-0.066,0.626-0.308,0.748-0.631c0.749-1.992,2.662-3.412,4.911-3.41c2.898,0.004,5.244,2.351,5.251,5.25c0,0.16-0.009,0.325-0.026,0.496c-0.05,0.518,0.305,0.984,0.814,1.079c1.859,0.345,3.273,1.966,3.271,3.923C27.43,14.791,25.645,16.578,23.436,16.584zM16.667,24.09l1.119-1.119c0.389-0.391,0.389-1.025,0-1.416c-0.392-0.391-1.025-0.391-1.415,0l-1.119,1.119l-1.119-1.119c-0.391-0.391-1.025-0.391-1.415,0c-0.391,0.391-0.391,1.025,0,1.416l1.118,1.117l-1.12,1.121c-0.389,0.393-0.389,1.021,0,1.414c0.195,0.188,0.451,0.293,0.707,0.293c0.256,0,0.512-0.104,0.708-0.293l1.12-1.119l1.12,1.119c0.195,0.188,0.451,0.293,0.708,0.293c0.256,0,0.512-0.104,0.707-0.293c0.391-0.396,0.391-1.021,0-1.414L16.667,24.09zM25.119,21.817c-0.393-0.392-1.025-0.392-1.415,0l-1.12,1.121l-1.12-1.121c-0.391-0.392-1.022-0.392-1.414,0c-0.39,0.392-0.39,1.022,0,1.416l1.119,1.119l-1.119,1.119c-0.39,0.391-0.39,1.022,0,1.413c0.195,0.195,0.451,0.294,0.707,0.294c0.257,0,0.513-0.099,0.707-0.294l1.12-1.118l1.12,1.118c0.194,0.195,0.45,0.294,0.707,0.294c0.256,0,0.513-0.099,0.708-0.294c0.389-0.391,0.389-1.022,0-1.413l-1.12-1.119l1.12-1.119C25.507,22.842,25.507,22.209,25.119,21.817zM9.334,23.953l1.119-1.119c0.389-0.394,0.389-1.021,0-1.414c-0.391-0.394-1.025-0.394-1.415,0l-1.119,1.119l-1.12-1.121c-0.391-0.39-1.023-0.39-1.415,0c-0.391,0.396-0.391,1.024,0,1.418l1.119,1.117l-1.12,1.118c-0.391,0.394-0.391,1.025,0,1.414c0.196,0.195,0.452,0.293,0.708,0.293c0.256,0,0.511-0.098,0.707-0.293l1.12-1.119l1.121,1.121c0.195,0.195,0.451,0.293,0.707,0.293s0.513-0.098,0.708-0.293c0.389-0.391,0.389-1.022,0-1.416L9.334,23.953z",
+ "raph_hail": "M25.372,6.912c-0.093-3.925-3.302-7.078-7.248-7.08c-2.638,0.002-4.942,1.412-6.208,3.518c-0.595-0.327-1.28-0.518-2.01-0.518C7.627,2.834,5.773,4.639,5.69,6.898c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.875c3.312,0,6-2.688,6-6C29.434,9.944,27.732,7.715,25.372,6.912zM23.436,16.584H7.562c-2.209-0.006-3.997-1.793-4.001-4c-0.002-1.983,1.45-3.619,3.35-3.933c0.265-0.043,0.502-0.19,0.657-0.414C7.723,8.015,7.78,7.74,7.731,7.475C7.703,7.326,7.686,7.187,7.686,7.051c0.004-1.225,0.995-2.217,2.22-2.219c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.31c0.342-0.066,0.626-0.308,0.748-0.631c0.749-1.992,2.662-3.412,4.911-3.41c2.898,0.004,5.244,2.351,5.251,5.25c0,0.16-0.009,0.325-0.026,0.496c-0.05,0.518,0.305,0.984,0.814,1.079c1.859,0.345,3.273,1.966,3.271,3.923C27.43,14.791,25.645,16.578,23.436,16.584zM11.503,23.709c-0.784-0.002-1.418-0.636-1.418-1.416c0-0.785,0.634-1.416,1.418-1.418c0.78,0.002,1.413,0.633,1.416,1.418C12.917,23.073,12.284,23.707,11.503,23.709zM19.002,23.709c-0.783-0.002-1.418-0.636-1.418-1.416c0-0.785,0.635-1.416,1.418-1.418c0.779,0.002,1.414,0.633,1.414,1.418C20.417,23.073,19.784,23.707,19.002,23.709zM7.503,28.771c-0.783-0.002-1.417-0.637-1.417-1.418s0.634-1.414,1.417-1.416c0.78,0.002,1.415,0.635,1.415,1.416C8.917,28.135,8.284,28.77,7.503,28.771zM15.001,28.771c-0.782-0.002-1.417-0.637-1.417-1.418s0.634-1.414,1.417-1.416c0.78,0.002,1.413,0.635,1.415,1.416C16.415,28.135,15.784,28.77,15.001,28.771zM22.5,28.771c-0.782-0.002-1.416-0.634-1.416-1.416c0-0.785,0.634-1.418,1.416-1.42c0.781,0.002,1.414,0.635,1.418,1.42C23.915,28.138,23.282,28.77,22.5,28.771z",
+ "raph_rain": "M25.371,7.306c-0.092-3.924-3.301-7.077-7.248-7.079c-2.638,0.001-4.942,1.412-6.208,3.517c-0.595-0.327-1.28-0.517-2.01-0.517C7.626,3.229,5.772,5.033,5.689,7.293c-2.393,0.786-4.125,3.025-4.127,5.686c0,3.312,2.687,6,6,6v-0.002h15.874c3.312,0,6-2.688,6-6C29.434,10.34,27.732,8.11,25.371,7.306zM23.436,16.979H7.561c-2.209-0.006-3.997-1.792-4.001-4.001c-0.002-1.982,1.45-3.618,3.35-3.931c0.265-0.043,0.502-0.191,0.657-0.414C7.722,8.41,7.779,8.136,7.73,7.87C7.702,7.722,7.685,7.582,7.685,7.446C7.689,6.221,8.68,5.23,9.905,5.228c0.647,0,1.217,0.278,1.633,0.731c0.233,0.257,0.587,0.375,0.927,0.309c0.342-0.066,0.626-0.307,0.748-0.63c0.749-1.992,2.662-3.412,4.911-3.41c2.899,0.004,5.244,2.35,5.251,5.249c0,0.161-0.009,0.326-0.027,0.497c-0.049,0.517,0.305,0.984,0.815,1.079c1.86,0.344,3.274,1.966,3.271,3.923C27.43,15.186,25.645,16.973,23.436,16.979zM9.029,26.682c0-1.115,0.021-5.425,0.021-5.432c0.002-0.409-0.247-0.779-0.628-0.932c-0.38-0.152-0.815-0.059-1.099,0.24c-0.006,0.008-1.037,1.098-2.081,2.342c-0.523,0.627-1.048,1.287-1.463,1.896c-0.399,0.648-0.753,1.066-0.811,1.885C2.971,28.355,4.324,29.711,6,29.714C7.672,29.71,9.029,28.354,9.029,26.682zM4.971,26.727c0.091-0.349,1.081-1.719,1.993-2.764c0.025-0.029,0.051-0.061,0.076-0.089c-0.005,1.124-0.01,2.294-0.01,2.808c0,0.567-0.461,1.028-1.029,1.03C5.447,27.71,4.997,27.273,4.971,26.727zM16.425,26.682c0-1.115,0.021-5.424,0.021-5.43c0.002-0.41-0.247-0.779-0.628-0.934c-0.381-0.152-0.814-0.058-1.1,0.242c-0.006,0.008-1.035,1.094-2.08,2.342c-0.522,0.623-1.047,1.285-1.463,1.894c-0.399,0.649-0.753,1.068-0.809,1.888c0,1.672,1.354,3.028,3.029,3.028C15.068,29.711,16.425,28.354,16.425,26.682zM12.365,26.729c0.092-0.349,1.081-1.72,1.993-2.765c0.025-0.03,0.05-0.06,0.075-0.089c-0.005,1.123-0.011,2.294-0.011,2.807c-0.002,0.568-0.461,1.027-1.028,1.029C12.84,27.709,12.392,27.273,12.365,26.729zM23.271,20.317c-0.38-0.153-0.816-0.06-1.099,0.24c-0.009,0.008-1.037,1.097-2.08,2.342c-0.523,0.625-1.049,1.285-1.462,1.896c-0.402,0.649-0.754,1.067-0.812,1.886c0,1.672,1.354,3.029,3.03,3.029c1.673,0,3.027-1.357,3.027-3.029c0-1.115,0.022-5.425,0.022-5.431C23.9,20.84,23.651,20.47,23.271,20.317zM21.879,26.681c-0.004,0.568-0.463,1.027-1.031,1.029c-0.553-0.002-1.002-0.438-1.028-0.982c0.092-0.349,1.081-1.72,1.993-2.765c0.025-0.028,0.05-0.059,0.074-0.088C21.883,24.998,21.879,26.167,21.879,26.681z",
+ "raph_undo": "M14.378,6.781c0.41,0.988,1.938,0.346,1.524-0.648C15.708,5.667,15.515,5.2,15.32,4.734c-0.289-0.695-0.875-3.233-2.042-2.747c-1.03,0.433-0.128,1.846,0.142,2.494C13.739,5.248,14.059,6.015,14.378,6.781M20.8,7.223c1.094,0.453,1.538-1.551,1.813-2.216c0.281-0.677,1.478-2.565,0.357-3.029c-1.092-0.453-1.537,1.548-1.813,2.216C20.876,4.872,19.68,6.757,20.8,7.223M18.137,6.692c1.183,0,0.829-2.019,0.829-2.742c0-0.732,0.383-2.935-0.829-2.935c-1.183,0-0.828,2.019-0.828,2.742C17.309,4.49,16.926,6.692,18.137,6.692M23.058,8.729c0.852,0.85,2.142-0.972,2.659-1.49c0.512-0.513,2.187-1.687,1.352-2.524c-0.834-0.836-2.013,0.843-2.522,1.353C24.028,6.585,22.198,7.874,23.058,8.729M24.565,10.986c0.448,1.091,2.183-0.01,2.849-0.286c0.676-0.28,2.858-0.771,2.394-1.89c-0.455-1.091-2.181,0.008-2.849,0.285C26.281,9.377,24.102,9.866,24.565,10.986M12.036,8.742c0.752,0.75,1.932-0.415,1.17-1.173c-0.253-0.347-0.646-0.645-0.949-0.946c-0.541-0.539-2.162-2.799-3.068-1.889c-0.79,0.791,0.586,1.755,1.083,2.25C10.859,7.57,11.447,8.156,12.036,8.742M29.365,17.397c-0.768-0.317-1.534-0.635-2.302-0.952c-0.646-0.268-2.07-1.169-2.495-0.135c-0.481,1.168,2.054,1.747,2.751,2.035c0.455,0.188,0.911,0.377,1.367,0.565C29.7,19.331,30.379,17.816,29.365,17.397M29.942,12.817c-0.83,0-1.66,0-2.49,0c-0.701,0-2.357-0.288-2.355,0.83c0,1.262,2.567,0.827,3.319,0.827c0.493,0,0.986,0,1.479-0.001C30.99,14.473,31.043,12.815,29.942,12.817M24.234,18.568c-0.673-0.673-1.773,0.189-1.281,1.007c-0.295-0.264-0.614-0.499-0.961-0.69c3.894-2.866,3.328-9.006-1.021-11.107c-2.024-0.978-4.481-0.828-6.368,0.394c-0.871,0.564-1.603,1.336-2.119,2.236c-0.262,0.456-0.468,0.943-0.612,1.449c-0.074,0.258-0.131,0.521-0.172,0.786c-0.083,0.534-0.109,0.553-0.553,0.871c-0.182-0.957-1.64-0.675-2.326-0.674c-0.815,0.001-1.963-0.217-2.752,0.046c-0.867,0.289-0.652,1.615,0.263,1.613c0.324,0.052,0.701-0.001,1.028-0.001c0.904-0.001,1.809-0.002,2.713-0.003c-0.308,0.352-0.496,0.969-0.94,0.77c-0.467-0.209-0.978-0.319-1.49-0.319c-0.951,0-1.877,0.375-2.561,1.036c-0.681,0.658-1.088,1.569-1.123,2.516c-0.944,0.31-1.791,0.891-2.421,1.658c-2.756,3.354-0.265,8.554,4.058,8.554v-0.002c3.597,0,7.194,0,10.792,0c1.341,0,2.843,0.167,4.168-0.113c3.652-0.772,5.361-5.21,3.133-8.229c0.548,0.547,1.096,1.094,1.644,1.641c0.183,0.183,0.364,0.424,0.575,0.574c0.552,0.552,1.524,0.066,1.403-0.713c-0.097-0.622-1.042-1.267-1.448-1.673C25.319,19.652,24.776,19.11,24.234,18.568M18.137,8.787c4.559,0.009,6.576,5.979,2.912,8.734c-0.637-3.505-4.161-5.824-7.629-5.03C13.943,10.367,15.852,8.792,18.137,8.787M22.895,24.08c-0.633,3.346-4.149,2.879-6.68,2.879c-3.017,0-6.033,0-9.049,0c-0.767,0-1.62,0.084-2.373-0.095c-2.274-0.538-3.416-3.242-2.172-5.235c0.678-1.087,1.568-1.19,2.626-1.67c0.604-0.273,0.456-0.807,0.456-1.331c0.002-0.597,0.284-1.169,0.756-1.533c0.787-0.608,1.943-0.497,2.611,0.234c1.098,1.205,1.96-1.346,2.507-1.893c2.025-2.025,5.475-1.708,7.068,0.684c0.344,0.516,0.581,1.102,0.693,1.712c0.097,0.529-0.115,1.341,0.188,1.796c0.291,0.47,0.943,0.463,1.397,0.68c0.508,0.23,0.963,0.591,1.304,1.034C22.834,22.125,23.064,23.107,22.895,24.08M6.906,9.917c0.881,0.364,1.763,0.727,2.644,1.091c0.353,0.146,0.707,0.292,1.06,0.437c0.997,0.412,1.637-1.119,0.642-1.526C10.47,9.441,9.456,9.177,8.609,8.828c-0.354-0.146-0.707-0.292-1.06-0.437C6.554,7.98,5.912,9.505,6.906,9.917",
+ "raph_sun": "M15.502,7.504c-4.35,0-7.873,3.523-7.873,7.873c0,4.347,3.523,7.872,7.873,7.872c4.346,0,7.871-3.525,7.871-7.872C23.374,11.027,19.85,7.504,15.502,7.504zM15.502,21.25c-3.244-0.008-5.866-2.63-5.874-5.872c0.007-3.243,2.63-5.866,5.874-5.874c3.242,0.008,5.864,2.631,5.871,5.874C21.366,18.62,18.744,21.242,15.502,21.25zM15.502,6.977c0.553,0,1-0.448,1-1.001V1.125c-0.002-0.553-0.448-1-1-1c-0.553,0-1.001,0.449-1,1.002v4.85C14.502,6.528,14.949,6.977,15.502,6.977zM18.715,7.615c0.125,0.053,0.255,0.076,0.382,0.077c0.394,0,0.765-0.233,0.925-0.618l1.856-4.483c0.21-0.511-0.031-1.095-0.541-1.306c-0.511-0.211-1.096,0.031-1.308,0.541L18.174,6.31C17.963,6.82,18.205,7.405,18.715,7.615zM21.44,9.436c0.195,0.194,0.451,0.293,0.707,0.293s0.512-0.098,0.707-0.293l3.43-3.433c0.391-0.39,0.39-1.023,0-1.415c-0.392-0.39-1.025-0.39-1.415,0.002L21.44,8.021C21.049,8.412,21.049,9.045,21.44,9.436zM23.263,12.16c0.158,0.385,0.531,0.617,0.923,0.617c0.127,0,0.257-0.025,0.383-0.078l4.48-1.857c0.511-0.211,0.753-0.797,0.541-1.307s-0.796-0.752-1.307-0.54l-4.481,1.857C23.292,11.064,23.051,11.65,23.263,12.16zM29.752,14.371l-4.851,0.001c-0.552,0-1,0.448-0.998,1.001c0,0.553,0.447,0.999,0.998,0.999l4.852-0.002c0.553,0,0.999-0.449,0.999-1C30.752,14.817,30.304,14.369,29.752,14.371zM29.054,19.899l-4.482-1.854c-0.512-0.212-1.097,0.03-1.307,0.541c-0.211,0.511,0.031,1.096,0.541,1.308l4.482,1.854c0.126,0.051,0.256,0.075,0.383,0.075c0.393,0,0.765-0.232,0.925-0.617C29.806,20.695,29.563,20.109,29.054,19.899zM22.86,21.312c-0.391-0.391-1.023-0.391-1.414,0.001c-0.391,0.39-0.39,1.022,0,1.413l3.434,3.429c0.195,0.195,0.45,0.293,0.706,0.293s0.513-0.098,0.708-0.293c0.391-0.392,0.389-1.025,0-1.415L22.86,21.312zM20.029,23.675c-0.211-0.511-0.796-0.752-1.307-0.541c-0.51,0.212-0.752,0.797-0.54,1.308l1.86,4.48c0.159,0.385,0.531,0.617,0.925,0.617c0.128,0,0.258-0.024,0.383-0.076c0.511-0.211,0.752-0.797,0.54-1.309L20.029,23.675zM15.512,23.778c-0.553,0-1,0.448-1,1l0.004,4.851c0,0.553,0.449,0.999,1,0.999c0.553,0,1-0.448,0.998-1l-0.003-4.852C16.511,24.226,16.062,23.777,15.512,23.778zM12.296,23.142c-0.51-0.21-1.094,0.031-1.306,0.543l-1.852,4.483c-0.21,0.511,0.033,1.096,0.543,1.307c0.125,0.052,0.254,0.076,0.382,0.076c0.392,0,0.765-0.234,0.924-0.619l1.853-4.485C13.051,23.937,12.807,23.353,12.296,23.142zM9.57,21.325c-0.392-0.391-1.025-0.389-1.415,0.002L4.729,24.76c-0.391,0.392-0.389,1.023,0.002,1.415c0.195,0.194,0.45,0.292,0.706,0.292c0.257,0,0.513-0.098,0.708-0.293l3.427-3.434C9.961,22.349,9.961,21.716,9.57,21.325zM7.746,18.604c-0.213-0.509-0.797-0.751-1.307-0.54L1.96,19.925c-0.511,0.212-0.752,0.798-0.54,1.308c0.16,0.385,0.531,0.616,0.924,0.616c0.127,0,0.258-0.024,0.383-0.076l4.479-1.861C7.715,19.698,7.957,19.113,7.746,18.604zM7.1,15.392c0-0.553-0.447-0.999-1-0.999l-4.851,0.006c-0.553,0-1.001,0.448-0.999,1.001c0.001,0.551,0.449,1,1,0.998l4.852-0.006C6.654,16.392,7.102,15.942,7.1,15.392zM1.944,10.869l4.485,1.85c0.125,0.053,0.254,0.076,0.381,0.076c0.393,0,0.766-0.232,0.925-0.618c0.212-0.511-0.032-1.097-0.544-1.306L2.708,9.021c-0.511-0.21-1.095,0.032-1.306,0.542C1.19,10.074,1.435,10.657,1.944,10.869zM8.137,9.451c0.195,0.193,0.449,0.291,0.705,0.291s0.513-0.098,0.709-0.295c0.391-0.389,0.389-1.023-0.004-1.414L6.113,4.609C5.723,4.219,5.088,4.221,4.699,4.612c-0.391,0.39-0.389,1.024,0.002,1.414L8.137,9.451zM10.964,7.084c0.16,0.384,0.532,0.615,0.923,0.615c0.128,0,0.258-0.025,0.384-0.077c0.51-0.212,0.753-0.798,0.54-1.307l-1.864-4.479c-0.212-0.51-0.798-0.751-1.308-0.539C9.129,1.51,8.888,2.096,9.1,2.605L10.964,7.084z",
+ "raph_undo": "M12.981,9.073V6.817l-12.106,6.99l12.106,6.99v-2.422c3.285-0.002,9.052,0.28,9.052,2.269c0,2.78-6.023,4.263-6.023,4.263v2.132c0,0,13.53,0.463,13.53-9.823C29.54,9.134,17.952,8.831,12.981,9.073z",
+ "raph_merge": "M26.92,10.928l-3.574-2.064v2.297h-6.414c-1.123,0.084-3.062-1.19-5.218-2.881C9.543,6.676,7.062,4.709,3.74,4.656H1.505v3.662H3.74c1.627-0.047,3.633,1.232,5.769,2.883c0.796,0.577,1.599,1.213,2.45,1.788c-0.851,0.575-1.653,1.212-2.45,1.789c-2.136,1.646-4.142,2.929-5.767,2.882H1.505v3.668h2.236c3.315-0.047,5.797-2.02,7.975-3.621c2.156-1.691,4.094-2.966,5.218-2.883h6.412v2.297l3.574-2.062l3.576-2.064L26.92,10.928z",
+ "raph_split": "M23.346,23.979l3.576-2.062l3.574-2.062l-3.576-2.064l-3.574-2.062v2.293c-0.876,0-1.894,0-2.235,0c-1.626,0.046-3.633-1.233-5.768-2.883c-0.796-0.578-1.599-1.214-2.45-1.789c0.851-0.575,1.653-1.211,2.45-1.789c2.135-1.647,4.142-2.929,5.766-2.882l2.237-0.001v2.296l3.574-2.063l3.576-2.064L26.92,4.78l-3.574-2.064v2.295H21.11c-3.321,0.047-5.803,2.019-7.975,3.622c-2.156,1.691-4.094,2.965-5.218,2.882H1.505v3.664h6.414c1.123-0.083,3.062,1.191,5.218,2.882c2.171,1.604,4.652,3.575,7.974,3.622h2.235V23.979L23.346,23.979z",
+ "raph_fork": "M26.268,22.562l3.514-2.03l-3.514-2.028l-3.515-2.028v2.256c-0.922-0.002-2.45-0.002-2.883-0.002c-1.28-0.03-2.12-0.431-2.994-1.148c-1.303-1.07-2.415-2.997-3.756-4.853c-0.682-0.923-1.442-1.839-2.454-2.575C9.664,9.415,8.355,8.902,6.9,8.912H0.593v3.604H6.9c0.877,0.016,1.432,0.302,2.189,1.012c1.12,1.055,2.212,3.072,3.718,4.983c1.476,1.893,3.747,3.804,7.041,3.823h2.905v2.256L26.268,22.562zM11.401,8.912c0.04,0.028,0.082,0.053,0.121,0.082c1.202,0.874,2.07,1.947,2.757,2.88c0.158,0.218,0.298,0.428,0.448,0.642h8.026v2.257l3.515-2.028l3.514-2.029l-3.514-2.029l-3.515-2.03v2.255H11.401z",
+ "raph_shuffle": "M9.089,13.133c0.346,0.326,0.69,0.75,1.043,1.228c0.051-0.073,0.099-0.144,0.15-0.219c0.511-0.75,1.09-1.599,1.739-2.421c0.103-0.133,0.211-0.245,0.316-0.371c-0.487-0.572-1.024-1.12-1.672-1.592C9.663,9.02,8.354,8.506,6.899,8.517H0.593v3.604H6.9C7.777,12.138,8.333,12.422,9.089,13.133zM22.753,16.082v2.256c-0.922-0.002-2.45-0.002-2.883-0.002c-1.28-0.03-2.12-0.438-2.994-1.148c-0.378-0.311-0.74-0.7-1.097-1.133c-0.268,0.376-0.538,0.764-0.813,1.168c-0.334,0.488-0.678,0.99-1.037,1.484c-0.089,0.121-0.189,0.246-0.283,0.369c1.455,1.528,3.473,2.846,6.202,2.862h2.905v2.256l3.515-2.026l3.521-2.03l-3.521-2.028L22.753,16.082zM16.876,13.27c0.874-0.712,1.714-1.118,2.994-1.148c0.433,0,1.961,0,2.883-0.002v2.256l3.515-2.026l3.521-2.028l-3.521-2.029l-3.515-2.027V8.52h-2.905c-3.293,0.02-5.563,1.93-7.041,3.822c-1.506,1.912-2.598,3.929-3.718,4.982C8.332,18.033,7.777,18.32,6.9,18.336H0.593v3.604H6.9c1.455,0.011,2.764-0.502,3.766-1.242c1.012-0.735,1.772-1.651,2.454-2.573C14.461,16.267,15.574,14.34,16.876,13.27z",
+ "raph_refresh": "M15.999,4.308c1.229,0.001,2.403,0.214,3.515,0.57L18.634,6.4h6.247l-1.562-2.706L21.758,0.99l-0.822,1.425c-1.54-0.563-3.2-0.878-4.936-0.878c-7.991,0-14.468,6.477-14.468,14.468c0,3.317,1.128,6.364,3.005,8.805l2.2-1.689c-1.518-1.973-2.431-4.435-2.436-7.115C4.312,9.545,9.539,4.318,15.999,4.308zM27.463,7.203l-2.2,1.69c1.518,1.972,2.431,4.433,2.435,7.114c-0.011,6.46-5.238,11.687-11.698,11.698c-1.145-0.002-2.24-0.188-3.284-0.499l0.828-1.432H7.297l1.561,2.704l1.562,2.707l0.871-1.511c1.477,0.514,3.058,0.801,4.709,0.802c7.992-0.002,14.468-6.479,14.47-14.47C30.468,12.689,29.339,9.643,27.463,7.203z",
+ "raph_smile2": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,29.534C8.539,29.534,2.466,23.462,2.466,16C2.466,8.539,8.539,2.466,16,2.466c7.462,0,13.535,6.072,13.535,13.533C29.534,23.462,23.462,29.534,16,29.534zM11.104,14c0.932,0,1.688-1.483,1.688-3.312s-0.755-3.312-1.688-3.312s-1.688,1.483-1.688,3.312S10.172,14,11.104,14zM20.729,14c0.934,0,1.688-1.483,1.688-3.312s-0.756-3.312-1.688-3.312c-0.932,0-1.688,1.483-1.688,3.312S19.798,14,20.729,14zM8.143,21.189C10.458,24.243,13.148,26,16.021,26c2.969,0,5.745-1.868,8.11-5.109c-2.515,1.754-5.292,2.734-8.215,2.734C13.164,23.625,10.54,22.756,8.143,21.189z",
+ "raph_smile": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM20.729,7.375c0.934,0,1.688,1.483,1.688,3.312S21.661,14,20.729,14c-0.932,0-1.688-1.483-1.688-3.312S19.798,7.375,20.729,7.375zM11.104,7.375c0.932,0,1.688,1.483,1.688,3.312S12.037,14,11.104,14s-1.688-1.483-1.688-3.312S10.172,7.375,11.104,7.375zM16.021,26c-2.873,0-5.563-1.757-7.879-4.811c2.397,1.564,5.021,2.436,7.774,2.436c2.923,0,5.701-0.98,8.215-2.734C21.766,24.132,18.99,26,16.021,26z",
+ "raph_alarm": "M15.499,5.125c-0.553,0-0.999,0.448-0.999,1v9.221L8.454,17.99c-0.506,0.222-0.736,0.812-0.514,1.318c0.164,0.375,0.53,0.599,0.915,0.599c0.134,0,0.271-0.027,0.401-0.085l6.626-2.898c0.005-0.002,0.009-0.004,0.013-0.006l0.004-0.002c0.015-0.006,0.023-0.02,0.037-0.025c0.104-0.052,0.201-0.113,0.279-0.195c0.034-0.034,0.053-0.078,0.079-0.117c0.048-0.064,0.101-0.127,0.13-0.204c0.024-0.06,0.026-0.125,0.038-0.189c0.013-0.064,0.038-0.121,0.038-0.186V6.124C16.5,5.573,16.052,5.125,15.499,5.125zM31.125,6.832c0-3.832-3.105-6.938-6.938-6.938c-1.938,0-3.686,0.796-4.94,2.077C18.05,1.652,16.798,1.466,15.5,1.466c-1.334,0-2.62,0.195-3.847,0.531c-1.259-1.295-3.016-2.103-4.965-2.103C2.856-0.106-0.25,3-0.25,6.832c0,1.845,0.726,3.517,1.901,4.76c-0.443,1.39-0.685,2.87-0.685,4.408c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534c0-1.575-0.259-3.087-0.722-4.508C30.436,10.261,31.125,8.629,31.125,6.832zM15.5,27.533C9.139,27.533,3.966,22.359,3.966,16c0-6.36,5.173-11.534,11.534-11.534c6.361,0,11.533,5.173,11.533,11.534C27.033,22.361,21.859,27.533,15.5,27.533z",
+ "raph_clock": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,27.533C9.639,27.533,4.466,22.359,4.466,16C4.466,9.64,9.639,4.466,16,4.466c6.361,0,11.533,5.173,11.533,11.534C27.533,22.361,22.359,27.533,16,27.533zM15.999,5.125c-0.553,0-0.999,0.448-0.999,1v9.221L8.954,17.99c-0.506,0.222-0.736,0.812-0.514,1.318c0.164,0.375,0.53,0.599,0.915,0.599c0.134,0,0.271-0.027,0.401-0.085l6.626-2.898c0.005-0.002,0.009-0.004,0.013-0.006l0.004-0.002c0.015-0.006,0.023-0.02,0.037-0.025c0.104-0.052,0.201-0.113,0.279-0.195c0.034-0.034,0.053-0.078,0.079-0.117c0.048-0.064,0.101-0.127,0.13-0.204c0.024-0.06,0.026-0.125,0.038-0.189C16.975,16.121,17,16.064,17,15.999V6.124C17,5.573,16.552,5.125,15.999,5.125z",
+ "raph_globeAlt2": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM8.251,7.48c0.122,0.055,0.255,0.104,0.28,0.137C8.57,7.668,8.621,7.823,8.557,7.861C8.492,7.9,8.39,7.887,8.376,7.771c-0.013-0.115-0.026-0.128-0.18-0.18c-0.022-0.007-0.035-0.01-0.051-0.015C8.18,7.544,8.216,7.512,8.251,7.48zM7.733,7.974c0.031,0.087,0.113,0.125,0,0.17C7.673,8.168,7.611,8.172,7.559,8.165C7.617,8.102,7.672,8.035,7.733,7.974zM16,27.533C9.639,27.533,4.466,22.36,4.466,16c0-0.085,0.011-0.168,0.013-0.254c0.004-0.003,0.008-0.006,0.012-0.009c0.129-0.102,0.283-0.359,0.334-0.45c0.052-0.089,0.181-0.154,0.116-0.256c-0.059-0.096-0.292-0.23-0.407-0.261c0.01-0.099,0.032-0.195,0.045-0.294c0.063,0.077,0.137,0.17,0.208,0.194c0.115,0.038,0.501,0.052,0.566,0.052c0.063,0,0.334,0.014,0.386-0.064c0.051-0.077,0.09-0.077,0.154-0.077c0.064,0,0.18,0.231,0.271,0.257c0.089,0.026,0.257,0.013,0.244,0.181c-0.012,0.166,0.077,0.309,0.167,0.321c0.09,0.013,0.296-0.194,0.296-0.194s0,0.322-0.012,0.438C6.846,15.698,7,16.124,7,16.124s0.193,0.397,0.244,0.488c0.052,0.09,0.27,0.36,0.27,0.476c0,0.117,0.026,0.297,0.104,0.297s0.155-0.206,0.244-0.335c0.091-0.128,0.117-0.31,0.155-0.438c0.039-0.129,0.039-0.36,0.039-0.45c0-0.091,0.076-0.168,0.257-0.245c0.181-0.077,0.309-0.296,0.463-0.412c0.155-0.116,0.142-0.309,0.452-0.309c0.308,0,0.282,0,0.36-0.078c0.077-0.077,0.154-0.128,0.192,0.013c0.039,0.142,0.257,0.347,0.296,0.399c0.039,0.052,0.116,0.193,0.104,0.348c-0.013,0.153,0.012,0.334,0.077,0.334c0.064,0,0.193-0.219,0.193-0.219s0.283-0.192,0.27,0.014c-0.014,0.205,0.025,0.425,0.025,0.552c0,0.13,0.232,0.438,0.232,0.362c0-0.079,0.103-0.296,0.103-0.413c0-0.114,0.064-0.063,0.231,0.051c0.167,0.116,0.283,0.349,0.283,0.349s0.168,0.154,0.193,0.219c0.026,0.064,0.206-0.025,0.244-0.104c0.039-0.076,0.065-0.115,0.167-0.141c0.104-0.026,0.231-0.026,0.271-0.168c0.039-0.142,0.154-0.308,0-0.502c-0.154-0.193-0.232-0.321-0.347-0.412c-0.117-0.09-0.206-0.322-0.206-0.322s0.244-0.218,0.321-0.296c0.079-0.077,0.193-0.025,0.207,0.064c0.013,0.091-0.115,0.168-0.141,0.361c-0.026,0.192,0.154,0.257,0.206,0.192c0.051-0.065,0.18-0.219,0.18-0.257c0-0.039-0.089-0.026-0.102-0.167c-0.013-0.142,0.166-0.245,0.23-0.207c0.066,0.039,0.477-0.051,0.67-0.154s0.308-0.322,0.425-0.412c0.116-0.089,0.515-0.386,0.489-0.527c-0.026-0.142,0.012-0.334-0.09-0.515c-0.103-0.18-0.232-0.295-0.283-0.373c-0.051-0.077,0.219-0.09,0.347-0.206c0.129-0.116,0-0.219-0.064-0.206c-0.064,0.013-0.232,0.052-0.296,0.039c-0.064-0.013-0.103-0.077-0.206-0.155c-0.102-0.077,0.026-0.192,0.091-0.179c0.064,0.013,0.23-0.129,0.308-0.193c0.077-0.064,0.193-0.115,0.154-0.051c-0.038,0.064-0.128,0.296-0.026,0.309c0.104,0.013,0.348-0.193,0.388-0.18c0.038,0.013,0.102,0.18,0.064,0.257c-0.039,0.077-0.039,0.206,0.013,0.193c0.051-0.013,0.154-0.129,0.18-0.09c0.027,0.039,0.154,0.116,0.09,0.257c-0.063,0.142-0.193,0.193-0.039,0.284c0.154,0.089,0.206,0.012,0.322-0.052c0.115-0.064,0.193-0.347,0.128-0.438c-0.064-0.09-0.218-0.27-0.218-0.334c0-0.064,0.257-0.064,0.257-0.167s0.09-0.18,0.18-0.219c0.091-0.039,0.206-0.206,0.244-0.154c0.039,0.052,0.271,0.116,0.334,0.039c0.064-0.077,0.4-0.36,0.605-0.515c0.206-0.154,0.283-0.334,0.336-0.515c0.051-0.18,0.128-0.296,0.102-0.437v0c0.077,0.18,0.09,0.309,0.077,0.45c-0.013,0.142,0,0.438,0.026,0.476c0.025,0.039,0.129,0.128,0.192,0.103c0.064-0.025-0.025-0.283-0.025-0.334c0-0.052,0.09-0.129,0.142-0.142c0.052-0.013,0-0.231-0.065-0.322c-0.063-0.09-0.154-0.142-0.102-0.154c0.051-0.013,0.115-0.116,0.077-0.142c-0.039-0.025-0.014-0.116-0.103-0.09c-0.065,0.019-0.241-0.015-0.235,0.095c-0.037-0.11-0.116-0.183-0.216-0.172c-0.116,0.013-0.181,0.077-0.296,0.077s-0.025-0.18-0.077-0.18c-0.051,0-0.168,0.167-0.231,0.077c-0.064-0.09,0.18-0.206,0.373-0.27c0.192-0.064,0.514-0.438,0.644-0.451c0.128-0.013,0.45,0.026,0.733,0.013c0.283-0.013,0.373-0.129,0.463-0.064s0.283,0.142,0.399,0.129c0.116-0.014,0.064,0,0.244-0.129c0.18-0.129,0.348-0.193,0.438-0.296c0.09-0.103,0.335-0.18,0.348-0.077c0.014,0.103-0.026,0.206,0.077,0.206s0.258-0.103,0.386-0.154c0.129-0.051,0.231-0.116,0.231-0.116s-0.527,0.36-0.655,0.438c-0.129,0.077-0.438,0.129-0.567,0.283c-0.128,0.155-0.205,0.206-0.192,0.374c0.014,0.167,0.231,0.386,0.128,0.54c-0.103,0.154-0.141,0.373-0.141,0.373s0.154-0.219,0.373-0.36s0.348-0.334,0.425-0.412s0.309-0.091,0.309-0.181s0.064-0.206,0.104-0.309c0.038-0.103-0.077-0.078,0-0.206c0.076-0.129,0.064-0.232,0.45-0.232s0.257,0.026,0.566,0.013c0.309-0.013,0.424-0.167,0.72-0.245c0.296-0.077,0.527-0.128,0.618-0.089c0.09,0.038,0.232,0.012,0.141-0.078c-0.089-0.09-0.295-0.219-0.193-0.245c0.104-0.026,0.207-0.039,0.246-0.142c0.039-0.103-0.142-0.283-0.039-0.386c0.104-0.103-0.077-0.231-0.207-0.257c-0.128-0.025-0.63,0.026-0.731-0.025c-0.104-0.052-0.271-0.116-0.322-0.078c-0.052,0.039-0.168,0.245-0.168,0.245s-0.09,0.025-0.168-0.09c-0.076-0.116-0.5-0.103-0.629-0.103s-0.271,0.025-0.413,0.039c-0.141,0.013-0.219,0.052-0.322-0.039c-0.102-0.09-0.243-0.129-0.296-0.167c-0.051-0.039-0.334-0.039-0.553-0.012c-0.218,0.025-0.438,0.025-0.438,0.025s-0.104-0.039-0.257-0.129c-0.154-0.09-0.309-0.154-0.361-0.154c-0.051,0-0.449,0.064-0.539,0c-0.091-0.064-0.181-0.103-0.245-0.103s-0.115-0.103-0.038-0.103s0.437-0.103,0.437-0.103s-0.103-0.142-0.231-0.142c-0.128,0-0.359-0.064-0.424-0.064s-0.014,0.064-0.142,0.039c-0.13-0.026-0.258-0.078-0.335-0.026c-0.076,0.051-0.258,0.128-0.064,0.18c0.193,0.052,0.373,0,0.425,0.078c0.052,0.077,0,0.115,0,0.167s-0.103,0.193-0.167,0.219c-0.064,0.025-0.143-0.039-0.27,0.025c-0.129,0.064-0.451,0.013-0.49,0.052c-0.038,0.039-0.115-0.103-0.18-0.077c-0.064,0.025-0.232,0.193-0.322,0.18c-0.089-0.013-0.206-0.103-0.206-0.206s-0.038-0.232-0.077-0.258c-0.038-0.025-0.322-0.039-0.425-0.025c-0.103,0.013-0.424,0.038-0.477,0.09c-0.052,0.052-0.193,0.09-0.283,0.09s-0.167-0.09-0.36-0.116c-0.192-0.026-0.617-0.039-0.669-0.026s-0.218-0.025-0.155-0.077c0.065-0.051,0.257-0.219,0.143-0.295c-0.117-0.078-0.375-0.078-0.489-0.09c-0.117-0.013-0.232-0.039-0.413-0.013c-0.181,0.026-0.219,0.116-0.296,0.039c-0.077-0.077,0.193,0.039-0.077-0.077c-0.27-0.116-0.399-0.103-0.477-0.064c-0.077,0.039,0.013,0.025-0.192,0.103c-0.206,0.078-0.322,0.116-0.374,0.129c-0.051,0.012-0.372-0.065-0.411-0.091c-0.038-0.025-0.181,0.013-0.309,0.064S9.895,7.025,9.767,7C9.638,6.973,9.432,6.973,9.303,7.025C9.174,7.076,9.084,7.076,8.956,7.166c-0.13,0.09-0.373,0.142-0.373,0.142S8.522,7.305,8.448,7.301C10.474,5.541,13.111,4.466,16,4.466c6.361,0,11.534,5.173,11.534,11.534S22.36,27.533,16,27.533zM14.888,19.92c0,0,0.207-0.026,0.207-0.117c0-0.089-0.207-0.205-0.282-0.102c-0.078,0.102-0.219,0.205-0.207,0.296C14.625,20.138,14.888,19.92,14.888,19.92zM14.875,17.023c-0.181,0.233-0.167,0.182-0.296,0.128c-0.128-0.05-0.334,0.116-0.296,0.182c0.039,0.064,0.322-0.014,0.386,0.102c0.065,0.116,0.065,0.129,0.193,0.104c0.128-0.026,0.257-0.205,0.219-0.295C15.043,17.151,14.875,17.023,14.875,17.023zM14.837,18.245c-0.051,0-0.412,0.064-0.451,0.079c-0.039,0.013-0.27-0.025-0.27-0.025c-0.09,0.089-0.026,0.179,0.116,0.166s0.438-0.052,0.502-0.052C14.799,18.413,14.888,18.245,14.837,18.245zM14.284,14.668c-0.19,0.03-0.308,0.438-0.155,0.425C14.284,15.081,14.451,14.643,14.284,14.668zM14.734,16.959c-0.052-0.064-0.181-0.271-0.323-0.219c-0.042,0.017-0.153,0.245-0.012,0.245C14.541,16.985,14.786,17.023,14.734,16.959zM14.85,16.805c0.232-0.013,0.167-0.245-0.013-0.257C14.786,16.544,14.618,16.818,14.85,16.805zM17.591,18.928c-0.193-0.039-0.244-0.102-0.45-0.205c-0.207-0.103-0.67-0.103-0.682-0.039c-0.014,0.064,0,0-0.155-0.05c-0.153-0.054-0.271,0-0.309-0.091c-0.038-0.091-0.128-0.117-0.244-0.002c-0.097,0.097-0.142,0.104,0.078,0.143c0.218,0.039,0.283,0.039,0.192,0.141c-0.09,0.104-0.154,0.233-0.077,0.244c0.077,0.015,0.309-0.05,0.334,0c0.026,0.054-0.051,0.064,0.207,0.105c0.258,0.037,0.309,0.128,0.359,0.178c0.051,0.052,0.206,0.22,0.104,0.22c-0.104,0-0.219,0.128-0.142,0.143c0.077,0.013,0.309-0.039,0.321,0c0.014,0.037,0.143,0.283,0.271,0.271c0.129-0.013,0.206-0.244,0.27-0.31c0.065-0.064,0.322-0.104,0.349,0.012c0.026,0.116,0.104,0.233,0.257,0.311c0.154,0.076,0.335,0.154,0.348,0.089c0.013-0.064-0.077-0.309-0.181-0.346c-0.103-0.041-0.282-0.259-0.282-0.348c0-0.091-0.155-0.117-0.232-0.182C17.849,19.147,17.784,18.967,17.591,18.928zM8.042,17.023c-0.084,0.037-0.155,0.476,0,0.527c0.154,0.052,0.244-0.205,0.193-0.271C8.183,17.218,8.158,16.973,8.042,17.023zM15.429,18.117c-0.118-0.05-0.335,0.424-0.181,0.463C15.403,18.62,15.518,18.156,15.429,18.117zM15.687,13.703c0.077,0,0.18-0.051,0.18-0.193c0-0.142,0.18,0,0.27-0.013s0.141-0.103,0.18-0.206c0.005-0.013,0.008-0.021,0.009-0.027c-0.003,0.024-0.001,0.093,0.095,0.117c0.154,0.038,0.205-0.064,0.205-0.103s0.283-0.103,0.336-0.142c0.051-0.038,0.258-0.103,0.27-0.154c0.013-0.051,0-0.348,0.064-0.373c0.064-0.026,0.154-0.026,0.052-0.206c-0.104-0.181-0.104-0.348-0.232-0.271c-0.095,0.057-0.038,0.284-0.115,0.438s-0.142,0.296-0.193,0.296s-0.321,0.103-0.399,0.18c-0.076,0.077-0.45-0.064-0.501,0c-0.052,0.064-0.154,0.141-0.219,0.193c-0.065,0.051-0.245,0.013-0.207,0.167C15.518,13.562,15.609,13.703,15.687,13.703zM17.449,12.056c0.18-0.013,0.348-0.064,0.348-0.064s0.271,0.013,0.232-0.116c-0.04-0.128-0.322-0.141-0.375-0.128c-0.051,0.013-0.142-0.142-0.244-0.116c-0.096,0.023-0.128,0.155-0.128,0.193c0,0.039-0.36,0.115-0.245,0.219C17.153,12.146,17.27,12.069,17.449,12.056zM13.91,19.058c0.104,0.064,0.296-0.219,0.349-0.13c0.051,0.091-0.013,0.13,0.076,0.246c0.091,0.114,0.258,0.102,0.258,0.102s-0.013-0.309-0.155-0.387c-0.142-0.077-0.232-0.166-0.064-0.141c0.167,0.026,0.257-0.039,0.219-0.114c-0.039-0.078-0.283-0.039-0.361-0.026s-0.193-0.052-0.193-0.052c-0.077,0.024-0.063,0.089-0.09,0.219C13.923,18.902,13.807,18.992,13.91,19.058zM20.924,21.618c-0.231-0.052-0.077,0.039,0,0.154c0.077,0.116,0.232,0.176,0.258,0.05C21.193,21.759,21.155,21.67,20.924,21.618zM21.915,24.744c-0.077,0.064,0,0.091-0.219,0.22c-0.22,0.13-0.49,0.271-0.541,0.386c-0.052,0.116,0.051,0.181,0.258,0.192c0.206,0.013,0.154,0.053,0.296-0.103s0.271-0.244,0.438-0.373c0.168-0.128,0.168-0.322,0.168-0.322s-0.181-0.178-0.193-0.141C22.1,24.665,21.992,24.681,21.915,24.744zM18.504,21.618c0.014-0.116-0.219-0.116-0.334-0.207c-0.116-0.089-0.128-0.359-0.193-0.515c-0.064-0.153-0.192-0.257-0.322-0.397c-0.128-0.143-0.192-0.465-0.23-0.438c-0.039,0.025-0.154,0.399-0.064,0.515c0.09,0.116-0.039,0.348-0.103,0.503c-0.065,0.153-0.22-0.026-0.349-0.104c-0.129-0.078-0.308-0.128-0.398-0.219c-0.09-0.091,0.155-0.335,0.091-0.426c-0.065-0.09-0.412-0.013-0.45-0.013c-0.039,0-0.116-0.128-0.194-0.128c-0.077,0-0.064,0.258-0.064,0.258s-0.078-0.091-0.193-0.207c-0.117-0.115,0.012,0.077-0.103,0.193c-0.117,0.117-0.079,0.078-0.129,0.206c-0.051,0.129-0.167,0.077-0.283-0.052c-0.116-0.128-0.179-0.037-0.258,0c-0.077,0.039-0.141,0.259-0.18,0.309c-0.039,0.052-0.309,0.117-0.374,0.182c-0.064,0.062-0.09,0.27-0.09,0.322c0,0.05-0.271,0.023-0.361,0.089c-0.09,0.064-0.23,0.025-0.321,0.025c-0.09,0-0.399,0.244-0.502,0.308c-0.103,0.066-0.103,0.298-0.051,0.362c0.051,0.063,0.154,0.219,0.09,0.244c-0.064,0.026-0.104,0.206,0.051,0.359c0.154,0.155,0.103,0.194,0.115,0.271c0.014,0.077,0.078,0.104,0.181,0.232c0.102,0.128-0.181,0.231-0.219,0.31c-0.039,0.076,0.091,0.192,0.167,0.257c0.077,0.063,0.271,0.026,0.386-0.013c0.117-0.039,0.245-0.143,0.321-0.155c0.079-0.013,0.438-0.026,0.438-0.026s0.129-0.192,0.219-0.296c0.089-0.102,0.372-0.013,0.372-0.013s0.117-0.076,0.426-0.141c0.309-0.065,0.179,0.064,0.296,0.104c0.115,0.037,0.27,0.062,0.359,0.128c0.09,0.064,0,0.218-0.012,0.283c-0.014,0.064,0.219,0.038,0.23-0.026c0.014-0.064,0.077-0.128,0.207-0.205c0.128-0.078,0.025,0.114,0.076,0.231c0.052,0.116,0.129-0.157,0.129-0.026c0,0.039,0.039,0.078,0.051,0.116c0.014,0.039,0.181,0.052,0.181,0.18c0,0.13,0,0.207,0.039,0.231c0.038,0.026,0.244,0,0.335,0.155c0.089,0.154,0.154,0.013,0.205-0.052c0.052-0.064,0.231,0.026,0.283,0.078c0.052,0.05,0.193-0.104,0.387-0.155c0.192-0.051,0.167-0.039,0.219-0.115c0.051-0.078,0.09-0.283,0.205-0.438c0.115-0.153,0.271-0.424,0.271-0.631c0-0.206-0.014-0.682-0.155-0.899C18.761,21.953,18.492,21.733,18.504,21.618zM18.029,24.77c-0.065-0.013-0.207-0.062-0.207-0.062c-0.142,0.141,0.142,0.141,0.104,0.283c-0.039,0.141,0.193,0.089,0.257,0.064c0.063-0.027,0.22-0.323,0.193-0.399C18.351,24.577,18.093,24.783,18.029,24.77zM22.803,24.178c-0.052,0-0.077,0.064-0.192,0c-0.117-0.063-0.091-0.037-0.168-0.167c-0.077-0.127-0.091-0.296-0.219-0.23c-0.051,0.025,0,0.168,0.051,0.218c0.053,0.052,0.077,0.231,0.064,0.283c-0.012,0.052-0.231,0.116-0.129,0.18c0.104,0.064,0.297,0,0.271,0.078c-0.025,0.077-0.129,0.179-0.013,0.205c0.115,0.025,0.154-0.089,0.207-0.178c0.051-0.093,0.089-0.169,0.179-0.221C22.944,24.294,22.854,24.178,22.803,24.178zM22.815,21.18c0.168,0.064,0.464-0.231,0.347-0.27C23.047,20.871,22.815,21.18,22.815,21.18zM13.923,19.906c-0.029,0.115,0.193,0.167,0.206,0.039C14.141,19.816,13.949,19.803,13.923,19.906zM14.27,16.47c-0.064,0.065-0.257,0.193-0.283,0.31c-0.025,0.115,0.309-0.182,0.399-0.296c0.091-0.117,0.27-0.052,0.308-0.117c0.04-0.063,0.04-0.063,0.04-0.063s-0.142-0.025-0.257-0.063c-0.117-0.039-0.258,0.102-0.193-0.104c0.064-0.206,0.257-0.167,0.219-0.322c-0.039-0.154-0.168-0.193-0.207-0.193c-0.09,0,0.013,0.141-0.116,0.231c-0.128,0.09-0.271,0.128-0.193,0.283C14.064,16.29,14.334,16.405,14.27,16.47zM13.254,19.751c0.013-0.076-0.142-0.192-0.206-0.192c-0.065,0-0.386-0.077-0.386-0.077c-0.058,0.023-0.135,0.045-0.158,0.077c-0.007-0.011-0.022-0.024-0.049-0.039c-0.142-0.075-0.309,0-0.361-0.102c-0.05-0.104-0.127-0.104-0.179-0.039c-0.094,0.117,0.025,0.206,0.063,0.231c0.038,0.024,0.181,0.052,0.309,0.039c0.08-0.008,0.181-0.027,0.21-0.059c0.004,0.014,0.016,0.027,0.035,0.044c0.103,0.092,0.167,0.13,0.321,0.116C13.009,19.74,13.241,19.829,13.254,19.751zM12.881,18.992c0.065,0,0.193,0,0.283,0.026c0.09,0.025,0.386,0.05,0.373-0.064c-0.013-0.115-0.038-0.297,0.089-0.411c0.13-0.117,0.257-0.18,0.193-0.348c-0.063-0.167-0.193-0.271-0.103-0.349c0.09-0.076,0.192-0.102,0.192-0.166c0-0.065-0.217,0.18-0.244-0.246c-0.005-0.091-0.206,0.025-0.219,0.116c-0.012,0.091,0.142,0.167-0.103,0.167c-0.245,0-0.257,0.194-0.309,0.232c-0.052,0.039-0.103,0.051-0.207,0.076c-0.102,0.026-0.127,0.13-0.153,0.194c-0.025,0.063-0.206-0.116-0.257-0.064c-0.051,0.052-0.013,0.296,0.077,0.501C12.585,18.863,12.816,18.992,12.881,18.992zM11.979,18.928c0.065-0.077,0.038-0.192-0.063-0.18c-0.103,0.013-0.193-0.168-0.36-0.283c-0.168-0.114-0.296-0.194-0.451-0.36c-0.154-0.167-0.347-0.271-0.45-0.359c-0.104-0.091-0.257-0.13-0.322-0.116c-0.159,0.032,0.231,0.309,0.271,0.346c0.039,0.041,0.387,0.335,0.387,0.478s0.231,0.476,0.296,0.527c0.064,0.052,0.385,0.244,0.437,0.348c0.052,0.103,0.167,0.13,0.167-0.013C11.89,19.174,11.916,19.006,11.979,18.928zM11.002,17.474c0.064,0.232,0.193,0.464,0.244,0.555c0.052,0.089,0.271,0.217,0.348,0.281c0.077,0.064,0.192-0.024,0.143-0.102c-0.052-0.078-0.155-0.192-0.167-0.283c-0.013-0.091-0.078-0.233-0.181-0.387c-0.102-0.153-0.192-0.192-0.257-0.295c-0.064-0.104-0.296-0.297-0.296-0.297c-0.102,0.013-0.102,0.205-0.051,0.271C10.834,17.28,10.938,17.243,11.002,17.474z",
+ "raph_globeAlt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM27.436,17.39c0.001,0.002,0.004,0.002,0.005,0.004c-0.022,0.187-0.054,0.37-0.085,0.554c-0.015-0.012-0.034-0.025-0.047-0.036c-0.103-0.09-0.254-0.128-0.318-0.115c-0.157,0.032,0.229,0.305,0.267,0.342c0.009,0.009,0.031,0.03,0.062,0.058c-1.029,5.312-5.709,9.338-11.319,9.338c-4.123,0-7.736-2.18-9.776-5.441c0.123-0.016,0.24-0.016,0.28-0.076c0.051-0.077,0.102-0.241,0.178-0.331c0.077-0.089,0.165-0.229,0.127-0.292c-0.039-0.064,0.101-0.344,0.088-0.419c-0.013-0.076-0.127-0.256,0.064-0.407s0.394-0.382,0.407-0.444c0.012-0.063,0.166-0.331,0.152-0.458c-0.012-0.127-0.152-0.28-0.24-0.318c-0.09-0.037-0.28-0.05-0.356-0.151c-0.077-0.103-0.292-0.203-0.368-0.178c-0.076,0.025-0.204,0.05-0.305-0.015c-0.102-0.062-0.267-0.139-0.33-0.189c-0.065-0.05-0.229-0.088-0.305-0.088c-0.077,0-0.065-0.052-0.178,0.101c-0.114,0.153,0,0.204-0.204,0.177c-0.204-0.023,0.025-0.036,0.141-0.189c0.113-0.152-0.013-0.242-0.141-0.203c-0.126,0.038-0.038,0.115-0.241,0.153c-0.203,0.036-0.203-0.09-0.076-0.115s0.355-0.139,0.355-0.19c0-0.051-0.025-0.191-0.127-0.191s-0.077-0.126-0.229-0.291c-0.092-0.101-0.196-0.164-0.299-0.204c-0.09-0.579-0.15-1.167-0.15-1.771c0-2.844,1.039-5.446,2.751-7.458c0.024-0.02,0.048-0.034,0.069-0.036c0.084-0.009,0.31-0.025,0.51-0.059c0.202-0.034,0.418-0.161,0.489-0.153c0.069,0.008,0.241,0.008,0.186-0.042C8.417,8.2,8.339,8.082,8.223,8.082S8.215,7.896,8.246,7.896c0.03,0,0.186,0.025,0.178,0.11C8.417,8.091,8.471,8.2,8.625,8.167c0.156-0.034,0.132-0.162,0.102-0.195C8.695,7.938,8.672,7.853,8.642,7.794c-0.031-0.06-0.023-0.136,0.14-0.153C8.944,7.625,9.168,7.708,9.16,7.573s0-0.28,0.046-0.356C9.253,7.142,9.354,7.09,9.299,7.065C9.246,7.04,9.176,7.099,9.121,6.972c-0.054-0.127,0.047-0.22,0.108-0.271c0.02-0.015,0.067-0.06,0.124-0.112C11.234,5.257,13.524,4.466,16,4.466c3.213,0,6.122,1.323,8.214,3.45c-0.008,0.022-0.01,0.052-0.031,0.056c-0.077,0.013-0.166,0.063-0.179-0.051c-0.013-0.114-0.013-0.331-0.102-0.203c-0.089,0.127-0.127,0.127-0.127,0.191c0,0.063,0.076,0.127,0.051,0.241C23.8,8.264,23.8,8.341,23.84,8.341c0.036,0,0.126-0.115,0.239-0.141c0.116-0.025,0.319-0.088,0.332,0.026c0.013,0.115,0.139,0.152,0.013,0.203c-0.128,0.051-0.267,0.026-0.293-0.051c-0.025-0.077-0.114-0.077-0.203-0.013c-0.088,0.063-0.279,0.292-0.279,0.292s-0.306,0.139-0.343,0.114c-0.04-0.025,0.101-0.165,0.203-0.228c0.102-0.064,0.178-0.204,0.14-0.242c-0.038-0.038-0.088-0.279-0.063-0.343c0.025-0.063,0.139-0.152,0.013-0.216c-0.127-0.063-0.217-0.14-0.318-0.178s-0.216,0.152-0.305,0.204c-0.089,0.051-0.076,0.114-0.191,0.127c-0.114,0.013-0.189,0.165,0,0.254c0.191,0.089,0.255,0.152,0.204,0.204c-0.051,0.051-0.267-0.025-0.267-0.025s-0.165-0.076-0.268-0.076c-0.101,0-0.229-0.063-0.33-0.076c-0.102-0.013-0.306-0.013-0.355,0.038c-0.051,0.051-0.179,0.203-0.28,0.152c-0.101-0.051-0.101-0.102-0.241-0.051c-0.14,0.051-0.279-0.038-0.355,0.038c-0.077,0.076-0.013,0.076-0.255,0c-0.241-0.076-0.189,0.051-0.419,0.089s-0.368-0.038-0.432,0.038c-0.064,0.077-0.153,0.217-0.19,0.127c-0.038-0.088,0.126-0.241,0.062-0.292c-0.062-0.051-0.33-0.025-0.367,0.013c-0.039,0.038-0.014,0.178,0.011,0.229c0.026,0.05,0.064,0.254-0.011,0.216c-0.077-0.038-0.064-0.166-0.141-0.152c-0.076,0.013-0.165,0.051-0.203,0.077c-0.038,0.025-0.191,0.025-0.229,0.076c-0.037,0.051,0.014,0.191-0.051,0.203c-0.063,0.013-0.114,0.064-0.254-0.025c-0.14-0.089-0.14-0.038-0.178-0.012c-0.038,0.025-0.216,0.127-0.229,0.012c-0.013-0.114,0.025-0.152-0.089-0.229c-0.115-0.076-0.026-0.076,0.127-0.025c0.152,0.05,0.343,0.075,0.622-0.013c0.28-0.089,0.395-0.127,0.28-0.178c-0.115-0.05-0.229-0.101-0.406-0.127c-0.179-0.025-0.42-0.025-0.7-0.127c-0.279-0.102-0.343-0.14-0.457-0.165c-0.115-0.026-0.813-0.14-1.132-0.089c-0.317,0.051-1.193,0.28-1.245,0.318s-0.128,0.19-0.292,0.318c-0.165,0.127-0.47,0.419-0.712,0.47c-0.241,0.051-0.521,0.254-0.521,0.305c0,0.051,0.101,0.242,0.076,0.28c-0.025,0.038,0.05,0.229,0.191,0.28c0.139,0.05,0.381,0.038,0.393-0.039c0.014-0.076,0.204-0.241,0.217-0.127c0.013,0.115,0.14,0.292,0.114,0.368c-0.025,0.077,0,0.153,0.09,0.14c0.088-0.012,0.559-0.114,0.559-0.114s0.153-0.064,0.127-0.166c-0.026-0.101,0.166-0.241,0.203-0.279c0.038-0.038,0.178-0.191,0.014-0.241c-0.167-0.051-0.293-0.064-0.115-0.216s0.292,0,0.521-0.229c0.229-0.229-0.051-0.292,0.191-0.305c0.241-0.013,0.496-0.025,0.444,0.051c-0.05,0.076-0.342,0.242-0.508,0.318c-0.166,0.077-0.14,0.216-0.076,0.292c0.063,0.076,0.09,0.254,0.204,0.229c0.113-0.025,0.254-0.114,0.38-0.101c0.128,0.012,0.383-0.013,0.42-0.013c0.039,0,0.216,0.178,0.114,0.203c-0.101,0.025-0.229,0.013-0.445,0.025c-0.215,0.013-0.456,0.013-0.456,0.051c0,0.039,0.292,0.127,0.19,0.191c-0.102,0.063-0.203-0.013-0.331-0.026c-0.127-0.012-0.203,0.166-0.241,0.267c-0.039,0.102,0.063,0.28-0.127,0.216c-0.191-0.063-0.331-0.063-0.381-0.038c-0.051,0.025-0.203,0.076-0.331,0.114c-0.126,0.038-0.076-0.063-0.242-0.063c-0.164,0-0.164,0-0.164,0l-0.103,0.013c0,0-0.101-0.063-0.114-0.165c-0.013-0.102,0.05-0.216-0.013-0.241c-0.064-0.026-0.292,0.012-0.33,0.088c-0.038,0.076-0.077,0.216-0.026,0.28c0.052,0.063,0.204,0.19,0.064,0.152c-0.14-0.038-0.317-0.051-0.419,0.026c-0.101,0.076-0.279,0.241-0.279,0.241s-0.318,0.025-0.318,0.102c0,0.077,0,0.178-0.114,0.191c-0.115,0.013-0.268,0.05-0.42,0.076c-0.153,0.025-0.139,0.088-0.317,0.102s-0.204,0.089-0.038,0.114c0.165,0.025,0.418,0.127,0.431,0.241c0.014,0.114-0.013,0.242-0.076,0.356c-0.043,0.079-0.305,0.026-0.458,0.026c-0.152,0-0.456-0.051-0.584,0c-0.127,0.051-0.102,0.305-0.064,0.419c0.039,0.114-0.012,0.178-0.063,0.216c-0.051,0.038-0.065,0.152,0,0.204c0.063,0.051,0.114,0.165,0.166,0.178c0.051,0.013,0.215-0.038,0.279,0.025c0.064,0.064,0.127,0.216,0.165,0.178c0.039-0.038,0.089-0.203,0.153-0.166c0.064,0.039,0.216-0.012,0.331-0.025s0.177-0.14,0.292-0.204c0.114-0.063,0.05-0.063,0.013-0.14c-0.038-0.076,0.114-0.165,0.204-0.254c0.088-0.089,0.253-0.013,0.292-0.115c0.038-0.102,0.051-0.279,0.151-0.267c0.103,0.013,0.243,0.076,0.331,0.076c0.089,0,0.279-0.14,0.332-0.165c0.05-0.025,0.241-0.013,0.267,0.102c0.025,0.114,0.241,0.254,0.292,0.279c0.051,0.025,0.381,0.127,0.433,0.165c0.05,0.038,0.126,0.153,0.152,0.254c0.025,0.102,0.114,0.102,0.128,0.013c0.012-0.089-0.065-0.254,0.025-0.242c0.088,0.013,0.191-0.026,0.191-0.026s-0.243-0.165-0.331-0.203c-0.088-0.038-0.255-0.114-0.331-0.241c-0.076-0.127-0.267-0.153-0.254-0.279c0.013-0.127,0.191-0.051,0.292,0.051c0.102,0.102,0.356,0.241,0.445,0.33c0.088,0.089,0.229,0.127,0.267,0.242c0.039,0.114,0.152,0.241,0.19,0.292c0.038,0.051,0.165,0.331,0.204,0.394c0.038,0.063,0.165-0.012,0.229-0.063c0.063-0.051,0.179-0.076,0.191-0.178c0.013-0.102-0.153-0.178-0.203-0.216c-0.051-0.038,0.127-0.076,0.191-0.127c0.063-0.05,0.177-0.14,0.228-0.063c0.051,0.077,0.026,0.381,0.051,0.432c0.025,0.051,0.279,0.127,0.331,0.191c0.05,0.063,0.267,0.089,0.304,0.051c0.039-0.038,0.242,0.026,0.294,0.038c0.049,0.013,0.202-0.025,0.304-0.05c0.103-0.025,0.204-0.102,0.191,0.063c-0.013,0.165-0.051,0.419-0.179,0.546c-0.127,0.127-0.076,0.191-0.202,0.191c-0.06,0-0.113,0-0.156,0.021c-0.041-0.065-0.098-0.117-0.175-0.097c-0.152,0.038-0.344,0.038-0.47,0.19c-0.128,0.153-0.178,0.165-0.204,0.114c-0.025-0.051,0.369-0.267,0.317-0.331c-0.05-0.063-0.355-0.038-0.521-0.038c-0.166,0-0.305-0.102-0.433-0.127c-0.126-0.025-0.292,0.127-0.418,0.254c-0.128,0.127-0.216,0.038-0.331,0.038c-0.115,0-0.331-0.165-0.331-0.165s-0.216-0.089-0.305-0.089c-0.088,0-0.267-0.165-0.318-0.165c-0.05,0-0.19-0.115-0.088-0.166c0.101-0.05,0.202,0.051,0.101-0.229c-0.101-0.279-0.33-0.216-0.419-0.178c-0.088,0.039-0.724,0.025-0.775,0.025c-0.051,0-0.419,0.127-0.533,0.178c-0.116,0.051-0.318,0.115-0.369,0.14c-0.051,0.025-0.318-0.051-0.433,0.013c-0.151,0.084-0.291,0.216-0.33,0.216c-0.038,0-0.153,0.089-0.229,0.28c-0.077,0.19,0.013,0.355-0.128,0.419c-0.139,0.063-0.394,0.204-0.495,0.305c-0.102,0.101-0.229,0.458-0.355,0.623c-0.127,0.165,0,0.317,0.025,0.419c0.025,0.101,0.114,0.292-0.025,0.471c-0.14,0.178-0.127,0.266-0.191,0.279c-0.063,0.013,0.063,0.063,0.088,0.19c0.025,0.128-0.114,0.255,0.128,0.369c0.241,0.113,0.355,0.217,0.418,0.367c0.064,0.153,0.382,0.407,0.382,0.407s0.229,0.205,0.344,0.293c0.114,0.089,0.152,0.038,0.177-0.05c0.025-0.09,0.178-0.104,0.355-0.104c0.178,0,0.305,0.04,0.483,0.014c0.178-0.025,0.356-0.141,0.42-0.166c0.063-0.025,0.279-0.164,0.443-0.063c0.166,0.103,0.141,0.241,0.23,0.332c0.088,0.088,0.24,0.037,0.355-0.051c0.114-0.09,0.064-0.052,0.203,0.025c0.14,0.075,0.204,0.151,0.077,0.267c-0.128,0.113-0.051,0.293-0.128,0.47c-0.076,0.178-0.063,0.203,0.077,0.278c0.14,0.076,0.394,0.548,0.47,0.638c0.077,0.088-0.025,0.342,0.064,0.495c0.089,0.151,0.178,0.254,0.077,0.331c-0.103,0.075-0.28,0.216-0.292,0.47s0.051,0.431,0.102,0.521s0.177,0.331,0.241,0.419c0.064,0.089,0.14,0.305,0.152,0.445c0.013,0.14-0.024,0.306,0.039,0.381c0.064,0.076,0.102,0.191,0.216,0.292c0.115,0.103,0.152,0.318,0.152,0.318s0.039,0.089,0.051,0.229c0.012,0.14,0.025,0.228,0.152,0.292c0.126,0.063,0.215,0.076,0.28,0.013c0.063-0.063,0.381-0.077,0.546-0.063c0.165,0.013,0.355-0.075,0.521-0.19s0.407-0.419,0.496-0.508c0.089-0.09,0.292-0.255,0.268-0.356c-0.025-0.101-0.077-0.203,0.024-0.254c0.102-0.052,0.344-0.152,0.356-0.229c0.013-0.077-0.09-0.395-0.115-0.457c-0.024-0.064,0.064-0.18,0.165-0.306c0.103-0.128,0.421-0.216,0.471-0.267c0.051-0.053,0.191-0.267,0.217-0.433c0.024-0.167-0.051-0.369,0-0.457c0.05-0.09,0.013-0.165-0.103-0.268c-0.114-0.102-0.089-0.407-0.127-0.457c-0.037-0.051-0.013-0.319,0.063-0.345c0.076-0.023,0.242-0.279,0.344-0.393c0.102-0.114,0.394-0.47,0.534-0.496c0.139-0.025,0.355-0.229,0.368-0.343c0.013-0.115,0.38-0.547,0.394-0.635c0.013-0.09,0.166-0.42,0.102-0.497c-0.062-0.076-0.559,0.115-0.622,0.141c-0.064,0.025-0.241,0.127-0.446,0.113c-0.202-0.013-0.114-0.177-0.127-0.254c-0.012-0.076-0.228-0.368-0.279-0.381c-0.051-0.012-0.203-0.166-0.267-0.317c-0.063-0.153-0.152-0.343-0.254-0.458c-0.102-0.114-0.165-0.38-0.268-0.559c-0.101-0.178-0.189-0.407-0.279-0.572c-0.021-0.041-0.045-0.079-0.067-0.117c0.118-0.029,0.289-0.082,0.31-0.009c0.024,0.088,0.165,0.279,0.19,0.419s0.165,0.089,0.178,0.216c0.014,0.128,0.14,0.433,0.19,0.47c0.052,0.038,0.28,0.242,0.318,0.318c0.038,0.076,0.089,0.178,0.127,0.369c0.038,0.19,0.076,0.444,0.179,0.482c0.102,0.038,0.444-0.064,0.508-0.102s0.482-0.242,0.635-0.255c0.153-0.012,0.179-0.115,0.368-0.152c0.191-0.038,0.331-0.177,0.458-0.28c0.127-0.101,0.28-0.355,0.33-0.444c0.052-0.088,0.179-0.152,0.115-0.253c-0.063-0.103-0.331-0.254-0.433-0.268c-0.102-0.012-0.089-0.178-0.152-0.178s-0.051,0.088-0.178,0.153c-0.127,0.063-0.255,0.19-0.344,0.165s0.026-0.089-0.113-0.203s-0.192-0.14-0.192-0.228c0-0.089-0.278-0.255-0.304-0.382c-0.026-0.127,0.19-0.305,0.254-0.19c0.063,0.114,0.115,0.292,0.279,0.368c0.165,0.076,0.318,0.204,0.395,0.229c0.076,0.025,0.267-0.14,0.33-0.114c0.063,0.024,0.191,0.253,0.306,0.292c0.113,0.038,0.495,0.051,0.559,0.051s0.33,0.013,0.381-0.063c0.051-0.076,0.089-0.076,0.153-0.076c0.062,0,0.177,0.229,0.267,0.254c0.089,0.025,0.254,0.013,0.241,0.179c-0.012,0.164,0.076,0.305,0.165,0.317c0.09,0.012,0.293-0.191,0.293-0.191s0,0.318-0.012,0.433c-0.014,0.113,0.139,0.534,0.139,0.534s0.19,0.393,0.241,0.482s0.267,0.355,0.267,0.47c0,0.115,0.025,0.293,0.103,0.293c0.076,0,0.152-0.203,0.24-0.331c0.091-0.126,0.116-0.305,0.153-0.432c0.038-0.127,0.038-0.356,0.038-0.444c0-0.09,0.075-0.166,0.255-0.242c0.178-0.076,0.304-0.292,0.456-0.407c0.153-0.115,0.141-0.305,0.446-0.305c0.305,0,0.278,0,0.355-0.077c0.076-0.076,0.151-0.127,0.19,0.013c0.038,0.14,0.254,0.343,0.292,0.394c0.038,0.052,0.114,0.191,0.103,0.344c-0.013,0.152,0.012,0.33,0.075,0.33s0.191-0.216,0.191-0.216s0.279-0.189,0.267,0.013c-0.014,0.203,0.025,0.419,0.025,0.545c0,0.053,0.042,0.135,0.088,0.21c-0.005,0.059-0.004,0.119-0.009,0.178C27.388,17.153,27.387,17.327,27.436,17.39zM20.382,12.064c0.076,0.05,0.102,0.127,0.152,0.203c0.052,0.076,0.14,0.05,0.203,0.114c0.063,0.064-0.178,0.14-0.075,0.216c0.101,0.077,0.151,0.381,0.165,0.458c0.013,0.076-0.279,0.114-0.369,0.102c-0.089-0.013-0.354-0.102-0.445-0.127c-0.089-0.026-0.139-0.343-0.025-0.331c0.116,0.013,0.141-0.025,0.267-0.139c0.128-0.115-0.189-0.166-0.278-0.191c-0.089-0.025-0.268-0.305-0.331-0.394c-0.062-0.089-0.014-0.228,0.141-0.331c0.076-0.051,0.279,0.063,0.381,0c0.101-0.063,0.203-0.14,0.241-0.165c0.039-0.025,0.293,0.038,0.33,0.114c0.039,0.076,0.191,0.191,0.141,0.229c-0.052,0.038-0.281,0.076-0.356,0c-0.075-0.077-0.255,0.012-0.268,0.152C20.242,12.115,20.307,12.013,20.382,12.064zM16.875,12.28c-0.077-0.025,0.025-0.178,0.102-0.229c0.075-0.051,0.164-0.178,0.241-0.305c0.076-0.127,0.178-0.14,0.241-0.127c0.063,0.013,0.203,0.241,0.241,0.318c0.038,0.076,0.165-0.026,0.217-0.051c0.05-0.025,0.127-0.102,0.14-0.165s0.127-0.102,0.254-0.102s0.013,0.102-0.076,0.127c-0.09,0.025-0.038,0.077,0.113,0.127c0.153,0.051,0.293,0.191,0.459,0.279c0.165,0.089,0.19,0.267,0.088,0.292c-0.101,0.025-0.406,0.051-0.521,0.038c-0.114-0.013-0.254-0.127-0.419-0.153c-0.165-0.025-0.369-0.013-0.433,0.077s-0.292,0.05-0.395,0.05c-0.102,0-0.228,0.127-0.253,0.077C16.875,12.534,16.951,12.306,16.875,12.28zM17.307,9.458c0.063-0.178,0.419,0.038,0.355,0.127C17.599,9.675,17.264,9.579,17.307,9.458zM17.802,18.584c0.063,0.102-0.14,0.431-0.254,0.407c-0.113-0.027-0.076-0.318-0.038-0.382C17.548,18.545,17.769,18.529,17.802,18.584zM13.189,12.674c0.025-0.051-0.039-0.153-0.127-0.013C13.032,12.71,13.164,12.725,13.189,12.674zM20.813,8.035c0.141,0.076,0.339,0.107,0.433,0.013c0.076-0.076,0.013-0.204-0.05-0.216c-0.064-0.013-0.104-0.115,0.062-0.203c0.165-0.089,0.343-0.204,0.534-0.229c0.19-0.025,0.622-0.038,0.774,0c0.152,0.039,0.382-0.166,0.445-0.254s-0.203-0.152-0.279-0.051c-0.077,0.102-0.444,0.076-0.521,0.051c-0.076-0.025-0.686,0.102-0.812,0.102c-0.128,0-0.179,0.152-0.356,0.229c-0.179,0.076-0.42,0.191-0.509,0.229c-0.088,0.038-0.177,0.19-0.101,0.216C20.509,7.947,20.674,7.959,20.813,8.035zM14.142,12.674c0.064-0.089-0.051-0.217-0.114-0.217c-0.12,0-0.178,0.191-0.103,0.254C14.002,12.776,14.078,12.763,14.142,12.674zM14.714,13.017c0.064,0.025,0.114,0.102,0.165,0.114c0.052,0.013,0.217,0,0.167-0.127s-0.167-0.127-0.204-0.127c-0.038,0-0.203-0.038-0.267,0C14.528,12.905,14.65,12.992,14.714,13.017zM11.308,10.958c0.101,0.013,0.217-0.063,0.305-0.101c0.088-0.038,0.216-0.114,0.216-0.229c0-0.114-0.025-0.216-0.077-0.267c-0.051-0.051-0.14-0.064-0.216-0.051c-0.115,0.02-0.127,0.14-0.203,0.14c-0.076,0-0.165,0.025-0.14,0.114s0.077,0.152,0,0.19C11.117,10.793,11.205,10.946,11.308,10.958zM11.931,10.412c0.127,0.051,0.394,0.102,0.292,0.153c-0.102,0.051-0.28,0.19-0.305,0.267s0.216,0.153,0.216,0.153s-0.077,0.089-0.013,0.114c0.063,0.025,0.102-0.089,0.203-0.089c0.101,0,0.304,0.063,0.406,0.063c0.103,0,0.267-0.14,0.254-0.229c-0.013-0.089-0.14-0.229-0.254-0.28c-0.113-0.051-0.241-0.28-0.317-0.331c-0.076-0.051,0.076-0.178-0.013-0.267c-0.09-0.089-0.153-0.076-0.255-0.14c-0.102-0.063-0.191,0.013-0.254,0.089c-0.063,0.076-0.14-0.013-0.217,0.012c-0.102,0.035-0.063,0.166-0.012,0.229C11.714,10.221,11.804,10.361,11.931,10.412zM24.729,17.198c-0.083,0.037-0.153,0.47,0,0.521c0.152,0.052,0.241-0.202,0.191-0.267C24.868,17.39,24.843,17.147,24.729,17.198zM20.114,20.464c-0.159-0.045-0.177,0.166-0.304,0.306c-0.128,0.141-0.267,0.254-0.317,0.241c-0.052-0.013-0.331,0.089-0.242,0.279c0.089,0.191,0.076,0.382-0.013,0.472c-0.089,0.088,0.076,0.342,0.052,0.482c-0.026,0.139,0.037,0.229,0.215,0.229s0.242-0.064,0.318-0.229c0.076-0.166,0.088-0.331,0.164-0.47c0.077-0.141,0.141-0.434,0.179-0.51c0.038-0.075,0.114-0.316,0.102-0.457C20.254,20.669,20.204,20.489,20.114,20.464zM10.391,8.802c-0.069-0.06-0.229-0.102-0.306-0.11c-0.076-0.008-0.152,0.06-0.321,0.06c-0.168,0-0.279,0.067-0.347,0C9.349,8.684,9.068,8.65,9.042,8.692C9.008,8.749,8.941,8.751,9.008,8.87c0.069,0.118,0.12,0.186,0.179,0.178s0.262-0.017,0.288,0.051C9.5,9.167,9.569,9.226,9.712,9.184c0.145-0.042,0.263-0.068,0.296-0.119c0.033-0.051,0.263-0.059,0.263-0.059S10.458,8.861,10.391,8.802z",
+ "raph_globe": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM19.158,23.269c-0.079,0.064-0.183,0.13-0.105,0.207c0.078,0.078-0.09,0.131-0.09,0.17s0.104,0.246,0.052,0.336c-0.052,0.092-0.091,0.223-0.13,0.301c-0.039,0.077-0.131,0.155-0.104,0.272c0.025,0.116-0.104,0.077-0.104,0.194c0,0.116,0.116,0.065,0.09,0.208c-0.025,0.144-0.09,0.183-0.09,0.285c0,0.104,0.064,0.247,0.064,0.286s-0.064,0.17-0.155,0.272c-0.092,0.104-0.155,0.17-0.144,0.233c0.014,0.065,0.104,0.144,0.091,0.184c-0.013,0.037-0.129,0.168-0.116,0.259c0.014,0.09,0.129,0.053,0.155,0.116c0.026,0.065-0.155,0.118-0.078,0.183c0.078,0.064,0.183,0.051,0.156,0.208c-0.019,0.112,0.064,0.163,0.126,0.198c-0.891,0.221-1.818,0.352-2.777,0.352C9.639,27.533,4.466,22.36,4.466,16c0-2.073,0.557-4.015,1.518-5.697c0.079-0.042,0.137-0.069,0.171-0.062c0.065,0.013,0.079,0.104,0.183,0.13c0.104,0.026,0.195-0.078,0.26-0.117c0.064-0.039,0.116-0.195,0.051-0.182c-0.065,0.013-0.234,0-0.234,0s0.183-0.104,0.183-0.169s0.025-0.169,0.129-0.208C6.83,9.655,6.83,9.681,6.765,9.837C6.7,9.993,6.896,9.928,6.973,9.863s0.13-0.013,0.272-0.104c0.143-0.091,0.143-0.143,0.221-0.143c0.078,0,0.221,0.143,0.299,0.091c0.077-0.052,0.299,0.065,0.429,0.065c0.129,0,0.545,0.169,0.624,0.169c0.078,0,0.312,0.09,0.325,0.259c0.013,0.169,0.09,0.156,0.168,0.156s0.26,0.065,0.26,0.13c0,0.065-0.052,0.325,0.078,0.39c0.129,0.064,0.247,0.169,0.299,0.143c0.052-0.026,0-0.233-0.064-0.26c-0.065-0.026-0.027-0.117-0.052-0.169c-0.026-0.051,0.078-0.051,0.117,0.039c0.039,0.091,0.143,0.26,0.208,0.26c0.064,0,0.208,0.156,0.168,0.247c-0.039,0.091,0.039,0.221,0.156,0.221c0.116,0,0.26,0.182,0.312,0.195c0.052,0.013,0.117,0.078,0.117,0.117c0,0.04,0.065,0.26,0.065,0.351c0,0.09-0.04,0.454-0.053,0.597s0.104,0.39,0.234,0.52c0.129,0.13,0.246,0.377,0.324,0.429c0.079,0.052,0.13,0.195,0.247,0.182c0.117-0.013,0.195,0.078,0.299,0.26c0.104,0.182,0.208,0.48,0.286,0.506c0.078,0.026,0.208,0.117,0.142,0.182c-0.064,0.064-0.168,0.208-0.051,0.208c0.117,0,0.156-0.065,0.247,0.053c0.09,0.116,0.208,0.181,0.194,0.26c-0.013,0.077,0.104,0.103,0.156,0.116c0.052,0.013,0.169,0.247,0.286,0.143c0.117-0.104-0.155-0.259-0.234-0.326c-0.078-0.064,0-0.207-0.182-0.35c-0.182-0.143-0.156-0.247-0.286-0.351c-0.13-0.104-0.233-0.195-0.104-0.286c0.13-0.091,0.143,0.091,0.195,0.208c0.052,0.116,0.324,0.351,0.441,0.454c0.117,0.104,0.326,0.468,0.39,0.468s0.247,0.208,0.247,0.208s0.103,0.168,0.064,0.22c-0.039,0.052,0.053,0.247,0.144,0.299c0.09,0.052,0.455,0.22,0.507,0.247c0.052,0.027,0.155,0.221,0.299,0.221c0.142,0,0.247,0.014,0.286,0.053c0.039,0.038,0.155,0.194,0.234,0.104c0.078-0.092,0.09-0.131,0.208-0.131c0.117,0,0.168,0.091,0.233,0.156c0.065,0.065,0.247,0.235,0.338,0.222c0.091-0.013,0.208,0.104,0.273,0.064s0.169,0.025,0.22,0.052c0.054,0.026,0.234,0.118,0.222,0.272c-0.013,0.157,0.103,0.195,0.182,0.234c0.078,0.039,0.182,0.13,0.248,0.195c0.064,0.063,0.206,0.077,0.246,0.116c0.039,0.039,0.065,0.117,0.182,0.052c0.116-0.064,0.092-0.181,0.092-0.181s0.129-0.026,0.194,0.026c0.064,0.05,0.104,0.22,0.144,0.246c0.038,0.026,0.115,0.221,0.063,0.362c-0.051,0.145-0.038,0.286-0.091,0.286c-0.052,0-0.116,0.17-0.195,0.209c-0.076,0.039-0.285,0.221-0.272,0.286c0.013,0.063,0.131,0.258,0.104,0.35c-0.025,0.091-0.194,0.195-0.154,0.338c0.038,0.144,0.312,0.183,0.323,0.312c0.014,0.131,0.209,0.417,0.235,0.546c0.025,0.13,0.246,0.272,0.246,0.453c0,0.184,0.312,0.3,0.377,0.312c0.063,0.013,0.182,0.131,0.272,0.17s0.169,0.116,0.233,0.221s0.053,0.261,0.053,0.299c0,0.039-0.039,0.44-0.078,0.674C19.145,23.021,19.235,23.203,19.158,23.269zM10.766,11.188c0.039,0.013,0.117,0.091,0.156,0.091c0.04,0,0.234,0.156,0.286,0.208c0.053,0.052,0.053,0.195-0.013,0.208s-0.104-0.143-0.117-0.208c-0.013-0.065-0.143-0.065-0.208-0.104C10.805,11.344,10.66,11.152,10.766,11.188zM27.51,16.41c-0.144,0.182-0.13,0.272-0.195,0.286c-0.064,0.013,0.065,0.065,0.09,0.194c0.022,0.112-0.065,0.224,0.063,0.327c-0.486,4.619-3.71,8.434-8.016,9.787c-0.007-0.011-0.019-0.025-0.021-0.034c-0.027-0.078-0.027-0.233,0.064-0.285c0.091-0.053,0.312-0.233,0.363-0.272c0.052-0.04,0.13-0.221,0.091-0.247c-0.038-0.026-0.232,0-0.26-0.039c-0.026-0.039-0.026-0.092,0.104-0.182c0.13-0.091,0.195-0.222,0.247-0.26c0.052-0.039,0.155-0.117,0.195-0.209c0.038-0.09-0.041-0.039-0.118-0.039s-0.117-0.142-0.117-0.207s0.195,0.026,0.339,0.052c0.143,0.024,0.077-0.065,0.064-0.142c-0.013-0.078,0.026-0.209,0.105-0.17c0.076,0.039,0.479-0.013,0.531-0.026c0.052-0.013,0.194-0.246,0.246-0.312c0.053-0.065,0.064-0.129,0-0.168c-0.065-0.04-0.143-0.184-0.168-0.221c-0.026-0.041-0.039-0.274-0.013-0.34c0.025-0.063,0,0.377,0.181,0.43c0.183,0.052,0.286,0.078,0.455-0.078c0.169-0.155,0.298-0.26,0.312-0.363c0.013-0.104,0.052-0.209,0.117-0.246c0.065-0.039,0.104,0.103,0.182-0.065c0.078-0.17,0.156-0.157,0.234-0.299c0.077-0.144-0.13-0.325,0.024-0.43c0.157-0.103,0.43-0.233,0.43-0.233s0.078-0.039,0.234-0.078c0.155-0.038,0.324-0.014,0.376-0.09c0.052-0.079,0.104-0.247,0.182-0.338c0.079-0.092,0.169-0.234,0.13-0.299c-0.039-0.065,0.104-0.352,0.091-0.429c-0.013-0.078-0.13-0.261,0.065-0.416s0.402-0.391,0.416-0.454c0.012-0.065,0.169-0.338,0.154-0.469c-0.012-0.129-0.154-0.285-0.245-0.325c-0.092-0.037-0.286-0.05-0.364-0.154s-0.299-0.208-0.377-0.182c-0.077,0.026-0.208,0.051-0.312-0.015c-0.104-0.063-0.272-0.143-0.337-0.194c-0.066-0.051-0.234-0.09-0.312-0.09s-0.065-0.053-0.182,0.103c-0.117,0.157,0,0.209-0.208,0.182c-0.209-0.024,0.025-0.038,0.144-0.194c0.115-0.155-0.014-0.247-0.144-0.207c-0.13,0.039-0.039,0.117-0.247,0.156c-0.207,0.038-0.207-0.092-0.077-0.117c0.13-0.026,0.363-0.143,0.363-0.194c0-0.053-0.026-0.196-0.13-0.196s-0.078-0.129-0.233-0.297c-0.156-0.17-0.351-0.274-0.508-0.249c-0.154,0.026-0.272,0.065-0.35-0.076c-0.078-0.144-0.169-0.17-0.222-0.247c-0.051-0.078-0.182,0-0.221-0.039s-0.039-0.039-0.039-0.039s-0.169,0.039-0.077-0.078c0.09-0.117,0.129-0.338,0.09-0.325c-0.038,0.013-0.104,0.196-0.168,0.183c-0.064-0.013-0.014-0.04-0.144-0.117c-0.13-0.078-0.337-0.013-0.337,0.052c0,0.065-0.065,0.117-0.065,0.117s-0.039-0.038-0.078-0.117c-0.039-0.078-0.221-0.091-0.312-0.013c-0.09,0.078-0.142-0.196-0.207-0.196s-0.194,0.065-0.26,0.184c-0.064,0.116-0.038,0.285-0.092,0.272c-0.05-0.013-0.063-0.233-0.05-0.312c0.012-0.079,0.155-0.208,0.05-0.234c-0.103-0.026-0.259,0.13-0.323,0.143c-0.065,0.013-0.195,0.104-0.273,0.209c-0.077,0.103-0.116,0.168-0.195,0.207c-0.077,0.039-0.193,0-0.167-0.039c0.025-0.039-0.222-0.181-0.261-0.13c-0.04,0.052-0.155,0.091-0.272,0.144c-0.117,0.052-0.222-0.065-0.247-0.117s-0.079-0.064-0.091-0.234c-0.013-0.168,0.027-0.351,0.065-0.454c0.038-0.104-0.195-0.312-0.286-0.3c-0.091,0.015-0.182,0.105-0.272,0.091c-0.092-0.012-0.052-0.038-0.195-0.038c-0.143,0-0.026-0.025,0-0.143c0.025-0.116-0.052-0.273,0.092-0.377c0.142-0.104,0.091-0.351,0-0.363c-0.092-0.014-0.261,0.039-0.377,0.026c-0.116-0.014-0.208,0.091-0.169,0.207c0.039,0.117-0.065,0.195-0.104,0.183c-0.039-0.013-0.09-0.078-0.234,0.026c-0.142,0.103-0.194,0.064-0.337-0.052c-0.143-0.118-0.299-0.234-0.325-0.416c-0.026-0.182-0.04-0.364,0.013-0.468c0.051-0.104,0.051-0.285-0.026-0.312c-0.078-0.025,0.09-0.155,0.181-0.181c0.092-0.026,0.234-0.143,0.26-0.195c0.026-0.052,0.156-0.04,0.298-0.04c0.143,0,0.169,0,0.312,0.078c0.143,0.078,0.169-0.039,0.169-0.078c0-0.039,0.052-0.117,0.208-0.104c0.156,0.013,0.376-0.052,0.416-0.013s0.116,0.195,0.194,0.143c0.079-0.051,0.104-0.143,0.131,0.014c0.025,0.155,0.09,0.39,0.208,0.429c0.116,0.039,0.052,0.194,0.168,0.207c0.115,0.013,0.17-0.246,0.131-0.337c-0.04-0.09-0.118-0.363-0.183-0.428c-0.064-0.065-0.064-0.234,0.064-0.286c0.13-0.052,0.442-0.312,0.532-0.389c0.092-0.079,0.338-0.144,0.261-0.248c-0.078-0.104-0.104-0.168-0.104-0.247s0.078-0.052,0.117,0s0.194-0.078,0.155-0.143c-0.038-0.064-0.026-0.155,0.065-0.143c0.091,0.013,0.116-0.065,0.078-0.117c-0.039-0.052,0.091-0.117,0.182-0.091c0.092,0.026,0.325-0.013,0.364-0.065c0.038-0.052-0.078-0.104-0.078-0.208c0-0.104,0.155-0.195,0.247-0.208c0.091-0.013,0.207,0,0.221-0.039c0.012-0.039,0.143-0.143,0.155-0.052c0.014,0.091,0,0.247,0.104,0.247c0.104,0,0.232-0.117,0.272-0.129c0.038-0.013,0.286-0.065,0.338-0.078c0.052-0.013,0.363-0.039,0.325-0.13c-0.039-0.09-0.078-0.181-0.118-0.22c-0.039-0.039-0.077,0.013-0.13,0.078c-0.051,0.065-0.143,0.065-0.168,0.013c-0.026-0.051,0.012-0.207-0.078-0.156c-0.092,0.052-0.104,0.104-0.157,0.078c-0.052-0.026-0.103-0.117-0.103-0.117s0.129-0.064,0.038-0.182c-0.09-0.117-0.221-0.091-0.35-0.025c-0.13,0.064-0.118,0.051-0.273,0.09s-0.234,0.078-0.234,0.078s0.209-0.129,0.299-0.208c0.091-0.078,0.209-0.117,0.286-0.195c0.078-0.078,0.285,0.039,0.285,0.039s0.105-0.104,0.105-0.039s-0.027,0.234,0.051,0.234c0.079,0,0.299-0.104,0.21-0.131c-0.093-0.026,0.129,0,0.219-0.065c0.092-0.065,0.194-0.065,0.247-0.09c0.052-0.026,0.092-0.143,0.182-0.143c0.092,0,0.13,0.117,0,0.195s-0.143,0.273-0.208,0.325c-0.064,0.052-0.026,0.117,0.078,0.104c0.104-0.013,0.194,0.013,0.286-0.013s0.143,0.026,0.168,0.065c0.026,0.039,0.104-0.039,0.104-0.039s0.169-0.039,0.221,0.026c0.053,0.064,0.092-0.039,0.053-0.104c-0.039-0.064-0.092-0.129-0.13-0.208c-0.039-0.078-0.091-0.104-0.194-0.078c-0.104,0.026-0.13-0.026-0.195-0.064c-0.065-0.04-0.118,0.052-0.065-0.04c0.053-0.09,0.078-0.117,0.117-0.195c0.039-0.078,0.209-0.221,0.039-0.259c-0.169-0.04-0.222-0.065-0.247-0.143c-0.026-0.078-0.221-0.221-0.272-0.221c-0.053,0-0.233,0-0.247-0.065c-0.013-0.065-0.143-0.208-0.208-0.273c-0.064-0.065-0.312-0.351-0.351-0.377c-0.039-0.026-0.091-0.013-0.208,0.143c-0.116,0.157-0.22,0.183-0.312,0.144c-0.091-0.039-0.104-0.026-0.193-0.13c-0.093-0.104,0.09-0.117,0.051-0.182c-0.04-0.064-0.247-0.091-0.377-0.104c-0.13-0.013-0.221-0.156-0.416-0.169c-0.194-0.013-0.428,0.026-0.493,0.026c-0.064,0-0.064,0.091-0.09,0.234c-0.027,0.143,0.09,0.182-0.027,0.208c-0.116,0.026-0.169,0.039-0.052,0.091c0.117,0.052,0.273,0.26,0.273,0.26s0,0.117-0.092,0.182c-0.09,0.065-0.182,0.13-0.233,0.053c-0.053-0.079-0.195-0.065-0.155,0.013c0.038,0.078,0.116,0.117,0.116,0.195c0,0.077,0.117,0.272,0.039,0.337c-0.078,0.065-0.168,0.014-0.233,0.026s-0.131-0.104-0.078-0.13c0.051-0.026-0.014-0.221-0.014-0.221s-0.155,0.221-0.143,0.104c0.014-0.117-0.064-0.13-0.064-0.221c0-0.091-0.079-0.13-0.194-0.104c-0.118,0.026-0.26-0.04-0.482-0.079c-0.22-0.039-0.311-0.064-0.493-0.156c-0.182-0.091-0.247-0.026-0.338-0.013c-0.091,0.013-0.052-0.182-0.169-0.207c-0.116-0.027-0.181,0.025-0.207-0.144c-0.026-0.168,0.039-0.208,0.324-0.39c0.286-0.182,0.247-0.26,0.468-0.286c0.22-0.026,0.325,0.026,0.325-0.039s0.052-0.325,0.052-0.195S16.95,9.109,16.832,9.2c-0.116,0.091-0.052,0.104,0.04,0.104c0.091,0,0.259-0.091,0.259-0.091s0.208-0.091,0.26-0.013c0.053,0.078,0.053,0.156,0.144,0.156s0.285-0.104,0.116-0.195c-0.168-0.091-0.272-0.078-0.376-0.182s-0.078-0.065-0.195-0.039c-0.116,0.026-0.116-0.039-0.156-0.039s-0.104,0.026-0.13-0.026c-0.025-0.052,0.014-0.065,0.145-0.065c0.129,0,0.285,0.039,0.285,0.039s0.155-0.052,0.194-0.065c0.039-0.013,0.247-0.039,0.208-0.155c-0.04-0.117-0.169-0.117-0.208-0.156s0.078-0.09,0.143-0.117c0.065-0.026,0.247,0,0.247,0s0.117,0.013,0.117-0.039S17.897,8.2,17.976,8.239s0,0.156,0.117,0.13c0.116-0.026,0.143,0,0.207,0.039c0.065,0.039-0.013,0.195-0.077,0.221c-0.065,0.025-0.169,0.077-0.026,0.09c0.144,0.014,0.246,0.014,0.246,0.014s0.092-0.091,0.131-0.169c0.038-0.078,0.104-0.026,0.155,0c0.052,0.025,0.247,0.065,0.065,0.117c-0.183,0.052-0.221,0.117-0.26,0.182c-0.038,0.065-0.053,0.104-0.221,0.065c-0.17-0.039-0.26-0.026-0.299,0.039c-0.039,0.064-0.013,0.273,0.053,0.247c0.063-0.026,0.129-0.026,0.207-0.052c0.078-0.026,0.39,0.026,0.467,0.013c0.078-0.013,0.209,0.13,0.248,0.104c0.039-0.026,0.117,0.052,0.194,0.104c0.078,0.052,0.052-0.117,0.194-0.013c0.144,0.104,0.065,0.104,0.144,0.104c0.076,0,0.246,0.013,0.246,0.013s0.014-0.129,0.144-0.104c0.13,0.026,0.245,0.169,0.232,0.064c-0.012-0.103,0.013-0.181-0.09-0.259c-0.104-0.078-0.272-0.13-0.299-0.169c-0.026-0.039-0.052-0.091-0.013-0.117c0.039-0.025,0.221,0.013,0.324,0.079c0.104,0.065,0.195,0.13,0.273,0.078c0.077-0.052,0.17-0.078,0.208-0.117c0.038-0.04,0.13-0.156,0.13-0.156s-0.391-0.051-0.441-0.117c-0.053-0.065-0.235-0.156-0.287-0.156s-0.194,0.091-0.246-0.039s-0.052-0.286-0.105-0.299c-0.05-0.013-0.597-0.091-0.674-0.13c-0.078-0.039-0.39-0.13-0.507-0.195s-0.286-0.156-0.389-0.156c-0.104,0-0.533,0.052-0.611,0.039c-0.078-0.013-0.312,0.026-0.403,0.039c-0.091,0.013,0.117,0.182-0.077,0.221c-0.195,0.039-0.169,0.065-0.13-0.13c0.038-0.195-0.131-0.247-0.299-0.169c-0.169,0.078-0.442,0.13-0.377,0.221c0.065,0.091-0.012,0.157,0.117,0.247c0.13,0.091,0.183,0.117,0.35,0.104c0.17-0.013,0.339,0.025,0.339,0.025s0,0.157-0.064,0.182c-0.065,0.026-0.169,0.026-0.196,0.104c-0.025,0.078-0.155,0.117-0.155,0.078s0.065-0.169-0.026-0.234c-0.09-0.065-0.117-0.078-0.221-0.013c-0.104,0.065-0.116,0.091-0.169-0.013C16.053,8.291,15.897,8.2,15.897,8.2s-0.104-0.129-0.182-0.194c-0.077-0.065-0.22-0.052-0.234,0.013c-0.013,0.064,0.026,0.129,0.078,0.247c0.052,0.117,0.104,0.337,0.013,0.351c-0.091,0.013-0.104,0.026-0.195,0.052c-0.091,0.026-0.13-0.039-0.13-0.143s-0.04-0.195-0.013-0.234c0.026-0.039-0.104,0.027-0.234,0c-0.13-0.025-0.233,0.052-0.104,0.092c0.13,0.039,0.157,0.194,0.039,0.233c-0.117,0.039-0.559,0-0.702,0s-0.35,0.039-0.39-0.039c-0.039-0.078,0.118-0.129,0.208-0.129c0.091,0,0.363,0.012,0.467-0.13c0.104-0.143-0.13-0.169-0.233-0.169c-0.104,0-0.183-0.039-0.299-0.155c-0.118-0.117,0.078-0.195,0.052-0.247c-0.026-0.052-0.156-0.014-0.272-0.014c-0.117,0-0.299-0.09-0.299,0.014c0,0.104,0.143,0.402,0.052,0.337c-0.091-0.064-0.078-0.156-0.143-0.234c-0.065-0.078-0.168-0.065-0.299-0.052c-0.129,0.013-0.35,0.052-0.415,0.039c-0.064-0.013-0.013-0.013-0.156-0.078c-0.142-0.065-0.208-0.052-0.312-0.117C12.091,7.576,12.182,7.551,12,7.538c-0.181-0.013-0.168,0.09-0.35,0.065c-0.182-0.026-0.234,0.013-0.416,0c-0.182-0.013-0.272-0.026-0.299,0.065c-0.025,0.091-0.078,0.247-0.156,0.247c-0.077,0-0.169,0.091,0.078,0.104c0.247,0.013,0.105,0.129,0.325,0.117c0.221-0.013,0.416-0.013,0.468-0.117c0.052-0.104,0.091-0.104,0.117-0.065c0.025,0.039,0.22,0.272,0.22,0.272s0.131,0.104,0.183,0.13c0.051,0.026-0.052,0.143-0.156,0.078c-0.104-0.065-0.299-0.051-0.377-0.116c-0.078-0.065-0.429-0.065-0.52-0.052c-0.09,0.013-0.247-0.039-0.299-0.039c-0.051,0-0.221,0.13-0.221,0.13S10.532,8.252,10.494,8.2c-0.039-0.052-0.104,0.052-0.156,0.065c-0.052,0.013-0.208-0.104-0.364-0.052C9.818,8.265,9.87,8.317,9.649,8.304s-0.272-0.052-0.35-0.039C9.22,8.278,9.22,8.278,9.22,8.278S9.233,8.33,9.143,8.382C9.052,8.434,8.986,8.499,8.921,8.421C8.857,8.343,8.818,8.343,8.779,8.33c-0.04-0.013-0.118-0.078-0.286-0.04C8.324,8.33,8.064,8.239,8.013,8.239c-0.04,0-0.313-0.015-0.491-0.033c2.109-2.292,5.124-3.74,8.478-3.74c2.128,0,4.117,0.589,5.83,1.598c-0.117,0.072-0.319,0.06-0.388,0.023c-0.078-0.043-0.158-0.078-0.475-0.061c-0.317,0.018-0.665,0.122-0.595,0.226c0.072,0.104-0.142,0.165-0.197,0.113c-0.055-0.052-0.309,0.06-0.293,0.165c0.016,0.104-0.039,0.225-0.175,0.199c-0.134-0.027-0.229,0.06-0.237,0.146c-0.007,0.087-0.309,0.147-0.332,0.147c-0.024,0-0.412-0.008-0.27,0.095c0.097,0.069,0.15,0.027,0.27,0.052c0.119,0.026,0.214,0.217,0.277,0.243c0.062,0.026,0.15,0,0.189-0.052c0.04-0.052,0.095-0.234,0.095-0.234s0,0.173,0.097,0.208c0.095,0.035,0.331-0.026,0.395-0.017c0.064,0.008,0.437,0.061,0.538,0.112c0.104,0.052,0.356,0.087,0.428,0.199c0.071,0.113,0.08,0.503,0.119,0.546c0.04,0.043,0.174-0.139,0.205-0.182c0.031-0.044,0.198-0.018,0.254,0.042c0.056,0.061,0.182,0.208,0.175,0.269C21.9,8.365,21.877,8.459,21.83,8.425c-0.048-0.034-0.127-0.025-0.096-0.095c0.032-0.069,0.048-0.217-0.015-0.217c-0.064,0-0.119,0-0.119,0s-0.12-0.035-0.199,0.095s-0.015,0.26,0.04,0.26s0.184,0,0.184,0.034c0,0.035-0.136,0.139-0.128,0.2c0.009,0.061,0.11,0.268,0.144,0.312c0.031,0.043,0.197,0.086,0.244,0.096c0.049,0.008-0.111,0.017-0.07,0.077c0.04,0.061,0.102,0.208,0.189,0.243c0.087,0.035,0.333,0.19,0.363,0.26c0.032,0.069,0.222-0.052,0.262-0.061c0.04-0.008,0.032,0.182,0.143,0.191c0.11,0.008,0.15-0.018,0.245-0.096s0.072-0.182,0.079-0.26c0.009-0.078,0-0.138,0.104-0.113c0.104,0.026,0.158-0.018,0.15-0.104c-0.008-0.087-0.095-0.191,0.07-0.217c0.167-0.026,0.254-0.138,0.357-0.138c0.103,0,0.389,0.043,0.419,0c0.032-0.043,0.167-0.243,0.254-0.251c0.067-0.007,0.224-0.021,0.385-0.042c1.582,1.885,2.561,4.284,2.673,6.905c-0.118,0.159-0.012,0.305,0.021,0.408c0.001,0.03,0.005,0.058,0.005,0.088c0,0.136-0.016,0.269-0.021,0.404C27.512,16.406,27.512,16.408,27.51,16.41zM17.794,12.084c-0.064,0.013-0.169-0.052-0.169-0.143s-0.091,0.169-0.04,0.247c0.053,0.078-0.104,0.169-0.155,0.169s-0.091-0.116-0.078-0.233c0.014-0.117-0.077-0.221-0.221-0.208c-0.143,0.014-0.208,0.13-0.259,0.169c-0.053,0.039-0.053,0.259-0.04,0.312s0.013,0.235-0.116,0.221c-0.118-0.013-0.092-0.233-0.079-0.312c0.014-0.078-0.039-0.273,0.014-0.376c0.053-0.104,0.207-0.143,0.312-0.156s0.324,0.065,0.363,0.052c0.04-0.014,0.222-0.014,0.312,0C17.729,11.837,17.858,12.071,17.794,12.084zM18.027,12.123c0.04,0.026,0.311-0.039,0.364,0.026c0.051,0.065-0.054,0.078-0.183,0.13c-0.129,0.052-0.169,0.039-0.221,0.104s-0.221,0.09-0.299,0.168c-0.078,0.079-0.217,0.125-0.246,0.065c-0.04-0.078,0.013-0.039,0.025-0.078c0.013-0.039,0.245-0.129,0.245-0.129S17.988,12.097,18.027,12.123zM16.988,11.668c-0.038,0.013-0.182-0.026-0.3-0.026c-0.116,0-0.091-0.078-0.143-0.064c-0.051,0.013-0.168,0.039-0.247,0.078c-0.078,0.039-0.208,0.03-0.208-0.04c0-0.104,0.052-0.078,0.221-0.143c0.169-0.065,0.352-0.247,0.429-0.169c0.078,0.078,0.221,0.169,0.312,0.182C17.144,11.5,17.026,11.655,16.988,11.668zM15.659,7.637c-0.079,0.026-0.347,0.139-0.321,0.199c0.01,0.023,0.078,0.069,0.19,0.052c0.113-0.018,0.276-0.035,0.355-0.043c0.078-0.009,0.095-0.139,0.009-0.147C15.805,7.689,15.736,7.611,15.659,7.637zM14.698,7.741c-0.061,0.026-0.243-0.043-0.338,0.018c-0.061,0.038-0.026,0.164,0.07,0.172c0.095,0.009,0.259-0.06,0.276-0.008c0.018,0.052,0.078,0.286,0.234,0.208c0.156-0.078,0.147-0.147,0.19-0.156c0.043-0.009-0.008-0.199-0.078-0.243C14.983,7.689,14.758,7.715,14.698,7.741zM14.385,7.005c0.017,0.044-0.008,0.078,0.113,0.095c0.121,0.018,0.173,0.035,0.243,0.035c0.069,0,0.042-0.113-0.018-0.19c-0.061-0.078-0.043-0.069-0.199-0.113c-0.156-0.043-0.312-0.043-0.416-0.035c-0.104,0.009-0.217-0.017-0.243,0.104c-0.013,0.062,0.07,0.112,0.174,0.112S14.368,6.962,14.385,7.005zM14.611,7.481c0.043,0.095,0.043,0.051,0.165,0.061C14.896,7.551,14.991,7.421,15,7.378c0.009-0.044-0.061-0.13-0.225-0.113c-0.165,0.017-0.667-0.026-0.736,0.034c-0.066,0.058,0,0.233-0.026,0.251c-0.026,0.017,0.009,0.095,0.077,0.078c0.069-0.017,0.104-0.182,0.157-0.182C14.299,7.447,14.568,7.386,14.611,7.481zM12.982,7.126c0.052,0.043,0.183,0.008,0.173-0.035c-0.008-0.043,0.053-0.217-0.051-0.225C13,6.858,12.854,6.962,12.697,7.014c-0.101,0.033-0.078,0.13-0.009,0.13S12.931,7.083,12.982,7.126zM13.72,7.282c-0.087,0.043-0.114,0.069-0.191,0.052c-0.078-0.017-0.078-0.156-0.217-0.13c-0.138,0.026-0.164,0.104-0.207,0.139s-0.139,0.061-0.173,0.043c-0.034-0.017-0.234-0.129-0.234-0.129s-0.416-0.018-0.433-0.07c-0.017-0.052-0.086-0.138-0.277-0.121s-0.52,0.13-0.572,0.13c-0.052,0,0.062,0.104-0.009,0.104c-0.069,0-0.155-0.008-0.181,0.069c-0.018,0.053,0.078,0.052,0.189,0.052c0.112,0,0.295,0,0.347-0.026c0.052-0.026,0.312-0.087,0.303-0.009c-0.009,0.079,0.104,0.199,0.164,0.182c0.061-0.017,0.183-0.13,0.243-0.086c0.061,0.043,0.07,0.146,0.13,0.173c0.061,0.025,0.226,0.025,0.304,0c0.077-0.027,0.294-0.027,0.389-0.009c0.095,0.018,0.373,0.069,0.399,0.018c0.026-0.053,0.104-0.061,0.112-0.113s0.051-0.216,0.051-0.216S13.806,7.239,13.72,7.282zM18.105,16.239c-0.119,0.021-0.091,0.252,0.052,0.21C18.3,16.407,18.223,16.217,18.105,16.239zM19.235,15.929c-0.104-0.026-0.221,0-0.299,0.013c-0.078,0.013-0.299,0.208-0.299,0.208s0.143,0.026,0.233,0.026c0.092,0,0.144,0.051,0.221,0.09c0.078,0.04,0.221-0.052,0.272-0.052c0.053,0,0.118,0.156,0.131-0.013C19.508,16.032,19.339,15.955,19.235,15.929zM15.616,7.507c-0.043-0.104-0.259-0.139-0.304-0.035C15.274,7.563,15.659,7.611,15.616,7.507zM18.093,15.292c0.143-0.026,0.064-0.144-0.053-0.13C17.922,15.175,17.949,15.318,18.093,15.292zM19.82,16.095c-0.119,0.022-0.092,0.253,0.051,0.211C20.015,16.264,19.937,16.074,19.82,16.095zM18.247,15.708c-0.09,0.013-0.285-0.09-0.389-0.182c-0.104-0.091-0.299-0.091-0.377-0.091c-0.077,0-0.39,0.091-0.39,0.091c-0.013,0.13,0.117,0.091,0.273,0.091s0.429-0.026,0.479,0.039c0.053,0.064,0.286,0.168,0.352,0.221c0.064,0.052,0.272,0.065,0.285,0.013S18.338,15.695,18.247,15.708zM16.698,7.412c-0.13-0.009-0.295-0.009-0.399,0c-0.104,0.008-0.182-0.069-0.26-0.113c-0.077-0.043-0.251-0.182-0.354-0.199c-0.104-0.017-0.086-0.017-0.303-0.069c-0.11-0.027-0.294-0.061-0.294-0.086c0-0.026-0.052,0.121,0.043,0.165c0.095,0.043,0.251,0.121,0.363,0.164c0.114,0.043,0.329,0.052,0.399,0.139c0.069,0.086,0.303,0.156,0.303,0.156l0.277,0.026c0,0,0.191-0.043,0.39-0.026c0.199,0.017,0.493,0.043,0.659,0.035c0.163-0.008,0.189-0.061,0.208-0.095c0.016-0.035-0.304-0.104-0.383-0.095C17.271,7.42,16.827,7.42,16.698,7.412zM17.182,9.404c-0.034,0.039,0.157,0.095,0.191,0.043C17.407,9.396,17.271,9.309,17.182,9.404zM17.764,9.585c0.086-0.035,0.043-0.139-0.079-0.104C17.547,9.521,17.676,9.62,17.764,9.585z",
+ "raph_warning": "M29.225,23.567l-3.778-6.542c-1.139-1.972-3.002-5.2-4.141-7.172l-3.778-6.542c-1.14-1.973-3.003-1.973-4.142,0L9.609,9.853c-1.139,1.972-3.003,5.201-4.142,7.172L1.69,23.567c-1.139,1.974-0.207,3.587,2.071,3.587h23.391C29.432,27.154,30.363,25.541,29.225,23.567zM16.536,24.58h-2.241v-2.151h2.241V24.58zM16.428,20.844h-2.023l-0.201-9.204h2.407L16.428,20.844z",
+ "raph_arrowleftalt": "M16,30.534c8.027,0,14.534-6.507,14.534-14.534c0-8.027-6.507-14.534-14.534-14.534C7.973,1.466,1.466,7.973,1.466,16C1.466,24.027,7.973,30.534,16,30.534zM18.335,6.276l3.536,3.538l-6.187,6.187l6.187,6.187l-3.536,3.537l-9.723-9.724L18.335,6.276z",
+ "raph_arrowalt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM13.665,25.725l-3.536-3.539l6.187-6.187l-6.187-6.187l3.536-3.536l9.724,9.723L13.665,25.725z",
+ "raph_code": "M8.982,7.107L0.322,15.77l8.661,8.662l3.15-3.15L6.621,15.77l5.511-5.511L8.982,7.107zM21.657,7.107l-3.148,3.151l5.511,5.511l-5.511,5.511l3.148,3.15l8.662-8.662L21.657,7.107z",
+ "raph_arrowleft": "M21.871,9.814 15.684,16.001 21.871,22.188 18.335,25.725 8.612,16.001 18.335,6.276",
+ "raph_arrow": "M10.129,22.186 16.316,15.999 10.129,9.812 13.665,6.276 23.389,15.999 13.665,25.725",
+ "raph_pensil": "M25.31,2.872l-3.384-2.127c-0.854-0.536-1.979-0.278-2.517,0.576l-1.334,2.123l6.474,4.066l1.335-2.122C26.42,4.533,26.164,3.407,25.31,2.872zM6.555,21.786l6.474,4.066L23.581,9.054l-6.477-4.067L6.555,21.786zM5.566,26.952l-0.143,3.819l3.379-1.787l3.14-1.658l-6.246-3.925L5.566,26.952z",
+ "raph_pen": "M13.587,12.074c-0.049-0.074-0.11-0.147-0.188-0.202c-0.333-0.243-0.803-0.169-1.047,0.166c-0.244,0.336-0.167,0.805,0.167,1.048c0.303,0.22,0.708,0.167,0.966-0.091l-7.086,9.768l-2.203,7.997l6.917-4.577L26.865,4.468l-4.716-3.42l-1.52,2.096c-0.087-0.349-0.281-0.676-0.596-0.907c-0.73-0.529-1.751-0.369-2.28,0.363C14.721,6.782,16.402,7.896,13.587,12.074zM10.118,25.148L6.56,27.503l1.133-4.117L10.118,25.148zM14.309,11.861c2.183-3.225,1.975-4.099,3.843-6.962c0.309,0.212,0.664,0.287,1.012,0.269L14.309,11.861z",
+ "raph_plus": "M25.979,12.896 19.312,12.896 19.312,6.229 12.647,6.229 12.647,12.896 5.979,12.896 5.979,19.562 12.647,19.562 12.647,26.229 19.312,26.229 19.312,19.562 25.979,19.562",
+ "raph_minus": "M25.979,12.896,19.312,12.896,5.979,12.896,5.979,19.562,25.979,19.562",
+ "raph_tshirt": "M20.1,4.039c-0.681,1.677-2.32,2.862-4.24,2.862c-1.921,0-3.56-1.185-4.24-2.862L1.238,8.442l2.921,6.884l3.208-1.361V28h17.099V14.015l3.093,1.312l2.922-6.884L20.1,4.039z",
+ "raph_raphael": "M27.777,18.941c0.584-0.881,0.896-1.914,0.896-2.998c0-1.457-0.567-2.826-1.598-3.854l-6.91-6.911l-0.003,0.002c-0.985-0.988-2.35-1.6-3.851-1.6c-1.502,0-2.864,0.612-3.85,1.6H12.46l-6.911,6.911c-1.031,1.029-1.598,2.398-1.598,3.854c0,1.457,0.567,2.826,1.598,3.854l6.231,6.229c0.25,0.281,0.512,0.544,0.789,0.785c1.016,0.961,2.338,1.49,3.743,1.49c1.456,0,2.825-0.565,3.854-1.598l6.723-6.725c0.021-0.019,0.034-0.032,0.051-0.051l0.14-0.138c0.26-0.26,0.487-0.54,0.688-0.838c0.004-0.008,0.01-0.015,0.014-0.021L27.777,18.941zM26.658,15.946c0,0.678-0.197,1.326-0.561,1.879c-0.222,0.298-0.447,0.559-0.684,0.784L25.4,18.625c-1.105,1.052-2.354,1.35-3.414,1.35c-0.584,0-1.109-0.09-1.523-0.195c-2.422-0.608-5.056-2.692-6.261-5.732c0.649,0.274,1.362,0.426,2.11,0.426c2.811,0,5.129-2.141,5.415-4.877l3.924,3.925C26.301,14.167,26.658,15.029,26.658,15.946zM16.312,5.6c1.89,0,3.426,1.538,3.426,3.427c0,1.89-1.536,3.427-3.426,3.427c-1.889,0-3.426-1.537-3.426-3.427C12.886,7.138,14.423,5.6,16.312,5.6zM6.974,18.375c-0.649-0.648-1.007-1.512-1.007-2.429c0-0.917,0.357-1.78,1.007-2.428l2.655-2.656c-0.693,2.359-0.991,4.842-0.831,7.221c0.057,0.854,0.175,1.677,0.345,2.46L6.974,18.375zM11.514,11.592c0.583,4.562,4.195,9.066,8.455,10.143c0.693,0.179,1.375,0.265,2.033,0.265c0.01,0,0.02,0,0.027,0l-3.289,3.289c-0.648,0.646-1.512,1.006-2.428,1.006c-0.638,0-1.248-0.177-1.779-0.5l0.001-0.002c-0.209-0.142-0.408-0.295-0.603-0.461c-0.015-0.019-0.031-0.026-0.046-0.043l-0.665-0.664c-1.367-1.567-2.227-3.903-2.412-6.671C10.669,15.856,10.921,13.673,11.514,11.592",
+ "raph_graphael": "M28.832,16.104c0-1.477-0.574-2.863-1.617-3.905l-7.002-7.001L20.211,5.2c-1.027-1.03-2.445-1.62-3.9-1.62c-1.455,0-2.871,0.59-3.9,1.621l-0.002-0.002l-7,7c-1.033,1.031-1.619,2.445-1.619,3.905c0,1.458,0.586,2.872,1.619,3.903l6.312,6.312c0.253,0.284,0.519,0.55,0.8,0.794c1.049,0.994,2.463,1.54,3.908,1.51c1.417-0.028,2.783-0.612,3.785-1.615l6.811-6.811c0.018-0.017,0.035-0.034,0.053-0.052l0.137-0.138c0.27-0.268,0.49-0.564,0.713-0.868l-0.002-0.002C28.516,18.244,28.832,17.198,28.832,16.104zM23.08,21.252l-0.051,0.006l-0.955,0.974c0.01,0-3.305,3.332-3.305,3.332c-1.121,1.119-2.906,1.337-4.261,0.511l0.002-0.002c-0.213-0.141-0.414-0.299-0.61-0.467c-0.016-0.015-0.032-0.027-0.047-0.042l-3.024-3.024h-0.001l-3.976-3.976c-1.34-1.339-1.342-3.581,0-4.921l2.689-2.689l0.052-0.005l0.956-0.973c-0.01,0,3.303-3.332,3.303-3.332c1.121-1.12,2.908-1.337,4.261-0.511v0.002c0.211,0.14,0.414,0.299,0.609,0.467c0.016,0.015,0.031,0.028,0.047,0.042l3.025,3.024l0,0l3.975,3.976c0.389,0.388,0.66,0.852,0.824,1.348l-2.617,0.008c-0.537-3.754-3.764-6.64-7.666-6.64c-4.277,0-7.744,3.467-7.745,7.746c0.001,4.277,3.468,7.743,7.745,7.744c3.919-0.001,7.156-2.911,7.671-6.688l2.635-0.009c-0.16,0.52-0.441,1.007-0.846,1.412L23.08,21.252zM16.311,17.184c0.002,0,0.002,0,0.004,0l5.476-0.018c-0.5,2.573-2.76,4.516-5.48,4.52c-3.084-0.005-5.578-2.5-5.584-5.582c0.006-3.084,2.5-5.579,5.584-5.584c2.707,0.005,4.96,1.929,5.472,4.485l-5.476,0.018c-0.596,0.002-1.078,0.488-1.076,1.084C15.233,16.702,15.715,17.184,16.311,17.184z",
+ "raph_page": "M23.024,5.673c-1.744-1.694-3.625-3.051-5.168-3.236c-0.084-0.012-0.171-0.019-0.263-0.021H7.438c-0.162,0-0.322,0.063-0.436,0.18C6.889,2.71,6.822,2.87,6.822,3.033v25.75c0,0.162,0.063,0.317,0.18,0.435c0.117,0.116,0.271,0.179,0.436,0.179h18.364c0.162,0,0.317-0.062,0.434-0.179c0.117-0.117,0.182-0.272,0.182-0.435V11.648C26.382,9.659,24.824,7.49,23.024,5.673zM25.184,28.164H8.052V3.646h9.542v0.002c0.416-0.025,0.775,0.386,1.05,1.326c0.25,0.895,0.313,2.062,0.312,2.871c0.002,0.593-0.027,0.991-0.027,0.991l-0.049,0.652l0.656,0.007c0.003,0,1.516,0.018,3,0.355c1.426,0.308,2.541,0.922,2.645,1.617c0.004,0.062,0.005,0.124,0.004,0.182V28.164z",
+ "raph_page2": "M23.024,5.673c-1.744-1.694-3.625-3.051-5.168-3.236c-0.084-0.012-0.171-0.019-0.263-0.021H7.438c-0.162,0-0.322,0.063-0.436,0.18C6.889,2.71,6.822,2.87,6.822,3.033v25.75c0,0.162,0.063,0.317,0.18,0.435c0.117,0.116,0.271,0.179,0.436,0.179h18.364c0.162,0,0.317-0.062,0.434-0.179c0.117-0.117,0.182-0.272,0.182-0.435V11.648C26.382,9.659,24.824,7.49,23.024,5.673zM22.157,6.545c0.805,0.786,1.529,1.676,2.069,2.534c-0.468-0.185-0.959-0.322-1.42-0.431c-1.015-0.228-2.008-0.32-2.625-0.357c0.003-0.133,0.004-0.283,0.004-0.446c0-0.869-0.055-2.108-0.356-3.2c-0.003-0.01-0.005-0.02-0.009-0.03C20.584,5.119,21.416,5.788,22.157,6.545zM25.184,28.164H8.052V3.646h9.542v0.002c0.416-0.025,0.775,0.386,1.05,1.326c0.25,0.895,0.313,2.062,0.312,2.871c0.002,0.593-0.027,0.991-0.027,0.991l-0.049,0.652l0.656,0.007c0.003,0,1.516,0.018,3,0.355c1.426,0.308,2.541,0.922,2.645,1.617c0.004,0.062,0.005,0.124,0.004,0.182V28.164z",
+ "raph_plugin": "M26.33,15.836l-3.893-1.545l3.136-7.9c0.28-0.705-0.064-1.505-0.771-1.785c-0.707-0.28-1.506,0.065-1.785,0.771l-3.136,7.9l-4.88-1.937l3.135-7.9c0.281-0.706-0.064-1.506-0.77-1.786c-0.706-0.279-1.506,0.065-1.785,0.771l-3.136,7.9L8.554,8.781l-1.614,4.066l2.15,0.854l-2.537,6.391c-0.61,1.54,0.143,3.283,1.683,3.895l1.626,0.646L8.985,26.84c-0.407,1.025,0.095,2.188,1.122,2.596l0.93,0.369c1.026,0.408,2.188-0.095,2.596-1.121l0.877-2.207l1.858,0.737c1.54,0.611,3.284-0.142,3.896-1.682l2.535-6.391l1.918,0.761L26.33,15.836z",
+ "raph_svg": "M31.274,15.989c0-2.473-2.005-4.478-4.478-4.478l0,0c0.81-0.811,1.312-1.93,1.312-3.167c0-2.474-2.005-4.479-4.479-4.479c-1.236,0-2.356,0.501-3.167,1.312c0-2.473-2.005-4.478-4.478-4.478c-2.474,0-4.479,2.005-4.479,4.478c-0.811-0.81-1.93-1.312-3.167-1.312c-2.474,0-4.479,2.005-4.479,4.479c0,1.236,0.501,2.356,1.312,3.166c-2.474,0-4.479,2.005-4.479,4.479c0,2.474,2.005,4.479,4.479,4.479c-0.811,0.81-1.312,1.93-1.312,3.167c0,2.473,2.005,4.478,4.479,4.478c1.236,0,2.356-0.501,3.167-1.312c0,2.473,2.005,4.479,4.479,4.479c2.473,0,4.478-2.006,4.478-4.479l0,0c0.811,0.811,1.931,1.312,3.167,1.312c2.474,0,4.478-2.005,4.478-4.478c0-1.237-0.501-2.357-1.312-3.168c0.001,0,0.001,0,0.001,0C29.27,20.467,31.274,18.463,31.274,15.989zM23.583,21.211c0.016,0,0.031-0.001,0.047-0.001c1.339,0,2.424,1.085,2.424,2.425c0,1.338-1.085,2.424-2.424,2.424s-2.424-1.086-2.424-2.424c0-0.017,0.001-0.031,0.001-0.047l-3.541-3.542v5.009c0.457,0.44,0.743,1.06,0.743,1.746c0,1.339-1.086,2.424-2.424,2.424c-1.339,0-2.425-1.085-2.425-2.424c0-0.687,0.286-1.306,0.743-1.746v-5.009l-3.541,3.542c0,0.016,0.001,0.031,0.001,0.047c0,1.338-1.085,2.424-2.424,2.424s-2.424-1.086-2.424-2.424c0-1.34,1.085-2.425,2.424-2.425c0.015,0,0.031,0.001,0.046,0.001l3.542-3.541H6.919c-0.44,0.458-1.06,0.743-1.746,0.743c-1.339,0-2.424-1.085-2.424-2.424s1.085-2.424,2.424-2.424c0.686,0,1.305,0.285,1.746,0.744h5.008l-3.542-3.542c-0.015,0-0.031,0.001-0.046,0.001c-1.339,0-2.424-1.085-2.424-2.424S7.001,5.92,8.34,5.92s2.424,1.085,2.424,2.424c0,0.015-0.001,0.031-0.001,0.046l3.541,3.542V6.924c-0.457-0.441-0.743-1.06-0.743-1.746c0-1.339,1.086-2.425,2.425-2.425c1.338,0,2.424,1.085,2.424,2.425c0,0.686-0.286,1.305-0.743,1.746v5.008l3.541-3.542c0-0.015-0.001-0.031-0.001-0.046c0-1.339,1.085-2.424,2.424-2.424s2.424,1.085,2.424,2.424c0,1.339-1.085,2.424-2.424,2.424c-0.016,0-0.031-0.001-0.047-0.001l-3.541,3.542h5.008c0.441-0.458,1.061-0.744,1.747-0.744c1.338,0,2.423,1.085,2.423,2.424s-1.085,2.424-2.423,2.424c-0.687,0-1.306-0.285-1.747-0.743h-5.008L23.583,21.211z",
+ "raph_bookmark": "M17.396,1.841L6.076,25.986l7.341-4.566l1.186,8.564l11.32-24.146L17.396,1.841zM19.131,9.234c-0.562-0.264-0.805-0.933-0.541-1.495c0.265-0.562,0.934-0.805,1.496-0.541s0.805,0.934,0.541,1.496S19.694,9.498,19.131,9.234z",
+ "raph_hammer": "M7.831,29.354c0.685,0.353,1.62,1.178,2.344,0.876c0.475-0.195,0.753-1.301,1.048-1.883c2.221-4.376,4.635-9.353,6.392-13.611c0-0.19,0.101-0.337-0.049-0.595c0.983-1.6,1.65-3.358,2.724-5.138c0.34-0.566,0.686-1.351,1.163-1.577l0.881-0.368c1.12-0.288,1.938-0.278,2.719,0.473c0.396,0.383,0.578,1.015,0.961,1.395c0.259,0.26,1.246,0.899,1.613,0.8c0.285-0.077,0.52-0.364,0.72-0.728l0.696-1.286c0.195-0.366,0.306-0.718,0.215-0.999c-0.117-0.362-1.192-0.84-1.552-0.915c-0.528-0.113-1.154,0.081-1.692-0.041c-1.057-0.243-1.513-0.922-1.883-2.02c-2.608-1.533-6.119-2.53-10.207-1.244c-1.109,0.349-2.172,0.614-2.901,1.323c-0.146,0.412,0.143,0.494,0.446,0.489c-0.237,0.216-0.62,0.341-0.399,0.848c2.495-1.146,7.34-1.542,7.669,0.804c0.072,0.522-0.395,1.241-0.682,1.835c-0.905,1.874-2.011,3.394-2.813,5.091c-0.298,0.017-0.366,0.18-0.525,0.287c-2.604,3.8-5.451,8.541-7.9,12.794c-0.326,0.566-1.098,1.402-1.002,1.906C5.961,28.641,7.146,29,7.831,29.354z",
+ "raph_users": "M21.053,20.8c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68h-0.34c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888C28.469,23.686,22.185,21.252,21.053,20.8zM8.583,20.628c-0.099-0.18-0.148-0.31-0.148-0.31s-0.432,0.239-0.432-0.432s0.432,0.432,0.864-2.159c0,0,1.199-0.336,0.959-3.119H9.538c0,0,0.143-0.591,0.237-1.334c-0.004-0.308,0.006-0.636,0.037-0.996l0.038-0.426c-0.021-0.492-0.107-0.939-0.312-1.226C8.818,9.619,8.53,8.947,6.947,8.467c-1.583-0.48-1.008-0.385-2.159-0.336C3.636,8.179,2.676,8.802,2.676,9.139c0,0-0.72,0.048-1.008,0.336c-0.271,0.271-0.705,1.462-0.757,1.885v0.281c0.047,0.653,0.258,2.449,0.469,2.872l-0.286,0.096c-0.239,2.783,0.959,3.119,0.959,3.119c0.432,2.591,0.864,1.488,0.864,2.159s-0.432,0.432-0.432,0.432s-0.383,1.057-1.343,1.439c-0.061,0.024-0.139,0.056-0.232,0.092v5.234h0.575c-0.029-1.278,0.077-2.927,0.746-3.594C2.587,23.135,3.754,22.551,8.583,20.628zM30.913,11.572c-0.04-0.378-0.127-0.715-0.292-0.946c-0.719-1.008-1.008-1.679-2.59-2.159c-1.584-0.48-1.008-0.385-2.16-0.336C24.72,8.179,23.76,8.802,23.76,9.139c0,0-0.719,0.048-1.008,0.336c-0.271,0.272-0.709,1.472-0.758,1.891h0.033l0.08,0.913c0.02,0.231,0.022,0.436,0.027,0.645c0.09,0.666,0.21,1.35,0.33,1.589l-0.286,0.096c-0.239,2.783,0.96,3.119,0.96,3.119c0.432,2.591,0.863,1.488,0.863,2.159s-0.432,0.432-0.432,0.432s-0.053,0.142-0.163,0.338c4.77,1.9,5.927,2.48,6.279,2.834c0.67,0.667,0.775,2.315,0.746,3.594h0.48v-5.306c-0.016-0.006-0.038-0.015-0.052-0.021c-0.959-0.383-1.343-1.439-1.343-1.439s-0.433,0.239-0.433-0.432s0.433,0.432,0.864-2.159c0,0,0.804-0.229,0.963-1.841v-1.227c-0.001-0.018-0.001-0.033-0.003-0.051h-0.289c0,0,0.215-0.89,0.292-1.861V11.572z",
+ "raph_user": "M20.771,12.364c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888c-0.512-0.511-6.796-2.944-7.928-3.396c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68H20.771z",
+ "raph_mail": "M28.516,7.167H3.482l12.517,7.108L28.516,7.167zM16.74,17.303C16.51,17.434,16.255,17.5,16,17.5s-0.51-0.066-0.741-0.197L2.5,10.06v14.773h27V10.06L16.74,17.303z",
+ "raph_picture": "M2.5,4.833v22.334h27V4.833H2.5zM25.25,25.25H6.75V6.75h18.5V25.25zM11.25,14c1.426,0,2.583-1.157,2.583-2.583c0-1.427-1.157-2.583-2.583-2.583c-1.427,0-2.583,1.157-2.583,2.583C8.667,12.843,9.823,14,11.25,14zM24.251,16.25l-4.917-4.917l-6.917,6.917L10.5,16.333l-2.752,2.752v5.165h16.503V16.25z",
+ "raph_bubble": "M16,5.333c-7.732,0-14,4.701-14,10.5c0,1.982,0.741,3.833,2.016,5.414L2,25.667l5.613-1.441c2.339,1.317,5.237,2.107,8.387,2.107c7.732,0,14-4.701,14-10.5C30,10.034,23.732,5.333,16,5.333z",
+ "raph_codetalk": "M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM13.704,19.47l-2.338,2.336l-6.43-6.431l6.429-6.432l2.339,2.341l-4.091,4.091L13.704,19.47zM20.775,21.803l-2.337-2.339l4.092-4.09l-4.092-4.092l2.337-2.339l6.43,6.426L20.775,21.803z",
+ "raph_talkq": "M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.868,21.375h-1.969v-1.889h1.969V21.375zM16.772,18.094h-1.777l-0.176-8.083h2.113L16.772,18.094z",
+ "raph_talke": "M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.982,21.375h-1.969v-1.889h1.969V21.375zM16.982,17.469v0.625h-1.969v-0.769c0-2.321,2.641-2.689,2.641-4.337c0-0.752-0.672-1.329-1.553-1.329c-0.912,0-1.713,0.672-1.713,0.672l-1.12-1.393c0,0,1.104-1.153,3.009-1.153c1.81,0,3.49,1.121,3.49,3.009C19.768,15.437,16.982,15.741,16.982,17.469z",
+ "raph_home": "M27.812,16l-3.062-3.062V5.625h-2.625v4.688L16,4.188L4.188,16L7,15.933v11.942h17.875V16H27.812zM16,26.167h-5.833v-7H16V26.167zM21.667,23.167h-3.833v-4.042h3.833V23.167z",
+ "raph_linkedin": "M27.25,3.125h-22c-1.104,0-2,0.896-2,2v22c0,1.104,0.896,2,2,2h22c1.104,0,2-0.896,2-2v-22C29.25,4.021,28.354,3.125,27.25,3.125zM11.219,26.781h-4v-14h4V26.781zM9.219,11.281c-1.383,0-2.5-1.119-2.5-2.5s1.117-2.5,2.5-2.5s2.5,1.119,2.5,2.5S10.602,11.281,9.219,11.281zM25.219,26.781h-4v-8.5c0-0.4-0.403-1.055-0.687-1.213c-0.375-0.211-1.261-0.229-1.665-0.034l-1.648,0.793v8.954h-4v-14h4v0.614c1.583-0.723,3.78-0.652,5.27,0.184c1.582,0.886,2.73,2.864,2.73,4.702V26.781z",
+ "raph_github": "M28.436,15.099c-1.201-0.202-2.451-0.335-3.466-0.371l-0.179-0.006c0.041-0.09,0.072-0.151,0.082-0.16c0.022-0.018,0.04-0.094,0.042-0.168c0-0.041,0.018-0.174,0.046-0.35c0.275,0.01,0.64,0.018,1.038,0.021c1.537,0.012,3.145,0.136,4.248,0.331c0.657,0.116,0.874,0.112,0.389-0.006c-0.491-0.119-1.947-0.294-3.107-0.37c-0.779-0.053-1.896-0.073-2.554-0.062c0.019-0.114,0.041-0.241,0.064-0.371c0.093-0.503,0.124-1.009,0.126-2.016c0.002-1.562-0.082-1.992-0.591-3.025c-0.207-0.422-0.441-0.78-0.724-1.104c0.247-0.729,0.241-1.858-0.015-2.848c-0.211-0.812-0.285-0.864-1.021-0.708C22.19,4.019,21.69,4.2,21.049,4.523c-0.303,0.153-0.721,0.391-1.024,0.578c-0.79-0.278-1.607-0.462-2.479-0.561c-0.884-0.1-3.051-0.044-3.82,0.098c-0.752,0.139-1.429,0.309-2.042,0.511c-0.306-0.189-0.75-0.444-1.067-0.604C9.973,4.221,9.473,4.041,8.847,3.908c-0.734-0.157-0.81-0.104-1.02,0.708c-0.26,1.003-0.262,2.151-0.005,2.878C7.852,7.577,7.87,7.636,7.877,7.682c-1.042,1.312-1.382,2.78-1.156,4.829c0.059,0.534,0.15,1.024,0.277,1.473c-0.665-0.004-1.611,0.02-2.294,0.064c-1.162,0.077-2.618,0.25-3.109,0.369c-0.484,0.118-0.269,0.122,0.389,0.007c1.103-0.194,2.712-0.32,4.248-0.331c0.29-0.001,0.561-0.007,0.794-0.013c0.07,0.237,0.15,0.463,0.241,0.678L7.26,14.759c-1.015,0.035-2.264,0.168-3.465,0.37c-0.901,0.151-2.231,0.453-2.386,0.54c-0.163,0.091-0.03,0.071,0.668-0.106c1.273-0.322,2.928-0.569,4.978-0.741l0.229-0.02c0.44,1.022,1.118,1.802,2.076,2.41c0.586,0.373,1.525,0.756,1.998,0.816c0.13,0.016,0.508,0.094,0.84,0.172c0.333,0.078,0.984,0.195,1.446,0.262h0.011c-0.009,0.006-0.017,0.01-0.025,0.016c-0.56,0.291-0.924,0.744-1.169,1.457c-0.11,0.033-0.247,0.078-0.395,0.129c-0.529,0.18-0.735,0.217-1.271,0.221c-0.556,0.004-0.688-0.02-1.02-0.176c-0.483-0.225-0.933-0.639-1.233-1.133c-0.501-0.826-1.367-1.41-2.089-1.41c-0.617,0-0.734,0.25-0.288,0.615c0.672,0.549,1.174,1.109,1.38,1.537c0.116,0.24,0.294,0.611,0.397,0.824c0.109,0.227,0.342,0.535,0.564,0.748c0.522,0.498,1.026,0.736,1.778,0.848c0.504,0.074,0.628,0.074,1.223-0.002c0.287-0.035,0.529-0.076,0.746-0.127c0,0.244,0,0.525,0,0.855c0,1.766-0.021,2.334-0.091,2.5c-0.132,0.316-0.428,0.641-0.716,0.787c-0.287,0.146-0.376,0.307-0.255,0.455c0.067,0.08,0.196,0.094,0.629,0.066c0.822-0.051,1.403-0.355,1.699-0.891c0.095-0.172,0.117-0.518,0.147-2.318c0.032-1.953,0.046-2.141,0.173-2.42c0.077-0.166,0.188-0.346,0.25-0.395c0.104-0.086,0.111,0.084,0.111,2.42c-0.001,2.578-0.027,2.889-0.285,3.385c-0.058,0.113-0.168,0.26-0.245,0.33c-0.135,0.123-0.192,0.438-0.098,0.533c0.155,0.154,0.932-0.088,1.356-0.422c0.722-0.572,0.808-1.045,0.814-4.461l0.003-2.004l0.219,0.021l0.219,0.02l0.036,2.621c0.041,2.951,0.047,2.994,0.549,3.564c0.285,0.322,0.572,0.5,1.039,0.639c0.625,0.188,0.813-0.102,0.393-0.605c-0.457-0.547-0.479-0.756-0.454-3.994c0.017-2.076,0.017-2.076,0.151-1.955c0.282,0.256,0.336,0.676,0.336,2.623c0,2.418,0.069,2.648,0.923,3.07c0.399,0.195,0.511,0.219,1.022,0.221c0.544,0.002,0.577-0.006,0.597-0.148c0.017-0.115-0.05-0.193-0.304-0.348c-0.333-0.205-0.564-0.467-0.709-0.797c-0.055-0.127-0.092-0.959-0.117-2.672c-0.036-2.393-0.044-2.502-0.193-2.877c-0.201-0.504-0.508-0.902-0.897-1.166c-0.101-0.066-0.202-0.121-0.333-0.162c0.161-0.016,0.317-0.033,0.468-0.055c1.572-0.209,2.403-0.383,3.07-0.641c1.411-0.543,2.365-1.445,2.882-2.724c0.046-0.114,0.092-0.222,0.131-0.309l0.398,0.033c2.051,0.173,3.706,0.42,4.979,0.743c0.698,0.177,0.831,0.198,0.668,0.105C30.666,15.551,29.336,15.25,28.436,15.099zM22.422,15.068c-0.233,0.512-0.883,1.17-1.408,1.428c-0.518,0.256-1.33,0.451-2.25,0.544c-0.629,0.064-4.137,0.083-4.716,0.026c-1.917-0.188-2.991-0.557-3.783-1.296c-0.75-0.702-1.1-1.655-1.039-2.828c0.039-0.734,0.216-1.195,0.679-1.755c0.421-0.51,0.864-0.825,1.386-0.985c0.437-0.134,1.778-0.146,3.581-0.03c0.797,0.051,1.456,0.051,2.252,0c1.886-0.119,3.145-0.106,3.61,0.038c0.731,0.226,1.397,0.834,1.797,1.644c0.18,0.362,0.215,0.516,0.241,1.075C22.808,13.699,22.675,14.517,22.422,15.068zM12.912,11.762c-1.073-0.188-1.686,1.649-0.863,2.587c0.391,0.445,0.738,0.518,1.172,0.248c0.402-0.251,0.62-0.72,0.62-1.328C13.841,12.458,13.472,11.862,12.912,11.762zM19.425,11.872c-1.073-0.188-1.687,1.647-0.864,2.586c0.392,0.445,0.738,0.519,1.173,0.247c0.401-0.25,0.62-0.72,0.62-1.328C20.354,12.569,19.985,11.971,19.425,11.872zM16.539,15.484c-0.023,0.074-0.135,0.184-0.248,0.243c-0.286,0.147-0.492,0.096-0.794-0.179c-0.187-0.169-0.272-0.258-0.329-0.081c-0.053,0.164,0.28,0.493,0.537,0.594c0.236,0.094,0.405,0.097,0.661-0.01c0.254-0.106,0.476-0.391,0.476-0.576C16.842,15.303,16.595,15.311,16.539,15.484zM16.222,14.909c0.163-0.144,0.2-0.44,0.044-0.597s-0.473-0.133-0.597,0.043c-0.144,0.206-0.067,0.363,0.036,0.53C15.865,15.009,16.08,15.034,16.222,14.909z",
+ "raph_flickr": "M21.77,8.895c-2.379,0-4.479,1.174-5.77,2.969c-1.289-1.795-3.39-2.969-5.77-2.969c-3.924,0-7.105,3.181-7.105,7.105c0,3.924,3.181,7.105,7.105,7.105c2.379,0,4.48-1.175,5.77-2.97c1.29,1.795,3.391,2.97,5.77,2.97c3.925,0,7.105-3.182,7.105-7.105C28.875,12.075,25.694,8.895,21.77,8.895zM21.769,21.822c-3.211,0-5.821-2.61-5.821-5.821c0-3.213,2.61-5.824,5.821-5.824c3.213,0,5.824,2.611,5.824,5.824C27.593,19.212,24.981,21.822,21.769,21.822z",
+ "raph_lock": "M22.335,12.833V9.999h-0.001C22.333,6.501,19.498,3.666,16,3.666S9.666,6.502,9.666,10h0v2.833H7.375V25h17.25V12.833H22.335zM11.667,10C11.667,10,11.667,10,11.667,10c0-2.39,1.944-4.334,4.333-4.334c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h-8.668V10z",
+ "raph_clip": "M23.898,6.135c-1.571-1.125-3.758-0.764-4.884,0.808l-8.832,12.331c-0.804,1.122-0.546,2.684,0.577,3.488c1.123,0.803,2.684,0.545,3.488-0.578l6.236-8.706l-0.813-0.583l-6.235,8.707h0c-0.483,0.672-1.42,0.828-2.092,0.347c-0.673-0.481-0.827-1.419-0.345-2.093h0l8.831-12.33l0.001-0.001l-0.002-0.001c0.803-1.119,2.369-1.378,3.489-0.576c1.12,0.803,1.379,2.369,0.577,3.489v-0.001l-9.68,13.516l0.001,0.001c-1.124,1.569-3.316,1.931-4.885,0.808c-1.569-1.125-1.93-3.315-0.807-4.885l7.035-9.822l-0.813-0.582l-7.035,9.822c-1.447,2.02-0.982,4.83,1.039,6.277c2.021,1.448,4.831,0.982,6.278-1.037l9.68-13.516C25.83,9.447,25.47,7.261,23.898,6.135z",
+ "raph_star": "M15.999,22.77l-8.884,6.454l3.396-10.44l-8.882-6.454l10.979,0.002l2.918-8.977l0.476-1.458l3.39,10.433h10.982l-8.886,6.454l3.397,10.443L15.999,22.77L15.999,22.77z",
+ "raph_star2": "M30.373,12.329H19.391l-3.39-10.433l-0.476,1.458l-2.918,8.977L1.628,12.329l8.882,6.454l-3.396,10.44l8.884-6.454l8.886,6.457l-3.397-10.443L30.373,12.329z M17.175,21.151L16,20.298l-1.175,0.854l-3.902,2.834l1.49-4.584l0.45-1.382l-1.177-0.855l-3.9-2.834h6.275l0.45-1.381L16,8.366l1.489,4.581l0.449,1.381h6.281l-3.906,2.836l-1.178,0.854l0.449,1.384l1.493,4.584L17.175,21.151z",
+ "raph_plus": "M25.979,12.896 19.312,12.896 19.312,6.229 12.647,6.229 12.647,12.896 5.979,12.896 5.979,19.562 12.647,19.562 12.647,26.229 19.312,26.229 19.312,19.562 25.979,19.562",
+ "raph_chat": "M15.985,5.972c-7.563,0-13.695,4.077-13.695,9.106c0,2.877,2.013,5.44,5.147,7.108c-0.446,1.479-1.336,3.117-3.056,4.566c0,0,4.015-0.266,6.851-3.143c0.163,0.04,0.332,0.07,0.497,0.107c-0.155-0.462-0.246-0.943-0.246-1.443c0-3.393,3.776-6.05,8.599-6.05c3.464,0,6.379,1.376,7.751,3.406c1.168-1.34,1.847-2.892,1.847-4.552C29.68,10.049,23.548,5.972,15.985,5.972zM27.68,22.274c0-2.79-3.401-5.053-7.599-5.053c-4.196,0-7.599,2.263-7.599,5.053c0,2.791,3.403,5.053,7.599,5.053c0.929,0,1.814-0.116,2.637-0.319c1.573,1.597,3.801,1.744,3.801,1.744c-0.954-0.804-1.447-1.713-1.695-2.534C26.562,25.293,27.68,23.871,27.68,22.274z",
+ "raph_quote": "M14.505,5.873c-3.937,2.52-5.904,5.556-5.904,9.108c0,1.104,0.192,1.656,0.576,1.656l0.396-0.107c0.312-0.12,0.563-0.18,0.756-0.18c1.128,0,2.07,0.411,2.826,1.229c0.756,0.82,1.134,1.832,1.134,3.037c0,1.157-0.408,2.14-1.224,2.947c-0.816,0.807-1.801,1.211-2.952,1.211c-1.608,0-2.935-0.661-3.979-1.984c-1.044-1.321-1.565-2.98-1.565-4.977c0-2.259,0.443-4.327,1.332-6.203c0.888-1.875,2.243-3.57,4.067-5.085c1.824-1.514,2.988-2.272,3.492-2.272c0.336,0,0.612,0.162,0.828,0.486c0.216,0.324,0.324,0.606,0.324,0.846L14.505,5.873zM27.465,5.873c-3.937,2.52-5.904,5.556-5.904,9.108c0,1.104,0.192,1.656,0.576,1.656l0.396-0.107c0.312-0.12,0.563-0.18,0.756-0.18c1.104,0,2.04,0.411,2.808,1.229c0.769,0.82,1.152,1.832,1.152,3.037c0,1.157-0.408,2.14-1.224,2.947c-0.816,0.807-1.801,1.211-2.952,1.211c-1.608,0-2.935-0.661-3.979-1.984c-1.044-1.321-1.565-2.98-1.565-4.977c0-2.284,0.449-4.369,1.35-6.256c0.9-1.887,2.256-3.577,4.068-5.067c1.812-1.49,2.97-2.236,3.474-2.236c0.336,0,0.612,0.162,0.828,0.486c0.216,0.324,0.324,0.606,0.324,0.846L27.465,5.873z",
+ "raph_slideshare": "M28.952,12.795c-0.956,1.062-5.073,2.409-5.604,2.409h-4.513c-0.749,0-1.877,0.147-2.408,0.484c0.061,0.054,0.122,0.108,0.181,0.163c0.408,0.379,1.362,0.913,2.206,0.913c0.397,0,0.723-0.115,1-0.354c1.178-1.007,1.79-1.125,2.145-1.125c0.421,0,0.783,0.193,0.996,0.531c0.4,0.626,0.106,1.445-0.194,2.087c-0.718,1.524-3.058,3.171-5.595,3.171c-0.002,0-0.002,0-0.004,0c-0.354,0-0.701-0.033-1.033-0.099v3.251c0,0.742,1.033,2.533,4.167,2.533s3.955-3.701,3.955-4.338v-4.512c2.23-1.169,4.512-1.805,5.604-3.895C30.882,12.05,29.907,11.733,28.952,12.795zM21.942,17.521c0.796-1.699-0.053-1.699-1.54-0.425s-3.665,0.105-4.408-0.585c-0.743-0.689-1.486-1.22-2.814-1.167c-1.328,0.053-4.46-0.161-6.267-0.585c-1.805-0.425-4.895-3-5.15-2.335c-0.266,0.69,0.211,1.168,1.168,2.335c0.955,1.169,5.075,2.778,5.075,2.778s0,3.453,0,4.886c0,1.435,2.973,3.61,4.512,3.61s2.708-1.062,2.708-1.806v-4.512C17.775,21.045,21.146,19.221,21.942,17.521zM20.342,13.73c1.744,0,3.159-1.414,3.159-3.158c0-1.745-1.415-3.159-3.159-3.159s-3.158,1.414-3.158,3.159C17.184,12.316,18.598,13.73,20.342,13.73zM12.019,13.73c1.744,0,3.158-1.414,3.158-3.158c0-1.745-1.414-3.159-3.158-3.159c-1.745,0-3.159,1.414-3.159,3.159C8.86,12.316,10.273,13.73,12.019,13.73z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/raphael_2.json b/files_svgedit/svg-edit/extensions/shapelib/raphael_2.json
new file mode 100644
index 000000000..42a476e22
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/raphael_2.json
@@ -0,0 +1,64 @@
+{"size": 32,
+"fill": true,
+"data": {
+ "raph_twitter": "M23.295,22.567h-7.213c-2.125,0-4.103-2.215-4.103-4.736v-1.829h11.232c1.817,0,3.291-1.469,3.291-3.281c0-1.813-1.474-3.282-3.291-3.282H11.979V6.198c0-1.835-1.375-3.323-3.192-3.323c-1.816,0-3.29,1.488-3.29,3.323v11.633c0,6.23,4.685,11.274,10.476,11.274h7.211c1.818,0,3.318-1.463,3.318-3.298S25.112,22.567,23.295,22.567z",
+ "raph_gear2": "M17.047,27.945c-0.34,0.032-0.688,0.054-1.046,0.054l0,0c-0.32,0-0.631-0.017-0.934-0.043l0,0l-2.626,3.375l-0.646-0.183c-0.758-0.213-1.494-0.48-2.202-0.8l0,0L8.979,30.07l0.158-4.24c-0.558-0.39-1.079-0.825-1.561-1.302l0,0L3.424,25.42l-0.379-0.557c-0.445-0.654-0.824-1.339-1.16-2.032l0,0l-0.292-0.605l2.819-3.12c-0.176-0.661-0.293-1.343-0.353-2.038l0,0l-3.736-1.975l0.068-0.669c0.08-0.801,0.235-1.567,0.42-2.303l0,0l0.165-0.653l4.167-0.577c0.297-0.627,0.647-1.221,1.041-1.78l0,0l-1.59-3.914l0.48-0.47c0.564-0.55,1.168-1.048,1.798-1.503l0,0l0.546-0.394l3.597,2.259c0.606-0.279,1.24-0.509,1.897-0.685l0,0l1.304-4.046l0.672-0.051c0.362-0.027,0.751-0.058,1.174-0.058l0,0c0.422,0,0.81,0.031,1.172,0.058l0,0l0.672,0.051l1.318,4.088c0.632,0.176,1.244,0.401,1.831,0.674l0,0l3.647-2.291l0.548,0.394c0.63,0.455,1.235,0.954,1.798,1.501l0,0l0.482,0.47l-1.639,4.031c0.357,0.519,0.679,1.068,0.954,1.646l0,0l4.297,0.595l0.167,0.653c0.188,0.735,0.342,1.501,0.42,2.303l0,0l0.068,0.669l-3.866,2.044c-0.058,0.634-0.161,1.258-0.315,1.866l0,0l2.913,3.218l-0.293,0.608c-0.335,0.695-0.712,1.382-1.159,2.034l0,0l-0.379,0.555l-4.255-0.912c-0.451,0.451-0.939,0.866-1.461,1.241l0,0l0.162,4.323l-0.615,0.278c-0.709,0.319-1.444,0.587-2.202,0.8l0,0l-0.648,0.183L17.047,27.945L17.047,27.945zM20.424,29.028c0.227-0.076,0.45-0.157,0.671-0.244l0,0l-0.152-4.083l0.479-0.307c0.717-0.466,1.37-1.024,1.95-1.658l0,0l0.386-0.423l4.026,0.862c0.121-0.202,0.238-0.409,0.351-0.62l0,0l-2.754-3.045l0.171-0.544c0.243-0.783,0.381-1.623,0.422-2.5l0,0l0.025-0.571l3.658-1.933c-0.038-0.234-0.082-0.467-0.132-0.7l0,0l-4.07-0.563l-0.219-0.527c-0.327-0.787-0.76-1.524-1.277-2.204l0,0l-0.342-0.453l1.548-3.808c-0.179-0.157-0.363-0.31-0.552-0.458l0,0l-3.455,2.169L20.649,7.15c-0.754-0.397-1.569-0.698-2.429-0.894l0,0l-0.556-0.127l-1.248-3.87c-0.121-0.006-0.239-0.009-0.354-0.009l0,0c-0.117,0-0.235,0.003-0.357,0.009l0,0l-1.239,3.845l-0.564,0.12c-0.875,0.188-1.709,0.494-2.486,0.896l0,0l-0.508,0.264L7.509,5.249c-0.188,0.148-0.372,0.301-0.55,0.458l0,0l1.507,3.708L8.112,9.869c-0.552,0.709-1.011,1.485-1.355,2.319l0,0l-0.218,0.529l-3.939,0.545c-0.05,0.233-0.094,0.466-0.131,0.7l0,0l3.531,1.867l0.022,0.575c0.037,0.929,0.192,1.82,0.459,2.653l0,0l0.175,0.548l-2.667,2.95c0.112,0.212,0.229,0.419,0.351,0.621l0,0l3.916-0.843l0.39,0.423c0.601,0.657,1.287,1.229,2.043,1.703l0,0l0.488,0.305l-0.149,4.02c0.221,0.087,0.445,0.168,0.672,0.244l0,0l2.479-3.188l0.566,0.07c0.427,0.054,0.843,0.089,1.257,0.089l0,0c0.445,0,0.894-0.039,1.353-0.104l0,0l0.571-0.08L20.424,29.028L20.424,29.028zM21.554,20.75l0.546,0.839l-3.463,2.253l-1.229-1.891l0,0c-0.447,0.109-0.917,0.173-1.406,0.173l0,0c-3.384,0-6.126-2.743-6.126-6.123l0,0c0-3.384,2.742-6.126,6.126-6.126l0,0c3.38,0,6.123,2.742,6.123,6.126l0,0c0,1.389-0.467,2.676-1.25,3.704l0,0L21.554,20.75M19.224,21.073l0.108-0.069l-0.987-1.519l0.572-0.572c0.748-0.75,1.207-1.773,1.207-2.912l0,0c-0.004-2.278-1.848-4.122-4.123-4.126l0,0c-2.28,0.004-4.122,1.846-4.126,4.126l0,0c0.004,2.275,1.848,4.119,4.126,4.123l0,0c0.509,0,0.999-0.104,1.473-0.286l0,0l0.756-0.29L19.224,21.073L19.224,21.073z",
+ "raph_gear": "M26.974,16.514l3.765-1.991c-0.074-0.738-0.217-1.454-0.396-2.157l-4.182-0.579c-0.362-0.872-0.84-1.681-1.402-2.423l1.594-3.921c-0.524-0.511-1.09-0.977-1.686-1.406l-3.551,2.229c-0.833-0.438-1.73-0.77-2.672-0.984l-1.283-3.976c-0.364-0.027-0.728-0.056-1.099-0.056s-0.734,0.028-1.099,0.056l-1.271,3.941c-0.967,0.207-1.884,0.543-2.738,0.986L7.458,4.037C6.863,4.466,6.297,4.932,5.773,5.443l1.55,3.812c-0.604,0.775-1.11,1.629-1.49,2.55l-4.05,0.56c-0.178,0.703-0.322,1.418-0.395,2.157l3.635,1.923c0.041,1.013,0.209,1.994,0.506,2.918l-2.742,3.032c0.319,0.661,0.674,1.303,1.085,1.905l4.037-0.867c0.662,0.72,1.416,1.351,2.248,1.873l-0.153,4.131c0.663,0.299,1.352,0.549,2.062,0.749l2.554-3.283C15.073,26.961,15.532,27,16,27c0.507,0,1.003-0.046,1.491-0.113l2.567,3.301c0.711-0.2,1.399-0.45,2.062-0.749l-0.156-4.205c0.793-0.513,1.512-1.127,2.146-1.821l4.142,0.889c0.411-0.602,0.766-1.243,1.085-1.905l-2.831-3.131C26.778,18.391,26.93,17.467,26.974,16.514zM20.717,21.297l-1.785,1.162l-1.098-1.687c-0.571,0.22-1.186,0.353-1.834,0.353c-2.831,0-5.125-2.295-5.125-5.125c0-2.831,2.294-5.125,5.125-5.125c2.83,0,5.125,2.294,5.125,5.125c0,1.414-0.573,2.693-1.499,3.621L20.717,21.297z",
+ "raph_wrench": "M26.834,14.693c1.816-2.088,2.181-4.938,1.193-7.334l-3.646,4.252l-3.594-0.699L19.596,7.45l3.637-4.242c-2.502-0.63-5.258,0.13-7.066,2.21c-1.907,2.193-2.219,5.229-1.039,7.693L5.624,24.04c-1.011,1.162-0.888,2.924,0.274,3.935c1.162,1.01,2.924,0.888,3.935-0.274l9.493-10.918C21.939,17.625,24.918,16.896,26.834,14.693z",
+ "raph_magic": "M23.043,4.649l-0.404-2.312l-1.59,1.727l-2.323-0.33l1.151,2.045l-1.032,2.108l2.302-0.463l1.686,1.633l0.271-2.332l2.074-1.099L23.043,4.649zM26.217,18.198l-0.182-1.25l-0.882,0.905l-1.245-0.214l0.588,1.118l-0.588,1.118l1.245-0.214l0.882,0.905l0.182-1.25l1.133-0.56L26.217,18.198zM4.92,7.672L5.868,7.3l0.844,0.569L6.65,6.853l0.802-0.627L6.467,5.97L6.118,5.013L5.571,5.872L4.553,5.908l0.647,0.786L4.92,7.672zM10.439,10.505l1.021-1.096l1.481,0.219l-0.727-1.31l0.667-1.341l-1.47,0.287l-1.069-1.048L10.16,7.703L8.832,8.396l1.358,0.632L10.439,10.505zM17.234,12.721c-0.588-0.368-1.172-0.618-1.692-0.729c-0.492-0.089-1.039-0.149-1.425,0.374L2.562,30.788h6.68l9.669-15.416c0.303-0.576,0.012-1.041-0.283-1.447C18.303,13.508,17.822,13.09,17.234,12.721zM13.613,21.936c-0.254-0.396-0.74-0.857-1.373-1.254c-0.632-0.396-1.258-0.634-1.726-0.69l4.421-7.052c0.064-0.013,0.262-0.021,0.543,0.066c0.346,0.092,0.785,0.285,1.225,0.562c0.504,0.313,0.908,0.677,1.133,0.97c0.113,0.145,0.178,0.271,0.195,0.335c0.002,0.006,0.004,0.011,0.004,0.015L13.613,21.936z",
+ "raph_download": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM16,28.792c-1.549,0-2.806-1.256-2.806-2.806s1.256-2.806,2.806-2.806c1.55,0,2.806,1.256,2.806,2.806S17.55,28.792,16,28.792zM16,21.087l-7.858-6.562h3.469V5.747h8.779v8.778h3.468L16,21.087z",
+ "raph_firefox": "M28.4,22.469c0.479-0.964,0.851-1.991,1.095-3.066c0.953-3.661,0.666-6.854,0.666-6.854l-0.327,2.104c0,0-0.469-3.896-1.044-5.353c-0.881-2.231-1.273-2.214-1.274-2.21c0.542,1.379,0.494,2.169,0.483,2.288c-0.01-0.016-0.019-0.032-0.027-0.047c-0.131-0.324-0.797-1.819-2.225-2.878c-2.502-2.481-5.943-4.014-9.745-4.015c-4.056,0-7.705,1.745-10.238,4.525C5.444,6.5,5.183,5.938,5.159,5.317c0,0-0.002,0.002-0.006,0.005c0-0.011-0.003-0.021-0.003-0.031c0,0-1.61,1.247-1.436,4.612c-0.299,0.574-0.56,1.172-0.777,1.791c-0.375,0.817-0.75,2.004-1.059,3.746c0,0,0.133-0.422,0.399-0.988c-0.064,0.482-0.103,0.971-0.116,1.467c-0.09,0.845-0.118,1.865-0.039,3.088c0,0,0.032-0.406,0.136-1.021c0.834,6.854,6.667,12.165,13.743,12.165l0,0c1.86,0,3.636-0.37,5.256-1.036C24.938,27.771,27.116,25.196,28.4,22.469zM16.002,3.356c2.446,0,4.73,0.68,6.68,1.86c-2.274-0.528-3.433-0.261-3.423-0.248c0.013,0.015,3.384,0.589,3.981,1.411c0,0-1.431,0-2.856,0.41c-0.065,0.019,5.242,0.663,6.327,5.966c0,0-0.582-1.213-1.301-1.42c0.473,1.439,0.351,4.17-0.1,5.528c-0.058,0.174-0.118-0.755-1.004-1.155c0.284,2.037-0.018,5.268-1.432,6.158c-0.109,0.07,0.887-3.189,0.201-1.93c-4.093,6.276-8.959,2.539-10.934,1.208c1.585,0.388,3.267,0.108,4.242-0.559c0.982-0.672,1.564-1.162,2.087-1.047c0.522,0.117,0.87-0.407,0.464-0.872c-0.405-0.466-1.392-1.105-2.725-0.757c-0.94,0.247-2.107,1.287-3.886,0.233c-1.518-0.899-1.507-1.63-1.507-2.095c0-0.366,0.257-0.88,0.734-1.028c0.58,0.062,1.044,0.214,1.537,0.466c0.005-0.135,0.006-0.315-0.001-0.519c0.039-0.077,0.015-0.311-0.047-0.596c-0.036-0.287-0.097-0.582-0.19-0.851c0.01-0.002,0.017-0.007,0.021-0.021c0.076-0.344,2.147-1.544,2.299-1.659c0.153-0.114,0.55-0.378,0.506-1.183c-0.015-0.265-0.058-0.294-2.232-0.286c-0.917,0.003-1.425-0.894-1.589-1.245c0.222-1.231,0.863-2.11,1.919-2.704c0.02-0.011,0.015-0.021-0.008-0.027c0.219-0.127-2.524-0.006-3.76,1.604C9.674,8.045,9.219,7.95,8.71,7.95c-0.638,0-1.139,0.07-1.603,0.187c-0.05,0.013-0.122,0.011-0.208-0.001C6.769,8.04,6.575,7.88,6.365,7.672c0.161-0.18,0.324-0.356,0.495-0.526C9.201,4.804,12.43,3.357,16.002,3.356z",
+ "raph_ie": "M27.998,2.266c-2.12-1.91-6.925,0.382-9.575,1.93c-0.76-0.12-1.557-0.185-2.388-0.185c-3.349,0-6.052,0.985-8.106,2.843c-2.336,2.139-3.631,4.94-3.631,8.177c0,0.028,0.001,0.056,0.001,0.084c3.287-5.15,8.342-7.79,9.682-8.487c0.212-0.099,0.338,0.155,0.141,0.253c-0.015,0.042-0.015,0,0,0c-2.254,1.35-6.434,5.259-9.146,10.886l-0.003-0.007c-1.717,3.547-3.167,8.529-0.267,10.358c2.197,1.382,6.13-0.248,9.295-2.318c0.764,0.108,1.567,0.165,2.415,0.165c5.84,0,9.937-3.223,11.399-7.924l-8.022-0.014c-0.337,1.661-1.464,2.548-3.223,2.548c-2.21,0-3.729-1.211-3.828-4.012l15.228-0.014c0.028-0.578-0.042-0.985-0.042-1.436c0-5.251-3.143-9.355-8.255-10.663c2.081-1.294,5.974-3.209,7.848-1.681c1.407,1.14,0.633,3.533,0.295,4.518c-0.056,0.254,0.24,0.296,0.296,0.057C28.814,5.573,29.026,3.194,27.998,2.266zM13.272,25.676c-2.469,1.475-5.873,2.539-7.539,1.289c-1.243-0.935-0.696-3.468,0.398-5.938c0.664,0.992,1.495,1.886,2.473,2.63C9.926,24.651,11.479,25.324,13.272,25.676zM12.714,13.046c0.042-2.435,1.787-3.49,3.617-3.49c1.928,0,3.49,1.112,3.49,3.49H12.714z",
+ "raph_opera": "M15.954,2.046c-7.489,0-12.872,5.432-12.872,13.581c0,7.25,5.234,13.835,12.873,13.835c7.712,0,12.974-6.583,12.974-13.835C28.929,7.413,23.375,2.046,15.954,2.046zM15.952,26.548L15.952,26.548c-2.289,0-3.49-1.611-4.121-3.796c-0.284-1.037-0.458-2.185-0.563-3.341c-0.114-1.374-0.129-2.773-0.129-4.028c0-0.993,0.018-1.979,0.074-2.926c0.124-1.728,0.386-3.431,0.89-4.833c0.694-1.718,1.871-2.822,3.849-2.822c2.5,0,3.763,1.782,4.385,4.322c0.429,1.894,0.56,4.124,0.56,6.274c0,2.299-0.103,5.153-0.763,7.442C19.473,24.979,18.242,26.548,15.952,26.548z",
+ "raph_chrome": "M16.277,8.655c-2.879,0-5.227,2.181-5.227,4.854s2.348,4.854,5.227,4.854c2.879,0,5.227-2.181,5.227-4.854S19.156,8.655,16.277,8.655zM29.535,13.486c-0.369-1.819-1.068-3.052-1.727-3.995c0.05,0.129,0.09,0.259,0.138,0.388c-2.34-6.355-11.704-9.8-18.937-5.43c-0.056,0.27-0.073,0.538-0.073,0.804c0-0.051-0.006-0.098-0.004-0.15c-1.743-0.134-3.854,2.061-5.731,6.083c-0.953,2.277-1.298,4.77-0.414,7.693c0.516,1.706,1.328,3.456,2.499,4.814c3.471,4.027,8.788,5.67,11.884,4.835c0.004,0.001,0.009,0.003,0.014,0.004c5.969-0.125,10.494-4.228,12.125-9.569C29.896,17.035,29.934,15.457,29.535,13.486zM6.043,23.04c-0.96-1.112-1.755-2.651-2.299-4.452c-0.733-2.42-0.612-4.65,0.379-7.015C5.129,9.42,6.111,8.005,6.956,7.154c0.15,0.742,0.521,1.628,1.113,2.649c0.218,0.379,0.459,0.701,0.692,1.012c0.179,0.237,0.356,0.474,0.513,0.729c0.124,0.202,0.239,0.445,0.354,0.737c-0.239,2.754,0.892,5.138,3.148,6.679l-2.546,2.25l-0.202,0.171c-0.208,0.171-0.447,0.373-0.651,0.589c-1.36,1.444-0.25,2.831,0.286,3.498l0.068,0.087c0.237,0.297,0.513,0.62,0.815,0.938C8.963,25.725,7.375,24.585,6.043,23.04zM28.354,18.67c-1.6,5.232-5.937,8.7-11.07,8.859c-2.485-0.583-4.362-1.78-5.586-3.557c0.004-0.004,0.01-0.008,0.015-0.013l4.944-3.836c2.226-0.124,3.854-0.888,4.847-2.278c1.222-1.412,1.792-3.025,1.693-4.861c1.817,0.377,3.389,0.903,4.855,1.883l0.116,0.078l0.134,0.043c0.156,0.049,0.311,0.076,0.459,0.081C28.87,16.309,28.74,17.402,28.354,18.67zM28.609,14.037c-1.951-1.306-4.062-1.867-6.594-2.285c0.531,2.358-0.084,4.072-1.326,5.512c-0.882,1.235-2.382,1.822-4.394,1.875l-5.22,4.052c-0.497,0.409-0.591,0.819-0.282,1.229c0.849,1.277,1.929,2.202,3.122,2.878c-0.013,0-0.026,0.002-0.039,0.003c-0.001-0.001-0.004-0.002-0.006-0.004c-0.02,0.003-0.041,0.004-0.062,0.005c-0.08,0.001-0.16-0.001-0.239-0.01c-0.156-0.021-0.314-0.064-0.459-0.118c-0.898-0.333-1.89-1.352-2.597-2.239c-0.581-0.73-1.206-1.433-0.411-2.275c0.258-0.273,0.582-0.514,0.789-0.698l2.521-2.229c0.172-0.137,0.35-0.277,0.535-0.423c0.053-0.042,0.107-0.084,0.162-0.127c0.564-0.442,0.483-0.32-0.108-0.642c-2.419-1.32-3.677-3.614-3.354-6.389c-0.149-0.41-0.317-0.792-0.518-1.124c-0.363-0.6-0.834-1.102-1.194-1.723c-0.9-1.556-1.847-3.902,0.013-3.682c-0.005-0.053-0.002-0.11-0.005-0.164c0.094,2.001,1.526,3.823,1.742,4.888c0.078,0.382,0.294,0.705,0.612,0.28c2.538-3.395,6.069-3.053,8.328-1.312c0.443,0.34,0.684,0.755,1.084,1.11c0.154,0.138,0.328,0.259,0.535,0.351c0.743,0.332,1.807,0.312,2.607,0.434c1.371,0.208,2.707,0.464,3.971,0.812c0.25,0.03,0.424-0.004,0.521-0.101c0.211-0.208-0.002-0.887-0.121-1.263c0.277,0.805,0.536,1.609,0.773,2.415C29.176,13.701,29.133,14.208,28.609,14.037z",
+ "raph_safari": "M16.154,5.135c-0.504,0-1,0.031-1.488,0.089l-0.036-0.18c-0.021-0.104-0.06-0.198-0.112-0.283c0.381-0.308,0.625-0.778,0.625-1.306c0-0.927-0.751-1.678-1.678-1.678s-1.678,0.751-1.678,1.678c0,0.745,0.485,1.376,1.157,1.595c-0.021,0.105-0.021,0.216,0,0.328l0.033,0.167C7.645,6.95,3.712,11.804,3.712,17.578c0,6.871,5.571,12.441,12.442,12.441c6.871,0,12.441-5.57,12.441-12.441C28.596,10.706,23.025,5.135,16.154,5.135zM16.369,8.1c4.455,0,8.183,3.116,9.123,7.287l-0.576,0.234c-0.148-0.681-0.755-1.191-1.48-1.191c-0.837,0-1.516,0.679-1.516,1.516c0,0.075,0.008,0.148,0.018,0.221l-2.771-0.028c-0.054-0.115-0.114-0.226-0.182-0.333l3.399-5.11l0.055-0.083l-4.766,4.059c-0.352-0.157-0.74-0.248-1.148-0.256l0.086-0.018l-1.177-2.585c0.64-0.177,1.111-0.763,1.111-1.459c0-0.837-0.678-1.515-1.516-1.515c-0.075,0-0.147,0.007-0.219,0.018l0.058-0.634C15.357,8.141,15.858,8.1,16.369,8.1zM12.146,3.455c0-0.727,0.591-1.318,1.318-1.318c0.727,0,1.318,0.591,1.318,1.318c0,0.425-0.203,0.802-0.516,1.043c-0.183-0.123-0.413-0.176-0.647-0.13c-0.226,0.045-0.413,0.174-0.535,0.349C12.542,4.553,12.146,4.049,12.146,3.455zM7.017,17.452c0-4.443,3.098-8.163,7.252-9.116l0.297,0.573c-0.61,0.196-1.051,0.768-1.051,1.442c0,0.837,0.678,1.516,1.515,1.516c0.068,0,0.135-0.006,0.2-0.015l-0.058,2.845l0.052-0.011c-0.442,0.204-0.824,0.513-1.116,0.895l0.093-0.147l-1.574-0.603l1.172,1.239l0.026-0.042c-0.19,0.371-0.306,0.788-0.324,1.229l-0.003-0.016l-2.623,1.209c-0.199-0.604-0.767-1.041-1.438-1.041c-0.837,0-1.516,0.678-1.516,1.516c0,0.064,0.005,0.128,0.013,0.191l-0.783-0.076C7.063,18.524,7.017,17.994,7.017,17.452zM16.369,26.805c-4.429,0-8.138-3.078-9.106-7.211l0.691-0.353c0.146,0.686,0.753,1.2,1.482,1.2c0.837,0,1.515-0.679,1.515-1.516c0-0.105-0.011-0.207-0.031-0.307l2.858,0.03c0.045,0.095,0.096,0.187,0.15,0.276l-3.45,5.277l0.227-0.195l4.529-3.92c0.336,0.153,0.705,0.248,1.094,0.266l-0.019,0.004l1.226,2.627c-0.655,0.166-1.142,0.76-1.142,1.468c0,0.837,0.678,1.515,1.516,1.515c0.076,0,0.151-0.007,0.225-0.018l0.004,0.688C17.566,26.746,16.975,26.805,16.369,26.805zM18.662,26.521l-0.389-0.6c0.661-0.164,1.152-0.759,1.152-1.47c0-0.837-0.68-1.516-1.516-1.516c-0.066,0-0.13,0.005-0.193,0.014v-2.86l-0.025,0.004c0.409-0.185,0.77-0.459,1.055-0.798l1.516,0.659l-1.104-1.304c0.158-0.335,0.256-0.704,0.278-1.095l2.552-1.164c0.19,0.618,0.766,1.068,1.447,1.068c0.838,0,1.516-0.679,1.516-1.516c0-0.069-0.006-0.137-0.016-0.204l0.65,0.12c0.089,0.517,0.136,1.049,0.136,1.591C25.722,21.826,22.719,25.499,18.662,26.521z",
+ "raph_view": "M16,8.286C8.454,8.286,2.5,16,2.5,16s5.954,7.715,13.5,7.715c5.771,0,13.5-7.715,13.5-7.715S21.771,8.286,16,8.286zM16,20.807c-2.649,0-4.807-2.157-4.807-4.807s2.158-4.807,4.807-4.807s4.807,2.158,4.807,4.807S18.649,20.807,16,20.807zM16,13.194c-1.549,0-2.806,1.256-2.806,2.806c0,1.55,1.256,2.806,2.806,2.806c1.55,0,2.806-1.256,2.806-2.806C18.806,14.451,17.55,13.194,16,13.194z",
+ "raph_noview": "M11.478,17.568c-0.172-0.494-0.285-1.017-0.285-1.568c0-2.65,2.158-4.807,4.807-4.807c0.552,0,1.074,0.113,1.568,0.285l2.283-2.283C18.541,8.647,17.227,8.286,16,8.286C8.454,8.286,2.5,16,2.5,16s2.167,2.791,5.53,5.017L11.478,17.568zM23.518,11.185l-3.056,3.056c0.217,0.546,0.345,1.138,0.345,1.76c0,2.648-2.158,4.807-4.807,4.807c-0.622,0-1.213-0.128-1.76-0.345l-2.469,2.47c1.327,0.479,2.745,0.783,4.229,0.783c5.771,0,13.5-7.715,13.5-7.715S26.859,13.374,23.518,11.185zM25.542,4.917L4.855,25.604L6.27,27.02L26.956,6.332L25.542,4.917z",
+ "raph_cloud": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h15.875c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z",
+ "raph_cloud2": "M7.562,24.812c-3.313,0-6-2.687-6-6l0,0c0.002-2.659,1.734-4.899,4.127-5.684l0,0c0.083-2.26,1.937-4.064,4.216-4.066l0,0c0.73,0,1.415,0.19,2.01,0.517l0,0c1.266-2.105,3.57-3.516,6.208-3.517l0,0c3.947,0.002,7.157,3.155,7.248,7.079l0,0c2.362,0.804,4.062,3.034,4.064,5.671l0,0c0,3.313-2.687,6-6,6l0,0H7.562L7.562,24.812zM24.163,14.887c-0.511-0.095-0.864-0.562-0.815-1.079l0,0c0.017-0.171,0.027-0.336,0.027-0.497l0,0c-0.007-2.899-2.352-5.245-5.251-5.249l0,0c-2.249-0.002-4.162,1.418-4.911,3.41l0,0c-0.122,0.323-0.406,0.564-0.748,0.63l0,0c-0.34,0.066-0.694-0.052-0.927-0.309l0,0c-0.416-0.453-0.986-0.731-1.633-0.731l0,0c-1.225,0.002-2.216,0.993-2.22,2.218l0,0c0,0.136,0.017,0.276,0.045,0.424l0,0c0.049,0.266-0.008,0.54-0.163,0.762l0,0c-0.155,0.223-0.392,0.371-0.657,0.414l0,0c-1.9,0.313-3.352,1.949-3.35,3.931l0,0c0.004,2.209,1.792,3.995,4.001,4.001l0,0h15.874c2.209-0.006,3.994-1.792,3.999-4.001l0,0C27.438,16.854,26.024,15.231,24.163,14.887L24.163,14.887",
+ "raph_cloudDown": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h3.404l-0.707-0.707c-0.377-0.377-0.585-0.879-0.585-1.413c0-0.533,0.208-1.035,0.585-1.412l0.556-0.557c0.4-0.399,0.937-0.628,1.471-0.628c0.027,0,0.054,0,0.08,0.002v-0.472c0-1.104,0.898-2.002,2-2.002h3.266c1.103,0,2,0.898,2,2.002v0.472c0.027-0.002,0.054-0.002,0.081-0.002c0.533,0,1.07,0.229,1.47,0.63l0.557,0.552c0.78,0.781,0.78,2.05,0,2.828l-0.706,0.707h2.403c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M21.033,20.986l-0.556-0.555c-0.39-0.389-0.964-0.45-1.276-0.137c-0.312,0.312-0.568,0.118-0.568-0.432v-1.238c0-0.55-0.451-1-1-1h-3.265c-0.55,0-1,0.45-1,1v1.238c0,0.55-0.256,0.744-0.569,0.432c-0.312-0.313-0.887-0.252-1.276,0.137l-0.556,0.555c-0.39,0.389-0.39,1.024-0.001,1.413l4.328,4.331c0.194,0.194,0.451,0.291,0.707,0.291s0.512-0.097,0.707-0.291l4.327-4.331C21.424,22.011,21.423,21.375,21.033,20.986z",
+ "raph_cloudUp": "M24.345,13.904c0.019-0.195,0.03-0.392,0.03-0.591c0-3.452-2.798-6.25-6.25-6.25c-2.679,0-4.958,1.689-5.847,4.059c-0.589-0.646-1.429-1.059-2.372-1.059c-1.778,0-3.219,1.441-3.219,3.219c0,0.21,0.023,0.415,0.062,0.613c-2.372,0.391-4.187,2.436-4.187,4.918c0,2.762,2.239,5,5,5h2.312c-0.126-0.266-0.2-0.556-0.2-0.859c0-0.535,0.208-1.04,0.587-1.415l4.325-4.329c0.375-0.377,0.877-0.585,1.413-0.585c0.54,0,1.042,0.21,1.417,0.587l4.323,4.329c0.377,0.373,0.585,0.878,0.585,1.413c0,0.304-0.073,0.594-0.2,0.859h1.312c2.762,0,5-2.238,5-5C28.438,16.362,26.672,14.332,24.345,13.904z M16.706,17.916c-0.193-0.195-0.45-0.291-0.706-0.291s-0.512,0.096-0.707,0.291l-4.327,4.33c-0.39,0.389-0.389,1.025,0.001,1.414l0.556,0.555c0.39,0.389,0.964,0.449,1.276,0.137s0.568-0.119,0.568,0.432v1.238c0,0.549,0.451,1,1,1h3.265c0.551,0,1-0.451,1-1v-1.238c0-0.551,0.256-0.744,0.569-0.432c0.312,0.312,0.887,0.252,1.276-0.137l0.556-0.555c0.39-0.389,0.39-1.025,0.001-1.414L16.706,17.916z",
+ "raph_location": "M16,3.5c-4.142,0-7.5,3.358-7.5,7.5c0,4.143,7.5,18.121,7.5,18.121S23.5,15.143,23.5,11C23.5,6.858,20.143,3.5,16,3.5z M16,14.584c-1.979,0-3.584-1.604-3.584-3.584S14.021,7.416,16,7.416S19.584,9.021,19.584,11S17.979,14.584,16,14.584z",
+ "raph_volume0": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z",
+ "raph_volume1": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z",
+ "raph_volume2": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z",
+ "raph_volume3": "M4.998,12.127v7.896h4.495l6.729,5.526l0.004-18.948l-6.73,5.526H4.998z M18.806,11.219c-0.393-0.389-1.024-0.389-1.415,0.002c-0.39,0.391-0.39,1.024,0.002,1.416v-0.002c0.863,0.864,1.395,2.049,1.395,3.366c0,1.316-0.531,2.497-1.393,3.361c-0.394,0.389-0.394,1.022-0.002,1.415c0.195,0.195,0.451,0.293,0.707,0.293c0.257,0,0.513-0.098,0.708-0.293c1.222-1.22,1.98-2.915,1.979-4.776C20.788,14.136,20.027,12.439,18.806,11.219z M21.101,8.925c-0.393-0.391-1.024-0.391-1.413,0c-0.392,0.391-0.392,1.025,0,1.414c1.45,1.451,2.344,3.447,2.344,5.661c0,2.212-0.894,4.207-2.342,5.659c-0.392,0.39-0.392,1.023,0,1.414c0.195,0.195,0.451,0.293,0.708,0.293c0.256,0,0.512-0.098,0.707-0.293c1.808-1.809,2.929-4.315,2.927-7.073C24.033,13.24,22.912,10.732,21.101,8.925z M23.28,6.746c-0.393-0.391-1.025-0.389-1.414,0.002c-0.391,0.389-0.391,1.023,0.002,1.413h-0.002c2.009,2.009,3.248,4.773,3.248,7.839c0,3.063-1.239,5.828-3.246,7.838c-0.391,0.39-0.391,1.023,0.002,1.415c0.194,0.194,0.45,0.291,0.706,0.291s0.513-0.098,0.708-0.293c2.363-2.366,3.831-5.643,3.829-9.251C27.115,12.389,25.647,9.111,23.28,6.746z",
+ "raph_key": "M18.386,16.009l0.009-0.006l-0.58-0.912c1.654-2.226,1.876-5.319,0.3-7.8c-2.043-3.213-6.303-4.161-9.516-2.118c-3.212,2.042-4.163,6.302-2.12,9.517c1.528,2.402,4.3,3.537,6.944,3.102l0.424,0.669l0.206,0.045l0.779-0.447l-0.305,1.377l2.483,0.552l-0.296,1.325l1.903,0.424l-0.68,3.06l1.406,0.313l-0.424,1.906l4.135,0.918l0.758-3.392L18.386,16.009z M10.996,8.944c-0.685,0.436-1.593,0.233-2.029-0.452C8.532,7.807,8.733,6.898,9.418,6.463s1.594-0.233,2.028,0.452C11.883,7.6,11.68,8.509,10.996,8.944z",
+ "raph_ruler": "M6.63,21.796l-5.122,5.121h25.743V1.175L6.63,21.796zM18.702,10.48c0.186-0.183,0.48-0.183,0.664,0l1.16,1.159c0.184,0.183,0.186,0.48,0.002,0.663c-0.092,0.091-0.213,0.137-0.332,0.137c-0.121,0-0.24-0.046-0.33-0.137l-1.164-1.159C18.519,10.96,18.519,10.664,18.702,10.48zM17.101,12.084c0.184-0.183,0.48-0.183,0.662,0l2.156,2.154c0.184,0.183,0.184,0.48,0.002,0.661c-0.092,0.092-0.213,0.139-0.334,0.139s-0.24-0.046-0.33-0.137l-2.156-2.154C16.917,12.564,16.917,12.267,17.101,12.084zM15.497,13.685c0.184-0.183,0.48-0.183,0.664,0l1.16,1.161c0.184,0.183,0.182,0.48-0.002,0.663c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.24-0.046-0.332-0.138l-1.16-1.16C15.314,14.166,15.314,13.868,15.497,13.685zM13.896,15.288c0.184-0.183,0.48-0.181,0.664,0.002l1.158,1.159c0.183,0.184,0.183,0.48,0,0.663c-0.092,0.092-0.212,0.138-0.332,0.138c-0.119,0-0.24-0.046-0.332-0.138l-1.158-1.161C13.713,15.767,13.713,15.471,13.896,15.288zM12.293,16.892c0.183-0.184,0.479-0.184,0.663,0l2.154,2.153c0.184,0.184,0.184,0.481,0,0.665c-0.092,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-2.153-2.155C12.11,17.371,12.11,17.075,12.293,16.892zM10.302,24.515c-0.091,0.093-0.212,0.139-0.332,0.139c-0.119,0-0.238-0.045-0.33-0.137l-2.154-2.153c-0.184-0.183-0.184-0.479,0-0.663s0.479-0.184,0.662,0l2.154,2.153C10.485,24.036,10.485,24.332,10.302,24.515zM10.912,21.918c-0.093,0.093-0.214,0.139-0.333,0.139c-0.12,0-0.24-0.045-0.33-0.137l-1.162-1.161c-0.184-0.183-0.184-0.479,0-0.66c0.184-0.185,0.48-0.187,0.664-0.003l1.161,1.162C11.095,21.438,11.095,21.735,10.912,21.918zM12.513,20.316c-0.092,0.092-0.211,0.138-0.332,0.138c-0.119,0-0.239-0.046-0.331-0.138l-1.159-1.16c-0.184-0.184-0.184-0.48,0-0.664s0.48-0.182,0.663,0.002l1.159,1.161C12.696,19.838,12.696,20.135,12.513,20.316zM22.25,21.917h-8.67l8.67-8.67V21.917zM22.13,10.7c-0.09,0.092-0.211,0.138-0.33,0.138c-0.121,0-0.242-0.046-0.334-0.138l-1.16-1.159c-0.184-0.183-0.184-0.479,0-0.663c0.182-0.183,0.479-0.183,0.662,0l1.16,1.159C22.312,10.221,22.313,10.517,22.13,10.7zM24.726,10.092c-0.092,0.092-0.213,0.137-0.332,0.137s-0.24-0.045-0.33-0.137l-2.154-2.154c-0.184-0.183-0.184-0.481,0-0.664s0.482-0.181,0.664,0.002l2.154,2.154C24.911,9.613,24.909,9.91,24.726,10.092z",
+ "raph_power": "M21.816,3.999c-0.993-0.481-2.189-0.068-2.673,0.927c-0.482,0.995-0.066,2.191,0.927,2.673c3.115,1.516,5.265,4.705,5.263,8.401c-0.01,5.154-4.18,9.324-9.333,9.333c-5.154-0.01-9.324-4.18-9.334-9.333c-0.002-3.698,2.149-6.89,5.267-8.403c0.995-0.482,1.408-1.678,0.927-2.673c-0.482-0.993-1.676-1.409-2.671-0.927C5.737,6.152,2.667,10.72,2.665,16C2.667,23.364,8.634,29.332,16,29.334c7.365-0.002,13.333-5.97,13.334-13.334C29.332,10.722,26.266,6.157,21.816,3.999z M16,13.833c1.104,0,1.999-0.894,1.999-2V2.499C17.999,1.394,17.104,0.5,16,0.5c-1.106,0-2,0.895-2,1.999v9.333C14,12.938,14.894,13.833,16,13.833z",
+ "raph_unlock": "M20.375,12.833h-2.209V10c0,0,0,0,0-0.001c0-2.389,1.945-4.333,4.334-4.333c2.391,0,4.335,1.944,4.335,4.333c0,0,0,0,0,0v2.834h2V9.999h-0.001c-0.001-3.498-2.836-6.333-6.334-6.333S16.166,6.502,16.166,10v2.833H3.125V25h17.25V12.833z",
+ "raph_flag": "M26.04,9.508c0.138-0.533,0.15-1.407,0.028-1.943l-0.404-1.771c-0.122-0.536-0.665-1.052-1.207-1.146l-3.723-0.643c-0.542-0.094-1.429-0.091-1.97,0.007l-4.033,0.726c-0.542,0.098-1.429,0.108-1.973,0.023L8.812,4.146C8.817,4.165,8.826,4.182,8.83,4.201l2.701,12.831l1.236,0.214c0.542,0.094,1.428,0.09,1.97-0.007l4.032-0.727c0.541-0.097,1.429-0.107,1.973-0.022l4.329,0.675c0.544,0.085,0.906-0.288,0.807-0.829l-0.485-2.625c-0.1-0.541-0.069-1.419,0.068-1.952L26.04,9.508zM6.667,3.636C6.126,3.75,5.78,4.279,5.894,4.819l5.763,27.378H13.7L7.852,4.409C7.736,3.867,7.207,3.521,6.667,3.636z",
+ "raph_tag": "M14.263,2.826H7.904L2.702,8.028v6.359L18.405,30.09l11.561-11.562L14.263,2.826zM6.495,8.859c-0.619-0.619-0.619-1.622,0-2.24C7.114,6,8.117,6,8.736,6.619c0.62,0.62,0.619,1.621,0,2.241C8.117,9.479,7.114,9.479,6.495,8.859z",
+ "raph_search": "M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",
+ "raph_zoomout": "M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM8.854,11.884v4.001l9.665-0.001v-3.999L8.854,11.884z",
+ "raph_zoomin": "M22.646,19.307c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127l3.535-3.537L22.646,19.307zM13.688,20.369c-3.582-0.008-6.478-2.904-6.484-6.484c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486C20.165,17.465,17.267,20.361,13.688,20.369zM15.687,9.051h-4v2.833H8.854v4.001h2.833v2.833h4v-2.834h2.832v-3.999h-2.833V9.051z",
+ "raph_cross": "M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248",
+ "raph_check": "M2.379,14.729 5.208,11.899 12.958,19.648 25.877,6.733 28.707,9.561 12.958,25.308",
+ "raph_settings": "M16.015,12.03c-2.156,0-3.903,1.747-3.903,3.903c0,2.155,1.747,3.903,3.903,3.903c0.494,0,0.962-0.102,1.397-0.27l0.836,1.285l1.359-0.885l-0.831-1.276c0.705-0.706,1.142-1.681,1.142-2.757C19.918,13.777,18.171,12.03,16.015,12.03zM16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM26.174,20.809c-0.241,0.504-0.513,0.99-0.826,1.45L22.19,21.58c-0.481,0.526-1.029,0.994-1.634,1.385l0.119,3.202c-0.507,0.23-1.028,0.421-1.569,0.57l-1.955-2.514c-0.372,0.051-0.75,0.086-1.136,0.086c-0.356,0-0.706-0.029-1.051-0.074l-1.945,2.5c-0.541-0.151-1.065-0.342-1.57-0.569l0.117-3.146c-0.634-0.398-1.208-0.88-1.712-1.427L6.78,22.251c-0.313-0.456-0.583-0.944-0.826-1.448l2.088-2.309c-0.226-0.703-0.354-1.451-0.385-2.223l-2.768-1.464c0.055-0.563,0.165-1.107,0.301-1.643l3.084-0.427c0.29-0.702,0.675-1.352,1.135-1.942L8.227,7.894c0.399-0.389,0.83-0.744,1.283-1.07l2.663,1.672c0.65-0.337,1.349-0.593,2.085-0.75l0.968-3.001c0.278-0.021,0.555-0.042,0.837-0.042c0.282,0,0.56,0.022,0.837,0.042l0.976,3.028c0.72,0.163,1.401,0.416,2.036,0.75l2.704-1.697c0.455,0.326,0.887,0.681,1.285,1.07l-1.216,2.986c0.428,0.564,0.793,1.181,1.068,1.845l3.185,0.441c0.135,0.535,0.247,1.081,0.302,1.643l-2.867,1.516c-0.034,0.726-0.15,1.43-0.355,2.1L26.174,20.809z",
+ "raph_settingsalt": "M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM24.386,14.968c-1.451,1.669-3.706,2.221-5.685,1.586l-7.188,8.266c-0.766,0.88-2.099,0.97-2.979,0.205s-0.973-2.099-0.208-2.979l7.198-8.275c-0.893-1.865-0.657-4.164,0.787-5.824c1.367-1.575,3.453-2.151,5.348-1.674l-2.754,3.212l0.901,2.621l2.722,0.529l2.761-3.22C26.037,11.229,25.762,13.387,24.386,14.968z",
+ "raph_feed": "M4.135,16.762c3.078,0,5.972,1.205,8.146,3.391c2.179,2.187,3.377,5.101,3.377,8.202h4.745c0-9.008-7.299-16.335-16.269-16.335V16.762zM4.141,8.354c10.973,0,19.898,8.975,19.898,20.006h4.743c0-13.646-11.054-24.749-24.642-24.749V8.354zM10.701,25.045c0,1.815-1.471,3.287-3.285,3.287s-3.285-1.472-3.285-3.287c0-1.813,1.471-3.285,3.285-3.285S10.701,23.231,10.701,25.045z",
+ "raph_bug": "M28.589,10.903l-5.828,1.612c-0.534-1.419-1.338-2.649-2.311-3.628l3.082-5.44c0.271-0.48,0.104-1.092-0.38-1.365c-0.479-0.271-1.09-0.102-1.36,0.377l-2.924,5.162c-0.604-0.383-1.24-0.689-1.9-0.896c-0.416-1.437-1.652-2.411-3.058-2.562c-0.001-0.004-0.002-0.008-0.003-0.012c-0.061-0.242-0.093-0.46-0.098-0.65c-0.005-0.189,0.012-0.351,0.046-0.479c0.037-0.13,0.079-0.235,0.125-0.317c0.146-0.26,0.34-0.43,0.577-0.509c0.023,0.281,0.142,0.482,0.352,0.601c0.155,0.088,0.336,0.115,0.546,0.086c0.211-0.031,0.376-0.152,0.496-0.363c0.105-0.186,0.127-0.389,0.064-0.607c-0.064-0.219-0.203-0.388-0.414-0.507c-0.154-0.087-0.314-0.131-0.482-0.129c-0.167,0.001-0.327,0.034-0.481,0.097c-0.153,0.063-0.296,0.16-0.429,0.289c-0.132,0.129-0.241,0.271-0.33,0.426c-0.132,0.234-0.216,0.496-0.25,0.783c-0.033,0.286-0.037,0.565-0.009,0.84c0.017,0.16,0.061,0.301,0.094,0.449c-0.375-0.021-0.758,0.002-1.14,0.108c-0.482,0.133-0.913,0.36-1.28,0.653c-0.052-0.172-0.098-0.344-0.18-0.518c-0.116-0.249-0.263-0.486-0.438-0.716c-0.178-0.229-0.384-0.41-0.618-0.543C9.904,3.059,9.737,2.994,9.557,2.951c-0.18-0.043-0.352-0.052-0.516-0.027s-0.318,0.08-0.463,0.164C8.432,3.172,8.318,3.293,8.23,3.445C8.111,3.656,8.08,3.873,8.136,4.092c0.058,0.221,0.181,0.384,0.367,0.49c0.21,0.119,0.415,0.138,0.611,0.056C9.31,4.556,9.451,4.439,9.539,4.283c0.119-0.21,0.118-0.443-0.007-0.695c0.244-0.055,0.497-0.008,0.757,0.141c0.081,0.045,0.171,0.115,0.27,0.208c0.097,0.092,0.193,0.222,0.286,0.388c0.094,0.166,0.179,0.368,0.251,0.608c0.013,0.044,0.023,0.098,0.035,0.146c-0.911,0.828-1.357,2.088-1.098,3.357c-0.582,0.584-1.072,1.27-1.457,2.035l-5.16-2.926c-0.48-0.271-1.092-0.102-1.364,0.377C1.781,8.404,1.95,9.016,2.43,9.289l5.441,3.082c-0.331,1.34-0.387,2.807-0.117,4.297l-5.828,1.613c-0.534,0.147-0.846,0.699-0.698,1.231c0.147,0.53,0.697,0.843,1.231,0.694l5.879-1.627c0.503,1.057,1.363,2.28,2.371,3.443l-3.194,5.639c-0.272,0.481-0.104,1.092,0.378,1.363c0.239,0.137,0.512,0.162,0.758,0.094c0.248-0.068,0.469-0.229,0.604-0.471l2.895-5.109c2.7,2.594,5.684,4.123,5.778,1.053c1.598,2.56,3.451-0.338,4.502-3.976l5.203,2.947c0.24,0.138,0.514,0.162,0.762,0.094c0.246-0.067,0.467-0.229,0.603-0.471c0.272-0.479,0.104-1.091-0.377-1.362l-5.701-3.229c0.291-1.505,0.422-2.983,0.319-4.138l5.886-1.627c0.53-0.147,0.847-0.697,0.696-1.229C29.673,11.068,29.121,10.756,28.589,10.903z",
+ "raph_link": "M15.667,4.601c-1.684,1.685-2.34,3.985-2.025,6.173l3.122-3.122c0.004-0.005,0.014-0.008,0.016-0.012c0.21-0.403,0.464-0.789,0.802-1.126c1.774-1.776,4.651-1.775,6.428,0c1.775,1.773,1.777,4.652,0.002,6.429c-0.34,0.34-0.727,0.593-1.131,0.804c-0.004,0.002-0.006,0.006-0.01,0.01l-3.123,3.123c2.188,0.316,4.492-0.34,6.176-2.023c2.832-2.832,2.83-7.423,0-10.255C23.09,1.77,18.499,1.77,15.667,4.601zM14.557,22.067c-0.209,0.405-0.462,0.791-0.801,1.131c-1.775,1.774-4.656,1.774-6.431,0c-1.775-1.774-1.775-4.653,0-6.43c0.339-0.338,0.725-0.591,1.128-0.8c0.004-0.006,0.005-0.012,0.011-0.016l3.121-3.123c-2.187-0.316-4.489,0.342-6.172,2.024c-2.831,2.831-2.83,7.423,0,10.255c2.833,2.831,7.424,2.831,10.257,0c1.684-1.684,2.342-3.986,2.023-6.175l-3.125,3.123C14.565,22.063,14.561,22.065,14.557,22.067zM9.441,18.885l2.197,2.197c0.537,0.537,1.417,0.537,1.953,0l8.302-8.302c0.539-0.536,0.539-1.417,0.002-1.952l-2.199-2.197c-0.536-0.539-1.416-0.539-1.952-0.002l-8.302,8.303C8.904,17.469,8.904,18.349,9.441,18.885z",
+ "raph_calendar": "M11.758,15.318c0.312-0.3,0.408-0.492,0.408-0.492h0.024c0,0-0.012,0.264-0.012,0.528v5.469h-1.871v1.031h4.87v-1.031H13.33v-7.436h-1.055l-2.027,1.967l0.719,0.744L11.758,15.318zM16.163,21.207c0,0.205,0.024,0.42,0.06,0.647h5.457v-1.031h-4.197c0.023-1.931,4.065-2.362,4.065-5.146c0-1.463-1.114-2.436-2.674-2.436c-1.907,0-2.675,1.607-2.675,1.607l0.875,0.587c0,0,0.6-1.08,1.716-1.08c0.887,0,1.522,0.563,1.522,1.403C20.312,17.754,16.163,18.186,16.163,21.207zM12,3.604h-2v3.335h2V3.604zM23,4.77v3.17h-4V4.77h-6v3.168H9.002V4.77H6.583v21.669h18.833V4.77H23zM24.417,25.438H7.584V10.522h16.833V25.438zM22,3.604h-2v3.335h2V3.604z",
+ "raph_picker": "M22.221,10.853c-0.111-0.414-0.261-0.412,0.221-1.539l1.66-3.519c0.021-0.051,0.2-0.412,0.192-0.946c0.015-0.529-0.313-1.289-1.119-1.642c-1.172-0.555-1.17-0.557-2.344-1.107c-0.784-0.396-1.581-0.171-1.979,0.179c-0.42,0.333-0.584,0.7-0.609,0.75L16.58,6.545c-0.564,1.084-0.655,0.97-1.048,1.147c-0.469,0.129-1.244,0.558-1.785,1.815c-1.108,2.346-1.108,2.346-1.108,2.346l-0.276,0.586l1.17,0.553l-3.599,7.623c-0.38,0.828-0.166,1.436-0.166,2.032c0.01,0.627-0.077,1.509-0.876,3.21l-0.276,0.586l3.517,1.661l0.276-0.585c0.808-1.699,1.431-2.326,1.922-2.717c0.46-0.381,1.066-0.6,1.465-1.42l3.599-7.618l1.172,0.554l0.279-0.589c0,0,0,0,1.105-2.345C22.578,12.166,22.419,11.301,22.221,10.853zM14.623,22.83c-0.156,0.353-0.413,0.439-1.091,0.955c-0.577,0.448-1.264,1.172-2.009,2.6l-1.191-0.562c0.628-1.48,0.75-2.474,0.73-3.203c-0.031-0.851-0.128-1.104,0.045-1.449l3.599-7.621l3.517,1.662L14.623,22.83z",
+ "raph_no": "M16,2.939C9.006,2.942,3.338,8.61,3.335,15.605C3.335,22.6,9.005,28.268,16,28.27c6.994-0.002,12.662-5.67,12.664-12.664C28.663,8.61,22.995,2.939,16,2.939zM25.663,15.605c-0.003,1.943-0.583,3.748-1.569,5.264L10.736,7.513c1.515-0.988,3.32-1.569,5.265-1.573C21.337,5.951,25.654,10.269,25.663,15.605zM6.335,15.605c0.004-1.943,0.584-3.75,1.573-5.266l13.355,13.357c-1.516,0.986-3.32,1.566-5.264,1.569C10.664,25.26,6.346,20.941,6.335,15.605z",
+ "raph_commandline": "M2.021,9.748L2.021,9.748V9.746V9.748zM2.022,9.746l5.771,5.773l-5.772,5.771l2.122,2.123l7.894-7.895L4.143,7.623L2.022,9.746zM12.248,23.269h14.419V20.27H12.248V23.269zM16.583,17.019h10.084V14.02H16.583V17.019zM12.248,7.769v3.001h14.419V7.769H12.248z",
+ "raph_photo": "M24.25,10.25H20.5v-1.5h-9.375v1.5h-3.75c-1.104,0-2,0.896-2,2v10.375c0,1.104,0.896,2,2,2H24.25c1.104,0,2-0.896,2-2V12.25C26.25,11.146,25.354,10.25,24.25,10.25zM15.812,23.499c-3.342,0-6.06-2.719-6.06-6.061c0-3.342,2.718-6.062,6.06-6.062s6.062,2.72,6.062,6.062C21.874,20.78,19.153,23.499,15.812,23.499zM15.812,13.375c-2.244,0-4.062,1.819-4.062,4.062c0,2.244,1.819,4.062,4.062,4.062c2.244,0,4.062-1.818,4.062-4.062C19.875,15.194,18.057,13.375,15.812,13.375z",
+ "raph_printer": "M24.569,12.125h-2.12c-0.207-1.34-1.247-2.759-2.444-3.967c-1.277-1.24-2.654-2.234-3.784-2.37c-0.062-0.008-0.124-0.014-0.198-0.015H8.594c-0.119,0-0.235,0.047-0.319,0.132c-0.083,0.083-0.132,0.2-0.132,0.32v5.9H6.069c-1.104,0-2,0.896-2,2V23h4.074v2.079c0,0.118,0.046,0.23,0.132,0.318c0.086,0.085,0.199,0.131,0.319,0.131h13.445c0.118,0,0.232-0.046,0.318-0.131s0.138-0.199,0.138-0.318V23h4.074v-8.875C26.569,13.021,25.674,12.125,24.569,12.125zM21.589,24.626H9.043V21.5h12.546V24.626zM21.589,13.921c0-0.03,0-0.063-0.003-0.096c-0.015-0.068-0.062-0.135-0.124-0.2H9.043v-6.95h6.987v0.001c0.305-0.019,0.567,0.282,0.769,0.971c0.183,0.655,0.229,1.509,0.229,2.102c0.001,0.433-0.019,0.725-0.019,0.725l-0.037,0.478l0.48,0.005c0.002,0,1.109,0.014,2.196,0.26c1.044,0.226,1.86,0.675,1.938,1.184c0.003,0.045,0.003,0.091,0.003,0.133V13.921z",
+ "export": "M24.086,20.904c-1.805,3.113-5.163,5.212-9.023,5.219c-5.766-0.01-10.427-4.672-10.438-10.435C4.636,9.922,9.297,5.261,15.063,5.25c3.859,0.007,7.216,2.105,9.022,5.218l3.962,2.284l0.143,0.082C26.879,6.784,21.504,2.25,15.063,2.248C7.64,2.25,1.625,8.265,1.624,15.688c0.002,7.42,6.017,13.435,13.439,13.437c6.442-0.002,11.819-4.538,13.127-10.589l-0.141,0.081L24.086,20.904zM28.4,15.688l-7.15-4.129v2.297H10.275v3.661H21.25v2.297L28.4,15.688z",
+ "import": "M15.067,2.25c-5.979,0-11.035,3.91-12.778,9.309h3.213c1.602-3.705,5.271-6.301,9.565-6.309c5.764,0.01,10.428,4.674,10.437,10.437c-0.009,5.764-4.673,10.428-10.437,10.438c-4.294-0.007-7.964-2.605-9.566-6.311H2.289c1.744,5.399,6.799,9.31,12.779,9.312c7.419-0.002,13.437-6.016,13.438-13.438C28.504,8.265,22.486,2.252,15.067,2.25zM10.918,19.813l7.15-4.126l-7.15-4.129v2.297H-0.057v3.661h10.975V19.813z",
+ "raph_run": "M17.41,20.395l-0.778-2.723c0.228-0.2,0.442-0.414,0.644-0.643l2.721,0.778c0.287-0.418,0.534-0.862,0.755-1.323l-2.025-1.96c0.097-0.288,0.181-0.581,0.241-0.883l2.729-0.684c0.02-0.252,0.039-0.505,0.039-0.763s-0.02-0.51-0.039-0.762l-2.729-0.684c-0.061-0.302-0.145-0.595-0.241-0.883l2.026-1.96c-0.222-0.46-0.469-0.905-0.756-1.323l-2.721,0.777c-0.201-0.228-0.416-0.442-0.644-0.643l0.778-2.722c-0.418-0.286-0.863-0.534-1.324-0.755l-1.96,2.026c-0.287-0.097-0.581-0.18-0.883-0.241l-0.683-2.73c-0.253-0.019-0.505-0.039-0.763-0.039s-0.51,0.02-0.762,0.039l-0.684,2.73c-0.302,0.061-0.595,0.144-0.883,0.241l-1.96-2.026C7.048,3.463,6.604,3.71,6.186,3.997l0.778,2.722C6.736,6.919,6.521,7.134,6.321,7.361L3.599,6.583C3.312,7.001,3.065,7.446,2.844,7.907l2.026,1.96c-0.096,0.288-0.18,0.581-0.241,0.883l-2.73,0.684c-0.019,0.252-0.039,0.505-0.039,0.762s0.02,0.51,0.039,0.763l2.73,0.684c0.061,0.302,0.145,0.595,0.241,0.883l-2.026,1.96c0.221,0.46,0.468,0.905,0.755,1.323l2.722-0.778c0.2,0.229,0.415,0.442,0.643,0.643l-0.778,2.723c0.418,0.286,0.863,0.533,1.323,0.755l1.96-2.026c0.288,0.097,0.581,0.181,0.883,0.241l0.684,2.729c0.252,0.02,0.505,0.039,0.763,0.039s0.51-0.02,0.763-0.039l0.683-2.729c0.302-0.061,0.596-0.145,0.883-0.241l1.96,2.026C16.547,20.928,16.992,20.681,17.41,20.395zM11.798,15.594c-1.877,0-3.399-1.522-3.399-3.399s1.522-3.398,3.399-3.398s3.398,1.521,3.398,3.398S13.675,15.594,11.798,15.594zM27.29,22.699c0.019-0.547-0.06-1.104-0.23-1.654l1.244-1.773c-0.188-0.35-0.4-0.682-0.641-0.984l-2.122,0.445c-0.428-0.364-0.915-0.648-1.436-0.851l-0.611-2.079c-0.386-0.068-0.777-0.105-1.173-0.106l-0.974,1.936c-0.279,0.054-0.558,0.128-0.832,0.233c-0.257,0.098-0.497,0.22-0.727,0.353L17.782,17.4c-0.297,0.262-0.568,0.545-0.813,0.852l0.907,1.968c-0.259,0.495-0.437,1.028-0.519,1.585l-1.891,1.06c0.019,0.388,0.076,0.776,0.164,1.165l2.104,0.519c0.231,0.524,0.541,0.993,0.916,1.393l-0.352,2.138c0.32,0.23,0.66,0.428,1.013,0.6l1.715-1.32c0.536,0.141,1.097,0.195,1.662,0.15l1.452,1.607c0.2-0.057,0.399-0.118,0.596-0.193c0.175-0.066,0.34-0.144,0.505-0.223l0.037-2.165c0.455-0.339,0.843-0.747,1.152-1.206l2.161-0.134c0.152-0.359,0.279-0.732,0.368-1.115L27.29,22.699zM23.127,24.706c-1.201,0.458-2.545-0.144-3.004-1.345s0.143-2.546,1.344-3.005c1.201-0.458,2.547,0.144,3.006,1.345C24.931,22.902,24.328,24.247,23.127,24.706z",
+ "raph_magnet": "M20.812,19.5h5.002v-6.867c-0.028-1.706-0.61-3.807-2.172-5.841c-1.539-2.014-4.315-3.72-7.939-3.687C12.076,3.073,9.3,4.779,7.762,6.792C6.2,8.826,5.617,10.928,5.588,12.634V19.5h5v-6.866c-0.027-0.377,0.303-1.789,1.099-2.748c0.819-0.979,1.848-1.747,4.014-1.778c2.165,0.032,3.195,0.799,4.013,1.778c0.798,0.959,1.126,2.372,1.099,2.748V19.5L20.812,19.5zM25.814,25.579c0,0,0-2.354,0-5.079h-5.002c0,2.727,0,5.08,0,5.08l5.004-0.001H25.814zM5.588,25.58h5c0,0,0-2.354,0-5.08h-5C5.588,23.227,5.588,25.58,5.588,25.58z",
+ "raph_nomagnet": "M10.59,17.857v-5.225c-0.027-0.376,0.303-1.789,1.099-2.748c0.819-0.979,1.849-1.748,4.014-1.778c1.704,0.026,2.699,0.508,3.447,1.189l3.539-3.539c-1.616-1.526-4.01-2.679-6.986-2.652C12.077,3.073,9.3,4.779,7.762,6.793C6.2,8.826,5.617,10.928,5.59,12.634V19.5h3.357L10.59,17.857zM5.59,20.5v2.357L7.947,20.5H5.59zM20.812,13.29v6.21h5.002v-6.866c-0.021-1.064-0.252-2.283-0.803-3.542L20.812,13.29zM25.339,4.522L4.652,25.209l1.415,1.416L26.753,5.937L25.339,4.522zM20.812,25.58h5.002c0,0,0-2.354,0-5.08h-5.002C20.812,23.227,20.812,25.58,20.812,25.58zM10.59,25.58c0,0,0-0.827,0-2.064L8.525,25.58H10.59z",
+ "raph_flip": "M15.5,21.082h1.001v-2.001H15.5V21.082zM15.5,25.082h1.001v-2H15.5V25.082zM15.5,29.082h1.001v-2H15.5V29.082zM15.5,32.127h1.001v-1.045H15.5V32.127zM15.5,17.083h1.001v-2H15.5V17.083zM15.5,1.083h1.001v-2H15.5V1.083zM15.5,5.083h1.001v-2H15.5V5.083zM15.5,9.083h1.001v-2H15.5V9.083zM15.5,13.083h1.001v-2H15.5V13.083zM18.832,1.203v25.962h14.093L18.832,1.203zM19.832,5.136l11.41,21.03h-11.41V5.136zM13.113,27.165V1.203L-0.979,27.165H13.113z",
+ "raph_flipv": "M21.45,16.078v-1.001h-2.001v1.001H21.45zM25.45,16.078v-1.001h-2v1.001H25.45zM29.45,16.078v-1.001h-2v1.001H29.45zM32.495,16.078v-1.001H31.45v1.001H32.495zM17.451,16.078v-1.001h-2v1.001H17.451zM1.451,16.078v-1.001h-2v1.001H1.451zM5.451,16.078v-1.001h-2v1.001H5.451zM9.452,16.078v-1.001h-2v1.001H9.452zM13.452,16.078v-1.001h-2v1.001H13.452zM1.571,12.745h25.962V-1.348L1.571,12.745zM5.504,11.745l21.03-11.41v11.41H5.504zM27.533,18.464H1.571l25.962,14.093V18.464z",
+ "raph_connect": "M25.06,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h4.69v-3.999H25.06zM20.375,15.719c0-3.435-2.784-6.219-6.219-6.219c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h6.834c0.833,2.452,3.15,4.219,5.884,4.219C17.591,21.938,20.375,19.153,20.375,15.719z",
+ "raph_disconnect": "M9.219,9.5c-2.733,0-5.05,1.766-5.884,4.218H1.438v4.001h1.897c0.833,2.452,3.15,4.219,5.884,4.219c3.435,0,6.219-2.784,6.219-6.219S12.653,9.5,9.219,9.5zM27.685,13.719c-0.944-5.172-5.461-9.094-10.903-9.094v4c3.917,0.006,7.085,3.176,7.094,7.094c-0.009,3.917-3.177,7.085-7.094,7.093v4.002c5.442-0.004,9.959-3.926,10.903-9.096h2.065v-3.999H27.685z",
+ "raph_folder": "M29.124,12.75c-0.004-2.208-1.792-3.997-3.999-4V8.749H12.868c-0.505-1.622-2.011-2.808-3.805-2.811H6.188c-2.208,0.002-3.997,1.792-4.001,4v14.188c0.004,2.206,1.793,3.995,4.001,3.999h18.938c2.205-0.004,3.995-1.793,3.999-3.999V12.75zM6.188,7.937h2.875c1.046-0.004,1.917,0.834,1.983,1.876l0.058,0.937h14.022c1.093,0.002,1.997,0.906,1.999,2v0.495c-0.591-0.345-1.268-0.557-2-0.558H6.187c-0.732,0.001-1.41,0.214-2,0.559V9.937C4.19,8.843,5.094,7.939,6.188,7.937zM25.125,26.125H6.188c-1.093-0.002-1.997-0.908-2.001-2v-7.438h0.001c0.002-1.095,0.906-1.999,2-2.001h18.938c1.093,0.002,1.991,0.901,2,1.991v7.447C27.122,25.219,26.218,26.123,25.125,26.125z",
+ "raph_man": "M21.021,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.103,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.578,5.192-0.35,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.166,1.213-0.166,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.463,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.602,21.541,22.443,18.912,21.021,16.349zM15.808,13.757c2.362,0,4.278-1.916,4.278-4.279s-1.916-4.279-4.278-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757z",
+ "raph_woman": "M21.022,16.349c-0.611-1.104-1.359-1.998-2.109-2.623c-0.875,0.641-1.941,1.031-3.104,1.031c-1.164,0-2.231-0.391-3.105-1.031c-0.75,0.625-1.498,1.519-2.111,2.623c-1.422,2.563-1.579,5.192-0.351,5.874c0.55,0.307,1.127,0.078,1.723-0.496c-0.105,0.582-0.167,1.213-0.167,1.873c0,2.932,1.139,5.307,2.543,5.307c0.846,0,1.265-0.865,1.466-2.189c0.201,1.324,0.62,2.189,1.464,2.189c1.406,0,2.545-2.375,2.545-5.307c0-0.66-0.061-1.291-0.168-1.873c0.598,0.574,1.174,0.803,1.725,0.496C22.603,21.541,22.444,18.912,21.022,16.349zM15.808,13.757c2.363,0,4.279-1.916,4.279-4.279s-1.916-4.279-4.279-4.279c-2.363,0-4.28,1.916-4.28,4.279S13.445,13.757,15.808,13.757zM18.731,4.974c1.235,0.455,0.492-0.725,0.492-1.531s0.762-1.792-0.492-1.391c-1.316,0.422-2.383,0.654-2.383,1.461S17.415,4.489,18.731,4.974zM15.816,4.4c0.782,0,0.345-0.396,0.345-0.884c0-0.488,0.438-0.883-0.345-0.883s-0.374,0.396-0.374,0.883C15.442,4.005,15.034,4.4,15.816,4.4zM12.884,4.974c1.316-0.484,2.383-0.654,2.383-1.461S14.2,2.474,12.884,2.052c-1.254-0.402-0.492,0.584-0.492,1.391S11.648,5.428,12.884,4.974z",
+ "raph_notebook": "M24.875,1.375H8c-1.033,0-1.874,0.787-1.979,1.792h1.604c1.102,0,2,0.898,2,2c0,1.102-0.898,2-2,2H6v0.999h1.625c1.104,0,2.002,0.898,2.002,2.002c0,1.104-0.898,2.001-2.002,2.001H6v0.997h1.625c1.102,0,2,0.898,2,2c0,1.104-0.898,2.004-2,2.004H6v0.994h1.625c1.102,0,2,0.898,2,2.002s-0.898,2.002-2,2.002H6v0.997h1.624c1.104,0,2.002,0.897,2.002,2.001c0,1.104-0.898,2.002-2.002,2.002H6.004C6.027,28.252,6.91,29.125,8,29.125h16.875c1.104,0,2-0.896,2-2V3.375C26.875,2.271,25.979,1.375,24.875,1.375zM25.25,8.375c0,0.552-0.447,1-1,1H14c-0.553,0-1-0.448-1-1V4c0-0.552,0.447-1,1-1h10.25c0.553,0,1,0.448,1,1V8.375zM8.625,25.166c0-0.554-0.449-1.001-1-1.001h-3.25c-0.552,0-1,0.447-1,1.001c0,0.552,0.449,1,1,1h3.25C8.176,26.166,8.625,25.718,8.625,25.166zM4.375,6.166h3.251c0.551,0,0.999-0.448,0.999-0.999c0-0.555-0.448-1-0.999-1H4.375c-0.553,0-1,0.445-1,1C3.374,5.718,3.822,6.166,4.375,6.166zM4.375,11.167h3.25c0.553,0,1-0.448,1-1s-0.448-1-1-1h-3.25c-0.553,0-1,0.448-1,1S3.822,11.167,4.375,11.167zM4.375,16.167h3.25c0.551,0,1-0.448,1-1.001s-0.448-0.999-1-0.999h-3.25c-0.553,0-1.001,0.446-1.001,0.999S3.822,16.167,4.375,16.167zM3.375,20.165c0,0.553,0.446,1.002,1,1.002h3.25c0.551,0,1-0.449,1-1.002c0-0.552-0.448-1-1-1h-3.25C3.821,19.165,3.375,19.613,3.375,20.165z",
+ "raph_diagram": "M6.812,17.202l7.396-3.665v-2.164h-0.834c-0.414,0-0.808-0.084-1.167-0.237v1.159l-7.396,3.667v2.912h2V17.202zM26.561,18.875v-2.913l-7.396-3.666v-1.158c-0.358,0.152-0.753,0.236-1.166,0.236h-0.832l-0.001,2.164l7.396,3.666v1.672H26.561zM16.688,18.875v-7.501h-2v7.501H16.688zM27.875,19.875H23.25c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C29.875,20.771,28.979,19.875,27.875,19.875zM8.125,19.875H3.5c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C10.125,20.771,9.229,19.875,8.125,19.875zM13.375,10.375H18c1.104,0,2-0.896,2-2V3.75c0-1.104-0.896-2-2-2h-4.625c-1.104,0-2,0.896-2,2v4.625C11.375,9.479,12.271,10.375,13.375,10.375zM18,19.875h-4.625c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2H18c1.104,0,2-0.896,2-2v-4.625C20,20.771,19.104,19.875,18,19.875z",
+ "raph_barchart": "M21.25,8.375V28h6.5V8.375H21.25zM12.25,28h6.5V4.125h-6.5V28zM3.25,28h6.5V12.625h-6.5V28z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/extensions/shapelib/symbol.json b/files_svgedit/svg-edit/extensions/shapelib/symbol.json
new file mode 100644
index 000000000..b22fbe280
--- /dev/null
+++ b/files_svgedit/svg-edit/extensions/shapelib/symbol.json
@@ -0,0 +1,28 @@
+{"data": {
+ "airplane": "m150.70285,1c-3.11894,0 -5.89383,1.28033 -8.23512,3.60274c-2.33931,2.3205 -4.27426,5.64559 -5.8844,9.79826c-3.21983,8.30419 -5.20047,19.96969 -6.28387,33.94021c-1.08127,13.94364 -1.26349,30.17972 -0.81427,47.56012c-38.52657,15.80524 -116.66563,48.43882 -122.94262,55.72521c-8.35709,9.701 -5.65693,20.81889 -2.28924,28.1994l128.45827,-26.14551c2.71532,34.07207 6.57611,67.81866 9.94048,94.2617c-12.56244,3.67662 -36.01244,10.93625 -40.85281,15.43805c-6.66802,6.2016 -6.66797,26.22952 -6.66797,26.22952l52.57557,-4.27612c1.23827,8.63303 2.01266,13.67035 2.01266,13.67035l0.07683,0.45456l0.41484,0l0.96791,0l0.41483,0l0.07683,-0.45456c0,0 0.77292,-5.03741 2.01265,-13.67035l52.59094,4.27612c0,0 0.00006,-20.02792 -6.66798,-26.22952c-4.84218,-4.50354 -28.3093,-11.77963 -40.86818,-15.45499c3.35742,-26.36189 7.2114,-59.97935 9.92513,-93.94165l126.95265,25.84239c3.36765,-7.38051 6.08325,-18.4984 -2.27386,-28.1994c-6.19934,-7.19621 -82.45026,-39.10397 -121.45232,-55.11919c0.466,-17.60567 0.29471,-34.06301 -0.79893,-48.16614l0,-0.03367c-1.08395,-13.95511 -3.0667,-25.60925 -6.28384,-33.90654c-1.60968,-4.15152 -3.52888,-7.47695 -5.86903,-9.79826c-2.34131,-2.32241 -5.11617,-3.60274 -8.23509,-3.60274z",
+ "arrows_recycle": "m184.80963,97.86072l-33.85641,-5.99613l12.47342,-6.51318c6.86035,-3.58231 13.08063,-7.05022 13.8228,-7.70647c1.84358,-1.63009 -21.11545,-37.10833 -23.99486,-37.07896c-1.26575,0.01435 -10.08571,13.75221 -19.59988,30.53185c-9.58302,16.90081 -19.12026,29.77207 -21.38301,28.85762c-26.78106,-10.82179 -48.63238,-21.77106 -48.63238,-24.36867c0,-1.7743 8.40277,-17.60187 18.67293,-35.17241l18.67294,-31.94638l50.91241,0l50.91241,0l13.28955,21.01844l13.28966,21.01844l13.86403,-7.11266c9.61084,-4.93073 13.27039,-5.63875 11.92874,-2.30832c-11.81259,29.32658 -29.43884,63.52189 -32.57199,63.19018c-2.16919,-0.22948 -19.17931,-3.11553 -37.80035,-6.41334zm-157.90158,130.83841c-12.88431,-22.18782 -24.43164,-42.96199 -25.66062,-46.16496c-1.26128,-3.28671 2.41348,-15.03122 8.43637,-26.96236l10.67094,-21.13916l-10.90837,-6.44379c-14.51679,-8.57526 -9.12079,-11.21638 29.38814,-14.38432l30.43462,-2.50365l11.93788,31.54266c6.56593,17.34845 12.77805,33.78311 13.80486,36.52168c1.07085,2.85602 -4.05412,0.95576 -12.01902,-4.45653l-13.88588,-9.43578l-9.69341,18.71187c-5.33128,10.2917 -9.769,19.85884 -9.86144,21.26031c-0.09266,1.40147 16.26999,3.00525 36.36115,3.56384l36.52929,1.01558l2.3839,26.7207c1.3112,14.69647 2.11298,26.91713 1.78191,27.15706c-0.33105,0.23969 -17.62818,1.53915 -38.43802,2.88736l-37.83614,2.4512l-23.42616,-40.34174zm144.19484,39.20346c-22.11887,-33.38463 -22.50333,-30.90141 10.37228,-66.98763l21.10391,-23.16492l-2.24142,16.92821l-2.24152,16.92822l23.64932,0c13.0071,0 23.64944,-1.04019 23.64944,-2.31137c0,-1.27139 -7.21684,-15.55066 -16.03735,-31.73212c-8.82051,-16.18146 -16.00386,-30.77765 -15.96307,-32.436c0.09158,-3.71849 46.32753,-34.42394 48.52559,-32.22591c0.87094,0.87095 9.45139,16.38289 19.06769,34.47134l17.48441,32.8876l-23.52576,37.94727c-12.93936,20.87074 -25.37122,39.98283 -27.62622,42.47105c-2.25526,2.48822 -14.86537,5.52936 -28.02258,6.75787c-25.11388,2.34528 -24.43022,1.7804 -28.11249,23.22583c-0.64439,3.75308 -8.1586,-4.76279 -20.08223,-22.75946z",
+ "beverage": "m55.65598,297.84982c-28.13961,-15.0867 0.71402,-44.87836 24.17752,-35.2438c17.46051,-0.03983 34.92112,-0.01355 52.38168,-0.02121c0,-34.34088 0,-68.68181 0,-103.02271c-43.73869,-52.76227 -87.47738,-105.52454 -131.21606,-158.28681c98.99732,-0.36748 197.99556,-0.36708 296.99286,0c-42.95236,53.02298 -85.90472,106.04595 -128.85707,159.06893c0,34.08022 0,68.1604 0,102.24059c25.78079,0.22986 51.60571,-0.625 77.34869,0.87012c20.26866,5.44482 12.15504,38.73355 -7.54306,35.2244c-61.09291,-0.21259 -122.20532,0.38715 -183.28456,-0.8295zm127.03334,-186.51904c19.68919,-7.503 16.9212,-39.96898 -4.19951,-43.27924c-31.86026,-8.77637 -38.74004,46.49459 -5.25272,45.19753c3.23363,0.02124 6.51921,-0.43665 9.45222,-1.91829z",
+ "bicycle": "m69.04492,242.61508c10.78542,-0.13551 -10.27161,-0.62888 -14.0067,-0.90082c-31.20993,-0.75682 -57.11145,-31.7867 -53.74048,-62.58058c0.6826,-30.81444 30.36186,-57.88344 61.25282,-54.78261c8.04092,-3.41573 19.45538,7.85678 24.44781,2.47261c12.82323,-22.6207 25.24759,-45.47771 38.58752,-67.7975c11.3629,-1.62186 24.90015,-2.8755 35.9539,0.19863c5.11031,8.04987 -4.18097,10.24141 -9.97878,8.99869c-6.4711,0 -12.9422,0 -19.41331,0c-4.68463,8.54676 -9.49177,17.02541 -14.27853,25.51514c27.18877,0 54.37757,0 81.56634,0c0.60545,-2.89218 7.47321,-9.12369 1.38461,-8.44633c-11.06171,-1.39418 -4.14218,-14.17861 4.04941,-10.54169c11.49847,0.42252 23.4034,-1.13349 34.55679,1.17167c5.95799,11.9574 -11.26917,9.39215 -18.65384,9.51889c-5.46606,-1.78406 -6.59882,3.68022 -8.76302,7.4192c-8.77467,8.98817 -3.32066,18.46121 2.57677,27.22322c2.16318,3.98602 3.70422,9.51816 8.96812,5.7937c10.73436,-2.35877 22.43681,-2.44432 33.11809,0.31375c22.31958,6.63104 40.2153,27.32498 41.71356,50.76672c1.35196,14.39882 -1.7262,29.2406 -10.68872,40.85638c-10.3952,14.88928 -27.26529,23.04211 -45.01289,24.69595m-13.91446,0.14534c-16.17995,-4.15208 -31.09747,-13.81174 -39.74602,-28.39511c-5.65977,-7.28935 -6.39555,-18.57542 -9.40382,-25.8875c-7.93416,-0.10381 -15.86833,-0.20763 -23.80251,-0.31143c-16.06972,-25.85139 -30.2338,-52.8877 -45.73496,-79.09947c-3.0216,8.9735 -20.19933,21.18202 -10.71458,29.44228c23.80356,19.97299 26.97348,58.9857 6.61392,82.50262c-9.33031,10.45926 -22.27345,17.66695 -35.57853,21.74126m1.02195,-14.22214c25.6753,-5.59119 42.08234,-35.19554 33.20155,-59.88542c-2.74454,-8.04132 -10.29613,-20.88658 -16.96593,-21.01822c-7.10979,12.27542 -13.50588,24.99036 -21.29804,36.85445c-17.11086,3.00977 -1.43426,-17.82442 2.18629,-24.90399c3.88173,-8.63774 17.97784,-22.6107 0.22043,-22.40381c-12.4663,-1.24055 -25.71457,-0.04088 -35.79932,8.23351c-21.64245,14.32193 -25.73868,47.07928 -9.34899,66.82591c11.09536,14.38573 30.25585,20.50179 47.804,16.29758zm179.64028,-0.00356c21.91476,-5.14897 37.68491,-27.67265 34.8483,-50.02701c-1.50024,-24.84305 -26.27582,-44.93475 -50.90707,-41.59564c-18.45729,-1.74684 -0.78658,15.19781 1.85167,23.43547c2.5099,8.7469 16.33638,19.49011 8.6171,28.02017c-17.31352,0.72531 -35.05154,-0.50934 -52.31752,1.23642c3.1011,22.89496 24.76817,41.83401 48.14848,40.08203c3.28111,-0.02676 6.57803,-0.30434 9.75905,-1.15144zm-70.7294,-51.16617c2.08536,-17.91364 12.23944,-34.20847 27.04826,-44.4043c0.87492,-4.39421 -8.09195,-24.63332 -11.37527,-10.5231c-10.13445,18.42084 -20.32248,36.81699 -30.14639,55.40483c4.70622,0.11383 9.98186,0.93559 14.4734,-0.47743zm52.9005,-0.88846c-5.84201,-10.98254 -11.81374,-21.89917 -17.91992,-32.73703c-12.24919,6.45949 -20.3076,20.12949 -22.21249,33.77383c13.37456,-0.2851 26.97348,0.69884 40.16722,-0.71251l-0.03476,-0.3243l0,0zm-57.29515,-39.61388c5.7617,-10.63408 11.63275,-21.21213 17.21649,-31.94065c-24.2798,-0.5443 -48.61469,-0.66353 -72.88629,0.11504c12.46696,21.42642 23.73018,43.6828 37.36159,64.35614c6.59126,-10.13849 12.18927,-21.81091 18.30821,-32.53052z",
+ "bulb": "m145.62592,297.06863c-17.67376,-4.68848 -27.91267,-23.96384 -26.70493,-41.44981c-0.45245,-22.83995 1.65483,-46.8734 -9.26703,-67.87447c-6.22532,-15.68024 -16.83022,-29.52451 -21.2558,-45.86502c-5.50718,-25.3512 1.29536,-54.08422 21.79177,-71.10346c23.11512,-19.80671 60.02821,-22.38829 85.47337,-5.55379c17.94666,12.36192 30.89558,32.75098 30.41452,55.00024c2.10583,16.62513 -4.45561,32.2625 -12.17442,46.55451c-5.53021,11.50751 -11.98869,22.76817 -17.00821,34.40399c-1.32327,23.85774 -0.56435,47.93431 -4.15358,71.58684c-5.97899,18.328 -28.51152,30.78922 -47.11569,24.30096zm46.67903,-42.65804c-10.48888,-5.65382 -25.56134,-1.97798 -37.75313,-3.19516c-9.95908,1.99197 -27.6553,-4.08569 -32.94975,5.03105c12.10807,4.73648 26.33759,1.18594 39.22778,1.96957c10.31409,-0.9906 22.18068,0.93939 31.4751,-3.80547zm-0.78554,-10.63885c1.54361,-14.36404 -21.1709,-7.03433 -30.39838,-9.17262c-12.21318,2.47205 -31.64935,-5.2915 -39.33047,5.74487c4.5516,11.09071 24.85052,3.29074 35.50985,5.75148c11.3671,-0.4028 23.15991,0.40741 34.21899,-2.32373zm0.14142,-25.16705c2.9986,-27.98152 20.10725,-51.27968 30.01392,-76.87566c8.14517,-30.64574 -7.9861,-65.65708 -37.19159,-78.52086c-29.06958,-14.40719 -67.79967,-3.52343 -84.22785,24.70715c-15.82867,23.31919 -12.80788,55.00346 2.66266,77.68118c11.03862,19.81914 19.84574,42.09169 18.41109,65.15663c22.91359,0 45.82719,0 68.7408,0c0.53035,-4.04942 1.06052,-8.09911 1.59097,-12.14844zm-50.72687,-39.64223c-9.07846,-15.78525 -18.39817,-31.69214 -24.71996,-48.79948c5.68369,-7.35728 7.33711,-15.55251 9.10273,-24.19695c15.95243,-3.13345 -2.03056,18.17914 13.0308,18.65942c13.36925,5.81685 7.50436,-28.2252 18.61179,-15.95465c-7.9733,13.46684 15.66168,26.8638 16.5291,7.59886c-1.14578,-14.54594 14.28561,-11.82063 8.26923,1.37553c0.49657,6.78834 11.54893,8.73447 11.73816,14.19425c-7.9566,17.25854 -14.87259,35.07664 -24.29411,51.59875c-2.12068,-6.39691 8.34081,-22.42969 11.68367,-31.84341c6.45049,-8.13736 11.99347,-30.06687 -4.82256,-27.07765c-9.75478,15.21495 -22.87704,-9.5907 -32.42833,4.99055c-8.10805,2.41856 -20.86024,-14.04196 -23.2123,1.78514c6.10664,18.79854 18.8132,34.81967 25.46149,53.42416c-2.25594,-1.33008 -3.54053,-3.66359 -4.94971,-5.75453zm-12.74261,-68.89435c-4.41462,-2.15457 1.86072,11.45412 -0.00009,0l0.00009,0zm26.38611,1.60738c-5.73064,-9.69846 -2.6572,11.76727 0,0zm25.57564,0c-5.73064,-9.69846 -2.65724,11.76727 0,0zm-119.06653,-71.66327c-10.12879,-10.27977 -21.32492,-19.92564 -30.13364,-31.25677c22.0061,18.21614 42.14793,38.73141 61.97966,59.29806c5.2662,7.2365 -9.18723,-6.75771 -11.87724,-9.10345c-6.7307,-6.23349 -13.37324,-12.56173 -19.96879,-18.93784zm156.40887,29.39093c17.12013,-21.33164 33.0936,-43.69485 51.55162,-63.89019c-3.09076,8.6951 -13.04016,19.09942 -19.29597,28.05458c-10.44716,12.99739 -20.21251,26.73974 -32.1591,38.39317c-1.49106,1.57605 -3.71758,-2.15694 -0.09639,-2.55756l-0.00015,0zm-37.0826,-20.23703c5.91515,-16.91904 14.49518,-33.02397 24.06741,-48.16613c-0.22247,8.40011 -10.37453,24.32112 -15.25424,34.73693c-2.76042,4.19142 -5.08876,10.87586 -8.81317,13.4292zm-75.7492,-21.69804c-4.12045,-6.01025 -16.5241,-20.00493 -14.20815,-21.91343c11.95872,13.25933 24.12167,26.94502 32.71223,42.62532c-7.31573,-5.61084 -12.5797,-13.71475 -18.50409,-20.71189zm47.35616,-4.73013c-0.83392,-5.64444 1.75482,-32.58975 3.19298,-14.29333c0.00511,11.46356 1.20168,24.36872 -1.98915,34.80271c-1.36639,-6.70823 -1.03488,-13.69191 -1.20383,-20.50938z",
+ "careful": "m1,1c2.24496,29.70385 10.76853,56.9168 23.28125,80.81181l23.28125,-36.31875l-6.72569,-2.48334l-9.3125,-3.31111l4.86319,-8.48472l17.07292,-30.21389l-52.46042,0zm71.49931,0l-16.86597,29.8l7.24306,2.58681l9.82986,3.51805l-5.5875,8.69167l-33.525,52.46041c24.12122,36.61169 59.3948,61.88649 99.85071,67.36043l0,107.09373l-66.22223,0l0,26.48889l165.55556,0l0,-26.48889l-66.22223,0l0,-107.09373c70.57336,-9.43671 125.94405,-78.40826 132.44444,-164.41737l-226.50069,0z",
+ "cart_2": "m0.99397,46.01759l0,36.55115l57.8652,0l28.28396,104.41602l159.23965,0l52.21094,-125.30758l-237.55595,0l0,-15.65959zm53.21769,184.47131c0,12.97459 -10.51804,23.49266 -23.49261,23.49266c-12.97436,0 -23.49244,-10.51807 -23.49244,-23.49266c0,-12.97456 10.51808,-23.49228 23.49244,-23.49228c12.97457,0 23.49261,10.51772 23.49261,23.49228zm148.8,0c0,12.97459 -10.51817,23.49266 -23.4928,23.49266c-12.97446,0 -23.49258,-10.51807 -23.49258,-23.49266c0,-12.97456 10.51813,-23.49228 23.49258,-23.49228c12.97462,0 23.4928,10.51772 23.4928,23.49228z",
+ "coat_hanger": "m24.72351,255.83636c-16.41191,-2.33228 -27.73119,-20.33411 -22.38228,-36.1741c3.30628,-15.35616 20.22842,-19.55692 31.44893,-27.66121c35.64961,-21.14748 71.50229,-41.94997 107.26245,-62.9095c1.87845,-10.22399 -5.70195,-16.59309 -13.7997,-21.39916c-16.20296,-12.86633 -15.31998,-38.50921 -1.59858,-52.83282c16.08138,-18.88601 49.91904,-12.94907 59.95362,9.38958c9.73412,9.92804 -0.18503,34.24562 -13.8385,22.54042c-1.42418,-13.2976 -12.78993,-28.89017 -27.7881,-20.44456c-15.64833,8.98737 -6.40202,29.9363 8.0513,34.15588c9.75604,6.53233 8.45554,18.64742 8.97318,28.8608c42.85536,25.5808 86.25137,50.28574 128.51941,76.82744c16.8277,13.06401 9.90717,44.50819 -11.28448,48.76941c-16.06598,2.31227 -32.54915,0.68361 -48.77617,1.31593c-68.2437,0.05267 -136.50528,0.51715 -204.74109,-0.43811zm248.30083,-21.61086c12.28671,-12.24121 -10.69217,-18.82494 -18.26138,-24.82121c-34.85875,-20.46407 -69.60597,-41.14412 -104.87569,-60.89026c-41.32713,23.46544 -82.56062,47.16515 -123.11867,71.93832c-8.58788,3.43668 -2.61073,17.17589 5.37386,15.06004c78.53457,-0.16875 157.07672,0.41405 235.60527,-0.42499c1.73874,-0.22235 3.69772,0.07922 5.27661,-0.86191z",
+ "document": "m58.5474,213.36578c-0.05885,-70.73299 -0.11767,-141.466 -0.17652,-212.19898c53.12881,0.81297 106.48294,-1.9259 159.43185,2.08758c25.82027,9.16723 22.09921,66.23434 21.6799,108.85904c-1.13266,32.14426 15.08594,95.86641 -27.03937,105.4444c-21.00172,0.00113 -21.08437,8.97424 -18.9407,25.20605c2.4877,24.31731 -4.73431,78.79115 -39.2352,44.26363l-95.71997,-73.66171zm162.59977,-23.1226c0.08537,-63.57991 -0.62674,-117.82272 -4.15146,-159.71279c-31.317,-14.24883 -73.63496,-7.31453 -109.06839,-7.53106c-13.9288,6.77649 33.0414,29.27771 43.00333,38.00857c37.81908,18.77271 49.10266,52.9127 42.57201,91.49594c0,15.00871 0,30.01746 0,45.02617c6.97418,-0.00844 21.40269,-3.46487 27.64452,-7.28687z",
+ "gift": "m160.05605,46.22016c5.12212,-9.27578 14.49356,-21.35899 -1.60765,-24.27403c-4.48517,-2.30248 -8.9718,-6.3767 -13.45119,-1.83809c-9.96648,3.93713 -18.60622,9.44305 -8.12337,19.74747c4.64861,6.65461 8.87668,21.1743 14.1424,22.77341c3.14276,-5.39672 6.08684,-10.9068 9.03981,-16.40877zm-22.01753,25.61161c-9.14935,-16.32981 -16.51206,-33.84869 -27.71044,-48.91321c-13.62003,-14.54198 -40.45641,-8.05964 -46.55505,10.6975c-8.10131,18.54466 9.37865,40.68638 29.16686,38.36525c15.01618,0.2515 30.1178,0.92769 45.09863,-0.14954zm76.02873,0.55127c19.45964,-2.60851 30.65027,-27.10658 19.57069,-43.3727c-9.81836,-17.35883 -38.06532,-17.96398 -47.9265,-0.32358c-8.53876,14.26143 -15.94994,29.16402 -23.78549,43.81643c17.32285,0.99046 34.80862,0.75943 52.1413,-0.12016zm32.22711,20.88692c6.6339,-5.83724 32.32317,-12.71885 12.86739,-18.26252c-4.81963,-1.36767 -10.43866,-7.64191 -14.77026,-5.92492c-9.40594,11.6946 -23.86844,18.55521 -38.9686,17.83661c-2.95601,0.97167 -18.03316,-1.47781 -13.95946,1.30438c10.65262,6.07415 21.03697,12.6707 32.05554,18.0621c7.71764,-4.11029 15.20781,-8.63805 22.77539,-13.01566zm-151.5623,3.30481c5.67309,-3.30481 11.34617,-6.60963 17.01924,-9.91444c-17.34076,-0.86164 -37.18572,1.63783 -50.29088,-12.30952c-3.69488,-4.13725 -7.23799,-8.87396 -12.35892,-3.66532c-6.13381,4.22582 -25.00066,8.5563 -10.4742,13.71487c12.64928,7.47227 25.20959,15.12685 38.17151,22.0463c6.1765,-2.89648 11.99872,-6.5165 17.93326,-9.87188zm83.14041,36.87479c7.35168,-5.90694 25.15858,-11.53461 25.75348,-17.87329c-16.62141,-9.56481 -32.75868,-20.2142 -50.14796,-28.29874c-5.98431,-2.2704 -10.83618,1.22306 -15.65312,4.25735c-14.24385,8.47255 -28.83041,16.41927 -42.61077,25.63122c18.02219,11.14435 36.26101,21.95917 54.67725,32.43958c9.39328,-5.26857 18.66512,-10.75249 27.98112,-16.15611zm73.75499,18.43738c7.62694,-4.81227 15.25389,-9.62453 22.88087,-14.43683c-0.06244,-16.11785 0.19498,-32.24243 -0.24597,-48.35465c-15.39334,8.58929 -30.56776,17.60745 -45.48607,26.99785c-1.63162,16.62392 -0.80414,33.52276 -0.44952,50.23046c7.87193,-4.6378 15.55261,-9.59819 23.30069,-14.43683zm-178.87355,-10.1545c0.77462,-13.73913 2.44441,-29.40098 -14.12444,-33.4709c-10.46331,-4.88007 -24.96637,-17.38377 -33.02728,-17.25835c-0.25115,15.4809 -0.11823,30.96465 -0.14541,46.44691c15.45605,9.64543 30.63783,19.75522 46.42746,28.8476c1.53102,-7.98021 0.53017,-16.43968 0.86967,-24.56526zm110.68056,53.19621c9.14198,-5.77156 18.28395,-11.54312 27.42593,-17.31468c-0.04233,-16.63979 0.64572,-33.30351 -0.10625,-49.92543c-10.04709,2.88116 -21.5385,11.78691 -32.12366,17.31859c-7.92599,4.64276 -15.85202,9.28555 -23.77802,13.92833c0.1563,17.76723 -0.42728,35.56691 0.57802,53.30783c9.47523,-5.53633 18.69861,-11.49898 28.00397,-17.31464zm-38.32249,-9.33929c0,-8.88464 0,-17.76929 0,-26.6539c-18.35233,-10.72505 -36.64592,-21.55176 -55.0698,-32.1535c-1.01884,16.98993 -0.43661,34.04375 -0.59025,51.06303c18.34824,11.48767 36.50635,23.28906 55.08669,34.3983c0.72301,-8.85316 0.45901,-17.77696 0.57336,-26.65393zm106.97165,35.71599c7.47931,-4.98045 14.95862,-9.96091 22.43796,-14.94136c-0.31207,-15.79037 0.77045,-31.79442 -0.80399,-47.41055c-15.55414,8.87424 -30.56544,18.97736 -45.84236,28.4509c0.367,16.33781 -0.75356,32.86267 0.93411,49.06088c7.89078,-4.84329 15.54118,-10.07089 23.27428,-15.15987zm-179.49486,-8.85234c-0.06088,-8.2791 -0.12183,-16.55821 -0.18272,-24.8373c-15.452,-9.6673 -30.70933,-19.65799 -46.39347,-28.94519c-0.98154,15.8615 -0.42208,31.78482 -0.5697,47.67464c15.58812,10.31845 31.00088,20.91034 46.79801,30.90671c0.60526,-8.24165 0.30488,-16.53903 0.34788,-24.79886zm111.24078,54.40674c9.07924,-6.02985 18.15848,-12.05969 27.23772,-18.08952c-0.02109,-16.81348 0.32051,-33.6342 -0.13127,-50.44193c-18.48172,11.39566 -36.8398,23.00107 -55.0625,34.8063c-2.05943,16.23506 -0.72412,32.97392 -0.72713,49.38643c5.65578,3.44495 20.11658,-11.82266 28.68318,-15.66129zm-38.71758,-7.19754c-1.09789,-11.59346 4.72185,-27.9119 -10.01297,-32.40633c-14.85952,-9.4117 -29.65931,-18.92612 -44.71436,-28.02278c-2.19433,15.91664 0.10065,32.49809 -1.58499,48.60945c18.05386,13.0511 36.5795,25.52769 55.44263,37.37666c1.51289,-8.30347 0.57193,-17.09903 0.86969,-25.55701zm-63.13967,-3.06479c-21.97403,-14.66875 -43.94805,-29.33749 -65.92206,-44.00621c0.02491,-45.26978 -0.60055,-90.55044 0.20291,-135.81172c11.00354,-6.78941 22.71307,-12.35508 34.0373,-18.58421c-7.3143,-20.93821 3.23879,-46.38257 24.44761,-54.21996c17.77897,-7.29492 39.21008,-0.71179 50.54502,14.64528c8.23304,-4.22243 16.4661,-8.44486 24.69915,-12.66729c8.27725,4.26063 16.55455,8.52126 24.83179,12.78188c11.86055,-14.06895 32.18082,-22.09776 49.79013,-14.21312c21.13718,7.42951 32.65843,32.817 25.07826,53.72234c11.40756,6.44052 23.81024,11.47337 34.26968,19.33245c0.46368,45.00166 0.00415,90.00995 -0.0379,135.01437c-43.72298,28.93527 -86.73743,58.97507 -131.17026,86.81018c-12.92032,-0.00348 -24.07242,-14.03217 -36.06157,-19.72c-11.59096,-7.66315 -23.15266,-15.37048 -34.71011,-23.08398z",
+ "globe": "m33.11721,223.16701l233.44794,0.08913l-7.57544,11.19618l-218.20762,-0.26738l-7.66489,-11.01793zm1.60428,-148.93458l230.3285,-0.26738l6.68439,11.48557l-243.78651,0.08913l6.77362,-11.30732zm-22.73061,74.62911l275.61135,-0.26738l-0.35626,11.48558l-275.07684,-0.17825l-0.17825,-11.03995zm275.8395,1.06528c0,76.03723 -61.86858,137.89429 -137.92784,137.89429c-76.0264,0 -137.88345,-61.86824 -137.88345,-137.89429c0,-76.02642 61.86823,-137.88347 137.88345,-137.88347c76.05927,-0.01117 137.92784,61.85705 137.92784,137.88347zm-137.91701,-148.93459c-82.09525,0 -148.90104,66.8058 -148.90104,148.92339c0,82.12878 66.8058,148.93457 148.90104,148.93457c82.13995,0 148.93459,-66.80579 148.93459,-148.93457c0,-82.11759 -66.79463,-148.92339 -148.93459,-148.92339zm41.78581,148.93459c0,81.25211 -22.01353,137.89429 -41.78581,137.89429c-19.74991,0 -41.76309,-56.64218 -41.76309,-137.89429c0,-81.27448 22.00233,-137.88347 41.76309,-137.88347c19.76112,-0.01117 41.78581,56.60899 41.78581,137.88347zm-41.78581,-148.93459c-34.29579,0 -52.80304,76.73613 -52.80304,148.92339c0,72.2093 18.50725,148.93457 52.80304,148.93457c34.29614,0 52.83693,-76.73643 52.83693,-148.93457c-0.01118,-72.18726 -18.54079,-148.92339 -52.83693,-148.92339zm97.86217,148.93459c0,76.03723 -43.91597,137.89429 -97.86217,137.89429c-53.93499,0 -97.82862,-61.86824 -97.82862,-137.89429c0,-76.02642 43.89363,-137.88347 97.82862,-137.88347c53.9462,-0.01117 97.86217,61.85705 97.86217,137.88347zm-97.86217,-148.93459c-60.01537,0 -108.86856,66.8058 -108.86856,148.92339c0,82.12878 48.85319,148.93457 108.86856,148.93457c60.03773,0 108.88008,-66.80579 108.88008,-148.93457c0,-82.11759 -48.84235,-148.92339 -108.88008,-148.92339z",
+ "handle_care": "m163.84105,276.49316c0,-16.9874 0,-26.73244 0,-43.71985c0,-23.90417 32.58113,-58.75496 53.7084,-83.18626c5.78004,-5.69962 16.17278,-7.90976 21.66074,-2.49817c4.87456,4.80672 4.50662,16.61058 0.6333,22.48335c-7.09361,10.6588 -14.18712,21.31755 -21.28073,31.97632c-3.55533,6.07231 5.16899,10.98973 10.38702,4.49673c27.24385,-36.8876 34.70512,-44.36621 34.70512,-59.20624c0,-30.31093 0,-29.89459 0,-60.20548c0,-8.67812 6.34686,-16.98743 14.45584,-16.98743c7.71677,0 14.4277,7.99146 14.4277,15.52406c0,48.96381 0,67.40421 0,116.36799c0,15.08096 -47.62817,60.69775 -47.62817,81.9498c0,4.99628 0,9.99255 0,14.98889c-27.02963,0 -54.05942,0 -81.08914,0c0.00577,-7.32791 0.01431,-14.65582 0.02008,-21.9837zm-28.64365,0c0,-16.98746 0,-26.73244 0,-43.71985c0,-23.90422 -32.58104,-58.75496 -53.70833,-83.18626c-5.78003,-5.69962 -16.17277,-7.90976 -21.66072,-2.49817c-4.87465,4.80672 -4.50671,16.61058 -0.6334,22.48335c7.09362,10.6588 14.18714,21.31755 21.28075,31.97632c3.55531,6.07231 -5.16901,10.98973 -10.38705,4.49673c-27.24375,-36.8876 -34.70512,-44.36621 -34.70512,-59.20624c0,-30.31093 0,-29.89459 0,-60.20548c0,-8.67812 -6.34683,-16.98743 -14.45581,-16.98743c-7.71679,0 -14.42771,7.99146 -14.42771,15.52406c0,48.96381 0,67.40417 0,116.36799c0,15.08092 47.62818,60.69775 47.62818,81.9498c0,4.99628 0,9.99255 0,14.98889c27.02971,0 54.05941,0 81.08913,0c-0.00577,-7.32791 -0.01433,-14.65582 -0.02,-21.9837zm-42.88594,-214.71311l48.62654,36.4699l0,57.20769l-48.62654,-36.46989l0,-57.20769zm114.41537,0l-48.62654,36.4699l0,57.20769l48.62654,-36.46989l0,-57.20769zm-114.41537,-17.87738l57.20769,-42.90577l57.20769,42.90575l-57.20769,42.90577l-57.20769,-42.90574z",
+ "headphones": "m262.24301,276.32291c0,3.88873 -3.15054,7.03928 -7.03929,7.03928h-45.07771c-3.88873,0 -7.03928,-3.15054 -7.03928,-7.03928v-95.76917c0,-3.88843 3.15054,-7.03928 7.03928,-7.03928h45.07771c3.88875,0 7.03929,3.15085 7.03929,7.03928v95.76917zm-166.89014,0c0,3.88873 -3.15116,7.03928 -7.03929,7.03928h-45.07832c-3.88813,0 -7.03928,-3.15054 -7.03928,-7.03928v-95.76917c0,-3.88843 3.15115,-7.03928 7.03928,-7.03928h45.07832c3.88813,0 7.03929,3.15085 7.03929,7.03928v95.76917zm54.45998,-259.68797c-81.57039,0 -147.78664,65.61743 -148.80356,146.9389h25.82451c0.83739,-67.21309 55.56696,-121.44394 122.97905,-121.44394c67.41208,0 122.14168,54.23085 122.96928,121.44394h25.82391c-1.00656,-81.32147 -67.24229,-146.9389 -148.7932,-146.9389zm-148.59421,221.43015h25.35591v-74.64095h-25.35591v74.64095zm271.35417,-74.651v74.64127h26.29248v-74.64127h-26.29248z",
+ "hippie": "m126.57668,297.48117c-48.56062,-7.34268 -92.01251,-39.97321 -112.69057,-84.50511c-24.94552,-52.66977 -15.84542,-119.75688 23.8283,-162.85019c38.79855,-45.4432 106.09586,-61.79809 161.96931,-41.65034c58.35461,19.93039 100.52045,79.22475 99.29117,141.02438c1.2113,60.65196 -39.29578,118.84778 -96.0322,139.80408c-24.24886,9.49326 -50.68127,11.39462 -76.36598,8.17719zm8.7399,-92.17508c-0.08942,-7.31126 -0.17882,-14.62254 -0.26825,-21.93381c-20.52584,20.53458 -41.05166,41.06917 -61.57751,61.60378c17.64819,14.10371 39.22342,22.83827 61.57751,25.75548c0.29533,-21.80725 0.53749,-43.61626 0.26825,-65.42545zm48.5128,61.24323c14.52351,-4.28751 28.46933,-11.11562 40.24649,-20.66127c-9.32077,-13.4882 -22.68102,-24.26074 -33.95442,-36.33005c-8.88936,-8.88591 -17.77875,-17.77179 -26.66811,-26.6577c0,29.29706 0,58.59412 0,87.89117c6.88846,-0.91629 13.69307,-2.3291 20.37604,-4.24216zm-48.28273,-180.43147c0,-19.30317 0,-38.60634 0,-57.90951c-51.85052,5.59066 -97.82003,47.52976 -105.87597,99.4242c-5.92087,34.10992 2.2166,70.93011 24.35439,97.89821c27.17386,-27.16779 54.34772,-54.33559 81.52158,-81.50337c0,-19.30317 0,-38.60635 0,-57.90952zm116.00552,130.27736c29.94273,-44.68748 25.57903,-109.31516 -11.64191,-148.59046c-19.65836,-21.7875 -47.20416,-36.42821 -76.45694,-39.59642c0,38.6003 0,77.20061 0,115.80091c26.61343,26.23764 52.37032,53.38443 79.88922,78.67319c3.85712,4.56624 5.79269,-4.75352 8.20963,-6.28722z",
+ "house": "m21.15257,177.09065c0,-27.41002 0,-54.82008 0,-82.2301c-6.68203,1.86892 -13.14774,5.87402 -20.15257,5.63974c7.71781,-7.14793 21.82513,-9.41176 32.30949,-14.09891c45.79581,-16.133 91.60535,-32.4141 138.27387,-45.86145c13.50775,-0.66366 26.30505,7.15431 39.33269,10.42321c29.47861,10.57565 59.53784,19.97857 88.07501,32.90813c-6.51614,8.73929 -28.58875,5.06429 -25.73117,21.53019c-2.00067,45.62614 -0.83817,91.32375 -1.14786,136.98345c-18.99269,5.63184 -37.89932,11.84375 -56.94553,17.1149c-64.67134,-0.05981 -129.3426,-0.11945 -194.01394,-0.17902c0,-27.40996 0,-54.82036 0,-82.23004l0,-0.00011zm26.14161,31.25392c0,-16.12061 0,-32.24124 0,-48.36197c16.55636,0 33.11272,0 49.66908,0c0,32.24136 0,64.4827 0,96.724c38.34103,0 76.68204,0 115.02308,0c0,-54.026 0,-108.05197 0,-162.07799c-62.73987,0 -125.47972,0 -188.2196,0c0,54.02602 0,108.05199 0,162.07799c7.84248,0 15.68497,0 23.52745,0c0,-16.12067 0,-32.2413 0,-48.36203zm99.33812,-27.44867c0,-6.97108 0,-13.94214 0,-20.9133c13.07082,0 26.14162,0 39.21243,0c0,13.94221 0,27.88445 0,41.82658c-13.07082,0 -26.14162,0 -39.21243,0c0,-6.97108 0,-13.94214 0,-20.91328zm33.9841,1.30707c0,-5.66399 0,-11.32797 0,-16.99203c-9.58527,0 -19.17052,0 -28.75577,0c0,11.32805 0,22.65611 0,33.98409c9.58525,0 19.1705,0 28.75577,0c0,-5.66399 0,-11.32797 0,-16.99205zm-86.2673,28.75577c0,-15.24922 0,-30.4985 0,-45.7478c-14.8136,0 -29.62717,0 -44.44075,0c0.28782,29.49963 -0.86703,59.06848 1.39272,88.50464c7.32339,4.61035 18.6494,2.34561 27.75799,2.99103c5.09669,0 10.19335,0 15.29005,0c0,-15.24927 0,-30.49857 0,-45.74786zm150.9678,34.15282c7.18895,-2.37781 14.3779,-4.75565 21.56683,-7.13347c-0.32449,-45.85204 0.98636,-91.75861 -1.60782,-137.55795c-6.33264,-8.04385 -23.37172,10.13716 -33.97191,1.44468c-8.98801,-5.39767 -16.23575,-5.6667 -13.48424,6.8141c-0.6041,45.64783 -1.40456,91.35368 0.49997,136.97478c-2.32346,17.3029 19.61401,-1.57974 26.99716,-0.54214zm17.56241,-152.88132c5.81549,-2.74289 29.11139,-6.01917 13.28293,-11.03122c-31.02148,-13.18587 -62.53795,-25.50377 -94.87346,-35.06522c-13.26736,-1.87402 -25.71394,5.23786 -38.28336,8.42139c-7.2287,0.92986 -14.03493,6.61982 -2.78639,8.23806c33.43919,12.5762 66.81393,25.55496 101.06847,35.75281c7.2216,-1.29286 14.41238,-4.37938 21.59181,-6.31581zm-104.48328,-16.97943c-12.19943,-4.63456 -24.39883,-9.26913 -36.59824,-13.9037c-25.6514,8.95505 -51.55341,17.25012 -76.89988,27.03273c49.99152,1.67495 100.06706,0.58957 150.09639,0.77469c-12.19943,-4.6346 -24.39885,-9.26915 -36.59827,-13.90372z",
+ "keep_up": "m79,1l-21.3,35.5l-21.3,35.5l19.88,0l0,184.60001l45.44,0l0,-184.60001l19.88,0l-21.3,-35.5l-21.3,-35.5zm142.00002,0l-21.30002,35.5l-21.29999,35.5l19.88,0l0,184.60001l45.43999,0l0,-184.60001l19.88,0l-21.3,-35.5l-21.29999,-35.5zm-213.00002,269.80002l0,28.39999l284,0l0,-28.39999l-284,0z",
+ "new_born": "m137.15491,103.06109c-14.77614,-3.80736 -27.4188,-14.09921 -33.90258,-27.59863c-3.9915,-8.31045 -4.89106,-12.46352 -4.90182,-22.63058c-0.01103,-10.43683 0.90331,-14.55167 5.14873,-23.17045c6.5289,-13.25453 17.58841,-22.50933 32.02396,-26.7982c7.85696,-2.33434 19.44511,-2.4919 27.41292,-0.37272c10.68681,2.84234 20.56245,9.23503 27.27812,17.65763c11.44406,14.35284 14.51639,32.93808 8.33334,50.41059c-2.37558,6.7131 -5.38321,11.61306 -10.48294,17.07855c-7.51927,8.05854 -15.46124,12.82613 -25.72244,15.44125c-6.92987,1.76612 -18.2959,1.75824 -25.18729,-0.01743zm46.99359,76.71874c0,-11.66681 -0.15546,-21.21237 -0.34546,-21.21237c-0.55267,0 -23.15134,19.0079 -23.15134,19.47273c0,0.59862 22.40039,22.95203 23.00027,22.95203c0.2731,0 0.49652,-9.54558 0.49652,-21.21239zm-8.12837,89.58151c3.13896,-3.60342 5.94908,-9.57928 7.16283,-15.23215c0.75183,-3.5016 0.8862,-7.28795 0.60019,-16.91275l-0.36856,-12.40109l-33.73602,-33.39706c-29.396,-29.10065 -33.79212,-33.21501 -34.172,-31.98175c-0.2398,0.77843 -0.30579,13.66176 -0.14668,28.62961l0.28934,27.21429l28.53863,28.41072c15.69623,15.6259 28.73599,28.41826 28.97726,28.42744c0.24127,0.00919 1.52603,-1.23157 2.85503,-2.75726zm-21.12221,12.22665c0.5526,-0.21207 -6.52711,-7.73318 -19.03375,-20.22046c-15.75389,-15.72952 -20.00713,-19.64691 -20.36126,-18.75351c-0.82094,2.07094 -0.552,9.37703 0.49458,13.43619c3.03795,11.78281 12.81967,21.70416 24.49419,24.84378c3.43257,0.92316 12.65175,1.36725 14.40625,0.694zm-14.69553,16.96454c-19.19916,-3.63824 -34.22623,-17.37338 -40.35254,-36.88327l-1.52992,-4.87216l0,-51.56241c0,-48.09848 0.08022,-51.82547 1.1941,-55.47855c5.75462,-18.87271 18.67331,-31.86444 36.79293,-37.00092c7.28899,-2.06625 19.90268,-2.05429 27.24492,0.02586c17.6541,5.00159 31.24332,18.57871 36.39166,36.35935l1.50121,5.18457l0,50.90973l0,50.90971l-1.50121,5.18457c-2.97653,10.27997 -9.29736,19.97147 -17.27997,26.49481c-4.88281,3.99017 -14.22415,8.68716 -20.0538,10.08334c-6.28586,1.50537 -16.34073,1.79504 -22.40738,0.64539z",
+ "officer_2": "m144.87212,278.09424c0,-7.03476 0,-14.06952 0,-21.10431c34.12148,-0.13669 68.24295,-0.27335 102.36444,-0.41003c0,-6.63841 0,-13.27682 0,-19.91524c-26.94872,-0.26555 -53.89742,-0.53107 -80.84613,-0.79662c30.82893,-41.42374 61.65785,-82.8475 92.48683,-124.27124c13.28885,-1.73074 25.24835,9.13577 26.16702,22.30508c1.37796,55.08076 0.61356,110.19873 0.82785,165.29666c-46.99997,0 -94,0 -141.00003,0c0.00002,-7.03473 0,-14.06952 0.00002,-21.10431zm-0.19199,-87.83214c-0.06876,-13.74153 -0.13754,-27.48306 -0.20631,-41.22459c-14.64618,18.8075 -27.62093,39.06267 -43.91019,56.48129c-14.42976,9.56055 -27.65941,-6.01018 -38.58159,-13.69254c-15.26907,-12.11603 -30.9411,-23.83286 -45.24117,-37.08727c-8.74276,-13.13181 5.83314,-31.80238 20.70509,-26.84245c13.32168,6.5739 23.96796,17.78835 36.01906,26.44797c7.16664,7.87663 15.75377,12.89487 20.74445,-0.10861c10.61151,-12.96709 19.11472,-28.05023 32.18712,-38.75249c13.16731,-7.35264 29.1156,-2.93422 43.48628,-4.27982c21.93321,0.06611 43.87927,-0.19524 65.80286,0.42785c-29.83961,40.18141 -59.99303,80.13989 -90.45013,119.85524c-0.51442,-13.73006 -0.41658,-27.48491 -0.55545,-41.22459zm49.58183,-93.47518c-17.8813,-2.9394 -31.59131,-19.77306 -31.46613,-37.7664c-6.28482,-0.26553 -12.56969,-0.53107 -18.85452,-0.79661c5.37549,-6.77119 10.75095,-13.54238 16.12643,-20.31357c26.79919,0 53.59842,0 80.39761,0c-0.07553,16.83184 2.11966,36.40314 -12.31944,48.47567c-8.59595,8.79105 -21.9399,12.10719 -33.88396,10.40091zm-44.65282,-80.96436c-3.48923,-6.17941 -15.89734,-17.4112 -0.91945,-14.28427c30.58981,-0.43799 61.18378,-0.21775 91.77567,-0.27203c0,9.29378 0,18.58757 0,27.88137c-27.24594,0 -54.49188,0 -81.73782,0c-3.03946,-4.44169 -6.07892,-8.88338 -9.11839,-13.32506z",
+ "officer": "m127.65893,298.12302c-11.91827,-4.4541 -8.85096,-18.47458 -9.45842,-28.44775c-0.14007,-38.77051 -0.03694,-77.54163 -0.06789,-116.31239c21.30015,-0.31718 42.6003,-0.76093 63.90377,-0.70047c-0.02318,44.52536 0.58119,89.061 -0.14537,133.57832c-0.57059,11.93384 -13.89935,13.46393 -23.22325,12.30963c-10.33765,0.00372 -20.67488,-0.15573 -31.00884,-0.42734zm-30.7055,-116.03563c-6.74483,-0.72377 -12.32703,-17.61749 -4.40458,-17.57693c6.23801,-0.08125 12.47601,-0.16251 18.71403,-0.24377c1.007,8.20691 -1.59957,19.89343 -12.37878,18.21895l-1.93067,-0.39824l0,0zm99.85623,-0.00661c-6.98207,-0.87273 -10.75342,-15.40816 -5.67188,-17.55357c6.66685,-0.08684 13.33371,-0.17369 20.00055,-0.26053c1.00876,8.20958 -1.60458,19.90276 -12.38809,18.21675l-1.94055,-0.40263c0,0 -0.00003,0 -0.00003,0zm-107.61794,-56.49044c0.54922,-13.57674 -1.08583,-27.43726 1.69075,-40.79832c4.06557,-10.40357 13.92722,-19.77089 25.33163,-20.63995c23.60493,0.19927 47.27207,-1.00478 70.82676,0.54259c14.04367,3.09693 25.24931,16.9698 23.91605,31.57756c0.32544,21.70094 0.15948,43.40639 0.24002,65.10946c-7.41772,0.09508 -14.83545,0.19016 -22.25314,0.28525c0,-19.53377 0,-39.06755 0,-58.60133c-4.34856,-5.08821 -8.05232,1.74921 -6.5546,6.09985c-0.01697,13.17788 -0.03394,26.35577 -0.05093,39.53365c-21.48996,0 -42.97992,0 -64.46988,0c-0.17615,-15.26811 -0.35229,-30.53623 -0.52844,-45.80434c-4.21338,-4.81828 -7.17517,1.78474 -5.83627,5.79053c-0.07101,17.56546 -0.14203,35.13091 -0.21304,52.69639c-7.42339,0.09512 -14.84679,0.19028 -22.27019,0.28539c0.0571,-12.02556 0.11414,-24.05119 0.17128,-36.07671zm56.41985,-70.72921c-11.43472,-2.06434 -20.27027,-12.69278 -20.54277,-24.26873c16.53569,0 33.07137,0 49.60706,0c0.58516,15.06838 -14.48488,27.02206 -29.06429,24.26873zm-25.62941,-33.78068c2.8164,-2.81977 5.23412,-6.59949 9.76779,-5.28442c14.97531,0 29.95061,0 44.9259,0c-0.48174,3.25565 0.91423,8.389 -0.64331,10.56883c-19.77167,0 -39.54332,0 -59.31499,0c1.75487,-1.76147 3.50974,-3.52295 5.26459,-5.28442zm18.8918,-9.34585c-4.62387,-0.06122 -9.24773,-0.12243 -13.8716,-0.18365c0.48279,-3.24875 -0.91532,-8.37839 0.64332,-10.55128c16.34338,0 32.6868,0 49.0302,0c-0.48172,3.25588 0.91423,8.38858 -0.64331,10.56913c-11.722,-0.07703 -23.43608,0.45157 -35.1586,0.1658zm24.67688,286.6952c-6.54985,-2.25 -11.37944,-9.11417 -10.08943,-16.07803c-0.23178,-33.13365 0.30627,-66.28789 -0.62375,-99.40492c-7.52885,-8.41364 -5.32481,11.97667 -5.61325,16.63527c-0.40672,29.85049 0.65932,59.77377 -0.79054,89.57779c-1.03221,6.81601 -14.93086,10.39682 -2.36958,9.16388c6.49333,0.08212 12.9946,0.3678 19.48656,0.10602z",
+ "recycle_2": "m70.51852,115.61727c18.49814,35.46731 22.10944,46.23824 15.99329,47.70097c-11.94749,2.85741 -9.54662,19.19937 7.17589,48.84396c20.97182,37.17758 62.04919,60.008 100.6335,55.93118c14.9762,-1.5824 31.90746,-4.84808 37.62502,-7.25717c5.71753,-2.40912 2.20903,2.0788 -7.79668,9.97308c-50.05432,39.49167 -111.87362,36.74075 -161.19199,-7.17288c-19.66416,-17.50925 -46.71899,-68.66641 -46.71899,-88.33963c0,-5.57329 -4.46041,-10.97359 -9.91201,-12.0006c-8.91546,-1.67957 -7.71816,-6.10193 11.90882,-43.98632c12.00147,-23.16548 23.29887,-43.78072 25.10535,-45.81163c1.80651,-2.03091 14.03651,16.92264 27.17781,42.11903zm159.00744,68.37661c-18.49815,-35.4673 -22.10944,-46.23827 -15.99332,-47.70097c11.94749,-2.85736 9.54663,-19.19936 -7.17586,-48.84396c-20.97183,-37.17759 -62.04924,-60.00801 -100.63353,-55.9312c-14.9762,1.58238 -31.90743,4.84812 -37.62498,7.25722c-5.71756,2.40907 -2.20905,-2.07883 7.79666,-9.9731c50.05433,-39.49169 111.87363,-36.74079 161.192,7.1729c19.66417,17.50919 46.71898,68.66639 46.71898,88.33957c0,5.57333 4.46045,10.97359 9.91199,12.0006c8.9155,1.6796 7.71817,6.10193 -11.90878,43.98634c-12.00146,23.16545 -23.29889,43.7807 -25.10535,45.81163c-1.80652,2.03091 -14.03651,-16.92262 -27.17781,-42.11902z",
+ "shield_1": "m235.43118,0.99993c-25.8405,20.89055 -61.5569,21.09333 -87.59367,0.62283c-25.04173,19.6952 -59.05148,20.25899 -84.60652,1.69064l-45.9514,49.35802c28.26655,30.91131 28.10226,80.57548 -0.48303,111.27486c-3.79379,10.48137 -5.78214,9.97594 -6.19602,20.53111c-0.97335,25.41245 4.72666,49.11902 22.58091,66.97356c15.9491,15.9491 37.5927,22.71344 58.38308,20.29993c34.71738,1.92664 51.36115,18.07672 58.34494,27.73621c9.4303,-10.32108 24.09528,-26.91339 68.66653,-28.98181c26.60716,-4.12497 36.22241,-10.78885 48.70973,-23.10918c16.80759,-16.80759 22.6846,-38.091 22.18927,-61.73892c-0.20569,-9.81746 -1.32416,-13.23065 -6.84674,-25.76584c-28.71786,-30.84172 -28.73875,-80.82797 -0.07623,-111.70699l-47.12085,-47.18442z",
+ "smoking": "m1.00013,234.70761c0,-6.75858 0,-13.51718 0,-20.27576c85.15819,0 170.31638,0 255.47457,0c0,13.51718 0,27.03435 0,40.55151c-85.15819,0 -170.31638,0 -255.47457,0c0,-6.75858 0,-13.51717 0,-20.27576zm262.90899,-0.33792c0,-6.87125 0,-13.74248 0,-20.61369c4.50577,0 9.01147,0 13.51718,0c0,13.74245 0,27.48491 0,41.22737c-4.50571,0 -9.01141,0 -13.51718,0c0,-6.87125 0,-13.74246 0,-20.61368zm21.62747,0c0,-6.87125 0,-13.74248 0,-20.61369c4.50574,0 9.01147,0 13.51718,0c0,13.74245 0,27.48491 0,41.22737c-4.50571,0 -9.01144,0 -13.51718,0c0,-6.87125 0,-13.74246 0,-20.61368zm-21.62747,-38.40129c2.33044,-12.44823 -4.64667,-27.35672 -18.89619,-26.91631c-16.51076,-0.91339 -33.27669,-0.16469 -49.68698,-1.22891c-15.92004,-5.44565 -24.6412,-22.87308 -22.39098,-39.09009c-2.60393,-4.6821 -13.75305,-3.34301 -18.33653,-8.47466c-22.34129,-12.77989 -25.34413,-47.04951 -6.6355,-64.35941c6.55362,-6.74706 19.10332,-12.28213 27.40872,-10.56472c0,4.27357 0,8.54715 0,12.82071c-17.16693,0.19163 -30.20795,18.71787 -25.17886,34.95034c3.93155,16.28817 21.44681,21.17548 36.06943,21.4035c9.34369,7.54165 -5.73552,20.54516 2.38481,30.40595c5.4973,13.38734 21.79352,9.01994 33.15524,10.07909c16.32292,0.98282 36.22006,-2.88133 48.06549,11.43753c10.15674,11.08647 7.03754,26.81902 7.55853,40.56599c-4.50571,0 -9.01141,0 -13.51718,0c0,-3.67633 0,-7.35268 0,-11.02902zm21.44409,-5.02264c1.06424,-17.34164 -3.94,-36.41237 -18.82684,-46.85637c-14.2328,-10.82034 -32.68178,-7.49533 -49.35545,-8.05716c-10.44089,-9.26265 6.69904,-19.729 4.85689,-30.88184c1.16321,-14.61189 -8.86084,-28.86267 -23.32887,-32.0012c-8.26547,0.48857 -11.4507,-1.71243 -9.8101,-9.54141c-2.56769,-10.66179 12.99852,-3.08173 18.15088,-2.147c18.80948,6.74871 31.28568,27.05275 28.30017,46.93802c-0.48553,7.00495 -7.28169,16.99163 4.77028,14.2243c23.42943,-1.23563 45.83046,13.98601 54.11491,35.81352c6.09546,15.43478 4.5502,32.30844 4.8287,48.56076c-4.44968,0 -8.89935,0 -13.34903,0c-0.11716,-5.35051 -0.23438,-10.70122 -0.35153,-16.05162z",
+ "stairs": "m2.18934,245.58681c17.86729,-0.11601 35.73457,-0.23204 53.60186,-0.34804c0.11764,-18.34987 0.23526,-36.69974 0.35289,-55.04959c17.78193,0 35.56387,0 53.34581,0c0,-18.46245 0,-36.9249 0,-55.38734c18.2373,0 36.47458,0 54.71188,0c0,-18.01214 0,-36.02428 0,-54.03642c18.01213,0 36.02426,0 54.03641,0c0,-18.01213 0,-36.02428 0,-54.03642c26.79306,0 53.58612,0 80.37918,0c0,9.00607 0,18.01214 0,27.01821c-17.78702,0 -35.57397,0 -53.36099,0c0,18.23729 0,36.47458 0,54.71188c-18.01212,0 -36.02425,0 -54.03641,0c0,18.2373 0,36.47459 0,54.71188c-18.01215,0 -36.02426,0 -54.03641,0c0,18.23729 0,36.47459 0,54.71185c-18.2373,0 -36.47459,0 -54.71187,0c0,18.46246 0,36.9249 0,55.38733c-27.01822,0 -54.03642,0 -81.05463,0c1.20448,-8.94977 -2.05336,-19.04163 0.77228,-27.68333z",
+ "umbrella": "m138.31999,1l0,29.565c-75.13835,4.16908 -134.31995,48.17229 -134.31999,101.835c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c20.14798,0 36.5,7.84892 36.5,17.51999c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c9.59525,0 18.30284,1.83565 24.81999,4.745l0,144.17499c0,6.44742 -5.23262,11.68002 -11.67999,11.68002c-6.44734,0 -11.68,-5.2326 -11.68,-11.68002l0,-5.84l-23.36,0l0,5.84c0,19.34207 15.6979,35.04001 35.04,35.04001c19.34206,0 35.04001,-15.69794 35.04001,-35.04001l0,-144.17499c6.51714,-2.90935 15.22475,-4.745 24.81999,-4.745c20.14798,0 36.5,7.84892 36.5,17.51999c0,-9.67107 16.35202,-17.51999 36.5,-17.51999c20.14798,0 36.5,7.84892 36.5,17.51999c0,-53.66274 -59.18159,-97.66592 -134.31999,-101.835l0,-29.565l-23.36002,0z",
+ "yin_yang": "m152.3828,1.00127c40.96666,0 74.20116,33.2665 74.20116,74.23316c0,40.96668 -33.2345,74.20117 -74.20116,74.20117c-40.96668,0 -74.20118,33.26653 -74.20118,74.23318c0,40.96667 33.2345,74.20117 74.20118,74.20117c81.93332,0 148.43431,-66.50104 148.43431,-148.43436c0,-81.93333 -66.50099,-148.43433 -148.43431,-148.43433zm0,51.0353c-12.80867,0 -23.19788,10.38917 -23.19788,23.19786c0,12.80871 10.38918,23.19786 23.19788,23.19786c12.80869,0 23.19785,-10.38917 23.19785,-23.19786c0,-12.80869 -10.38916,-23.19786 -23.19785,-23.19786zm0,148.43436c12.80206,0 23.19785,10.39577 23.19785,23.19786c0,12.80206 -10.39578,23.19788 -23.19785,23.19788c-12.80208,0 -23.19788,-10.39581 -23.19788,-23.19788c0,-12.80206 10.3958,-23.19786 23.19788,-23.19786zm145.10503,-50.94075c0,81.87245 -66.37071,148.24319 -148.24321,148.24319c-81.87246,0 -148.24321,-66.37074 -148.24321,-148.24319c0,-81.87248 66.37075,-148.24324 148.24321,-148.24324c81.8725,0 148.24321,66.37076 148.24321,148.24324z"
+ }
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/history.js b/files_svgedit/svg-edit/history.js
new file mode 100644
index 000000000..476787682
--- /dev/null
+++ b/files_svgedit/svg-edit/history.js
@@ -0,0 +1,601 @@
+/**
+ * Package: svedit.history
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) svgtransformlist.js
+// 3) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.history) {
+ svgedit.history = {};
+}
+
+// Group: Undo/Redo history management
+
+
+svgedit.history.HistoryEventTypes = {
+ BEFORE_APPLY: 'before_apply',
+ AFTER_APPLY: 'after_apply',
+ BEFORE_UNAPPLY: 'before_unapply',
+ AFTER_UNAPPLY: 'after_unapply'
+};
+
+var removedElements = {};
+
+/**
+ * Interface: svgedit.history.HistoryCommand
+ * An interface that all command objects must implement.
+ *
+ * interface svgedit.history.HistoryCommand {
+ * void apply(svgedit.history.HistoryEventHandler);
+ * void unapply(svgedit.history.HistoryEventHandler);
+ * Element[] elements();
+ * String getText();
+ *
+ * static String type();
+ * }
+ *
+ * Interface: svgedit.history.HistoryEventHandler
+ * An interface for objects that will handle history events.
+ *
+ * interface svgedit.history.HistoryEventHandler {
+ * void handleHistoryEvent(eventType, command);
+ * }
+ *
+ * eventType is a string conforming to one of the HistoryEvent types.
+ * command is an object fulfilling the HistoryCommand interface.
+ */
+
+// Class: svgedit.history.MoveElementCommand
+// implements svgedit.history.HistoryCommand
+// History command for an element that had its DOM position changed
+//
+// Parameters:
+// elem - The DOM element that was moved
+// oldNextSibling - The element's next sibling before it was moved
+// oldParent - The element's parent before it was moved
+// text - An optional string visible to user related to this change
+svgedit.history.MoveElementCommand = function(elem, oldNextSibling, oldParent, text) {
+ this.elem = elem;
+ this.text = text ? ("Move " + elem.tagName + " to " + text) : ("Move " + elem.tagName);
+ this.oldNextSibling = oldNextSibling;
+ this.oldParent = oldParent;
+ this.newNextSibling = elem.nextSibling;
+ this.newParent = elem.parentNode;
+};
+svgedit.history.MoveElementCommand.type = function() { return 'svgedit.history.MoveElementCommand'; }
+svgedit.history.MoveElementCommand.prototype.type = svgedit.history.MoveElementCommand.type;
+
+// Function: svgedit.history.MoveElementCommand.getText
+svgedit.history.MoveElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.MoveElementCommand.apply
+// Re-positions the element
+svgedit.history.MoveElementCommand.prototype.apply = function(handler) {
+ // TODO(codedread): Refactor this common event code into a base HistoryCommand class.
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ this.elem = this.newParent.insertBefore(this.elem, this.newNextSibling);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: svgedit.history.MoveElementCommand.unapply
+// Positions the element back to its original location
+svgedit.history.MoveElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ this.elem = this.oldParent.insertBefore(this.elem, this.oldNextSibling);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: svgedit.history.MoveElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.MoveElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// Class: svgedit.history.InsertElementCommand
+// implements svgedit.history.HistoryCommand
+// History command for an element that was added to the DOM
+//
+// Parameters:
+// elem - The newly added DOM element
+// text - An optional string visible to user related to this change
+svgedit.history.InsertElementCommand = function(elem, text) {
+ this.elem = elem;
+ this.text = text || ("Create " + elem.tagName);
+ this.parent = elem.parentNode;
+ this.nextSibling = this.elem.nextSibling;
+};
+svgedit.history.InsertElementCommand.type = function() { return 'svgedit.history.InsertElementCommand'; }
+svgedit.history.InsertElementCommand.prototype.type = svgedit.history.InsertElementCommand.type;
+
+// Function: svgedit.history.InsertElementCommand.getText
+svgedit.history.InsertElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.InsertElementCommand.apply
+// Re-Inserts the new element
+svgedit.history.InsertElementCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ this.elem = this.parent.insertBefore(this.elem, this.nextSibling);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: svgedit.history.InsertElementCommand.unapply
+// Removes the element
+svgedit.history.InsertElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ this.parent = this.elem.parentNode;
+ this.elem = this.elem.parentNode.removeChild(this.elem);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: svgedit.history.InsertElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.InsertElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// Class: svgedit.history.RemoveElementCommand
+// implements svgedit.history.HistoryCommand
+// History command for an element removed from the DOM
+//
+// Parameters:
+// elem - The removed DOM element
+// oldNextSibling - the DOM element's nextSibling when it was in the DOM
+// oldParent - The DOM element's parent
+// text - An optional string visible to user related to this change
+svgedit.history.RemoveElementCommand = function(elem, oldNextSibling, oldParent, text) {
+ this.elem = elem;
+ this.text = text || ("Delete " + elem.tagName);
+ this.nextSibling = oldNextSibling;
+ this.parent = oldParent;
+
+ // special hack for webkit: remove this element's entry in the svgTransformLists map
+ svgedit.transformlist.removeElementFromListMap(elem);
+};
+svgedit.history.RemoveElementCommand.type = function() { return 'svgedit.history.RemoveElementCommand'; }
+svgedit.history.RemoveElementCommand.prototype.type = svgedit.history.RemoveElementCommand.type;
+
+// Function: svgedit.history.RemoveElementCommand.getText
+svgedit.history.RemoveElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: RemoveElementCommand.apply
+// Re-removes the new element
+svgedit.history.RemoveElementCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ svgedit.transformlist.removeElementFromListMap(this.elem);
+ this.parent = this.elem.parentNode;
+ this.elem = this.parent.removeChild(this.elem);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: RemoveElementCommand.unapply
+// Re-adds the new element
+svgedit.history.RemoveElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ svgedit.transformlist.removeElementFromListMap(this.elem);
+ if(this.nextSibling == null) {
+ if(window.console) console.log('Error: reference element was lost');
+ }
+ this.parent.insertBefore(this.elem, this.nextSibling);
+
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: RemoveElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.RemoveElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// Class: svgedit.history.ChangeElementCommand
+// implements svgedit.history.HistoryCommand
+// History command to make a change to an element.
+// Usually an attribute change, but can also be textcontent.
+//
+// Parameters:
+// elem - The DOM element that was changed
+// attrs - An object with the attributes to be changed and the values they had *before* the change
+// text - An optional string visible to user related to this change
+svgedit.history.ChangeElementCommand = function(elem, attrs, text) {
+ this.elem = elem;
+ this.text = text ? ("Change " + elem.tagName + " " + text) : ("Change " + elem.tagName);
+ this.newValues = {};
+ this.oldValues = attrs;
+ for (var attr in attrs) {
+ if (attr == "#text") this.newValues[attr] = elem.textContent;
+ else if (attr == "#href") this.newValues[attr] = svgedit.utilities.getHref(elem);
+ else this.newValues[attr] = elem.getAttribute(attr);
+ }
+};
+svgedit.history.ChangeElementCommand.type = function() { return 'svgedit.history.ChangeElementCommand'; }
+svgedit.history.ChangeElementCommand.prototype.type = svgedit.history.ChangeElementCommand.type;
+
+// Function: svgedit.history.ChangeElementCommand.getText
+svgedit.history.ChangeElementCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.ChangeElementCommand.apply
+// Performs the stored change action
+svgedit.history.ChangeElementCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ var bChangedTransform = false;
+ for(var attr in this.newValues ) {
+ if (this.newValues[attr]) {
+ if (attr == "#text") this.elem.textContent = this.newValues[attr];
+ else if (attr == "#href") svgedit.utilities.setHref(this.elem, this.newValues[attr])
+ else this.elem.setAttribute(attr, this.newValues[attr]);
+ }
+ else {
+ if (attr == "#text") {
+ this.elem.textContent = "";
+ }
+ else {
+ this.elem.setAttribute(attr, "");
+ this.elem.removeAttribute(attr);
+ }
+ }
+
+ if (attr == "transform") { bChangedTransform = true; }
+ }
+
+ // relocate rotational transform, if necessary
+ if(!bChangedTransform) {
+ var angle = svgedit.utilities.getRotationAngle(this.elem);
+ if (angle) {
+ var bbox = elem.getBBox();
+ var cx = bbox.x + bbox.width/2,
+ cy = bbox.y + bbox.height/2;
+ var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join('');
+ if (rotate != elem.getAttribute("transform")) {
+ elem.setAttribute("transform", rotate);
+ }
+ }
+ }
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+
+ return true;
+};
+
+// Function: svgedit.history.ChangeElementCommand.unapply
+// Reverses the stored change action
+svgedit.history.ChangeElementCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ var bChangedTransform = false;
+ for(var attr in this.oldValues ) {
+ if (this.oldValues[attr]) {
+ if (attr == "#text") this.elem.textContent = this.oldValues[attr];
+ else if (attr == "#href") svgedit.utilities.setHref(this.elem, this.oldValues[attr]);
+ else this.elem.setAttribute(attr, this.oldValues[attr]);
+ }
+ else {
+ if (attr == "#text") {
+ this.elem.textContent = "";
+ }
+ else this.elem.removeAttribute(attr);
+ }
+ if (attr == "transform") { bChangedTransform = true; }
+ }
+ // relocate rotational transform, if necessary
+ if(!bChangedTransform) {
+ var angle = svgedit.utilities.getRotationAngle(this.elem);
+ if (angle) {
+ var bbox = elem.getBBox();
+ var cx = bbox.x + bbox.width/2,
+ cy = bbox.y + bbox.height/2;
+ var rotate = ["rotate(", angle, " ", cx, ",", cy, ")"].join('');
+ if (rotate != elem.getAttribute("transform")) {
+ elem.setAttribute("transform", rotate);
+ }
+ }
+ }
+
+ // Remove transformlist to prevent confusion that causes bugs like 575.
+ svgedit.transformlist.removeElementFromListMap(this.elem);
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+
+ return true;
+};
+
+// Function: ChangeElementCommand.elements
+// Returns array with element associated with this command
+svgedit.history.ChangeElementCommand.prototype.elements = function() {
+ return [this.elem];
+};
+
+
+// TODO: create a 'typing' command object that tracks changes in text
+// if a new Typing command is created and the top command on the stack is also a Typing
+// and they both affect the same element, then collapse the two commands into one
+
+
+// Class: svgedit.history.BatchCommand
+// implements svgedit.history.HistoryCommand
+// History command that can contain/execute multiple other commands
+//
+// Parameters:
+// text - An optional string visible to user related to this change
+svgedit.history.BatchCommand = function(text) {
+ this.text = text || "Batch Command";
+ this.stack = [];
+};
+svgedit.history.BatchCommand.type = function() { return 'svgedit.history.BatchCommand'; }
+svgedit.history.BatchCommand.prototype.type = svgedit.history.BatchCommand.type;
+
+// Function: svgedit.history.BatchCommand.getText
+svgedit.history.BatchCommand.prototype.getText = function() {
+ return this.text;
+};
+
+// Function: svgedit.history.BatchCommand.apply
+// Runs "apply" on all subcommands
+svgedit.history.BatchCommand.prototype.apply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_APPLY, this);
+ }
+
+ var len = this.stack.length;
+ for (var i = 0; i < len; ++i) {
+ this.stack[i].apply(handler);
+ }
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_APPLY, this);
+ }
+};
+
+// Function: svgedit.history.BatchCommand.unapply
+// Runs "unapply" on all subcommands
+svgedit.history.BatchCommand.prototype.unapply = function(handler) {
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.BEFORE_UNAPPLY, this);
+ }
+
+ for (var i = this.stack.length-1; i >= 0; i--) {
+ this.stack[i].unapply(handler);
+ }
+
+ if (handler) {
+ handler.handleHistoryEvent(svgedit.history.HistoryEventTypes.AFTER_UNAPPLY, this);
+ }
+};
+
+// Function: svgedit.history.BatchCommand.elements
+// Iterate through all our subcommands and returns all the elements we are changing
+svgedit.history.BatchCommand.prototype.elements = function() {
+ var elems = [];
+ var cmd = this.stack.length;
+ while (cmd--) {
+ var thisElems = this.stack[cmd].elements();
+ var elem = thisElems.length;
+ while (elem--) {
+ if (elems.indexOf(thisElems[elem]) == -1) elems.push(thisElems[elem]);
+ }
+ }
+ return elems;
+};
+
+// Function: svgedit.history.BatchCommand.addSubCommand
+// Adds a given command to the history stack
+//
+// Parameters:
+// cmd - The undo command object to add
+svgedit.history.BatchCommand.prototype.addSubCommand = function(cmd) {
+ this.stack.push(cmd);
+};
+
+// Function: svgedit.history.BatchCommand.isEmpty
+// Returns a boolean indicating whether or not the batch command is empty
+svgedit.history.BatchCommand.prototype.isEmpty = function() {
+ return this.stack.length == 0;
+};
+
+
+// Class: svgedit.history.UndoManager
+// Parameters:
+// historyEventHandler - an object that conforms to the HistoryEventHandler interface
+// (see above)
+svgedit.history.UndoManager = function(historyEventHandler) {
+ this.handler_ = historyEventHandler || null;
+ this.undoStackPointer = 0;
+ this.undoStack = [];
+
+ // this is the stack that stores the original values, the elements and
+ // the attribute name for begin/finish
+ this.undoChangeStackPointer = -1;
+ this.undoableChangeStack = [];
+};
+
+// Function: svgedit.history.UndoManager.resetUndoStack
+// Resets the undo stack, effectively clearing the undo/redo history
+svgedit.history.UndoManager.prototype.resetUndoStack = function() {
+ this.undoStack = [];
+ this.undoStackPointer = 0;
+};
+
+// Function: svgedit.history.UndoManager.getUndoStackSize
+// Returns:
+// Integer with the current size of the undo history stack
+svgedit.history.UndoManager.prototype.getUndoStackSize = function() {
+ return this.undoStackPointer;
+};
+
+// Function: svgedit.history.UndoManager.getRedoStackSize
+// Returns:
+// Integer with the current size of the redo history stack
+svgedit.history.UndoManager.prototype.getRedoStackSize = function() {
+ return this.undoStack.length - this.undoStackPointer;
+};
+
+// Function: svgedit.history.UndoManager.getNextUndoCommandText
+// Returns:
+// String associated with the next undo command
+svgedit.history.UndoManager.prototype.getNextUndoCommandText = function() {
+ return this.undoStackPointer > 0 ? this.undoStack[this.undoStackPointer-1].getText() : "";
+};
+
+// Function: svgedit.history.UndoManager.getNextRedoCommandText
+// Returns:
+// String associated with the next redo command
+svgedit.history.UndoManager.prototype.getNextRedoCommandText = function() {
+ return this.undoStackPointer < this.undoStack.length ? this.undoStack[this.undoStackPointer].getText() : "";
+};
+
+// Function: svgedit.history.UndoManager.undo
+// Performs an undo step
+svgedit.history.UndoManager.prototype.undo = function() {
+ if (this.undoStackPointer > 0) {
+ var cmd = this.undoStack[--this.undoStackPointer];
+ cmd.unapply(this.handler_);
+ }
+};
+
+// Function: svgedit.history.UndoManager.redo
+// Performs a redo step
+svgedit.history.UndoManager.prototype.redo = function() {
+ if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) {
+ var cmd = this.undoStack[this.undoStackPointer++];
+ cmd.apply(this.handler_);
+ }
+};
+
+// Function: svgedit.history.UndoManager.addCommandToHistory
+// Adds a command object to the undo history stack
+//
+// Parameters:
+// cmd - The command object to add
+svgedit.history.UndoManager.prototype.addCommandToHistory = function(cmd) {
+ // FIXME: we MUST compress consecutive text changes to the same element
+ // (right now each keystroke is saved as a separate command that includes the
+ // entire text contents of the text element)
+ // TODO: consider limiting the history that we store here (need to do some slicing)
+
+ // if our stack pointer is not at the end, then we have to remove
+ // all commands after the pointer and insert the new command
+ if (this.undoStackPointer < this.undoStack.length && this.undoStack.length > 0) {
+ this.undoStack = this.undoStack.splice(0, this.undoStackPointer);
+ }
+ this.undoStack.push(cmd);
+ this.undoStackPointer = this.undoStack.length;
+};
+
+
+// Function: svgedit.history.UndoManager.beginUndoableChange
+// This function tells the canvas to remember the old values of the
+// attrName attribute for each element sent in. The elements and values
+// are stored on a stack, so the next call to finishUndoableChange() will
+// pop the elements and old values off the stack, gets the current values
+// from the DOM and uses all of these to construct the undo-able command.
+//
+// Parameters:
+// attrName - The name of the attribute being changed
+// elems - Array of DOM elements being changed
+svgedit.history.UndoManager.prototype.beginUndoableChange = function(attrName, elems) {
+ var p = ++this.undoChangeStackPointer;
+ var i = elems.length;
+ var oldValues = new Array(i), elements = new Array(i);
+ while (i--) {
+ var elem = elems[i];
+ if (elem == null) continue;
+ elements[i] = elem;
+ oldValues[i] = elem.getAttribute(attrName);
+ }
+ this.undoableChangeStack[p] = {'attrName': attrName,
+ 'oldValues': oldValues,
+ 'elements': elements};
+};
+
+// Function: svgedit.history.UndoManager.finishUndoableChange
+// This function returns a BatchCommand object which summarizes the
+// change since beginUndoableChange was called. The command can then
+// be added to the command history
+//
+// Returns:
+// Batch command object with resulting changes
+svgedit.history.UndoManager.prototype.finishUndoableChange = function() {
+ var p = this.undoChangeStackPointer--;
+ var changeset = this.undoableChangeStack[p];
+ var i = changeset['elements'].length;
+ var attrName = changeset['attrName'];
+ var batchCmd = new svgedit.history.BatchCommand("Change " + attrName);
+ while (i--) {
+ var elem = changeset['elements'][i];
+ if (elem == null) continue;
+ var changes = {};
+ changes[attrName] = changeset['oldValues'][i];
+ if (changes[attrName] != elem.getAttribute(attrName)) {
+ batchCmd.addSubCommand(new svgedit.history.ChangeElementCommand(elem, changes, attrName));
+ }
+ }
+ this.undoableChangeStack[p] = null;
+ return batchCmd;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/images/.svn/all-wcprops b/files_svgedit/svg-edit/images/.svn/all-wcprops
new file mode 100644
index 000000000..5e10f8231
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/all-wcprops
@@ -0,0 +1,437 @@
+K 25
+svn:wc:ra_dav:version-url
+V 38
+/svn/!svn/ver/1878/trunk/editor/images
+END
+rect.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/934/trunk/editor/images/rect.png
+END
+rotate.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/721/trunk/editor/images/rotate.png
+END
+to_path.png
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/1151/trunk/editor/images/to_path.png
+END
+clone.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/1151/trunk/editor/images/clone.png
+END
+align-middle.svg
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/772/trunk/editor/images/align-middle.svg
+END
+svg_edit_icons.svgz
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/934/trunk/editor/images/svg_edit_icons.svgz
+END
+italic.png
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1151/trunk/editor/images/italic.png
+END
+undo.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/200/trunk/editor/images/undo.png
+END
+conn.svg
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/1308/trunk/editor/images/conn.svg
+END
+copy.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/1151/trunk/editor/images/copy.png
+END
+logo.svg
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/1434/trunk/editor/images/logo.svg
+END
+shape_group.png
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/600/trunk/editor/images/shape_group.png
+END
+bold.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/1151/trunk/editor/images/bold.png
+END
+flyup.gif
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/658/trunk/editor/images/flyup.gif
+END
+eye.png
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/675/trunk/editor/images/eye.png
+END
+zoom.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/655/trunk/editor/images/zoom.png
+END
+reorient.png
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1151/trunk/editor/images/reorient.png
+END
+line.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/934/trunk/editor/images/line.png
+END
+sep.png
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/144/trunk/editor/images/sep.png
+END
+redo.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/200/trunk/editor/images/redo.png
+END
+cut.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/1151/trunk/editor/images/cut.png
+END
+align-left.svg
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/772/trunk/editor/images/align-left.svg
+END
+source.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/381/trunk/editor/images/source.png
+END
+delete.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/934/trunk/editor/images/delete.png
+END
+polygon.svg
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/878/trunk/editor/images/polygon.svg
+END
+align-top.svg
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/772/trunk/editor/images/align-top.svg
+END
+node_delete.png
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/1574/trunk/editor/images/node_delete.png
+END
+align-bottom.svg
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/772/trunk/editor/images/align-bottom.svg
+END
+freehand-square.png
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/180/trunk/editor/images/freehand-square.png
+END
+freehand-circle.png
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/180/trunk/editor/images/freehand-circle.png
+END
+paste.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/1151/trunk/editor/images/paste.png
+END
+align-right.svg
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/772/trunk/editor/images/align-right.svg
+END
+align-center.svg
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/772/trunk/editor/images/align-center.svg
+END
+align-middle.png
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/934/trunk/editor/images/align-middle.png
+END
+README.txt
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/772/trunk/editor/images/README.txt
+END
+move_top.png
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/144/trunk/editor/images/move_top.png
+END
+save.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/934/trunk/editor/images/save.png
+END
+text.svg
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/772/trunk/editor/images/text.svg
+END
+logo.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/1370/trunk/editor/images/logo.png
+END
+square.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/53/trunk/editor/images/square.png
+END
+circle.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/934/trunk/editor/images/circle.png
+END
+wave.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/537/trunk/editor/images/wave.png
+END
+view-refresh.png
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/667/trunk/editor/images/view-refresh.png
+END
+document-properties.png
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/635/trunk/editor/images/document-properties.png
+END
+svg_edit_icons.svg
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1878/trunk/editor/images/svg_edit_icons.svg
+END
+link_controls.png
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1151/trunk/editor/images/link_controls.png
+END
+wireframe.png
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/857/trunk/editor/images/wireframe.png
+END
+align-left.png
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/934/trunk/editor/images/align-left.png
+END
+cancel.png
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1151/trunk/editor/images/cancel.png
+END
+clear.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/934/trunk/editor/images/clear.png
+END
+polygon.png
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/357/trunk/editor/images/polygon.png
+END
+go-up.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/667/trunk/editor/images/go-up.png
+END
+flyouth.png
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/419/trunk/editor/images/flyouth.png
+END
+align-top.png
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/934/trunk/editor/images/align-top.png
+END
+path.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/881/trunk/editor/images/path.png
+END
+align-bottom.png
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/934/trunk/editor/images/align-bottom.png
+END
+ellipse.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/53/trunk/editor/images/ellipse.png
+END
+none.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/934/trunk/editor/images/none.png
+END
+open.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/405/trunk/editor/images/open.png
+END
+align-right.png
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/934/trunk/editor/images/align-right.png
+END
+node_clone.png
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/1574/trunk/editor/images/node_clone.png
+END
+align-center.png
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/934/trunk/editor/images/align-center.png
+END
+fhpath.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/934/trunk/editor/images/fhpath.png
+END
+go-down.png
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/667/trunk/editor/images/go-down.png
+END
+dropdown.gif
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/650/trunk/editor/images/dropdown.gif
+END
+shape_ungroup.png
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/600/trunk/editor/images/shape_ungroup.png
+END
+select.png
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/934/trunk/editor/images/select.png
+END
+image.png
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/580/trunk/editor/images/image.png
+END
+spinbtn_updn_big.png
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/934/trunk/editor/images/spinbtn_updn_big.png
+END
+select_node.png
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/864/trunk/editor/images/select_node.png
+END
+text.png
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/772/trunk/editor/images/text.png
+END
+move_bottom.png
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/144/trunk/editor/images/move_bottom.png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/entries b/files_svgedit/svg-edit/images/.svn/entries
new file mode 100644
index 000000000..64a975cb4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/entries
@@ -0,0 +1,2476 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/images
+http://svg-edit.googlecode.com/svn
+
+
+
+2010-12-01T17:54:11.673397Z
+1878
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+rect.png
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+7e0a4d479b53b99edd2092fe9658e046
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+404
+
+rotate.png
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+f8d00dfcb854a9be795e1154d5106ffd
+2009-09-28T18:25:37.885325Z
+721
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1500
+
+to_path.png
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+06df1b21fdb664542c062df156b10094
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1153
+
+clone.png
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+da6c2728341c89893b647be744a8de25
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+715
+
+align-middle.svg
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+1762dd5e1063c85ed6222c0a7b2a03bc
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9205
+
+svg_edit_icons.svgz
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+9b636f7effb7fd4d2e6a485fc37281a0
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5493
+
+italic.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+fb9560960a210f875ae410cdc95afb44
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2972
+
+undo.png
+file
+
+
+
+
+2012-03-25T18:41:45.244344Z
+c923d32e4dbae44926f7bc712a523075
+2009-06-25T08:31:36.766969Z
+200
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1122
+
+conn.svg
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+980e294ee1f520678b17e4a272952e1e
+2010-01-29T21:28:46.817162Z
+1308
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1575
+
+copy.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+2f5a2316b5b1d85b0880233c9aa5386f
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+852
+
+logo.svg
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+4d8d3e34ff75f08525c86afc0a1ced0f
+2010-02-27T04:36:04.725086Z
+1434
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6356
+
+shape_group.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+9bbe196f65855df9d2154644e18d5223
+2009-09-05T20:03:47.951635Z
+600
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+553
+
+bold.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+38714d1ccd3d2d9e7d779f68a24f59c7
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2976
+
+flyup.gif
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+e607316cec026f8af2abee4dd8943c7e
+2009-09-16T18:35:09.719545Z
+658
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+48
+
+eye.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+79e387b49bdbb8bdb1555648a193613d
+2009-09-22T04:57:59.111124Z
+675
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+750
+
+zoom.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+919b20062d490a8d8093d281d6c63d2d
+2009-09-16T15:45:50.423537Z
+655
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1197
+
+reorient.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+69d4b8d40d90ce1ffbaf90c17203e8e4
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+980
+
+line.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+22aa98be29fd6b61cfc8916df851122a
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1026
+
+sep.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+4617612bbc5db44619ab5384396e48bd
+2009-06-17T20:08:53.623204Z
+144
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+93
+
+redo.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+ecc91b5708bb893f6166b2f51c88748d
+2009-06-25T08:31:36.766969Z
+200
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+921
+
+cut.png
+file
+
+
+
+
+2012-03-25T18:41:45.248344Z
+2ef39a60185486cc12fdaa95df1a52f0
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1294
+
+align-left.svg
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+dab511d40b57ee7b5b92058a441b2d48
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8562
+
+source.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+48352d75406271ec82758e916d96cf3a
+2009-08-14T21:14:51.144667Z
+381
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1110
+
+delete.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+35f33a45d2c871103b4ccdfa6c2b7e42
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+663
+
+polygon.svg
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+2cacf356d7cfae34bc0ea6442739623e
+2009-10-27T13:24:18.076865Z
+878
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7865
+
+align-top.svg
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+c07cd93c0773af1f21b82bdda33afc11
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8460
+
+node_delete.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+1e45a4bc4df858c50ddf4083fb01900e
+2010-05-21T22:19:19.824517Z
+1574
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+589
+
+align-bottom.svg
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+e3c9964438112a81ba83ef2a4e190698
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10036
+
+freehand-square.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+b62dba8d005a19722f20a0a50333ccbc
+2009-06-23T07:57:11.400815Z
+180
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+903
+
+freehand-circle.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+cd947f2107086c7e39534126986bae2d
+2009-06-23T07:57:11.400815Z
+180
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1257
+
+paste.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+c94ac32b30a78976de63d271abd8dfcb
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+906
+
+align-right.svg
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+f7c7095a400d0beb4dd87429640bc059
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8573
+
+align-center.svg
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+213f6fa331eb2165878284f7ef5c165d
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9324
+
+align-middle.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+0d5dde4ed12cf9252c68edbd9242dc7f
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+459
+
+README.txt
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+90731038df8b761b8f0f791454264a15
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2639
+
+move_top.png
+file
+
+
+
+
+2012-03-25T18:41:45.252344Z
+3d2f591334176022ee43ed3d72cbee9d
+2009-06-17T20:08:53.623204Z
+144
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+663
+
+save.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+02a9f49b0afc4088643ad3f62db9016f
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1272
+
+text.svg
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+8e431c70684a23c3e2c6aa86fcf51c4a
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6700
+
+logo.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+faf7276075afb126ec73d1983bfb16b2
+2010-02-10T16:37:23.862351Z
+1370
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3983
+
+square.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+f5d13d345d62d62288d6d3749e92e31c
+2009-06-07T11:33:30.477924Z
+53
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+422
+
+circle.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+34313b0e30ea791a5d7724434c9b1962
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1040
+
+wave.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+32d5a34fcf1782558d07dd357e8cb3ec
+2009-09-03T00:01:23.975396Z
+537
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2005
+
+view-refresh.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+9c9dd4cd3020f8231574bf9181d0b57b
+2009-09-21T02:05:58.821511Z
+667
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+912
+
+document-properties.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+15cfa9604374df9dcc032462ecfb77e7
+2009-09-13T16:17:12.562180Z
+635
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+688
+
+svg_edit_icons.svg
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+7246763dd80b287add3d1e41a8791e70
+2010-12-01T17:54:11.673397Z
+1878
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+66398
+
+link_controls.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+6f1c7730fd58c6291f17c46ae66e546b
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+919
+
+wireframe.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+ecaef6fda8fe39a8f8472bec1cfbfac1
+2009-10-21T13:40:50.870135Z
+857
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+466
+
+align-left.png
+file
+
+
+
+
+2012-03-25T18:41:45.256344Z
+a9370acb1999db7ed7e21d6a5410f21f
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+305
+
+cancel.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+49526c23ef8f7f0eb364daeb3953a439
+2010-01-04T23:22:53.865829Z
+1151
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1389
+
+clear.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+d37232ef5ed579dd99813e6c9fe21626
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+812
+
+polygon.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+930d3476b1a5f1eac7b80f58a974e8d0
+2009-08-07T03:41:11.531622Z
+357
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+881
+
+go-up.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+0ac321c65470aaf896bc1876311feac1
+2009-09-21T02:05:58.821511Z
+667
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+652
+
+flyouth.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+3eee52c33cdc1585d65e9fbe82702c6d
+2009-08-20T14:47:04.716433Z
+419
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+109
+
+align-top.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+5bce837842268eb38b38929a1c716230
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+287
+
+path.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+d193cedb5b31873cd94107e0cfda1ed2
+2009-10-28T13:20:13.352215Z
+881
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+854
+
+align-bottom.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+79e1ac277ef80b7ee3aa867f9fd14cd7
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+291
+
+ellipse.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+f4c049a6aa23fe23d8a1d78da2de34ae
+2009-06-07T11:33:30.477924Z
+53
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+811
+
+none.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+354c2866b57afd8e12b4993af4ff94cc
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+136
+
+open.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+aa47b50d9eb78e340761e2bd0616a6c1
+2009-08-17T22:14:18.014692Z
+405
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+919
+
+align-right.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+7ef9c0c3a0350b75e9bb617b55a8aaba
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+339
+
+node_clone.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+6a5f80c18c4a5a17e917319221eee183
+2010-05-21T22:19:19.824517Z
+1574
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+571
+
+align-center.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+066f5565b8b301fb3a220bf098749772
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+449
+
+go-down.png
+file
+
+
+
+
+2012-03-25T18:41:45.260344Z
+01fa0d3883e00b914cc36bc8bf0b2b98
+2009-09-21T02:05:58.821511Z
+667
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+683
+
+fhpath.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+a663a2b2aa014ded1f8020ebb3bf80e5
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1218
+
+dropdown.gif
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+9a94f66997fd6c9932c12462b4faf6f5
+2009-09-15T18:13:00.373277Z
+650
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+49
+
+shape_ungroup.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+d4ffce99d451d2c6e9da8af8cf114707
+2009-09-05T20:03:47.951635Z
+600
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+666
+
+select.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+a72aa35f62b9f43a2c464eef809e87cf
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+712
+
+image.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+68070b6d22c1354b725045b4667c5357
+2009-09-04T22:56:08.969992Z
+580
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+900
+
+spinbtn_updn_big.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+e1e67bdd7b5f10d4b54a1557156c5be8
+2009-11-12T16:56:00.679409Z
+934
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2049
+
+select_node.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+0681aac8672f152d1c58e6a3988d67b6
+2009-10-21T19:21:48.779314Z
+864
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+828
+
+text.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+afe7e0ea114d8213927b7c89cfabc8dc
+2009-10-06T20:40:12.857885Z
+772
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1032
+
+move_bottom.png
+file
+
+
+
+
+2012-03-25T18:41:45.264344Z
+51bc90c7da3f92313d38fe64106fe576
+2009-06-17T20:08:53.623204Z
+144
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+737
+
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-bottom.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-center.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-center.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-center.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-center.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-center.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-center.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-left.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-left.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-left.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-left.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-left.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-left.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-middle.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-middle.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-middle.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-middle.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-middle.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-middle.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-right.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-right.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-right.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-right.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-right.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-right.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-top.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-top.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-top.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/align-top.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/align-top.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/align-top.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/bold.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/bold.png.svn-base
new file mode 100644
index 000000000..e27de59b4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/bold.png.svn-base
@@ -0,0 +1,9 @@
+K 13
+svg:mime-type
+V 9
+image/png
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/cancel.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/cancel.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/cancel.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/circle.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/circle.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/circle.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/clear.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/clear.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/clear.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/clone.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/clone.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/clone.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/conn.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/conn.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/conn.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/copy.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/copy.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/copy.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/cut.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/cut.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/cut.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/delete.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/delete.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/delete.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/document-properties.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/document-properties.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/document-properties.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/dropdown.gif.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/dropdown.gif.svn-base
new file mode 100644
index 000000000..1c48e39a0
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/dropdown.gif.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/gif
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/ellipse.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/ellipse.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/ellipse.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/eye.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/eye.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/eye.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/fhpath.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/fhpath.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/fhpath.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/flyouth.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/flyouth.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/flyouth.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/flyup.gif.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/flyup.gif.svn-base
new file mode 100644
index 000000000..1c48e39a0
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/flyup.gif.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/gif
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/freehand-circle.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/freehand-circle.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/freehand-circle.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/freehand-square.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/freehand-square.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/freehand-square.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/go-down.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/go-down.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/go-down.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/go-up.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/go-up.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/go-up.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/image.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/image.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/image.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/italic.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/italic.png.svn-base
new file mode 100644
index 000000000..e27de59b4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/italic.png.svn-base
@@ -0,0 +1,9 @@
+K 13
+svg:mime-type
+V 9
+image/png
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/line.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/line.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/line.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/link_controls.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/link_controls.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/link_controls.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/logo.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/logo.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/logo.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/logo.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/logo.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/logo.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/move_bottom.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/move_bottom.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/move_bottom.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/move_top.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/move_top.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/move_top.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/node_clone.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/node_clone.png.svn-base
new file mode 100644
index 000000000..0b0621cce
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/node_clone.png.svn-base
@@ -0,0 +1,9 @@
+K 14
+svn:executable
+V 1
+*
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/node_delete.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/node_delete.png.svn-base
new file mode 100644
index 000000000..0b0621cce
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/node_delete.png.svn-base
@@ -0,0 +1,9 @@
+K 14
+svn:executable
+V 1
+*
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/none.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/none.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/none.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/open.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/open.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/open.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/paste.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/paste.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/paste.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/path.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/path.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/path.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/polygon.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/polygon.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/polygon.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/polygon.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/polygon.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/polygon.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/rect.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/rect.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/rect.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/redo.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/redo.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/redo.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/reorient.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/reorient.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/reorient.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/rotate.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/rotate.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/rotate.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/save.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/save.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/save.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/select.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/select.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/select.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/select_node.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/select_node.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/select_node.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/sep.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/sep.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/sep.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/shape_group.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/shape_group.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/shape_group.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/shape_ungroup.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/shape_ungroup.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/shape_ungroup.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/source.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/source.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/source.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/spinbtn_updn_big.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/spinbtn_updn_big.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/spinbtn_updn_big.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/square.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/square.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/square.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svgz.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svgz.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/svg_edit_icons.svgz.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/text.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/text.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/text.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/text.svg.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/text.svg.svn-base
new file mode 100644
index 000000000..91ca244d3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/text.svg.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 13
+image/svg+xml
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/to_path.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/to_path.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/to_path.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/undo.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/undo.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/undo.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/view-refresh.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/view-refresh.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/view-refresh.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/wave.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/wave.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/wave.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/wireframe.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/wireframe.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/wireframe.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/prop-base/zoom.png.svn-base b/files_svgedit/svg-edit/images/.svn/prop-base/zoom.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/prop-base/zoom.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/README.txt.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/README.txt.svn-base
new file mode 100644
index 000000000..9224bc1cf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/README.txt.svn-base
@@ -0,0 +1,61 @@
+filename origin
+
+align-bottom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.png
+align-bottom.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.svg
+align-center.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.png
+align-center.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.svg
+align-left.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.png
+align-left.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.svg
+align-middle.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.png
+align-middle.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.svg
+align-right.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.png
+align-right.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.svg
+align-top.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.png
+align-top.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.svg
+bold.png
+cancel.png
+circle.png
+clear.png
+clone.png
+copy.png
+cut.png
+delete.png
+document-properties.png
+dropdown.gif
+ellipse.png
+eye.png
+flyouth.png
+flyup.gif
+freehand-circle.png
+freehand-square.png
+go-down.png
+go-up.png
+image.png
+italic.png
+line.png
+logo.png
+logo.svg
+move_bottom.png
+move_top.png
+none.png
+open.png
+paste.png
+path.png
+polygon.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.png
+polygon.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.svg
+rect.png
+redo.png
+rotate.png
+save.png
+select.png
+sep.png
+shape_group.png
+shape_ungroup.png
+source.png
+square.png
+text.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.png
+text.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.svg
+undo.png
+view-refresh.png
+wave.png
+zoom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/page-magnifier.png
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-bottom.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-bottom.png.svn-base
new file mode 100644
index 000000000..be5dfe54d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-bottom.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-bottom.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-bottom.svg.svn-base
new file mode 100644
index 000000000..36f8efe2c
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-bottom.svg.svn-base
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg5741"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-bottom-vertical.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-bottom-vertical.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs5743">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6938"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6934"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6932"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6930"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6926"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6924"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.197802"
+ inkscape:cx="8"
+ inkscape:cy="9.8019802"
+ inkscape:current-layer="g6828"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="1078"
+ inkscape:window-height="786"
+ inkscape:window-x="243"
+ inkscape:window-y="71" />
+ <metadata
+ id="metadata5746">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g6828"
+ transform="translate(30.00011,90.000366)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ style="display:inline"
+ id="g6838"
+ transform="translate(-30.00009,-1.0002798)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3052"
+ width="12"
+ height="7"
+ x="69.500122"
+ y="12.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3054"
+ width="10"
+ height="5.0000305"
+ x="70.500122"
+ y="13.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g3056"
+ transform="translate(-127,-559)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3058"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3060"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3294"
+ transform="translate(-187,-560)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3296"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient6932);fill-opacity:1;stroke:url(#linearGradient6934);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3298"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient6936);fill-opacity:1;stroke:url(#linearGradient6938);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3300"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-center.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-center.png.svn-base
new file mode 100644
index 000000000..d1f0c5bcb
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-center.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-center.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-center.svg.svn-base
new file mode 100644
index 000000000..ddf49fcec
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-center.svg.svn-base
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10958"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-horisontal-center.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-center.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs10960">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient4708"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient4706"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient4704"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient4702"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="11.460711"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata10963">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4044"
+ transform="matrix(0,-1,1,0,-59.999911,-168.00002)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3851"
+ width="12"
+ height="7"
+ x="-76.499878"
+ y="-177.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ transform="translate(-317,-410)"
+ id="g3853"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3855"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3857"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3859"
+ width="10"
+ height="5.0000305"
+ x="-75.499878"
+ y="-176.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g3861"
+ transform="translate(-377,-420)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ y="489.5"
+ x="186.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3863"
+ style="fill:url(#linearGradient4702);fill-opacity:1;stroke:url(#linearGradient4704);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="191.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3865"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3867"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="201.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3869"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-491.5"
+ x="-209.49998"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3871"
+ style="fill:url(#linearGradient4706);fill-opacity:1;stroke:url(#linearGradient4708);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-left.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-left.png.svn-base
new file mode 100644
index 000000000..41fa8bcc1
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-left.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-left.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-left.svg.svn-base
new file mode 100644
index 000000000..b1a24a5a6
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-left.svg.svn-base
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11272"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-horisontal-left.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs11274">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient4716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient4714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient4712"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient4710"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="14.269093"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata11277">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4065"
+ transform="matrix(0,-1,1,0,8.9287758e-5,51.99998)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ id="g3883"
+ transform="translate(-127,-473)"
+ style="fill:#d3d7cf;stroke:#888a85;display:inline"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,1,1,0,0,0)"
+ y="169.5"
+ x="475.50012"
+ height="7"
+ width="12"
+ id="rect3885"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="0"
+ rx="0"
+ transform="matrix(0,1,1,0,0,0)"
+ y="170.5"
+ x="476.50012"
+ height="5.0000305"
+ width="10"
+ id="rect3887"
+ style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3889"
+ transform="translate(-97,-469)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3891"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3893"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3903"
+ transform="translate(-157,-488)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3905"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient4710);fill-opacity:1;stroke:url(#linearGradient4712);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3907"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient4714);fill-opacity:1;stroke:url(#linearGradient4716);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3909"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-middle.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-middle.png.svn-base
new file mode 100644
index 000000000..f72bbb799
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-middle.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-middle.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-middle.svg.svn-base
new file mode 100644
index 000000000..d2b42e6a3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-middle.svg.svn-base
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10625"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-vertical-center.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-vertical-center.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs10627">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6962"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6958"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6956"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata10630">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g6849"
+ transform="translate(-29.999893,91.000089)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1933"
+ width="12"
+ height="7"
+ x="73.500122"
+ y="42.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ transform="translate(-97,-560)"
+ id="g2063"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect1935"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect1937"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1939"
+ width="10"
+ height="5.0000305"
+ x="74.500122"
+ y="43.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g2992"
+ transform="translate(-157,-570)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="489.5"
+ x="186.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect2994"
+ style="fill:url(#linearGradient6956);fill-opacity:1;stroke:url(#linearGradient6958);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="191.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect2996"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect2998"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="201.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3000"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-491.5"
+ x="-209.49998"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3002"
+ style="fill:url(#linearGradient6960);fill-opacity:1;stroke:url(#linearGradient6962);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-right.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-right.png.svn-base
new file mode 100644
index 000000000..5ca99caa4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-right.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-right.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-right.svg.svn-base
new file mode 100644
index 000000000..c2f8f19e3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-right.svg.svn-base
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11187"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-horisontal-right.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="TRUE"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-right.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs11189">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient4732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient4730"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient4728"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient4726"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata11192">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4025"
+ transform="matrix(0,-1,1,0,-60.999914,-198.00011)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3873"
+ width="12"
+ height="7"
+ x="-80.499878"
+ y="-207.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3875"
+ width="10"
+ height="5.0000305"
+ x="-79.499878"
+ y="-206.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g3877"
+ transform="translate(-347,-409)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3879"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3881"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3919"
+ transform="translate(-407,-410)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3921"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient4726);fill-opacity:1;stroke:url(#linearGradient4728);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3923"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient4730);fill-opacity:1;stroke:url(#linearGradient4732);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3925"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-top.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-top.png.svn-base
new file mode 100644
index 000000000..51bfc2ecd
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-top.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/align-top.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/align-top.svg.svn-base
new file mode 100644
index 000000000..f314f32d1
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/align-top.svg.svn-base
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10699"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-vertical-bottom.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-vertical-bottom.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs10701">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6950"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6948"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata10704">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g6862"
+ transform="translate(-59.99998,90)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ id="g3084"
+ transform="translate(-97,-563)"
+ style="fill:#d3d7cf;stroke:#888a85"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,1,1,0,0,0)"
+ y="169.5"
+ x="475.50012"
+ height="7"
+ width="12"
+ id="rect3086"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="0"
+ rx="0"
+ transform="matrix(0,1,1,0,0,0)"
+ y="170.5"
+ x="476.50012"
+ height="5.0000305"
+ width="10"
+ id="rect3088"
+ style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3090"
+ transform="translate(-67,-559)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3092"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3094"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3262"
+ transform="translate(-127,-578)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3264"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient6948);fill-opacity:1;stroke:url(#linearGradient6950);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3266"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient6952);fill-opacity:1;stroke:url(#linearGradient6954);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3268"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/bold.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/bold.png.svn-base
new file mode 100644
index 000000000..19ac5bbd7
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/bold.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/cancel.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/cancel.png.svn-base
new file mode 100644
index 000000000..8595f5d97
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/cancel.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/circle.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/circle.png.svn-base
new file mode 100644
index 000000000..e7bd228b7
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/circle.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/clear.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/clear.png.svn-base
new file mode 100644
index 000000000..514710d12
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/clear.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/clone.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/clone.png.svn-base
new file mode 100644
index 000000000..c8713c80b
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/clone.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/conn.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/conn.svg.svn-base
new file mode 100644
index 000000000..1af5e9a4d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/conn.svg.svn-base
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="mode_connect">
+ <svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+
+ <line stroke-width="5" fill="none" stroke="#000000" id="svg_2" y2="121" x2="136" y1="7" x1="136">
+ <stop stop-opacity="1" stop-color="#4687a0"/>
+ <stop stop-opacity="1" stop-color="#ffffff"/>
+ </line>
+ <linearGradient y2="0.18359" x2="0.29688" y1="0.92188" x1="0.62109" id="svg_3">
+ <stop stop-opacity="1" stop-color="#417dad" offset="0"/>
+ <stop stop-opacity="1" stop-color="#ffffff" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <line x1="5.64676" y1="5.60056" x2="18.50037" y2="18.62557" id="svg_5" stroke="#000000" fill="none"/>
+ <rect opacity="0.75" stroke-width="0.5" x="0.5" y="0.5" width="9.625" height="5.125" id="svg_1" fill="url(#svg_3)" stroke="#000000"/>
+ <rect opacity="0.75" id="svg_4" stroke-width="0.5" x="13.75" y="18.25" width="9.625" height="5.125" fill="url(#svg_3)" stroke="#000000"/>
+ <g id="svg_9">
+ <path d="m14.57119,9.12143l-0.98244,5.18852l2.70861,-4.36084" id="svg_6" fill="#a0a0a0" stroke="#000000"/>
+ <path d="m14.27564,6.76258c-0.25872,0.72562 -0.40735,1.65632 -0.33812,2.15432l2.90784,1.2509c0.30961,-0.21212 1.08198,-1.1814 1.08198,-1.73736" id="svg_7" fill="url(#svg_3)" stroke="#000000"/>
+ <path d="m16.28893,0.37519l-2.46413,5.9304l4.76481,2.39435l2.13178,-4.96735" id="svg_8" fill="url(#svg_3)" stroke="#000000"/>
+ </g>
+ </g>
+ </svg>
+ </g>
+ <g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/copy.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/copy.png.svn-base
new file mode 100644
index 000000000..23ba357bc
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/copy.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/cut.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/cut.png.svn-base
new file mode 100644
index 000000000..d586098e2
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/cut.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/delete.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/delete.png.svn-base
new file mode 100644
index 000000000..e71dd96fe
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/delete.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/document-properties.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/document-properties.png.svn-base
new file mode 100644
index 000000000..a5ad72875
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/document-properties.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/dropdown.gif.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/dropdown.gif.svn-base
new file mode 100644
index 000000000..4180d5eba
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/dropdown.gif.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/ellipse.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/ellipse.png.svn-base
new file mode 100644
index 000000000..1402a2d8d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/ellipse.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/eye.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/eye.png.svn-base
new file mode 100644
index 000000000..564a1a971
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/eye.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/fhpath.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/fhpath.png.svn-base
new file mode 100644
index 000000000..9255cc50f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/fhpath.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/flyouth.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/flyouth.png.svn-base
new file mode 100644
index 000000000..5822ed833
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/flyouth.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/flyup.gif.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/flyup.gif.svn-base
new file mode 100644
index 000000000..c027e137c
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/flyup.gif.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/freehand-circle.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/freehand-circle.png.svn-base
new file mode 100644
index 000000000..43cb17f90
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/freehand-circle.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/freehand-square.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/freehand-square.png.svn-base
new file mode 100644
index 000000000..328fc77d1
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/freehand-square.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/go-down.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/go-down.png.svn-base
new file mode 100644
index 000000000..3dd7fccdf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/go-down.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/go-up.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/go-up.png.svn-base
new file mode 100644
index 000000000..fa9a7d71b
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/go-up.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/image.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/image.png.svn-base
new file mode 100644
index 000000000..10f46719d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/image.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/italic.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/italic.png.svn-base
new file mode 100644
index 000000000..63485dea9
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/italic.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/line.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/line.png.svn-base
new file mode 100644
index 000000000..37975742e
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/line.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/link_controls.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/link_controls.png.svn-base
new file mode 100644
index 000000000..516a094b3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/link_controls.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/logo.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/logo.png.svn-base
new file mode 100644
index 000000000..7c04931c3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/logo.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/logo.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/logo.svg.svn-base
new file mode 100644
index 000000000..e71308bea
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/logo.svg.svn-base
@@ -0,0 +1,32 @@
+<svg viewBox="0 0 478 472" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient id="svg_5" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffe0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#edc39c" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_10" x1="0.57031" y1="0.78125" x2="0.28906" y2="0.41406">
+ <stop offset="0" stop-color="#ff7f00" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffff00"/>
+ </linearGradient>
+ <linearGradient id="svg_18" x1="0.37891" y1="0.35938" x2="1" y2="1">
+ <stop offset="0" stop-color="#e0e0e0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#666666" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <path d="m68.82031,270.04688l-22,-33l17,-35l34,2l25,15l7,-35l28,-16l25,12l100,102l21,23l-15,35l-36,9l20,49l-31,24l-49,-17l-1,31l-33,21l-31,-19l-13,-35l-30,21l-30,-9l-5,-35l16,-31l-32,-6l-15,-19l3,-36l47,-18z" id="svg_19" fill="#ffffff"/>
+ <path fill="#1a171a" fill-rule="nonzero" id="path2902" d="m158.96452,155.03685c-25.02071,0 -45.37077,20.35121 -45.37077,45.3775c0,0.72217 0.01794,1.4399 0.0471,2.15645c-0.49339,-0.53604 -0.99355,-1.06085 -1.50603,-1.58452c-8.56077,-8.55519 -19.95982,-13.28413 -32.07432,-13.28413c-12.12122,0 -23.52027,4.72334 -32.08778,13.29646c-17.69347,17.69464 -17.69347,46.4619 0,64.17445c0.51809,0.51697 1.0485,1.0126 1.59015,1.50601c-0.72891,-0.03586 -1.45782,-0.04822 -2.19234,-0.04822c-25.02071,0 -45.37189,20.35117 -45.37189,45.37747c0,25.01398 20.35119,45.36517 45.37189,45.36517c0.72891,0 1.45221,-0.01236 2.1744,-0.04828c-0.5293,0.48221 -1.05412,0.98801 -1.56547,1.49368c-17.70021,17.68906 -17.70021,46.48654 -0.00628,64.18677c8.57872,8.56747 19.96655,13.2785 32.08778,13.2785c12.1145,0 23.5012,-4.71103 32.07433,-13.2785c0.51247,-0.51694 1.01823,-1.04849 1.50603,-1.57895c-0.02915,0.71213 -0.04709,1.44669 -0.04709,2.15759c0,25.01511 20.35007,45.37747 45.37077,45.37747c25.01398,0 45.37079,-20.3624 45.37079,-45.37747c0,-0.7222 -0.01689,-1.44553 -0.05266,-2.18112c0.48105,0.52933 0.97562,1.04849 1.48697,1.56662c8.57982,8.57977 19.97775,13.2908 32.1057,13.2908c12.11003,0 23.51358,-4.71103 32.0687,-13.2785c17.68906,-17.70013 17.68906,-46.48538 0,-64.17441c-0.50577,-0.4946 -1.01141,-1.00034 -1.54306,-1.48248c0.69983,0.03592 1.42316,0.04828 2.16992,0.04828c25.01514,0 45.35284,-20.35123 45.35284,-45.36517c0,-25.02631 -20.33774,-45.37747 -45.35284,-45.37747c-0.74683,0 -1.47009,0.01236 -2.19345,0.04822c0.53152,-0.49341 1.06082,-0.98904 1.59128,-1.50601c8.55521,-8.55521 13.2785,-19.94186 13.2785,-32.07545c0,-12.12793 -4.72336,-23.52028 -13.30319,-32.0934c-8.55515,-8.56076 -19.95866,-13.2841 -32.0687,-13.2841c-12.12122,0 -23.52025,4.72334 -32.08777,13.2841c-0.51137,0.5181 -1.01822,1.04851 -1.5049,1.57895c0.03586,-0.72331 0.05266,-1.43991 0.05266,-2.16881c0,-25.02629 -20.35681,-45.3775 -45.37079,-45.3775m0,20.71901c13.61607,0 24.65851,11.03122 24.65851,24.65849c0,6.62749 -2.651,12.62137 -6.9101,17.04979l0,51.67419l36.53975,-36.53523c0.12001,-6.14418 2.48277,-12.24686 7.18146,-16.94667c4.81305,-4.81305 11.12094,-7.22409 17.44116,-7.22409c6.30228,0 12.61577,2.41104 17.43552,7.22409c9.62166,9.63287 9.62166,25.24948 0,34.87669c-4.69977,4.68634 -10.80803,7.04915 -16.95334,7.18147l-36.5341,36.53305l51.66742,0c4.42841,-4.25351 10.42905,-6.90451 17.08008,-6.90451c13.59137,0 24.62933,11.03799 24.62933,24.66525c0,13.61606 -11.03796,24.66519 -24.62933,24.66519c-6.65106,0 -12.65167,-2.66333 -17.08008,-6.91681l-51.64836,0l36.50273,36.50946c6.16995,0.14465 12.26587,2.50522 16.96568,7.20618c9.6216,9.61487 9.6216,25.23151 0,34.85757c-4.80856,4.81979 -11.13327,7.22974 -17.43556,7.22974c-6.32019,0 -12.63371,-2.40991 -17.44786,-7.22974c-4.68074,-4.68744 -7.04802,-10.79572 -7.17473,-16.94098l-36.53975,-36.53415l0,51.66742c4.25908,4.44635 6.9101,10.43466 6.9101,17.0621c0,13.62729 -11.04243,24.66415 -24.65851,24.66415c-13.62166,0 -24.65848,-11.0369 -24.65848,-24.66415c0,-6.62744 2.64539,-12.61575 6.90335,-17.0621l0,-51.66742l-36.53864,36.54648c-0.12672,6.14413 -2.48838,12.26477 -7.18147,16.94098c-4.81416,4.81873 -11.12206,7.22974 -17.42882,7.22974c-6.31461,0 -12.6225,-2.41101 -17.43555,-7.22974c-9.63284,-9.62833 -9.63284,-25.24277 0,-34.8699c4.68073,-4.67627 10.79012,-7.05026 16.94101,-7.18262l36.533,-36.53302l-51.66632,0c-4.44075,4.25348 -10.42902,6.91681 -17.06211,6.91681c-13.61606,0 -24.65288,-11.04913 -24.65288,-24.66519c0,-13.62726 11.03682,-24.66525 24.65288,-24.66525c6.63309,0 12.62136,2.651 17.06211,6.90451l51.68537,0l-36.55208,-36.54538c-6.14527,-0.12 -12.25354,-2.49403 -16.94775,-7.19377c-9.62611,-9.61493 -9.62611,-25.23715 0,-34.86441c4.81419,-4.81305 11.12769,-7.22406 17.44228,-7.22406c6.30676,0 12.61465,2.41101 17.42883,7.22406c4.69978,4.69307 7.06034,10.80246 7.18144,16.94777l36.5386,36.53299l0,-51.66074c-4.25795,-4.42841 -6.90334,-10.42229 -6.90334,-17.04979c0,-13.62726 11.03682,-24.65848 24.65848,-24.65848"/>
+ <path d="m188.82031,210.04688l16,-47l155,-148l107,100l-158,156.99999l-44,12l-76,-74z" id="svg_6" fill="url(#svg_10)" stroke="#ffffff" stroke-width="0"/>
+ <path d="m335.57031,40.29688c-11.5,39.75 55.5,115.25 109.25,98.75l21,-20.99999l-103,-101l-27.25,23.25z" id="svg_11" fill="url(#svg_18)" stroke="#ffffff" stroke-width="0"/>
+ <rect x="272.80404" y="20.76382" width="42.35197" height="232.66835" id="svg_13" fill="#ffffff" stroke="#ffffff" stroke-width="0" transform="rotate(45.9094, 293.98, 137.1)" opacity="0.4"/>
+ <rect x="282.80404" y="22.76382" width="14" height="232.66835" fill="#ffffff" stroke="#ffffff" stroke-width="0" transform="rotate(45.9094, 289.805, 139.1)" opacity="0.4" id="svg_14"/>
+ <ellipse cx="415.13312" cy="64.38066" id="svg_12" fill="#ea7598" stroke="#ffffff" stroke-width="0" rx="67.79251" ry="34.82026" transform="rotate(39.4735, 415.133, 64.379)"/>
+ <path d="m212.07031,166.04688c-8.5,47 36.25,103.75 99.25,96.75l-152.5,53.25l53.25,-150z" id="svg_4" fill="url(#svg_5)" stroke="#ffffff" stroke-width="0"/>
+ <path d="m181.32031,242.54688c0.5,20.5 26.75,45 46.75,48.5l-66.25,20l19.5,-68.5z" id="svg_3" fill="#27382f" stroke="#ffffff" stroke-width="0"/>
+ </g>
+ <g>
+ <title>Layer 2</title>
+ <path d="m152.82031,317.04688l51,-152l157,-153c40,-12.00001 118,48 105,105l-157,152.99999l-156,47z" id="svg_1" fill="none" stroke="#800000" stroke-width="17"/>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/move_bottom.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/move_bottom.png.svn-base
new file mode 100644
index 000000000..6b1325075
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/move_bottom.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/move_top.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/move_top.png.svn-base
new file mode 100644
index 000000000..9d54b6a48
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/move_top.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/node_clone.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/node_clone.png.svn-base
new file mode 100644
index 000000000..2187d0739
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/node_clone.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/node_delete.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/node_delete.png.svn-base
new file mode 100644
index 000000000..ea3f7e687
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/node_delete.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/none.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/none.png.svn-base
new file mode 100644
index 000000000..04c0765f6
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/none.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/open.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/open.png.svn-base
new file mode 100644
index 000000000..254a6b814
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/open.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/paste.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/paste.png.svn-base
new file mode 100644
index 000000000..ad983155c
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/paste.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/path.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/path.png.svn-base
new file mode 100644
index 000000000..c75a8d712
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/path.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/polygon.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/polygon.png.svn-base
new file mode 100644
index 000000000..bcd640c20
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/polygon.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/polygon.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/polygon.svg.svn-base
new file mode 100644
index 000000000..a7f955d8f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/polygon.svg.svn-base
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="draw-polygon.svg"
+ sodipodi:docbase="/home/andreas/projekt/tango/22"
+ inkscape:version="0.42"
+ id="svg8728"
+ height="22.000000px"
+ width="22.000000px"
+ inkscape:export-filename="/home/andreas/projekt/tango/22/draw-polygon.png"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-ydpi="90.000000">
+ <defs
+ id="defs3">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3941">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3943" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3945" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6581">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop6583" />
+ <stop
+ style="stop-color:#e0e0de;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop6585" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient14920">
+ <stop
+ id="stop14922"
+ offset="0"
+ style="stop-color:#5a7aa4;stop-opacity:1;" />
+ <stop
+ id="stop14924"
+ offset="1.0000000"
+ style="stop-color:#1f2b3a;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient13390">
+ <stop
+ id="stop13392"
+ offset="0.0000000"
+ style="stop-color:#81a2cd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop13394"
+ offset="1.0000000"
+ style="stop-color:#2a415f;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10325">
+ <stop
+ id="stop10327"
+ offset="0"
+ style="stop-color:#5a7aa4;stop-opacity:1;" />
+ <stop
+ id="stop10329"
+ offset="1.0000000"
+ style="stop-color:#455e7e;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="39.486301"
+ x2="37.746555"
+ y1="23.992306"
+ x1="23.598076"
+ gradientTransform="matrix(0.363308,0,0,0.363571,1.976073,1.180651)"
+ id="linearGradient13217"
+ xlink:href="#linearGradient6581"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3941"
+ id="radialGradient3947"
+ cx="2.25"
+ cy="16"
+ fx="2.25"
+ fy="16"
+ r="16.875"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,-5.774893e-15,10.66667)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6581"
+ id="linearGradient2398"
+ x1="10.769515"
+ y1="8.7196503"
+ x2="15.923767"
+ y2="15.039417"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6581"
+ id="linearGradient2403"
+ gradientUnits="userSpaceOnUse"
+ x1="10.769515"
+ y1="8.7196503"
+ x2="15.923767"
+ y2="15.039417"
+ gradientTransform="matrix(0.874941,0.000000,0.000000,0.868551,1.339139,1.349650)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6581"
+ id="linearGradient2405"
+ gradientUnits="userSpaceOnUse"
+ x1="10.769515"
+ y1="8.7196503"
+ x2="15.923767"
+ y2="15.039417"
+ gradientTransform="matrix(1.001575,0.000000,0.000000,1.000000,-3.040037e-3,0.000000)" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="25"
+ inkscape:window-x="0"
+ inkscape:window-height="949"
+ inkscape:window-width="1280"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:cy="10.249014"
+ inkscape:cx="16.435231"
+ inkscape:zoom="15.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="0.08235294"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:showpageshadow="false"
+ stroke="#888a85" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Draw Rectangle</dc:title>
+ <dc:date>2005-10-10</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Andreas Nilsson</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>draw</rdf:li>
+ <rdf:li>rectangle</rdf:li>
+ <rdf:li>square</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.60000000;color:#000000;fill:url(#radialGradient3947);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ id="path2193"
+ sodipodi:cx="2.2500000"
+ sodipodi:cy="16.000000"
+ sodipodi:rx="16.875000"
+ sodipodi:ry="5.6250000"
+ d="M 19.125000 16.000000 A 16.875000 5.6250000 0 1 1 -14.625000,16.000000 A 16.875000 5.6250000 0 1 1 19.125000 16.000000 z"
+ transform="matrix(0.503704,0.000000,0.000000,0.349014,9.366667,12.45257)" />
+ <path
+ style="fill:url(#linearGradient2405);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#888a85;stroke-width:1.0000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 10.376363,3.6237647 L 18.439333,9.5822222 L 15.644242,18.503298 L 5.3933717,18.503298 L 2.5694122,9.5814367 L 10.376363,3.6237647 z "
+ id="path1661"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient2403);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#fdfdfb;stroke-width:0.99999976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 10.383801,4.6223366 L 17.428917,9.8682235 L 14.894231,17.502140 L 6.1335005,17.494329 L 3.6135882,9.9131875 L 10.383801,4.6223366 z "
+ id="path2401"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/rect.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/rect.png.svn-base
new file mode 100644
index 000000000..4fd15f837
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/rect.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/redo.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/redo.png.svn-base
new file mode 100644
index 000000000..1169fc3b4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/redo.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/reorient.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/reorient.png.svn-base
new file mode 100644
index 000000000..9455a82c0
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/reorient.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/rotate.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/rotate.png.svn-base
new file mode 100644
index 000000000..afa68c6fd
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/rotate.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/save.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/save.png.svn-base
new file mode 100644
index 000000000..9c4c8d9da
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/save.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/select.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/select.png.svn-base
new file mode 100644
index 000000000..1d741f16d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/select.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/select_node.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/select_node.png.svn-base
new file mode 100644
index 000000000..5ed97db95
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/select_node.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/sep.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/sep.png.svn-base
new file mode 100644
index 000000000..6b9027779
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/sep.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/shape_group.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/shape_group.png.svn-base
new file mode 100644
index 000000000..bb2ff516d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/shape_group.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/shape_ungroup.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/shape_ungroup.png.svn-base
new file mode 100644
index 000000000..3a6f369a5
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/shape_ungroup.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/source.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/source.png.svn-base
new file mode 100644
index 000000000..c1f079449
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/source.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/spinbtn_updn_big.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/spinbtn_updn_big.png.svn-base
new file mode 100644
index 000000000..3873736f8
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/spinbtn_updn_big.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/square.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/square.png.svn-base
new file mode 100644
index 000000000..0ca71a67f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/square.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svg.svn-base
new file mode 100644
index 000000000..0ada459df
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svg.svn-base
@@ -0,0 +1,1034 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<!-- All images created with SVG-edit - http://svg-edit.googlecode.com/ -->
+
+<g id="logo">
+<svg viewBox="0 0 478 472" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient id="svg_5" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffe0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#edc39c" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_10" x1="0.57031" y1="0.78125" x2="0.28906" y2="0.41406">
+ <stop offset="0" stop-color="#ff7f00" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffff00"/>
+ </linearGradient>
+ <linearGradient id="svg_18" x1="0.37891" y1="0.35938" x2="1" y2="1">
+ <stop offset="0" stop-color="#e0e0e0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#666666" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path d="m68.82031,270.04688l-22,-33l17,-35l34,2l25,15l7,-35l28,-16l25,12l100,102l21,23l-15,35l-36,9l20,49l-31,24l-49,-17l-1,31l-33,21l-31,-19l-13,-35l-30,21l-30,-9l-5,-35l16,-31l-32,-6l-15,-19l3,-36l47,-18z" id="svg_19" fill="#ffffff"/>
+ <path fill="#1a171a" fill-rule="nonzero" id="path2902" d="m158.96452,155.03685c-25.02071,0 -45.37077,20.35121 -45.37077,45.3775c0,0.72217 0.01794,1.4399 0.0471,2.15645c-0.49339,-0.53604 -0.99355,-1.06085 -1.50603,-1.58452c-8.56077,-8.55519 -19.95982,-13.28413 -32.07432,-13.28413c-12.12122,0 -23.52027,4.72334 -32.08778,13.29646c-17.69347,17.69464 -17.69347,46.4619 0,64.17445c0.51809,0.51697 1.0485,1.0126 1.59015,1.50601c-0.72891,-0.03586 -1.45782,-0.04822 -2.19234,-0.04822c-25.02071,0 -45.37189,20.35117 -45.37189,45.37747c0,25.01398 20.35119,45.36517 45.37189,45.36517c0.72891,0 1.45221,-0.01236 2.1744,-0.04828c-0.5293,0.48221 -1.05412,0.98801 -1.56547,1.49368c-17.70021,17.68906 -17.70021,46.48654 -0.00628,64.18677c8.57872,8.56747 19.96655,13.2785 32.08778,13.2785c12.1145,0 23.5012,-4.71103 32.07433,-13.2785c0.51247,-0.51694 1.01823,-1.04849 1.50603,-1.57895c-0.02915,0.71213 -0.04709,1.44669 -0.04709,2.15759c0,25.01511 20.35007,45.37747 45.37077,45.37747c25.01398,0 45.37079,-20.3624 45.37079,-45.37747c0,-0.7222 -0.01689,-1.44553 -0.05266,-2.18112c0.48105,0.52933 0.97562,1.04849 1.48697,1.56662c8.57982,8.57977 19.97775,13.2908 32.1057,13.2908c12.11003,0 23.51358,-4.71103 32.0687,-13.2785c17.68906,-17.70013 17.68906,-46.48538 0,-64.17441c-0.50577,-0.4946 -1.01141,-1.00034 -1.54306,-1.48248c0.69983,0.03592 1.42316,0.04828 2.16992,0.04828c25.01514,0 45.35284,-20.35123 45.35284,-45.36517c0,-25.02631 -20.33774,-45.37747 -45.35284,-45.37747c-0.74683,0 -1.47009,0.01236 -2.19345,0.04822c0.53152,-0.49341 1.06082,-0.98904 1.59128,-1.50601c8.55521,-8.55521 13.2785,-19.94186 13.2785,-32.07545c0,-12.12793 -4.72336,-23.52028 -13.30319,-32.0934c-8.55515,-8.56076 -19.95866,-13.2841 -32.0687,-13.2841c-12.12122,0 -23.52025,4.72334 -32.08777,13.2841c-0.51137,0.5181 -1.01822,1.04851 -1.5049,1.57895c0.03586,-0.72331 0.05266,-1.43991 0.05266,-2.16881c0,-25.02629 -20.35681,-45.3775 -45.37079,-45.3775m0,20.71901c13.61607,0 24.65851,11.03122 24.65851,24.65849c0,6.62749 -2.651,12.62137 -6.9101,17.04979l0,51.67419l36.53975,-36.53523c0.12001,-6.14418 2.48277,-12.24686 7.18146,-16.94667c4.81305,-4.81305 11.12094,-7.22409 17.44116,-7.22409c6.30228,0 12.61577,2.41104 17.43552,7.22409c9.62166,9.63287 9.62166,25.24948 0,34.87669c-4.69977,4.68634 -10.80803,7.04915 -16.95334,7.18147l-36.5341,36.53305l51.66742,0c4.42841,-4.25351 10.42905,-6.90451 17.08008,-6.90451c13.59137,0 24.62933,11.03799 24.62933,24.66525c0,13.61606 -11.03796,24.66519 -24.62933,24.66519c-6.65106,0 -12.65167,-2.66333 -17.08008,-6.91681l-51.64836,0l36.50273,36.50946c6.16995,0.14465 12.26587,2.50522 16.96568,7.20618c9.6216,9.61487 9.6216,25.23151 0,34.85757c-4.80856,4.81979 -11.13327,7.22974 -17.43556,7.22974c-6.32019,0 -12.63371,-2.40991 -17.44786,-7.22974c-4.68074,-4.68744 -7.04802,-10.79572 -7.17473,-16.94098l-36.53975,-36.53415l0,51.66742c4.25908,4.44635 6.9101,10.43466 6.9101,17.0621c0,13.62729 -11.04243,24.66415 -24.65851,24.66415c-13.62166,0 -24.65848,-11.0369 -24.65848,-24.66415c0,-6.62744 2.64539,-12.61575 6.90335,-17.0621l0,-51.66742l-36.53864,36.54648c-0.12672,6.14413 -2.48838,12.26477 -7.18147,16.94098c-4.81416,4.81873 -11.12206,7.22974 -17.42882,7.22974c-6.31461,0 -12.6225,-2.41101 -17.43555,-7.22974c-9.63284,-9.62833 -9.63284,-25.24277 0,-34.8699c4.68073,-4.67627 10.79012,-7.05026 16.94101,-7.18262l36.533,-36.53302l-51.66632,0c-4.44075,4.25348 -10.42902,6.91681 -17.06211,6.91681c-13.61606,0 -24.65288,-11.04913 -24.65288,-24.66519c0,-13.62726 11.03682,-24.66525 24.65288,-24.66525c6.63309,0 12.62136,2.651 17.06211,6.90451l51.68537,0l-36.55208,-36.54538c-6.14527,-0.12 -12.25354,-2.49403 -16.94775,-7.19377c-9.62611,-9.61493 -9.62611,-25.23715 0,-34.86441c4.81419,-4.81305 11.12769,-7.22406 17.44228,-7.22406c6.30676,0 12.61465,2.41101 17.42883,7.22406c4.69978,4.69307 7.06034,10.80246 7.18144,16.94777l36.5386,36.53299l0,-51.66074c-4.25795,-4.42841 -6.90334,-10.42229 -6.90334,-17.04979c0,-13.62726 11.03682,-24.65848 24.65848,-24.65848"/>
+ <path d="m188.82031,210.04688l16,-47l155,-148l107,100l-158,156.99999l-44,12l-76,-74z" id="svg_6" fill="url(#svg_10)" stroke="none"/>
+ <path d="m335.57031,40.29688c-11.5,39.75 55.5,115.25 109.25,98.75l21,-20.99999l-103,-101l-27.25,23.25z" id="svg_11" fill="url(#svg_18)" stroke="none"/>
+ <rect x="272.80404" y="20.76382" width="42.35197" height="232.66835" id="svg_13" fill="#ffffff" stroke="none" transform="rotate(45.9094, 293.98, 137.1)" opacity="0.4"/>
+ <rect x="282.80404" y="22.76382" width="14" height="232.66835" fill="#ffffff" stroke="none" transform="rotate(45.9094, 289.805, 139.1)" opacity="0.4" id="svg_14"/>
+ <ellipse cx="415.13312" cy="64.38066" id="svg_12" fill="#ea7598" stroke="none" rx="67.79251" ry="34.82026" transform="rotate(39.4735, 415.133, 64.379)"/>
+ <path d="m212.07031,166.04688c-8.5,47 36.25,103.75 99.25,96.75l-152.5,53.25l53.25,-150z" id="svg_4" fill="url(#svg_5)" stroke="none"/>
+ <path d="m181.32031,242.54688c0.5,20.5 26.75,45 46.75,48.5l-66.25,20l19.5,-68.5z" id="svg_3" fill="#27382f" stroke="none"/>
+ </g>
+ <g>
+ <title>Layer 2</title>
+ <path d="m152.82031,317.04688l51,-152l157,-153c40,-12.00001 118,48 105,105l-157,152.99999l-156,47z" id="svg_1" fill="none" stroke="#800000" stroke-width="17"/>
+ </g>
+</svg>
+</g>
+
+
+<g id="select">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path stroke="#ffffff" fill="#000000" id="svg_13" d="m7.38168,2.46948l0.07502,17.03258l3.30083,-2.62617l2.62566,5.62751l4.20105,-2.62617l-3.30082,-4.80214l4.57614,-0.37517l-11.47787,-12.23044z"/>
+ </svg>
+</g>
+
+<g id="select_node">
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <circle stroke="#0000ff" fill="#00ffff" id="svg_44" r="3.87891" cy="5.3" cx="8.7" stroke-width="1.5"/>
+ <path d="m9.18161,5.6695l0.07763,15.16198l3.41588,-2.33775l2.71718,5.00947l4.34748,-2.33775l-3.41587,-4.27474l4.73565,-0.33397l-11.87794,-10.88723z" id="svg_13" fill="#000000" stroke="#ffffff"/>
+ </svg>
+</g>
+
+<g id="square">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient id="svg_2" x1="0.36328" y1="0.10156" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#3b7e9b" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="1.5" y="1.5" width="20" height="20" id="svg_1" fill="url(#svg_2)" stroke="#000000"/>
+ </svg>
+</g>
+
+<g id="rect">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.10156" x1="0.36328" id="svg_2">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#3b7e9b" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect transform="matrix(1, 0, 0, 1, 0, 0)" stroke="#000000" fill="url(#svg_2)" id="svg_1" height="12" width="20" y="5.5" x="1.5"/>
+ </svg>
+</g>
+
+<g id="fh_rect">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.10156" x1="0.36328" id="svg_2">
+
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#3b7e9b" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.3945" x2="0.6132" y1="0.1093" x1="0.3046" id="svg_9">
+ <stop stop-opacity="1" stop-color="#f9d225" offset="0"/>
+ <stop stop-opacity="1" stop-color="#bf5f00" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect stroke="#000000" stroke-width="2" fill="url(#svg_2)" id="svg_1" height="50" width="50" y="0.75" x="1.25"/>
+ <path stroke-width="2" stroke="#000000" fill="url(#svg_9)" id="svg_2" d="m31.5,0l-8.75,20.25l0.75,24l16.5,-16.5l6,-12.5"/>
+ <path stroke-width="2" stroke="#000000" fill="#fce0a9" id="svg_10" d="m39.5,28.5c-2,-9.25 -10.25,-11.75 -17,-7.4375l0.4843,24.4414z"/>
+ <path id="svg_11" stroke-width="2" stroke="#000000" fill="#000000" d="m26.9318,41.1745c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905l0.1087,6.2126z"/>
+</svg>
+</g>
+
+
+<g id="circle">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54">
+ <defs>
+ <linearGradient y2="1.0" x2="1.0" y1="0.1875" x1="0.171875" id="svg_4">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0.0"/>
+ <stop stop-opacity="1" stop-color="#ff6666" offset="1.0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <circle stroke-opacity="1" fill-opacity="1" stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" r="23" cy="27" cx="27"/>
+ </g>
+</svg>
+</g>
+
+<g id="ellipse">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54">
+ <defs>
+ <linearGradient y2="1.0" x2="1.0" y1="0.1875" x1="0.171875" id="svg_4">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0.0"/>
+ <stop stop-opacity="1" stop-color="#ff6666" offset="1.0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <ellipse stroke-opacity="1" fill-opacity="1" stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" rx="23" ry="15" cy="27" cx="27"/>
+ </g>
+</svg>
+</g>
+
+<g id="fh_ellipse">
+<svg viewBox="0 0 52 52" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_9" x1="0.3046" y1="0.1093" x2="0.6132" y2="0.3945">
+ <stop offset="0" stop-color="#f9d225" stop-opacity="1"/>
+ <stop offset="1" stop-color="#bf5f00" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_4" x1="0.17188" y1="0.1875" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ff6666" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <ellipse stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" rx="23" ry="12" cy="37" cx="27"/>
+ <path d="m31.5,0l-8.75,20.25l0.75,24l16.5,-16.5l6,-12.5" id="svg_2" fill="url(#svg_9)" stroke="#000000" stroke-width="2"/>
+ <path d="m39.5,28.5c-2,-9.25 -10.25,-11.75 -17,-7.4375l0.4843,24.4414z" id="svg_10" fill="#fce0a9" stroke="#000000" stroke-width="2"/>
+ <path d="m26.9318,41.1745c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905l0.1087,6.2126z" fill="#000000" stroke="#000000" stroke-width="2" id="svg_11"/>
+ </svg>
+</g>
+
+<g id="pencil">
+<svg viewBox="0 0 48 52" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_9" x1="0.3046" y1="0.1093" x2="0.6132" y2="0.3945">
+ <stop offset="0.0" stop-color="#f9d225" stop-opacity="1"/>
+ <stop offset="1.0" stop-color="#bf5f00" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <path d="M31.5,0 l-8.75,20.25 l0.75,24 l16.5,-16.5 l6,-12.5" id="svg_2" fill="url(#svg_9)" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
+ <path d="M39.5,28.5 c-2,-9.25 -10.25,-11.75 -17,-7.4375 l0.4843,24.4414z" id="svg_10" fill="#fce0a9" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
+ <path d="M26.9318,41.1745 c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905 l0.1087,6.2126z" fill="#000000" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1" id="svg_11"/>
+ <path d="M2.3132,4.6197 c12.4998,-1.6891 10.4729,7.0945 0,21.6215 c22.9729,-4.0539 12.1620,5.4053 12.1620,13.1756 c-0.3377,4.0539 8.7836,21.9594 26.0135,-1.3513" id="svg_12" fill="none" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
+</svg>
+</g>
+
+<g id="pen">
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_16" x1="0.46484" y1="0.15625" x2="0.9375" y2="0.39453">
+ <stop offset="0" stop-color="#f2feff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#14609b" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_19" x1="0.18359" y1="0.26172" x2="0.77734" y2="0.56641">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#fce564" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <line x1="0.99844" y1="1.49067" x2="12.97691" y2="21.14149" id="svg_5" stroke="#000000" fill="none"/>
+ <path d="m14.05272,13.68732l-1.46451,7.52632l4.03769,-6.32571" id="svg_6" fill="#a0a0a0" stroke="#000000"/>
+ <path d="m13.61215,10.26563c-0.38567,1.05257 -0.60723,2.40261 -0.50403,3.125l4.33468,1.81452c0.46153,-0.30769 1.6129,-1.71371 1.6129,-2.52016" id="svg_7" fill="url(#svg_19)" stroke="#000000"/>
+ <path d="m16.61335,1.00028l-3.67325,8.60247l7.10285,3.47318l3.17783,-7.20549" id="svg_8" fill="url(#svg_16)" stroke="#000000"/>
+ </svg>
+</g>
+
+<g id="text">
+ <svg viewBox="0 0 158 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <text x="58" y="120" id="svg_1" fill="#000000" stroke="none" font-size="120pt" font-family="sans-serif" text-anchor="middle" fill-opacity="1" stroke-opacity="1" font-weight="bold">A</text>
+ <line x1="136" y1="7" x2="136" y2="121" id="svg_2" stroke="#000000" fill="none" fill-opacity="1" stroke-opacity="1" stroke-width="5"/>
+ <line x1="120" y1="4" x2="152" y2="4" id="svg_3" stroke="#000000" stroke-width="5" fill="none" fill-opacity="1" stroke-opacity="1"/>
+ <line x1="120" y1="124" x2="152" y2="124" stroke="#000000" stroke-width="5" fill="none" fill-opacity="1" stroke-opacity="1" id="svg_4"/>
+ </svg>
+</g>
+
+
+<g id="path">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 124" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.28125" x1="0.33594" id="svg_4">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#33a533" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke-dasharray="null" stroke-width="4" stroke="#000000" fill="url(#svg_4)" id="svg_1" d="m6,103l55,-87c85,33.64 -26,37.12 55,87l-110,0z"/>
+ </svg>
+</g>
+
+<g id="add_subpath">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 124" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_4" x1="0.33594" y1="0.28125" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#33a533" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path d="m6,103l55,-87c85,33.64 -26,37.12 55,87l-110,0z" id="svg_1" fill="url(#svg_4)" stroke="#000000" stroke-width="4" stroke-dasharray="null"/>
+ <g id="svg_7">
+ <circle stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff" id="svg_6" r="22.63281" cy="88.5" cx="45.5"/>
+ <line stroke-dasharray="null" stroke-width="7" stroke="#000000" id="svg_2" y2="104.03768" x2="45.5" y1="72.96232" x1="45.5"/>
+ <line stroke-dasharray="null" stroke-width="7" stroke="#000000" id="svg_3" y2="88.5" x2="61.03768" y1="88.5" x1="29.96232"/>
+ </g>
+ </g>
+ </svg>
+</g>
+
+<g id="close_path">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
+ <line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
+ <path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ </g>
+</svg>
+</g>
+
+<g id="open_path">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
+ <line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ <g stroke="#A00" stroke-width="15" fill="none">
+ <line x1="168" y1="24" x2="210" y2="150"/>
+ <line x1="210" y1="24" x2="168" y2="150"/>
+ </g>
+ </g>
+</svg>
+</g>
+
+
+<g id="image">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0" x1="1" id="svg_25">
+ <stop stop-opacity="1" stop-color="#10284c" offset="0"/>
+ <stop stop-opacity="1" stop-color="#5374ad" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.75781" x2="0.99609" y1="0" x1="1" id="svg_23">
+ <stop stop-opacity="1" stop-color="#162e84" offset="0"/>
+ <stop stop-opacity="1" stop-color="#97c4ef" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="1" y="3.83333" width="22" height="17" id="svg_18" fill="#202020" stroke="none"/>
+ <rect stroke-width="1.2" stroke="#ffffff" fill="#232947" id="svg_15" height="14" width="19" y="5.33333" x="2.5"/>
+ <rect fill="url(#svg_23)" id="svg_20" height="7.02244" width="15.96424" y="6.7266" x="4"/>
+ <rect fill="url(#svg_25)" id="svg_24" height="4.02393" width="15.96303" y="13.77454" x="4"/>
+ <circle fill="#ffffad" id="svg_26" r="1.83333" cy="9.82002" cx="7.13254"/>
+ <path d="m14.5696,13.77458l0.70243,-4.85313l-3.12899,4.85313l2.42656,0z" id="svg_14" fill="#404040" stroke="none"/>
+ <path d="m15.27203,8.98531c2.74584,0.06386 2.42657,4.21456 -0.63857,4.85313c0.70243,-1.27714 1.66028,-3.63985 0.63857,-4.85313z" id="svg_17" fill="#404040" stroke="none"/>
+</svg>
+</g>
+
+<g id="zoom">
+ <svg viewBox="0 0 150 150" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_30" x1="0" y1="0" x2="1" y2="0">
+ <stop offset="0" stop-color="#d3d3d3" stop-opacity="1"/>
+ <stop offset="1" stop-color="#424242" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <path d="m107.14774,101.03477l-0.64774,43.96523c5.00857,4.72089 14.00811,5.27188 19,0l-0.31667,-44.16l-9.61514,-19.84l-8.42046,20.03477z" id="svg_29" fill="url(#svg_30)" stroke="#202020" stroke-width="2" transform="rotate(-45, 116, 114)"/>
+ <circle cx="58" cy="58" r="51" id="svg_22" fill="#c0c0c0" stroke="#202020" stroke-width="5"/>
+ <circle cx="58" cy="58" r="43" id="svg_27" fill="#aaccff" stroke="none"/>
+ <path d="m15.68604,61.46511c38.13954,17.67442 48.13954,15.34883 85.11628,-0.46511c1.39536,18.60465 -19.30231,41.86047 -42.7907,40.93023c-21.6279,-0.93023 -42.7907,-21.86046 -42.32558,-40.46511z" id="svg_28" fill="#8cbaff" stroke="none"/>
+ </svg>
+</g>
+
+<g id="arrow_right">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 50">
+ <path stroke="#000000" fill="#000000" d="m0,0l0,50l25,-25l-25,-25z"/>
+ </svg>
+</g>
+
+<g id="arrow_right_big">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 50">
+ <path stroke="#000000" fill="#000000" d="m0,0l0,50l25,-25l-25,-25z"/>
+ </svg>
+</g>
+
+<g id="arrow_down">
+ <svg viewBox="0 0 50 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <path transform="rotate(90, 26, 13)" d="m14,-12l0,50l25,-25l-25,-25z" fill="#000000" stroke="#000000"/>
+ </svg>
+</g>
+
+<g id="fill">
+<svg width="32" height="33" xmlns="http://www.w3.org/2000/svg">
+ <g id="svg_5">
+ <path id="svg_4" d="m17.49167,10.97621c6.9875,-0.325 12.1875,2.70833 12.13333,7.36667l-0.325,10.075c-0.75833,4.0625 -2.275,3.0875 -3.03333,0.10833l0.21667,-9.64166c-0.43333,-0.975 -1.08333,-1.625 -1.95,-1.51667" stroke-linejoin="round" stroke="#606060" fill="#c0c0c0"/>
+ <path id="svg_1" d="m2.00055,17.1309l10.72445,-10.72445l12.67445,12.13279l-3.52056,0.05389l-9.15389,9.26223l-10.72445,-10.72445z" stroke-linejoin="round" stroke="#000000" fill="#c0c0c0"/>
+ <path id="svg_3" d="m14.35,13.57621c-0.1625,-3.95417 0.86667,-11.7 -1.84167,-11.59167c-2.70833,0.10833 -2.6,2.05833 -2.16667,6.93333" stroke-linejoin="round" stroke="#000000" fill="none"/>
+ <circle id="svg_2" r="1.60938" cy="15.20121" cx="14.45833" stroke-linejoin="round" stroke="#000000" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="stroke">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <rect fill="none" stroke="#707070" stroke-width="10" x="8.625" y="8.625" width="32.75" height="32.75" id="svg_1"/>
+</svg>
+</g>
+
+<g id="opacity">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient y2="0.1" x2="0.9" y1="0.9" x1="0.1" id="svg_7">
+ <stop stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect id="svg_4" height="50" width="50" y="0" x="0" fill="#ffffff"/>
+ <rect id="svg_1" height="25" width="25" y="0" x="0" fill="#a0a0a0"/>
+ <rect id="svg_2" height="25" width="25" y="25" x="25" fill="#a0a0a0"/>
+ <rect id="svg_3" height="50" width="50" y="0" x="0" stroke-width="2" stroke="url(#svg_7)" fill="url(#svg_7)"/>
+ </svg>
+</g>
+
+<g id="new_image">
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="2.42792" y="1.6692" width="18" height="21" id="svg_55" fill="#eaeaea" stroke="#606060"/>
+ <circle stroke="none" fill="url(#svg_9)" id="svg_65" r="6.300781" cy="7.529969" cx="17.761984"/>
+ <defs>
+ <radialGradient id="svg_9" cx="0.5" cy="0.5" r="0.5">
+ <stop offset="0.1" stop-color="#ffe500" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffff00" stop-opacity="0"/>
+ </radialGradient>
+ </defs>
+</svg>
+</g>
+
+<g id="save">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0" x2="1" y1="0" x1="0" id="svg_41">
+ <stop stop-opacity="1" stop-color="#727272" offset="0"/>
+ <stop stop-opacity="1" stop-color="#d6d6d6" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.875" x2="0.21484" y1="0.00391" x1="0.04297" id="svg_46">
+ <stop stop-opacity="1" stop-color="#81bbf4" offset="0"/>
+ <stop stop-opacity="1" stop-color="#376eb7" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#202020" fill="#e0e0e0" id="svg_21" d="m1.51669,22.3458l21.13245,-0.10111l0,-6.06673l-2.62892,-9.80789l-16.27907,0.10111l-2.32558,9.20121l0.10111,6.67341z"/>
+ <rect stroke="#efefef" fill="url(#svg_41)" id="svg_32" height="4.75108" width="19.21031" y="16.58227" x="2.42667"/>
+ <path stroke="#ffffff" fill="#c0c0c0" id="svg_42" d="m4.55005,11.12235l0.70779,-2.83114l13.04348,0l0.70779,3.13448c-0.70779,2.52781 -4.04479,3.84227 -7.17897,3.84227c-2.72977,0 -6.37007,-1.41557 -7.28008,-4.1456z"/>
+ <path stroke="#285582" fill="url(#svg_46)" id="svg_45" d="m7.14286,9.74903l5.21236,5.79151l5.50193,-5.88803l-2.50965,-0.09653l0,-2.79923c0,-2.3166 -2.3166,-5.59846 -6.56371,-5.59846c-4.05405,0 -6.27413,3.37838 -6.56371,6.75676c0.48263,-1.5444 2.7027,-4.53668 4.44015,-4.44015c2.12355,-0.09653 2.79923,1.64093 2.79923,3.37838l0.09653,2.79923l-2.41313,0.09653z"/>
+ </svg>
+</g>
+
+<g id="export">
+ <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient id="svg_5" x1="0.77734" y1="0.51172" x2="0.09375" y2="0.53516">
+ <stop offset="0" stop-color="#81bbf4"/>
+ <stop offset="1" stop-color="#376eb7"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <rect x="7.22599" y="1.3603" width="15.76465" height="21.51735" id="svg_55" fill="#eaeaea" stroke="#606060"/>
+ <circle fill="#31abed" stroke-width="0.5" cx="17.4206" cy="11.1278" r="4.69727" id="svg_3"/>
+ <path fill="#ffcc00" stroke-width="0.5" d="m9.67673,20.24302l7.38701,-6.80778l2.91746,6.71323" id="svg_4"/>
+ <rect fill="#ff5555" stroke-width="0.5" x="9.5385" y="2.94914" width="5.74652" height="5.74652" id="svg_2"/>
+ <path d="m6.13727,17.94236l5.77328,-4.91041l-5.86949,-5.1832l-0.09622,2.36426l-4.64805,-0.06751l-0.04665,5.54694l4.79093,-0.02342l0.09623,2.27334z" id="svg_45" fill="url(#svg_5)" stroke="#285582"/>
+ </g>
+ </svg>
+</g>
+
+<g id="open">
+<svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="0.91406" x2="0.65234" y1="0.14063" x1="0.42578" id="svg_76">
+ <stop stop-opacity="1" stop-color="#81bbf4" offset="0"/>
+ <stop stop-opacity="1" stop-color="#376eb7" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="1.65" y="3.75" width="9.8" height="16.72712" id="svg_98" fill="#c0c0c0" stroke="#606060"/>
+ <rect stroke="none" fill="#a0a0a0" id="svg_88" height="14.17459" width="6.39585" y="4.9758" x="2.89542"/>
+ <path d="m18.62576,4.54365l0,6.91443l-9.9395,0l-0.08643,-10.11236l6.828,0l3.19792,3.19793z" id="svg_99" fill="#e0e0e0" stroke="#404040"/>
+ <path d="m2.95,20.53644l1.65,-12.03644l16.2,0l-1.5,12l-16.35,0.03643z" id="svg_97" fill="url(#svg_76)" stroke="#285582"/>
+ <line fill="none" stroke="#606060" id="svg_89" y2="4.28436" x2="13.95851" y1="4.28436" x1="10.32844"/>
+ <line fill="none" stroke="#606060" id="svg_91" y2="6.53155" x2="14.82282" y1="6.53155" x1="10.32844"/>
+ <path stroke="none" fill="#ffffff" id="svg_100" d="m15.25895,1.95069l-0.00401,2.85225l2.89558,0.00004l-2.89157,-2.85229z"/>
+</svg>
+</g>
+
+<g id="import">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="0.875" x2="0.21484" y1="0.00391" x1="0.04297" id="svg_46_import">
+ <stop stop-opacity="1" stop-color="#81f4bb" offset="0"/>
+ <stop stop-opacity="1" stop-color="#37b76e" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="2.42792" y="1.6692" width="18" height="21" id="svg_55" fill="#eaeaea" stroke="#606060"/>
+ <path stroke="#285582" fill="url(#svg_46_import)" id="svg_45" d="m7.14286,12.74903l5.21236,5.79151l5.50193,-5.88803l-2.50965,-0.09653l0,-2.79923c0,-2.3166 -2.3166,-5.59846 -6.56371,-5.59846c-4.05405,0 -6.27413,3.37838 -6.56371,6.75676c0.48263,-1.5444 2.7027,-4.53668 4.44015,-4.44015c2.12355,-0.09653 2.79923,1.64093 2.79923,3.37838l0.09653,2.79923l-2.41313,0.09653z"/>
+</svg>
+</g>
+
+<g id="docprops">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.5" x1="1" id="svg_53">
+ <stop stop-opacity="1" stop-color="#606060" offset="0"/>
+ <stop stop-opacity="0" stop-color="#5e5e5e" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect stroke="#606060" fill="#eaeaea" id="svg_55" height="21" width="18" y="1.6692" x="2.42792"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_56" y2="4.37757" x2="14.89023" y1="4.37757" x1="6.696"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_57" y2="7.10804" x2="12.92026" y1="7.10804" x1="6.6948"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_58" y2="9.84241" x2="15.64716" y1="9.84241" x1="6.6942"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_59" y2="12.36585" x2="13.21805" y1="12.36585" x1="6.69691"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_60" y2="15.06507" x2="14.43591" y1="15.06507" x1="6.69691"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_61" y2="17.84241" x2="13.36979" y1="17.84241" x1="6.69691"/>
+ <g id="svg_54">
+ <path transform="rotate(-45, 12.5448, 11.7085)" stroke="none" fill="#606060" id="svg_31" d="m11.24329,8.73944l0,2.79974l2.53499,0.07777l0,-2.95528c1.78134,0.07777 2.26093,1.39987 2.12391,2.95528c-0.06851,1.63318 -1.30175,3.49967 -3.49418,3.26636c-2.19242,-0.31108 -2.87755,-1.39987 -3.15161,-2.72197c-0.27406,-1.39987 0.41108,-3.34413 1.98689,-3.4219z"/>
+ <rect opacity="0.95" transform="rotate(-45, 16.2485, 15.1732)" stroke="none" fill="url(#svg_53)" id="svg_50" height="4.85445" width="2.57974" y="12.746" x="15.04047"/>
+ </g>
+ </svg>
+</g>
+
+<g id="source">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 55 52">
+ <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_40" y="15" x="28.23" font-weight="bold">s</text>
+ <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_47" y="30" x="28.23" font-weight="bold">v</text>
+ <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_48" y="44" x="28.23" font-weight="bold">g</text>
+ <line stroke-width="3" fill="none" stroke="#aa0000" id="svg_51" y2="43" x2="16" y1="25" x1="5"/>
+ <line id="svg_62" stroke-width="3" fill="none" stroke="#aa0000" y2="8" x2="16" y1="26" x1="5"/>
+ <line id="svg_63" stroke-width="3" fill="none" stroke="#aa0000" y2="43" x2="39" y1="25" x1="50"/>
+ <line id="svg_64" stroke-width="3" fill="none" stroke="#aa0000" y2="8" x2="39" y1="26" x1="51"/>
+ </svg>
+</g>
+
+<g id="wireframe">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <circle stroke="#000000" fill="none" id="svg_49" r="8" cy="9.5" cx="9.5"/>
+ <rect stroke="#000000" fill="none" id="svg_52" height="14" width="14" y="8.5" x="8.5"/>
+ </svg>
+</g>
+
+<g id="undo">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_66" x1="0.04297" y1="0.00391" x2="0.21484" y2="0.875">
+ <stop offset="0" stop-color="#f7f963" stop-opacity="1"/>
+ <stop offset="1" stop-color="#d3c310" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <path transform="rotate(-90, 10.3017, 11.5526)" d="m6.70188,10.72562l6.55493,-7.13388l6.65817,7.24912l-3.79441,0.03193l0,2.72259c-0.04257,2.74017 -2.76516,5.83068 -7.81235,6.02135c-5.18575,0 -7.1226,-3.75464 -7.49302,-7.41944c0.61736,1.6754 3.14913,3.78397 5.3716,3.67918c2.71635,0.1048 4.41501,-0.61714 4.41501,-2.50184l0,-2.64901l-3.89995,0z" id="svg_45" fill="url(#svg_66)" stroke="#b7a800"/>
+ </svg>
+</g>
+
+<g id="redo">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0" x1="1" id="svg_71">
+ <stop stop-opacity="1" stop-color="#98fc46" offset="0"/>
+ <stop stop-opacity="1" stop-color="#56aa25" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path transform="rotate(-90, 12.7299, 11.5526)" d="m9.11294,12.43144l6.54089,6.84566l6.6439,-6.95624l-3.78628,-0.03064l0,-2.61259c-0.04248,-2.62946 -2.75924,-5.5951 -7.79561,-5.77807c-5.17464,0 -7.10734,3.60294 -7.47697,7.11967c0.61604,-1.60771 3.14238,-3.63109 5.36009,-3.53053c2.71053,-0.10056 4.40555,0.59221 4.40555,2.40076l0,2.54198l-3.89159,0z" id="svg_45" fill="url(#svg_71)" stroke="#44aa00"/>
+ </svg>
+</g>
+
+<g id="clone">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0" x1="0" id="svg_36">
+ <stop stop-opacity="1" stop-color="#f9f3de" offset="0"/>
+ <stop stop-opacity="1" stop-color="#ccbd8f" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.80078" x2="0.42578" y1="0" x1="0" id="svg_69">
+ <stop stop-opacity="1" stop-color="#f9f3de" offset="0"/>
+ <stop stop-opacity="1" stop-color="#af995b" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#8f5902" fill="url(#svg_69)" id="svg_34" d="m2.11676,16.32061l-0.13787,-5.05515l1.93015,-2.02206l10.11029,0l2.02206,2.29779l0,4.77941l-13.92463,0z"/>
+ <rect x="7.85379" y="6.30027" width="2.2932" height="4.3407" id="svg_38" fill="url(#svg_36)" stroke="#8f5902" rx="1" ry="1"/>
+ <circle stroke="#8f5902" fill="url(#svg_36)" id="svg_35" r="2.96392" cy="4.48149" cx="9.11757"/>
+ <line x1="2.44838" y1="12.03512" x2="15.5524" y2="12.03512" id="svg_39" stroke="#f9f3de" fill="none"/>
+ <path d="m6.72427,12.55859l4.74203,0l-2.30831,2.07258l-2.43372,-2.07258z" id="svg_43" fill="#000000" stroke="none"/>
+</svg>
+</g>
+
+<g id="delete">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <rect ry="3" rx="3" stroke="#800000" fill="#aa0000" id="svg_37" height="20.29514" width="21.17486" y="1.70304" x="1.42011"/>
+ <rect ry="3" rx="3" stroke="#ff5555" fill="#aa0000" id="svg_67" height="18.63022" width="19.61118" y="2.53597" x="2.20258"/>
+ <line stroke-width="2" fill="none" stroke="#ffffff" id="svg_68" y2="16.85127" x2="17.00646" y1="6.85127" x1="7.00646"/>
+ <line stroke-width="2" id="svg_70" fill="none" stroke="#ffffff" y2="16.85127" x2="7.00646" y1="6.85127" x1="17.00646"/>
+ </svg>
+</g>
+
+<g id="go_up">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
+ <defs>
+ <linearGradient y2="0" x2="0.7" y1="0" x1="0" id="svg_74">
+ <stop stop-opacity="1" stop-color="#afe853" offset="0"/>
+ <stop stop-opacity="1" stop-color="#52a310" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#008000" fill="url(#svg_74)" id="svg_33" d="m5.38492,16.77043l7.07692,0l0,-5.23077l4.15385,0l-7.69231,-10.15385l-7.69231,10.15385l4.15385,0l0,5.23077z"/>
+ </svg>
+</g>
+
+<g id="go_down">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
+ <defs>
+ <linearGradient y2="0" x2="0.7" y1="0" x1="0" id="svg_75">
+ <stop stop-opacity="1" stop-color="#afe853" offset="0"/>
+ <stop stop-opacity="1" stop-color="#52a310" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#008000" fill="url(#svg_75)" id="svg_33" d="m5.3015,1.69202l6.93483,0l0,5.07323l4.07045,0l-7.53786,9.84803l-7.53786,-9.84803l4.07045,0l0,-5.07323z"/>
+ </svg>
+</g>
+
+<g id="context_menu">
+ <svg width="120" height="120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="0" id="svg_11" d="m4.5,46.5l52,0l-26,38l-26,-38z" stroke="#000" fill="#000"/>
+ <g id="svg_16">
+ <line stroke-width="10" id="svg_12" y2="27.5" x2="117.5" y1="27.5" x1="59.5" stroke="#000" fill="#000"/>
+ <line id="svg_13" stroke-width="10" y2="51.5" x2="117.5" y1="51.5" x1="59.5" stroke="#000" fill="#000"/>
+ <line id="svg_14" stroke-width="10" y2="73.5" x2="117.5" y1="73.5" x1="59.5" stroke="#000" fill="#000"/>
+ <line id="svg_15" stroke-width="10" y2="97.5" x2="117.5" y1="97.5" x1="59.5" stroke="#000" fill="#000"/>
+ </g>
+ </svg>
+</g>
+
+<g id="move_bottom">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 23 23">
+ <defs>
+ <linearGradient y2="0" x2="1" y1="0" x1="0" id="svg_80">
+ <stop stop-opacity="1" stop-color="#bc7f05" offset="0"/>
+ <stop stop-opacity="1" stop-color="#fcfc9f" offset="1"/>
+ </linearGradient>
+ </defs>
+ <line stroke-width="2" fill="none" stroke="#000000" id="svg_72" y2="2.5" x2="22" y1="2.5" x1="10.5"/>
+ <line id="svg_73" stroke-width="2" fill="none" stroke="#000000" y2="6.5" x2="21.99844" y1="6.5" x1="10.49844"/>
+ <line id="svg_74" stroke-width="2" fill="none" stroke="#000000" y2="10.5" x2="21.99922" y1="10.5" x1="10.49922"/>
+ <line id="svg_75" stroke-width="2" fill="none" stroke="#000000" y2="14.5" x2="21.99922" y1="14.5" x1="10.49922"/>
+ <rect stroke="#000000" fill="url(#svg_80)" id="svg_77" height="2.2" width="20" y="17.65" x="1.65"/>
+ <path stroke="none" fill="#000000" id="svg_81" d="m4.25,1.55l2.35,0l0,11.05l2,0l-3.175,3.45l-3.175,-3.45l2,0l0,-11.05z"/>
+ </svg>
+</g>
+
+<g id="move_top">
+<svg viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_86" x1="0" y1="0" x2="1" y2="0">
+ <stop offset="0" stop-color="#9fdcf4" stop-opacity="1"/>
+ <stop offset="1" stop-color="#617e96" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <line x1="1.3" y1="8.19922" x2="12.8" y2="8.19922" id="svg_72" stroke="#000000" fill="none" stroke-width="2"/>
+ <line x1="1.29844" y1="12.19922" x2="12.79844" y2="12.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_73"/>
+ <line x1="1.29922" y1="16.19922" x2="12.79922" y2="16.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_74"/>
+ <line x1="1.29922" y1="20.19922" x2="12.79922" y2="20.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_75"/>
+ <rect x="1.55" y="1.85" width="20" height="3.2" id="svg_77" fill="url(#svg_86)" stroke="#000000"/>
+ <path d="m16.83475,21.14603l2.33207,0l0,-11.04578l1.98474,0l-3.15077,-3.44869l-3.15077,3.44869l1.98474,0l0,11.04578z" id="svg_81" fill="#000000" stroke="none"/>
+ </svg>
+</g>
+
+<g id="to_path">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="0.46875" x2="0.42969" y1="0.10156" x1="0.10547" id="svg_105">
+ <stop stop-color="#ff0000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#ff0000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <circle cx="21" cy="21.3125" r="18.44531" id="svg_120" fill="url(#svg_105)" stroke="#000000"/>
+ <path fill="none" stroke="#000000" d="m2.875,21.3125c-0.375,-9.25 7.75,-18.875 17.75,-18" id="svg_115"/>
+ <line x1="25.375" y1="3.0625" x2="8.5" y2="3.0625" id="svg_116" stroke="#808080" fill="none"/>
+ <line x1="2.625" y1="24.75" x2="2.625" y2="9.8125" id="svg_117" stroke="#808080" fill="none"/>
+ <circle cx="8.5" cy="2.9375" r="1.95313" fill="#00ffff" stroke="#0000ff" stroke-width="0.5" id="svg_118"/>
+ <circle cx="2.625" cy="9.8125" r="1.95313" fill="#00ffff" stroke="#0000ff" stroke-width="0.5" id="svg_119"/>
+ <circle cx="20.875" cy="3.1875" r="2.5" id="svg_112" fill="#00ffff" stroke="#0000ff"/>
+ <circle cx="2.875" cy="21.0625" r="2.5" fill="#00ffff" stroke="#0000ff" id="svg_114"/>
+ </g>
+</svg>
+</g>
+
+<g id="link_controls">
+<svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" id="svg_102" d="m9.875,23c-2,-4.25 -1.6875,-7.375 1.6875,-10.5c3.375,-3.125 7.5625,-2.75 11.0625,2" stroke="#8dd35f" fill="none"/>
+ <line fill="none" stroke="#606060" id="svg_109" y2="4" x2="19" y1="19" x1="4"/>
+ <circle stroke="#0000ff" fill="#00ffff" id="svg_111" r="2.17578" cy="11.5" cx="11.5"/>
+ <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19"/>
+ <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19" cx="4"/>
+</svg>
+</g>
+
+<g id="reorient">
+<svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="1" x1="0" id="svg_113">
+ <stop stop-opacity="0" stop-color="#0000ff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#507ece" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect stroke-dasharray="2,2" stroke="#0000ff" fill="none" id="svg_108" height="19.125" width="18.625" y="2.625" x="2.875"/>
+ <rect transform="rotate(45, 12.2344, 12.1719)" stroke="#000000" fill="url(#svg_113)" id="svg_107" height="6.125" width="16" y="9.10848" x="4.23267"/>
+</svg>
+</g>
+
+<g id="group">
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_90" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ccddff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#789fed" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_92" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#70a1e5" stop-opacity="1"/>
+ <stop offset="1" stop-color="#4b6baf" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="13.5" y="0.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_79"/>
+ <rect x="13.5" y="13.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_82"/>
+ <rect x="0.5" y="13.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_83"/>
+ <rect x="2.5" y="2.5" width="8" height="7" fill="#a0a0a0" stroke="#555555" id="svg_85"/>
+ <rect x="2.5" y="2.5" width="8" height="7" fill="url(#svg_90)" stroke="url(#svg_92)" id="svg_87"/>
+ <rect x="5.5" y="6.5" width="8" height="7" id="svg_84" fill="#7399d6" stroke="url(#svg_92)"/>
+ <rect x="0.5" y="0.5" width="2" height="2" id="svg_78" fill="#a0a0a0" stroke="#555555"/>
+ </svg>
+</g>
+
+<g id="ungroup">
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_90" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ccddff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#789fed" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_92" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#70a1e5" stop-opacity="1"/>
+ <stop offset="1" stop-color="#4b6baf" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="2.5" y="2.5" width="8" height="7" fill="url(#svg_90)" stroke="url(#svg_92)" id="svg_87"/>
+ <rect x="5.5" y="6.5" width="8" height="7" id="svg_84" fill="#7399d6" stroke="url(#svg_92)"/>
+ <rect x="9.5" y="1.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_79"/>
+ <rect x="1.5" y="8.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_83"/>
+ <rect x="1.5" y="1.5" width="2" height="2" id="svg_78" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_93" x="12.5" y="5.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_94" x="12.5" y="12.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_95" x="4.5" y="12.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_96" x="4.5" y="5.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+</svg>
+</g>
+
+<g id="unlink_use">
+<svg width="222" height="222" xmlns="http://www.w3.org/2000/svg">
+ <path id="svg_1" d="m93.75,118.44922c-4.5,13.58447 -14.66553,11.5 -28.25,11.5l-34,0c-13.58447,0 -24.5,-7.16553 -24.5,-21.5c0,-14.33447 10.91553,-20.5 24.5,-20.5l34,0c13.58447,0 19.75,-2.33447 26.5,10.75" stroke-width="13" stroke="#3f3f3f" fill="none"/>
+ <g id="svg_11">
+ <line id="svg_4" y2="65.94563" x2="83.07683" y1="28.27895" x1="45.41017" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none"/>
+ <line id="svg_5" y2="15.01293" x2="109.41467" y1="65.94638" x1="109.41467" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none"/>
+ <line id="svg_6" y2="29.31928" x2="177.58937" y1="65.94638" x1="140.96227" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none"/>
+ </g>
+ <g id="svg_12" transform="rotate(-180, 108, 172.111)">
+ <line y2="190.94563" x2="79.57683" y1="153.27895" x1="41.91017" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none" id="svg_13"/>
+ <line y2="140.01293" x2="105.91467" y1="190.94638" x1="105.91467" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none" id="svg_14"/>
+ <line y2="154.31928" x2="174.08937" y1="190.94638" x1="137.46227" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none" id="svg_15"/>
+ </g>
+ <path transform="rotate(-180, 172.125, 108.926)" id="svg_2" d="m215.5,118.44901c-4.5,13.58499 -14.6655,11.5 -28.25,11.5l-34,0c-13.5845,0 -24.5,-7.16501 -24.5,-21.5c0,-14.3343 10.9155,-20.4998 24.5,-20.4998l34,0c13.5845,0 19.75,-2.3345 26.5,10.75" stroke-width="13" stroke="#3f3f3f" fill="none"/>
+</svg>
+</g>
+
+<g id="width">
+ <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+ <path id="svg_6" d="m19,42.5l-7.5,7.5l7.5,7.5l0,-15zm0,7.5l62,0l0,-7.5l7.5,7.5l-7.5,7.5l0,-7.5" stroke-width="8" stroke="#000000" fill="#000000"/>
+ </svg>
+</g>
+
+<g id="height">
+ <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+ <path transform="rotate(90, 50, 50)" fill="#000000" stroke="#000000" stroke-width="8" d="m19,42.5l-7.5,7.5l7.5,7.5l0,-15zm0,7.5l62,0l0,-7.5l7.5,7.5l-7.5,7.5l0,-7.5" id="svg_6"/>
+ </svg>
+</g>
+
+<g id="c_radius">
+<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg">
+ <rect stroke="#404040" fill="none" stroke-width="0.5" x="2.37501" y="2.4375" width="43.9375" height="43.9375" id="svg_1" rx="13" ry="13"/>
+ <path fill="none" stroke="#000000" d="m2.43674,15.88952l13.73722,0l0.08978,-13.46483m0.08978,14.08493" id="svg_3"/>
+ <line fill="none" stroke="#000000" x1="16.35107" y1="15.88934" x2="5.20504" y2="5.20504" id="svg_4" stroke-dasharray="2,2"/>
+</svg>
+</g>
+
+<g id="angle">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" stroke-dasharray="1,3" id="svg_6" d="m32.78778,41.03469c-0.40379,-8.68145 -4.50873,-16.79003 -12.11365,-20.5932" stroke="#000000" fill="none"/>
+ <path id="svg_7" d="m29.20348,7.67055l-24.20348,34.47921l41.16472,0" stroke-width="3" stroke="#404040" fill="none"/>
+</svg>
+</g>
+
+<g id="blur">
+<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <filter id="svg_4_blur" x="-50%" y="-50%" width="200%" height="200%">
+ <feGaussianBlur stdDeviation="25"/>
+ </filter>
+ </defs>
+ <circle fill="#000000" stroke="#000000" stroke-width="5" stroke-dasharray="null" cx="150" cy="150" r="91.80151" id="svg_4" filter="url(#svg_4_blur)"/>
+</svg>
+</g>
+
+<g id="fontsize">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <text fill="#606060" stroke="none" x="14.451" y="41.4587" id="svg_2" font-size="26" font-family="serif" text-anchor="middle">T</text>
+ <text fill="#000000" stroke="none" x="28.853" y="41.8685" font-size="52" font-family="serif" text-anchor="middle" xml:space="preserve" id="svg_3">T</text>
+</svg>
+</g>
+
+<g id="align">
+ <svg width="22" height="22" xmlns="http://www.w3.org/2000/svg">
+ <rect stroke="#606060" fill="#c0c0c0" id="svg_4" height="7" width="12" y="7.5" x="4.5"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="9.5"/>
+ <rect stroke="#ffffff" fill="none" id="svg_5" height="5" width="10" y="8.5" x="5.5"/>
+ </svg>
+</g>
+
+<g id="align_left">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
+ <rect stroke="#606060" fill="#ffffff" id="svg_4" height="7" width="12" y="2.5" x="2.5"/>
+ <rect stroke="none" fill="#c0c0c0" id="svg_5" height="4" width="11" y="4" x="2"/>
+ <rect id="svg_6" stroke="#606060" fill="#ffffff" height="7" width="18" y="12.5" x="2.5"/>
+ <rect id="svg_7" stroke="none" fill="#c0c0c0" height="4" width="17" y="14" x="2"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="1.5"/>
+ </svg>
+</g>
+
+<g id="align_center">
+ <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="1.5" y="12.5" width="18" height="7" fill="#c0c0c0" stroke="#606060" id="svg_6"/>
+ <rect x="4.5" y="2.5" width="12" height="7" id="svg_4" fill="#c0c0c0" stroke="#606060"/>
+ <rect x="9.5" y="-10" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
+ <rect x="2.5" y="13.5" width="16" height="5" fill="none" stroke="#ffffff" id="svg_7"/>
+ <rect x="5.5" y="3.5" width="10" height="5" id="svg_5" fill="none" stroke="#ffffff"/>
+ </svg>
+</g>
+
+<g id="align_right">
+ <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="7.5" y="2.5" width="12" height="7" id="svg_4" fill="#ffffff" stroke="#606060"/>
+ <rect x="9" y="4" width="11" height="4" id="svg_5" fill="#c0c0c0" stroke="none"/>
+ <rect x="1.5" y="12.5" width="18" height="7" fill="#ffffff" stroke="#606060" id="svg_6"/>
+ <rect x="3" y="14" width="17" height="4" fill="#c0c0c0" stroke="none" id="svg_7"/>
+ <rect x="18.5" y="-10" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
+ </svg>
+</g>
+
+<g id="align_top">
+ <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g transform="rotate(90, 11, 11)" id="svg_1">
+ <rect x="2.5" y="3.5" width="12" height="7" id="svg_4" fill="#ffffff" stroke="#606060"/>
+ <rect x="2" y="5" width="11" height="4" id="svg_5" fill="#c0c0c0" stroke="none"/>
+ <rect x="2.5" y="13.5" width="18" height="7" fill="#ffffff" stroke="#606060" id="svg_6"/>
+ <rect x="2" y="15" width="17" height="4" fill="#c0c0c0" stroke="none" id="svg_7"/>
+ <rect x="1.5" y="-9" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
+ </g>
+ </svg>
+</g>
+
+<g id="align_middle">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
+ <g transform="rotate(90, 12, 11.5)" id="svg_1">
+ <rect id="svg_6" stroke="#606060" fill="#c0c0c0" height="7" width="18" y="14" x="3"/>
+ <rect stroke="#606060" fill="#c0c0c0" id="svg_4" height="7" width="12" y="4" x="6"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-8.5" x="11"/>
+ <rect id="svg_7" stroke="#ffffff" fill="none" height="5" width="16" y="15" x="4"/>
+ <rect stroke="#ffffff" fill="none" id="svg_5" height="5" width="10" y="5" x="7"/>
+ </g>
+</svg>
+</g>
+
+<g id="align_bottom">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
+ <g transform="rotate(90, 11, 11)" id="svg_1">
+ <rect stroke="#606060" fill="#ffffff" id="svg_4" height="7" width="12" y="2.5" x="7.5"/>
+ <rect stroke="none" fill="#c0c0c0" id="svg_5" height="4" width="11" y="4" x="9"/>
+ <rect id="svg_6" stroke="#606060" fill="#ffffff" height="7" width="18" y="12.5" x="1.5"/>
+ <rect id="svg_7" stroke="none" fill="#c0c0c0" height="4" width="17" y="14" x="3"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="18.5"/>
+ </g>
+</svg>
+</g>
+
+<g id="linecap_butt">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient id="svg_8" x1="0.8" y1="1" x2="0.2" y2="1">
+ <stop offset="0" stop-color="#000000" stop-opacity="1"/>
+ <stop offset="1" stop-color="#000000" stop-opacity="0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <rect fill="url(#svg_8)" stroke="#a0a0a0" stroke-width="2" x="-15.20196" y="43.5974" width="94.8373" height="50.3728" id="svg_3" transform="rotate(-45, 32.2148, 68.7832)"/>
+ <path id="svg_1" d="m6.63133,95.07755l59.17514,-59.17514" stroke-width="3" stroke="#00ffff" fill="none"/>
+ <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
+ </g>
+</svg>
+</g>
+
+<g id="linecap_square">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient id="svg_8" x1="0.8" y1="1" x2="0.2" y2="1">
+ <stop offset="0" stop-color="#000000" stop-opacity="1"/>
+ <stop offset="1" stop-color="#000000" stop-opacity="0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <rect fill="url(#svg_8)" stroke="none" x="-18.51568" y="35.5974" width="117.46469" height="50.3728" id="svg_3" transform="rotate(-45, 40.2168, 60.7832)"/>
+ <path id="svg_1" d="m6.63133,95.07755l59.17514,-59.17514" stroke-width="3" stroke="#00ffff" fill="none"/>
+ <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
+ </g>
+</svg>
+</g>
+
+<g id="linecap_round">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path transform="rotate(-45, 41.5117, 59.4648)" id="svg_3" d="m-19.0679,34.2946l94.8359,0c36.499,-1.4142 33.67101,48.9569 0,50.3711l-94.8359,0l0,-50.3711z" stroke-width="2" stroke="#a0a0a0" fill="url(#svg_8)"/>
+ <path id="svg_1" d="m6.63133,95.07755l59.17515,-59.17515" stroke-width="3" stroke="#00ffff" fill="none"/>
+ <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
+ </g>
+</svg>
+</g>
+
+<g id="linejoin_miter">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
+ <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
+ <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="linejoin_bevel">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path stroke-linejoin="bevel" fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
+ <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
+ <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="linejoin_round">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path stroke-linejoin="round" fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
+ <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
+ <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="eye">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 17">
+ <defs>
+ <linearGradient y2="0.79688" x2="0.5625" y1="0.19141" x1="0.42969" id="svg_91">
+ <stop stop-opacity="1" stop-color="#d3a16b" offset="0"/>
+ <stop stop-opacity="1" stop-color="#a37c53" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="none" fill="url(#svg_91)" id="svg_9" d="m0.12852,8.18338c3.59931,-7.71208 13.19749,-7.36932 16.75236,0.08569c-3.02165,7.5407 -13.59741,7.66924 -16.75236,-0.08569z"/>
+ <path id="svg_76" stroke="none" fill="#ffffff" d="m0.33033,8.2557c3.5173,-4.97159 12.89675,-4.75063 16.37062,0.05524c-2.95279,4.86111 -13.28756,4.94397 -16.37062,-0.05524z"/>
+ <circle stroke="none" fill="#4f92c1" id="svg_88" r="3.08008" cy="7.71116" cx="8.45861"/>
+ <circle stroke="none" fill="#000000" id="svg_89" r="1.27539" cy="7.6539" cx="8.43159"/>
+ </svg>
+</g>
+
+<g id="no_color">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <line fill="none" stroke="#d40000" id="svg_90" y2="24" x2="24" y1="0" x1="0"/>
+ <line id="svg_92" fill="none" stroke="#d40000" y2="24" x2="0" y1="0" x1="24"/>
+ </svg>
+</g>
+
+<g id="ok">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0.65625" x2="0.94141" y1="0.43359" x1="0.42969" id="svg_106">
+ <stop stop-opacity="1" stop-color="#38ff45" offset="0"/>
+ <stop stop-opacity="1" stop-color="#127c0c" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path transform="rotate(45, 12, 10)" stroke="#005500" fill="url(#svg_106)" id="svg_101" d="m7.9,15.9l4.9,-0.05l0,-13.75l3.8,0l0,17.6l-8.7,0l0,-3.8z"/>
+ </svg>
+</g>
+
+<g id="cancel">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0.65625" x2="0.94141" y1="0.43359" x1="0.42969" id="svg_9">
+ <stop stop-opacity="1" stop-color="#ff3838" offset="0"/>
+ <stop stop-opacity="1" stop-color="#7a0c0c" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#550000" fill="url(#svg_9)" id="svg_101" d="m2.10526,10.52632l7.36842,0l0,-7.36842l3.68421,0l0,7.36842l7.36842,0l0,3.68421l-7.36842,0l0,7.36842l-3.68421,0l0,-7.36842l-7.36842,0l0,-3.68421z" transform="rotate(45, 11.3, 12.3)"/>
+ </svg>
+</g>
+
+<g id="warning">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0.98047" x2="0.57813" y1="0.44922" x1="0.56641" id="svg_110">
+ <stop stop-opacity="1" stop-color="#ffff00" offset="0"/>
+ <stop stop-opacity="1" stop-color="#9e9e00" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path d="m1.42857,21.55559l10.71429,-19.36489l10.71429,19.20352l-21.42857,0.16137z" id="svg_44" fill="url(#svg_110)" stroke="#916d1f" stroke-width="2"/>
+ <path stroke="none" fill="#000000" id="svg_103" d="m11.98371,14.68571c-0.57143,-3.82857 -1.82857,-6.4 0.11429,-6.4c2.11429,0 0.74286,2.57143 0.11429,6.4l-0.22857,0z"/>
+ <circle stroke="none" fill="#000000" id="svg_104" r="1.17578" cy="17.37143" cx="12.14308"/>
+ </svg>
+</g>
+
+<g id="node_delete">
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
+ <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
+ <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
+ <circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
+ <g transform="rotate(-45.291072845458984 9.81157112121582,9.244086265563965) " id="svg_6">
+ <line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
+ <line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="node_clone">
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
+ <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
+ <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
+ <circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
+ <line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
+ <line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
+</svg>
+</g>
+
+<g id="globe_link">
+<svg width="66" height="66" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <radialGradient id="svg_8" spreadMethod="pad" cx="0.5" cy="0.32513">
+ <stop stop-color="#7791ef" stop-opacity="0.99219" offset="0"/>
+ <stop stop-color="#3c3cfc" offset="1"/>
+ </radialGradient>
+ <linearGradient id="svg_10" x1="0" y1="0" x2="1" y2="0">
+ <stop offset="0" stop-color="#333333" stop-opacity="0.99609"/>
+ <stop offset="1" stop-opacity="0.99609" stop-color="#666666"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <g opacity="0.8" id="svg_5">
+ <circle id="svg_1" r="27.90625" cy="33" cx="33" stroke-width="0" stroke="#AAAAAA" fill="url(#svg_8)"/>
+ <g id="svg_7">
+ <path d="m38.2478,36.06121c-0.43732,0 -0.87463,0 -1.31195,0c-0.43731,0 -0.87463,0 -2.6239,0c-0.87463,0 -1.74926,0 -2.18658,0c-0.43732,0 -2.19828,0.33684 -2.6239,0.43732c-0.95172,0.22467 -1.27098,0.48253 -1.74927,0.87463c-1.21939,0.99965 -1.44004,1.00272 -1.74926,1.31195c-0.30923,0.30923 -0.21265,0.79756 -0.43732,1.74926c-0.10048,0.42562 0.16736,0.90792 0,1.31195c-0.23668,0.57138 -0.43732,0.87463 -0.43732,1.74926c0,0.43732 0.12809,0.56541 0.43732,0.87463c0.30923,0.30923 0.12809,0.56541 0.43732,0.87463c0.30923,0.30923 1.32364,0.77415 1.74926,0.87463c0.95171,0.22467 0.69349,0.69349 1.31195,1.31195c0.30923,0.30923 0.90791,-0.16736 1.31195,0c0.57138,0.23668 0.56541,0.56541 0.87463,0.87463c0.30923,0.30923 0.56541,0.12809 0.87463,0.43732c0.61846,0.61846 -0.10048,1.32365 0,1.74926c0.22467,0.95171 0.43732,1.31195 0.43732,2.6239c0,0.87463 0,2.18658 0,3.06121c0,0.43732 0,1.31195 0,2.6239c0,0.43732 0.12809,1.00272 0.43732,1.31195c0.30922,0.30923 1.31195,0 1.74926,0c0.87463,0 1.31195,0 1.74927,0c0.43731,0 0.6065,-0.40129 1.74926,-0.87464c0.40403,-0.16736 0.74057,-0.20064 1.31195,-0.43732c0.40403,-0.16736 0.63795,-0.74057 0.87463,-1.31195c0.16736,-0.40403 0.15712,-2.20917 0.43732,-3.93585c0.22151,-1.36505 0.43732,-2.18658 0.43732,-2.6239c0,-0.43732 -0.12928,-0.88101 0,-2.18658c0.21973,-2.21904 0.43732,-3.49853 0.43732,-3.93585c0,-0.43732 0,-0.87463 0,-1.74927c0,-1.31195 0.16736,-1.78254 0,-2.18658c-0.23668,-0.57138 -1.00272,-0.56541 -1.31195,-0.87463c-0.30923,-0.30922 -0.43732,-0.43731 -1.74926,-1.74926l0,-0.87463l-0.43732,0l0,-0.43732" id="svg_2" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ <path d="m5.66773,37.0452c1.12973,-0.3645 0.87463,-0.2187 1.74927,-0.656c0.87463,-0.4373 1.34081,-0.8211 2.18658,-1.3119c1.36372,-0.7915 1.44002,-1.4401 1.74922,-1.7493c0.3093,-0.3092 0.1281,-0.5654 0.4374,-0.8746c0.6184,-0.6185 0.8746,-0.4374 1.7492,-1.312c0.8747,-0.8746 1.0027,-1.0027 1.312,-1.3119c0.6184,-0.6185 0.1281,-1.0028 0.4373,-1.312c0.3092,-0.3092 0,-0.8746 0,-1.3119c0,-0.4374 0,-1.312 0,-1.7493c0,-0.4373 0.2009,-1.7727 0,-2.6239c-0.2247,-0.9517 -0.1281,-1.4401 -0.4373,-1.7493c-0.3093,-0.3092 -0.7073,-1.3452 -0.8746,-1.7492c-0.2367,-0.5714 -0.8747,-0.8747 -0.8747,-1.312c0,-0.4373 -0.4373,-0.4373 -0.4373,-0.8746l0,-0.4374l-1.2026,-0.8746c-3.7901,5.8674 -6.81486,11.6253 -5.79446,21.2099l-0.00001,0z" id="svg_3" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ <path d="m52.2419,13.1021c-0.4373,0.4373 -1.3495,0.8398 -2.1866,1.0933c-3.0182,0.9138 -3.2212,2.2857 -3.4985,2.6239c-1.4137,1.7245 -2.4979,1.3039 -4.8105,1.7493c-0.4294,0.0827 -0.4373,0.4373 -0.8746,0.4373c-0.4373,0 -0.8746,0 -1.312,0c-0.4373,0 -1.3119,0 -1.7492,0c-0.4373,0 -1.3453,-0.27 -1.7493,-0.4373c-0.5714,-0.2367 -0.5654,-0.5654 -0.8746,-0.8747c-0.3092,-0.3092 -0.5654,-0.1281 -0.8746,-0.4373c-0.3093,-0.3092 -0.8747,0 -1.312,0c-0.4373,0 -0.9079,-0.1673 -1.3119,0c-0.5714,0.2367 -0.3033,1.0753 -0.8747,1.312c-0.404,0.1673 -0.1281,0.5654 -0.4373,0.8746c-0.3092,0.3092 -0.4373,0.4373 -0.4373,0.8746c0,0.4373 0,0.8747 0,1.312c0,0.4373 0.0333,0.7073 0.4373,0.8746c0.5714,0.2367 0.638,0.7406 0.8746,1.312c0.1674,0.404 0.4374,0.4373 0.4374,0.8746c0,0.4373 0,0.8746 0,1.3119c0,0.4374 -0.4374,0.4374 -0.8747,0.8747c-1.3119,1.3119 -1.9499,1.1779 -2.1865,1.7492c-0.1674,0.4041 -1.0753,0.3033 -1.312,0.8747c-0.1674,0.404 0,0.8746 0.4373,0.8746c0.4373,0 0.8746,0.4373 1.312,0.4373c0.4373,0 0.8746,-0.4373 1.3119,-0.4373c0.4373,0 0.5654,-0.1281 0.8746,-0.4373c0.6185,-0.6185 1.312,0 1.7493,0c0.4373,0 0.397,-0.6543 2.1866,-0.8747c0.434,-0.0534 2.8801,-0.2561 3.4985,-0.8746c0.3093,-0.3092 0.8343,-0.6543 2.6239,-0.8746c0.4341,-0.0535 0.8747,0 1.312,0c0.4373,0 0.8746,0.4373 0.8746,0.8746c0,0.4373 0.4373,0.4373 0.4373,0.8746c0,0.4374 0.5654,2.3147 0.8746,2.6239c0.3093,0.3093 0.1281,1.0028 0.4374,1.312c0.3092,0.3092 2.1095,2.8366 3.0612,3.0612c0.4256,0.1005 0.8215,0.2158 2.1866,0.4373c0.4316,0.0701 1.3119,0 1.7492,0c0.4373,0 0.8864,0.1005 1.312,0c0.9517,-0.2246 1.44,-0.5654 1.7492,-0.8746c0.3093,-0.3092 0.8747,-0.4373 1.312,-0.4373c0.4373,0 0.5654,-0.5654 0.8746,-0.8746c0.3092,-0.3093 0.8746,0 1.312,0l1.0933,-0.656c1.1661,-7.7259 -2.4782,-14.1399 -7.6531,-20.5539l0,0z" id="svg_4" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ <path id="svg_6" d="m10.0409,48.3061c2.1137,-0.2187 4.6647,-0.2187 6.3411,1.9679c1.1662,1.5306 1.239,3.7172 0.2186,4.5918c-2.4052,-0.8746 -5.0291,-2.6239 -6.5597,-6.5597l0,0z" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ </g>
+ </g>
+ <rect transform="rotate(45, 16.9336, 16.9375)" ry="9" rx="9" id="svg_9" height="19.32339" width="29.34293" y="7.27574" x="2.26257" stroke-width="5" stroke="url(#svg_10)" fill="none" stroke-linecap="round"/>
+ <rect id="svg_11" transform="rotate(45, 49.0664, 49.0625)" ry="9" rx="9" height="19.32339" width="29.34293" y="39.40074" x="34.39538" stroke-width="5" stroke="url(#svg_10)" fill="none" stroke-linecap="round"/>
+ <line id="svg_12" y2="45.75" x2="45.75" y1="20.25" x1="20.25" stroke-linecap="round" stroke-width="5" stroke="url(#svg_10)" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="svg_eof"/>
+
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svgz.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svgz.svn-base
new file mode 100644
index 000000000..cb8c80cc5
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/svg_edit_icons.svgz.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/text.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/text.png.svn-base
new file mode 100644
index 000000000..5652e2fab
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/text.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/text.svg.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/text.svg.svn-base
new file mode 100644
index 000000000..5c28753c3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/text.svg.svn-base
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22.000000px"
+ height="22.000000px"
+ id="svg1306"
+ sodipodi:version="0.32"
+ inkscape:version="0.42.2"
+ sodipodi:docbase="/home/andreas/projekt/bild/tango/22"
+ sodipodi:docname="draw-text2.svg">
+ <defs
+ id="defs1308">
+ <linearGradient
+ id="linearGradient3682">
+ <stop
+ style="stop-color:#1f1f1f;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop3684" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop3686" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3558">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3560" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3562" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3558"
+ id="radialGradient3564"
+ cx="22.571428"
+ cy="30.857143"
+ fx="22.571428"
+ fy="30.857143"
+ r="15.571428"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.300378e-15,10.75754)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2834">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2836" />
+ <stop
+ style="stop-color:#b3b3b3;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop2838" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2834"
+ id="linearGradient2840"
+ x1="19.944447"
+ y1="16.527262"
+ x2="24.133829"
+ y2="19.642126"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.498259,0.000000,0.000000,0.466519,-0.799974,-0.839637)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3682"
+ id="linearGradient3688"
+ x1="23.305620"
+ y1="24.843527"
+ x2="14.388516"
+ y2="9.5902243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.498259,0.000000,0.000000,0.488600,-0.799974,-1.273557)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.000000"
+ inkscape:cx="17.541947"
+ inkscape:cy="12.572768"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="885"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata1311">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.47368422;color:#000000;fill:url(#radialGradient3564);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ id="path3556"
+ sodipodi:cx="22.571428"
+ sodipodi:cy="30.857143"
+ sodipodi:rx="15.571428"
+ sodipodi:ry="10.142858"
+ d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7.0000000,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
+ transform="matrix(0.706422,0.000000,0.000000,0.208015,-4.944952,13.47138)" />
+ <path
+ style="font-size:54.869392px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient3688);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.0000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
+ d="M 15.189363,15.520771 L 7.1531447,15.520771 L 5.8598048,19.513834 L 0.51627279,19.513834 L 8.1009381,0.48837876 L 14.228221,0.48837876 L 21.560524,19.464779 L 16.444188,19.464779 L 15.189363,15.520771 M 8.3990779,12.473977 L 13.858901,12.473977 L 11.171254,5.1526958 L 8.3990779,12.473977"
+ id="text1314"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ style="font-size:54.869392px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;opacity:0.37912086;fill:none;fill-opacity:1.0000000;stroke:url(#linearGradient2840);stroke-width:1.0000008;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
+ d="M 15.684541,15.159554 L 6.6710758,15.159554 L 5.4166733,18.527305 L 2.0035414,18.527305 L 8.7384662,1.4621947 L 13.512484,1.4621947 L 20.022564,18.410463 L 16.899702,18.410463 L 15.684541,15.159554 z "
+ id="path2047"
+ sodipodi:nodetypes="ccccccccc" />
+ <image
+ id="image2089"
+ height="459.00000"
+ width="400.00000"
+ sodipodi:absref="/home/andreas/palette2.png"
+ xlink:href="/home/andreas/palette2.png"
+ x="-354.93631"
+ y="-214.53793" />
+ <path
+ style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#999999;stroke-width:1.0000007;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;opacity:0.51098901"
+ d="M 8.1686844,13.551882 L 14.147791,13.551882"
+ id="path5142"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/to_path.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/to_path.png.svn-base
new file mode 100644
index 000000000..4209828db
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/to_path.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/undo.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/undo.png.svn-base
new file mode 100644
index 000000000..cd4ab955f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/undo.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/view-refresh.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/view-refresh.png.svn-base
new file mode 100644
index 000000000..3fd71d6e5
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/view-refresh.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/wave.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/wave.png.svn-base
new file mode 100644
index 000000000..10fa7122d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/wave.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/wireframe.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/wireframe.png.svn-base
new file mode 100644
index 000000000..89db7e9e3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/wireframe.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/.svn/text-base/zoom.png.svn-base b/files_svgedit/svg-edit/images/.svn/text-base/zoom.png.svn-base
new file mode 100644
index 000000000..c4fb6f17d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/.svn/text-base/zoom.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/images/README.txt b/files_svgedit/svg-edit/images/README.txt
new file mode 100644
index 000000000..9224bc1cf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/README.txt
@@ -0,0 +1,61 @@
+filename origin
+
+align-bottom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.png
+align-bottom.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-bottom.svg
+align-center.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.png
+align-center.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-center.svg
+align-left.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.png
+align-left.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-left.svg
+align-middle.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.png
+align-middle.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-center.svg
+align-right.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.png
+align-right.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-horizontal-right.svg
+align-top.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.png
+align-top.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/actions/align-vertical-top.svg
+bold.png
+cancel.png
+circle.png
+clear.png
+clone.png
+copy.png
+cut.png
+delete.png
+document-properties.png
+dropdown.gif
+ellipse.png
+eye.png
+flyouth.png
+flyup.gif
+freehand-circle.png
+freehand-square.png
+go-down.png
+go-up.png
+image.png
+italic.png
+line.png
+logo.png
+logo.svg
+move_bottom.png
+move_top.png
+none.png
+open.png
+paste.png
+path.png
+polygon.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.png
+polygon.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-polygon.svg
+rect.png
+redo.png
+rotate.png
+save.png
+select.png
+sep.png
+shape_group.png
+shape_ungroup.png
+source.png
+square.png
+text.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.png
+text.svg http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/draw-text.svg
+undo.png
+view-refresh.png
+wave.png
+zoom.png http://tango.freedesktop.org/static/cvs/tango-art-libre/22x22/tools/page-magnifier.png
diff --git a/files_svgedit/svg-edit/images/align-bottom.png b/files_svgedit/svg-edit/images/align-bottom.png
new file mode 100644
index 000000000..be5dfe54d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-bottom.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/align-bottom.svg b/files_svgedit/svg-edit/images/align-bottom.svg
new file mode 100644
index 000000000..36f8efe2c
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-bottom.svg
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg5741"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-bottom-vertical.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-bottom-vertical.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs5743">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6938"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6934"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6932"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6930"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6926"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6924"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.197802"
+ inkscape:cx="8"
+ inkscape:cy="9.8019802"
+ inkscape:current-layer="g6828"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="1078"
+ inkscape:window-height="786"
+ inkscape:window-x="243"
+ inkscape:window-y="71" />
+ <metadata
+ id="metadata5746">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g6828"
+ transform="translate(30.00011,90.000366)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ style="display:inline"
+ id="g6838"
+ transform="translate(-30.00009,-1.0002798)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3052"
+ width="12"
+ height="7"
+ x="69.500122"
+ y="12.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3054"
+ width="10"
+ height="5.0000305"
+ x="70.500122"
+ y="13.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g3056"
+ transform="translate(-127,-559)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3058"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3060"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3294"
+ transform="translate(-187,-560)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3296"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient6932);fill-opacity:1;stroke:url(#linearGradient6934);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3298"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient6936);fill-opacity:1;stroke:url(#linearGradient6938);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3300"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/align-center.png b/files_svgedit/svg-edit/images/align-center.png
new file mode 100644
index 000000000..d1f0c5bcb
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-center.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/align-center.svg b/files_svgedit/svg-edit/images/align-center.svg
new file mode 100644
index 000000000..ddf49fcec
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-center.svg
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10958"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-horisontal-center.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-center.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs10960">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient4708"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient4706"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient4704"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient4702"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="11.460711"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata10963">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4044"
+ transform="matrix(0,-1,1,0,-59.999911,-168.00002)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3851"
+ width="12"
+ height="7"
+ x="-76.499878"
+ y="-177.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ transform="translate(-317,-410)"
+ id="g3853"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3855"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3857"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3859"
+ width="10"
+ height="5.0000305"
+ x="-75.499878"
+ y="-176.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g3861"
+ transform="translate(-377,-420)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ y="489.5"
+ x="186.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3863"
+ style="fill:url(#linearGradient4702);fill-opacity:1;stroke:url(#linearGradient4704);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="191.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3865"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3867"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="201.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3869"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-491.5"
+ x="-209.49998"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3871"
+ style="fill:url(#linearGradient4706);fill-opacity:1;stroke:url(#linearGradient4708);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/align-left.png b/files_svgedit/svg-edit/images/align-left.png
new file mode 100644
index 000000000..41fa8bcc1
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-left.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/align-left.svg b/files_svgedit/svg-edit/images/align-left.svg
new file mode 100644
index 000000000..b1a24a5a6
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-left.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11272"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-horisontal-left.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-left.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs11274">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient4716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient4714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient4712"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient4710"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="14.269093"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata11277">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4065"
+ transform="matrix(0,-1,1,0,8.9287758e-5,51.99998)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ id="g3883"
+ transform="translate(-127,-473)"
+ style="fill:#d3d7cf;stroke:#888a85;display:inline"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,1,1,0,0,0)"
+ y="169.5"
+ x="475.50012"
+ height="7"
+ width="12"
+ id="rect3885"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="0"
+ rx="0"
+ transform="matrix(0,1,1,0,0,0)"
+ y="170.5"
+ x="476.50012"
+ height="5.0000305"
+ width="10"
+ id="rect3887"
+ style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3889"
+ transform="translate(-97,-469)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3891"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3893"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3903"
+ transform="translate(-157,-488)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3905"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient4710);fill-opacity:1;stroke:url(#linearGradient4712);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3907"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient4714);fill-opacity:1;stroke:url(#linearGradient4716);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3909"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/align-middle.png b/files_svgedit/svg-edit/images/align-middle.png
new file mode 100644
index 000000000..f72bbb799
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-middle.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/align-middle.svg b/files_svgedit/svg-edit/images/align-middle.svg
new file mode 100644
index 000000000..d2b42e6a3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-middle.svg
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10625"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-vertical-center.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-vertical-center.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs10627">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6962"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-395.9999,-981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6958"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6956"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata10630">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g6849"
+ transform="translate(-29.999893,91.000089)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1933"
+ width="12"
+ height="7"
+ x="73.500122"
+ y="42.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ transform="translate(-97,-560)"
+ id="g2063"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect1935"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect1937"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1939"
+ width="10"
+ height="5.0000305"
+ x="74.500122"
+ y="43.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g2992"
+ transform="translate(-157,-570)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="489.5"
+ x="186.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect2994"
+ style="fill:url(#linearGradient6956);fill-opacity:1;stroke:url(#linearGradient6958);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="191.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect2996"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect2998"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="489.5"
+ x="201.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3000"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-491.5"
+ x="-209.49998"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3002"
+ style="fill:url(#linearGradient6960);fill-opacity:1;stroke:url(#linearGradient6962);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/align-right.png b/files_svgedit/svg-edit/images/align-right.png
new file mode 100644
index 000000000..5ca99caa4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-right.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/align-right.svg b/files_svgedit/svg-edit/images/align-right.svg
new file mode 100644
index 000000000..c2f8f19e3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-right.svg
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg11187"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-horisontal-right.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="TRUE"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-horisontal-right.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs11189">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient4732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient4730"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient4728"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient4726"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata11192">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4025"
+ transform="matrix(0,-1,1,0,-60.999914,-198.00011)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3873"
+ width="12"
+ height="7"
+ x="-80.499878"
+ y="-207.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3875"
+ width="10"
+ height="5.0000305"
+ x="-79.499878"
+ y="-206.5"
+ transform="matrix(0,-1,1,0,0,0)"
+ rx="0"
+ ry="0"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <g
+ id="g3877"
+ transform="translate(-347,-409)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3879"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3881"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3919"
+ transform="translate(-407,-410)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ style="display:inline">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3921"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient4726);fill-opacity:1;stroke:url(#linearGradient4728);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3923"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient4730);fill-opacity:1;stroke:url(#linearGradient4732);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3925"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/align-top.png b/files_svgedit/svg-edit/images/align-top.png
new file mode 100644
index 000000000..51bfc2ecd
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-top.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/align-top.svg b/files_svgedit/svg-edit/images/align-top.svg
new file mode 100644
index 000000000..f314f32d1
--- /dev/null
+++ b/files_svgedit/svg-edit/images/align-top.svg
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg10699"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/inkscape/22x22/actions"
+ sodipodi:docname="align-vertical-bottom.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/inkscape/22x22/actions/align-vertical-bottom.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs10701">
+ <linearGradient
+ id="linearGradient2968"
+ inkscape:collect="always">
+ <stop
+ id="stop2970"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2972"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2968"
+ id="linearGradient6954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2974"
+ inkscape:collect="always">
+ <stop
+ id="stop2976"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2978"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2974"
+ id="linearGradient6952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,-1,395.9999,981)"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ <linearGradient
+ id="linearGradient2986"
+ inkscape:collect="always">
+ <stop
+ id="stop2988"
+ offset="0"
+ style="stop-color:#ce5c00;stop-opacity:1" />
+ <stop
+ id="stop2990"
+ offset="1"
+ style="stop-color:#ce5c00;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2986"
+ id="linearGradient6950"
+ gradientUnits="userSpaceOnUse"
+ x1="187.60938"
+ y1="489.35938"
+ x2="186.93732"
+ y2="489.35938" />
+ <linearGradient
+ id="linearGradient2980"
+ inkscape:collect="always">
+ <stop
+ id="stop2982"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop2984"
+ offset="1"
+ style="stop-color:#fcaf3e;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2980"
+ id="linearGradient6948"
+ gradientUnits="userSpaceOnUse"
+ x1="187.81554"
+ y1="489.54688"
+ x2="187.1716"
+ y2="489.54688" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.197802"
+ inkscape:cx="16"
+ inkscape:cy="16"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="797"
+ inkscape:window-height="628"
+ inkscape:window-x="0"
+ inkscape:window-y="47" />
+ <metadata
+ id="metadata10704">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g6862"
+ transform="translate(-59.99998,90)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ id="g3084"
+ transform="translate(-97,-563)"
+ style="fill:#d3d7cf;stroke:#888a85"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,1,1,0,0,0)"
+ y="169.5"
+ x="475.50012"
+ height="7"
+ width="12"
+ id="rect3086"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="0"
+ rx="0"
+ transform="matrix(0,1,1,0,0,0)"
+ y="170.5"
+ x="476.50012"
+ height="5.0000305"
+ width="10"
+ id="rect3088"
+ style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3090"
+ transform="translate(-67,-559)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="129.49626"
+ x="-489.49979"
+ height="7.0035982"
+ width="17.999748"
+ id="rect3092"
+ style="color:#000000;fill:#d3d7cf;fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00024867;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <rect
+ transform="matrix(0,-1,1,0,0,0)"
+ y="130.50006"
+ x="-488.50009"
+ height="4.9998937"
+ width="15.999757"
+ id="rect3094"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00024891;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ rx="0"
+ ry="0" />
+ </g>
+ <g
+ id="g3262"
+ transform="translate(-127,-578)"
+ inkscape:export-filename="/home/lapo/Desktop/align-distribute.tar.gz_FILES/align-stuff.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <rect
+ y="489.5"
+ x="196.49989"
+ height="1.9999999"
+ width="3.0000916"
+ id="rect3264"
+ style="fill:#fcaf3e;fill-opacity:1;stroke:#ce5c00;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient6948);fill-opacity:1;stroke:url(#linearGradient6950);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 197.49998,491.5 L 186.49989,491.5 L 186.49989,489.5 L 197.49998,489.5"
+ id="path3266"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient6952);fill-opacity:1;stroke:url(#linearGradient6954);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.49989,489.5 L 209.49998,489.5 L 209.49998,491.5 L 198.49989,491.5"
+ id="path3268"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/bold.png b/files_svgedit/svg-edit/images/bold.png
new file mode 100644
index 000000000..19ac5bbd7
--- /dev/null
+++ b/files_svgedit/svg-edit/images/bold.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/cancel.png b/files_svgedit/svg-edit/images/cancel.png
new file mode 100644
index 000000000..8595f5d97
--- /dev/null
+++ b/files_svgedit/svg-edit/images/cancel.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/circle.png b/files_svgedit/svg-edit/images/circle.png
new file mode 100644
index 000000000..e7bd228b7
--- /dev/null
+++ b/files_svgedit/svg-edit/images/circle.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/clear.png b/files_svgedit/svg-edit/images/clear.png
new file mode 100644
index 000000000..514710d12
--- /dev/null
+++ b/files_svgedit/svg-edit/images/clear.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/clone.png b/files_svgedit/svg-edit/images/clone.png
new file mode 100644
index 000000000..c8713c80b
--- /dev/null
+++ b/files_svgedit/svg-edit/images/clone.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/conn.svg b/files_svgedit/svg-edit/images/conn.svg
new file mode 100644
index 000000000..1af5e9a4d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/conn.svg
@@ -0,0 +1,29 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <g id="mode_connect">
+ <svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+
+ <line stroke-width="5" fill="none" stroke="#000000" id="svg_2" y2="121" x2="136" y1="7" x1="136">
+ <stop stop-opacity="1" stop-color="#4687a0"/>
+ <stop stop-opacity="1" stop-color="#ffffff"/>
+ </line>
+ <linearGradient y2="0.18359" x2="0.29688" y1="0.92188" x1="0.62109" id="svg_3">
+ <stop stop-opacity="1" stop-color="#417dad" offset="0"/>
+ <stop stop-opacity="1" stop-color="#ffffff" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <line x1="5.64676" y1="5.60056" x2="18.50037" y2="18.62557" id="svg_5" stroke="#000000" fill="none"/>
+ <rect opacity="0.75" stroke-width="0.5" x="0.5" y="0.5" width="9.625" height="5.125" id="svg_1" fill="url(#svg_3)" stroke="#000000"/>
+ <rect opacity="0.75" id="svg_4" stroke-width="0.5" x="13.75" y="18.25" width="9.625" height="5.125" fill="url(#svg_3)" stroke="#000000"/>
+ <g id="svg_9">
+ <path d="m14.57119,9.12143l-0.98244,5.18852l2.70861,-4.36084" id="svg_6" fill="#a0a0a0" stroke="#000000"/>
+ <path d="m14.27564,6.76258c-0.25872,0.72562 -0.40735,1.65632 -0.33812,2.15432l2.90784,1.2509c0.30961,-0.21212 1.08198,-1.1814 1.08198,-1.73736" id="svg_7" fill="url(#svg_3)" stroke="#000000"/>
+ <path d="m16.28893,0.37519l-2.46413,5.9304l4.76481,2.39435l2.13178,-4.96735" id="svg_8" fill="url(#svg_3)" stroke="#000000"/>
+ </g>
+ </g>
+ </svg>
+ </g>
+ <g id="svg_eof"/>
+</svg> \ No newline at end of file
diff --git a/files_svgedit/svg-edit/images/copy.png b/files_svgedit/svg-edit/images/copy.png
new file mode 100644
index 000000000..23ba357bc
--- /dev/null
+++ b/files_svgedit/svg-edit/images/copy.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/cut.png b/files_svgedit/svg-edit/images/cut.png
new file mode 100644
index 000000000..d586098e2
--- /dev/null
+++ b/files_svgedit/svg-edit/images/cut.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/delete.png b/files_svgedit/svg-edit/images/delete.png
new file mode 100644
index 000000000..e71dd96fe
--- /dev/null
+++ b/files_svgedit/svg-edit/images/delete.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/document-properties.png b/files_svgedit/svg-edit/images/document-properties.png
new file mode 100644
index 000000000..a5ad72875
--- /dev/null
+++ b/files_svgedit/svg-edit/images/document-properties.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/dropdown.gif b/files_svgedit/svg-edit/images/dropdown.gif
new file mode 100644
index 000000000..4180d5eba
--- /dev/null
+++ b/files_svgedit/svg-edit/images/dropdown.gif
Binary files differ
diff --git a/files_svgedit/svg-edit/images/ellipse.png b/files_svgedit/svg-edit/images/ellipse.png
new file mode 100644
index 000000000..1402a2d8d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/ellipse.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/eye.png b/files_svgedit/svg-edit/images/eye.png
new file mode 100644
index 000000000..564a1a971
--- /dev/null
+++ b/files_svgedit/svg-edit/images/eye.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/fhpath.png b/files_svgedit/svg-edit/images/fhpath.png
new file mode 100644
index 000000000..9255cc50f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/fhpath.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/flyouth.png b/files_svgedit/svg-edit/images/flyouth.png
new file mode 100644
index 000000000..5822ed833
--- /dev/null
+++ b/files_svgedit/svg-edit/images/flyouth.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/flyup.gif b/files_svgedit/svg-edit/images/flyup.gif
new file mode 100644
index 000000000..c027e137c
--- /dev/null
+++ b/files_svgedit/svg-edit/images/flyup.gif
Binary files differ
diff --git a/files_svgedit/svg-edit/images/freehand-circle.png b/files_svgedit/svg-edit/images/freehand-circle.png
new file mode 100644
index 000000000..43cb17f90
--- /dev/null
+++ b/files_svgedit/svg-edit/images/freehand-circle.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/freehand-square.png b/files_svgedit/svg-edit/images/freehand-square.png
new file mode 100644
index 000000000..328fc77d1
--- /dev/null
+++ b/files_svgedit/svg-edit/images/freehand-square.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/go-down.png b/files_svgedit/svg-edit/images/go-down.png
new file mode 100644
index 000000000..3dd7fccdf
--- /dev/null
+++ b/files_svgedit/svg-edit/images/go-down.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/go-up.png b/files_svgedit/svg-edit/images/go-up.png
new file mode 100644
index 000000000..fa9a7d71b
--- /dev/null
+++ b/files_svgedit/svg-edit/images/go-up.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/image.png b/files_svgedit/svg-edit/images/image.png
new file mode 100644
index 000000000..10f46719d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/image.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/italic.png b/files_svgedit/svg-edit/images/italic.png
new file mode 100644
index 000000000..63485dea9
--- /dev/null
+++ b/files_svgedit/svg-edit/images/italic.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/line.png b/files_svgedit/svg-edit/images/line.png
new file mode 100644
index 000000000..37975742e
--- /dev/null
+++ b/files_svgedit/svg-edit/images/line.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/link_controls.png b/files_svgedit/svg-edit/images/link_controls.png
new file mode 100644
index 000000000..516a094b3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/link_controls.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/logo.png b/files_svgedit/svg-edit/images/logo.png
new file mode 100644
index 000000000..7c04931c3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/logo.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/logo.svg b/files_svgedit/svg-edit/images/logo.svg
new file mode 100644
index 000000000..e71308bea
--- /dev/null
+++ b/files_svgedit/svg-edit/images/logo.svg
@@ -0,0 +1,32 @@
+<svg viewBox="0 0 478 472" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient id="svg_5" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffe0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#edc39c" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_10" x1="0.57031" y1="0.78125" x2="0.28906" y2="0.41406">
+ <stop offset="0" stop-color="#ff7f00" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffff00"/>
+ </linearGradient>
+ <linearGradient id="svg_18" x1="0.37891" y1="0.35938" x2="1" y2="1">
+ <stop offset="0" stop-color="#e0e0e0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#666666" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <path d="m68.82031,270.04688l-22,-33l17,-35l34,2l25,15l7,-35l28,-16l25,12l100,102l21,23l-15,35l-36,9l20,49l-31,24l-49,-17l-1,31l-33,21l-31,-19l-13,-35l-30,21l-30,-9l-5,-35l16,-31l-32,-6l-15,-19l3,-36l47,-18z" id="svg_19" fill="#ffffff"/>
+ <path fill="#1a171a" fill-rule="nonzero" id="path2902" d="m158.96452,155.03685c-25.02071,0 -45.37077,20.35121 -45.37077,45.3775c0,0.72217 0.01794,1.4399 0.0471,2.15645c-0.49339,-0.53604 -0.99355,-1.06085 -1.50603,-1.58452c-8.56077,-8.55519 -19.95982,-13.28413 -32.07432,-13.28413c-12.12122,0 -23.52027,4.72334 -32.08778,13.29646c-17.69347,17.69464 -17.69347,46.4619 0,64.17445c0.51809,0.51697 1.0485,1.0126 1.59015,1.50601c-0.72891,-0.03586 -1.45782,-0.04822 -2.19234,-0.04822c-25.02071,0 -45.37189,20.35117 -45.37189,45.37747c0,25.01398 20.35119,45.36517 45.37189,45.36517c0.72891,0 1.45221,-0.01236 2.1744,-0.04828c-0.5293,0.48221 -1.05412,0.98801 -1.56547,1.49368c-17.70021,17.68906 -17.70021,46.48654 -0.00628,64.18677c8.57872,8.56747 19.96655,13.2785 32.08778,13.2785c12.1145,0 23.5012,-4.71103 32.07433,-13.2785c0.51247,-0.51694 1.01823,-1.04849 1.50603,-1.57895c-0.02915,0.71213 -0.04709,1.44669 -0.04709,2.15759c0,25.01511 20.35007,45.37747 45.37077,45.37747c25.01398,0 45.37079,-20.3624 45.37079,-45.37747c0,-0.7222 -0.01689,-1.44553 -0.05266,-2.18112c0.48105,0.52933 0.97562,1.04849 1.48697,1.56662c8.57982,8.57977 19.97775,13.2908 32.1057,13.2908c12.11003,0 23.51358,-4.71103 32.0687,-13.2785c17.68906,-17.70013 17.68906,-46.48538 0,-64.17441c-0.50577,-0.4946 -1.01141,-1.00034 -1.54306,-1.48248c0.69983,0.03592 1.42316,0.04828 2.16992,0.04828c25.01514,0 45.35284,-20.35123 45.35284,-45.36517c0,-25.02631 -20.33774,-45.37747 -45.35284,-45.37747c-0.74683,0 -1.47009,0.01236 -2.19345,0.04822c0.53152,-0.49341 1.06082,-0.98904 1.59128,-1.50601c8.55521,-8.55521 13.2785,-19.94186 13.2785,-32.07545c0,-12.12793 -4.72336,-23.52028 -13.30319,-32.0934c-8.55515,-8.56076 -19.95866,-13.2841 -32.0687,-13.2841c-12.12122,0 -23.52025,4.72334 -32.08777,13.2841c-0.51137,0.5181 -1.01822,1.04851 -1.5049,1.57895c0.03586,-0.72331 0.05266,-1.43991 0.05266,-2.16881c0,-25.02629 -20.35681,-45.3775 -45.37079,-45.3775m0,20.71901c13.61607,0 24.65851,11.03122 24.65851,24.65849c0,6.62749 -2.651,12.62137 -6.9101,17.04979l0,51.67419l36.53975,-36.53523c0.12001,-6.14418 2.48277,-12.24686 7.18146,-16.94667c4.81305,-4.81305 11.12094,-7.22409 17.44116,-7.22409c6.30228,0 12.61577,2.41104 17.43552,7.22409c9.62166,9.63287 9.62166,25.24948 0,34.87669c-4.69977,4.68634 -10.80803,7.04915 -16.95334,7.18147l-36.5341,36.53305l51.66742,0c4.42841,-4.25351 10.42905,-6.90451 17.08008,-6.90451c13.59137,0 24.62933,11.03799 24.62933,24.66525c0,13.61606 -11.03796,24.66519 -24.62933,24.66519c-6.65106,0 -12.65167,-2.66333 -17.08008,-6.91681l-51.64836,0l36.50273,36.50946c6.16995,0.14465 12.26587,2.50522 16.96568,7.20618c9.6216,9.61487 9.6216,25.23151 0,34.85757c-4.80856,4.81979 -11.13327,7.22974 -17.43556,7.22974c-6.32019,0 -12.63371,-2.40991 -17.44786,-7.22974c-4.68074,-4.68744 -7.04802,-10.79572 -7.17473,-16.94098l-36.53975,-36.53415l0,51.66742c4.25908,4.44635 6.9101,10.43466 6.9101,17.0621c0,13.62729 -11.04243,24.66415 -24.65851,24.66415c-13.62166,0 -24.65848,-11.0369 -24.65848,-24.66415c0,-6.62744 2.64539,-12.61575 6.90335,-17.0621l0,-51.66742l-36.53864,36.54648c-0.12672,6.14413 -2.48838,12.26477 -7.18147,16.94098c-4.81416,4.81873 -11.12206,7.22974 -17.42882,7.22974c-6.31461,0 -12.6225,-2.41101 -17.43555,-7.22974c-9.63284,-9.62833 -9.63284,-25.24277 0,-34.8699c4.68073,-4.67627 10.79012,-7.05026 16.94101,-7.18262l36.533,-36.53302l-51.66632,0c-4.44075,4.25348 -10.42902,6.91681 -17.06211,6.91681c-13.61606,0 -24.65288,-11.04913 -24.65288,-24.66519c0,-13.62726 11.03682,-24.66525 24.65288,-24.66525c6.63309,0 12.62136,2.651 17.06211,6.90451l51.68537,0l-36.55208,-36.54538c-6.14527,-0.12 -12.25354,-2.49403 -16.94775,-7.19377c-9.62611,-9.61493 -9.62611,-25.23715 0,-34.86441c4.81419,-4.81305 11.12769,-7.22406 17.44228,-7.22406c6.30676,0 12.61465,2.41101 17.42883,7.22406c4.69978,4.69307 7.06034,10.80246 7.18144,16.94777l36.5386,36.53299l0,-51.66074c-4.25795,-4.42841 -6.90334,-10.42229 -6.90334,-17.04979c0,-13.62726 11.03682,-24.65848 24.65848,-24.65848"/>
+ <path d="m188.82031,210.04688l16,-47l155,-148l107,100l-158,156.99999l-44,12l-76,-74z" id="svg_6" fill="url(#svg_10)" stroke="#ffffff" stroke-width="0"/>
+ <path d="m335.57031,40.29688c-11.5,39.75 55.5,115.25 109.25,98.75l21,-20.99999l-103,-101l-27.25,23.25z" id="svg_11" fill="url(#svg_18)" stroke="#ffffff" stroke-width="0"/>
+ <rect x="272.80404" y="20.76382" width="42.35197" height="232.66835" id="svg_13" fill="#ffffff" stroke="#ffffff" stroke-width="0" transform="rotate(45.9094, 293.98, 137.1)" opacity="0.4"/>
+ <rect x="282.80404" y="22.76382" width="14" height="232.66835" fill="#ffffff" stroke="#ffffff" stroke-width="0" transform="rotate(45.9094, 289.805, 139.1)" opacity="0.4" id="svg_14"/>
+ <ellipse cx="415.13312" cy="64.38066" id="svg_12" fill="#ea7598" stroke="#ffffff" stroke-width="0" rx="67.79251" ry="34.82026" transform="rotate(39.4735, 415.133, 64.379)"/>
+ <path d="m212.07031,166.04688c-8.5,47 36.25,103.75 99.25,96.75l-152.5,53.25l53.25,-150z" id="svg_4" fill="url(#svg_5)" stroke="#ffffff" stroke-width="0"/>
+ <path d="m181.32031,242.54688c0.5,20.5 26.75,45 46.75,48.5l-66.25,20l19.5,-68.5z" id="svg_3" fill="#27382f" stroke="#ffffff" stroke-width="0"/>
+ </g>
+ <g>
+ <title>Layer 2</title>
+ <path d="m152.82031,317.04688l51,-152l157,-153c40,-12.00001 118,48 105,105l-157,152.99999l-156,47z" id="svg_1" fill="none" stroke="#800000" stroke-width="17"/>
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/move_bottom.png b/files_svgedit/svg-edit/images/move_bottom.png
new file mode 100644
index 000000000..6b1325075
--- /dev/null
+++ b/files_svgedit/svg-edit/images/move_bottom.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/move_top.png b/files_svgedit/svg-edit/images/move_top.png
new file mode 100644
index 000000000..9d54b6a48
--- /dev/null
+++ b/files_svgedit/svg-edit/images/move_top.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/node_clone.png b/files_svgedit/svg-edit/images/node_clone.png
new file mode 100755
index 000000000..2187d0739
--- /dev/null
+++ b/files_svgedit/svg-edit/images/node_clone.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/node_delete.png b/files_svgedit/svg-edit/images/node_delete.png
new file mode 100755
index 000000000..ea3f7e687
--- /dev/null
+++ b/files_svgedit/svg-edit/images/node_delete.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/none.png b/files_svgedit/svg-edit/images/none.png
new file mode 100644
index 000000000..04c0765f6
--- /dev/null
+++ b/files_svgedit/svg-edit/images/none.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/open.png b/files_svgedit/svg-edit/images/open.png
new file mode 100644
index 000000000..254a6b814
--- /dev/null
+++ b/files_svgedit/svg-edit/images/open.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/paste.png b/files_svgedit/svg-edit/images/paste.png
new file mode 100644
index 000000000..ad983155c
--- /dev/null
+++ b/files_svgedit/svg-edit/images/paste.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/path.png b/files_svgedit/svg-edit/images/path.png
new file mode 100644
index 000000000..c75a8d712
--- /dev/null
+++ b/files_svgedit/svg-edit/images/path.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/polygon.png b/files_svgedit/svg-edit/images/polygon.png
new file mode 100644
index 000000000..bcd640c20
--- /dev/null
+++ b/files_svgedit/svg-edit/images/polygon.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/polygon.svg b/files_svgedit/svg-edit/images/polygon.svg
new file mode 100644
index 000000000..a7f955d8f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/polygon.svg
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="draw-polygon.svg"
+ sodipodi:docbase="/home/andreas/projekt/tango/22"
+ inkscape:version="0.42"
+ id="svg8728"
+ height="22.000000px"
+ width="22.000000px"
+ inkscape:export-filename="/home/andreas/projekt/tango/22/draw-polygon.png"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-ydpi="90.000000">
+ <defs
+ id="defs3">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3941">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3943" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3945" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6581">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop6583" />
+ <stop
+ style="stop-color:#e0e0de;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop6585" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient14920">
+ <stop
+ id="stop14922"
+ offset="0"
+ style="stop-color:#5a7aa4;stop-opacity:1;" />
+ <stop
+ id="stop14924"
+ offset="1.0000000"
+ style="stop-color:#1f2b3a;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient13390">
+ <stop
+ id="stop13392"
+ offset="0.0000000"
+ style="stop-color:#81a2cd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop13394"
+ offset="1.0000000"
+ style="stop-color:#2a415f;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10325">
+ <stop
+ id="stop10327"
+ offset="0"
+ style="stop-color:#5a7aa4;stop-opacity:1;" />
+ <stop
+ id="stop10329"
+ offset="1.0000000"
+ style="stop-color:#455e7e;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="39.486301"
+ x2="37.746555"
+ y1="23.992306"
+ x1="23.598076"
+ gradientTransform="matrix(0.363308,0,0,0.363571,1.976073,1.180651)"
+ id="linearGradient13217"
+ xlink:href="#linearGradient6581"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3941"
+ id="radialGradient3947"
+ cx="2.25"
+ cy="16"
+ fx="2.25"
+ fy="16"
+ r="16.875"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.333333,-5.774893e-15,10.66667)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6581"
+ id="linearGradient2398"
+ x1="10.769515"
+ y1="8.7196503"
+ x2="15.923767"
+ y2="15.039417"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6581"
+ id="linearGradient2403"
+ gradientUnits="userSpaceOnUse"
+ x1="10.769515"
+ y1="8.7196503"
+ x2="15.923767"
+ y2="15.039417"
+ gradientTransform="matrix(0.874941,0.000000,0.000000,0.868551,1.339139,1.349650)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6581"
+ id="linearGradient2405"
+ gradientUnits="userSpaceOnUse"
+ x1="10.769515"
+ y1="8.7196503"
+ x2="15.923767"
+ y2="15.039417"
+ gradientTransform="matrix(1.001575,0.000000,0.000000,1.000000,-3.040037e-3,0.000000)" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="25"
+ inkscape:window-x="0"
+ inkscape:window-height="949"
+ inkscape:window-width="1280"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:cy="10.249014"
+ inkscape:cx="16.435231"
+ inkscape:zoom="15.999999"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="0.08235294"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:showpageshadow="false"
+ stroke="#888a85" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Draw Rectangle</dc:title>
+ <dc:date>2005-10-10</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Andreas Nilsson</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>draw</rdf:li>
+ <rdf:li>rectangle</rdf:li>
+ <rdf:li>square</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.60000000;color:#000000;fill:url(#radialGradient3947);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:block;overflow:visible"
+ id="path2193"
+ sodipodi:cx="2.2500000"
+ sodipodi:cy="16.000000"
+ sodipodi:rx="16.875000"
+ sodipodi:ry="5.6250000"
+ d="M 19.125000 16.000000 A 16.875000 5.6250000 0 1 1 -14.625000,16.000000 A 16.875000 5.6250000 0 1 1 19.125000 16.000000 z"
+ transform="matrix(0.503704,0.000000,0.000000,0.349014,9.366667,12.45257)" />
+ <path
+ style="fill:url(#linearGradient2405);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#888a85;stroke-width:1.0000002px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 10.376363,3.6237647 L 18.439333,9.5822222 L 15.644242,18.503298 L 5.3933717,18.503298 L 2.5694122,9.5814367 L 10.376363,3.6237647 z "
+ id="path1661"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient2403);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#fdfdfb;stroke-width:0.99999976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 10.383801,4.6223366 L 17.428917,9.8682235 L 14.894231,17.502140 L 6.1335005,17.494329 L 3.6135882,9.9131875 L 10.383801,4.6223366 z "
+ id="path2401"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/rect.png b/files_svgedit/svg-edit/images/rect.png
new file mode 100644
index 000000000..4fd15f837
--- /dev/null
+++ b/files_svgedit/svg-edit/images/rect.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/redo.png b/files_svgedit/svg-edit/images/redo.png
new file mode 100644
index 000000000..1169fc3b4
--- /dev/null
+++ b/files_svgedit/svg-edit/images/redo.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/reorient.png b/files_svgedit/svg-edit/images/reorient.png
new file mode 100644
index 000000000..9455a82c0
--- /dev/null
+++ b/files_svgedit/svg-edit/images/reorient.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/rotate.png b/files_svgedit/svg-edit/images/rotate.png
new file mode 100644
index 000000000..afa68c6fd
--- /dev/null
+++ b/files_svgedit/svg-edit/images/rotate.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/save.png b/files_svgedit/svg-edit/images/save.png
new file mode 100644
index 000000000..9c4c8d9da
--- /dev/null
+++ b/files_svgedit/svg-edit/images/save.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/select.png b/files_svgedit/svg-edit/images/select.png
new file mode 100644
index 000000000..1d741f16d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/select.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/select_node.png b/files_svgedit/svg-edit/images/select_node.png
new file mode 100644
index 000000000..5ed97db95
--- /dev/null
+++ b/files_svgedit/svg-edit/images/select_node.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/sep.png b/files_svgedit/svg-edit/images/sep.png
new file mode 100644
index 000000000..6b9027779
--- /dev/null
+++ b/files_svgedit/svg-edit/images/sep.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/shape_group.png b/files_svgedit/svg-edit/images/shape_group.png
new file mode 100644
index 000000000..bb2ff516d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/shape_group.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/shape_ungroup.png b/files_svgedit/svg-edit/images/shape_ungroup.png
new file mode 100644
index 000000000..3a6f369a5
--- /dev/null
+++ b/files_svgedit/svg-edit/images/shape_ungroup.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/source.png b/files_svgedit/svg-edit/images/source.png
new file mode 100644
index 000000000..c1f079449
--- /dev/null
+++ b/files_svgedit/svg-edit/images/source.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/spinbtn_updn_big.png b/files_svgedit/svg-edit/images/spinbtn_updn_big.png
new file mode 100644
index 000000000..3873736f8
--- /dev/null
+++ b/files_svgedit/svg-edit/images/spinbtn_updn_big.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/square.png b/files_svgedit/svg-edit/images/square.png
new file mode 100644
index 000000000..0ca71a67f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/square.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/svg_edit_icons.svg b/files_svgedit/svg-edit/images/svg_edit_icons.svg
new file mode 100644
index 000000000..0ada459df
--- /dev/null
+++ b/files_svgedit/svg-edit/images/svg_edit_icons.svg
@@ -0,0 +1,1034 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<!-- All images created with SVG-edit - http://svg-edit.googlecode.com/ -->
+
+<g id="logo">
+<svg viewBox="0 0 478 472" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient id="svg_5" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffe0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#edc39c" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_10" x1="0.57031" y1="0.78125" x2="0.28906" y2="0.41406">
+ <stop offset="0" stop-color="#ff7f00" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffff00"/>
+ </linearGradient>
+ <linearGradient id="svg_18" x1="0.37891" y1="0.35938" x2="1" y2="1">
+ <stop offset="0" stop-color="#e0e0e0" stop-opacity="1"/>
+ <stop offset="1" stop-color="#666666" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path d="m68.82031,270.04688l-22,-33l17,-35l34,2l25,15l7,-35l28,-16l25,12l100,102l21,23l-15,35l-36,9l20,49l-31,24l-49,-17l-1,31l-33,21l-31,-19l-13,-35l-30,21l-30,-9l-5,-35l16,-31l-32,-6l-15,-19l3,-36l47,-18z" id="svg_19" fill="#ffffff"/>
+ <path fill="#1a171a" fill-rule="nonzero" id="path2902" d="m158.96452,155.03685c-25.02071,0 -45.37077,20.35121 -45.37077,45.3775c0,0.72217 0.01794,1.4399 0.0471,2.15645c-0.49339,-0.53604 -0.99355,-1.06085 -1.50603,-1.58452c-8.56077,-8.55519 -19.95982,-13.28413 -32.07432,-13.28413c-12.12122,0 -23.52027,4.72334 -32.08778,13.29646c-17.69347,17.69464 -17.69347,46.4619 0,64.17445c0.51809,0.51697 1.0485,1.0126 1.59015,1.50601c-0.72891,-0.03586 -1.45782,-0.04822 -2.19234,-0.04822c-25.02071,0 -45.37189,20.35117 -45.37189,45.37747c0,25.01398 20.35119,45.36517 45.37189,45.36517c0.72891,0 1.45221,-0.01236 2.1744,-0.04828c-0.5293,0.48221 -1.05412,0.98801 -1.56547,1.49368c-17.70021,17.68906 -17.70021,46.48654 -0.00628,64.18677c8.57872,8.56747 19.96655,13.2785 32.08778,13.2785c12.1145,0 23.5012,-4.71103 32.07433,-13.2785c0.51247,-0.51694 1.01823,-1.04849 1.50603,-1.57895c-0.02915,0.71213 -0.04709,1.44669 -0.04709,2.15759c0,25.01511 20.35007,45.37747 45.37077,45.37747c25.01398,0 45.37079,-20.3624 45.37079,-45.37747c0,-0.7222 -0.01689,-1.44553 -0.05266,-2.18112c0.48105,0.52933 0.97562,1.04849 1.48697,1.56662c8.57982,8.57977 19.97775,13.2908 32.1057,13.2908c12.11003,0 23.51358,-4.71103 32.0687,-13.2785c17.68906,-17.70013 17.68906,-46.48538 0,-64.17441c-0.50577,-0.4946 -1.01141,-1.00034 -1.54306,-1.48248c0.69983,0.03592 1.42316,0.04828 2.16992,0.04828c25.01514,0 45.35284,-20.35123 45.35284,-45.36517c0,-25.02631 -20.33774,-45.37747 -45.35284,-45.37747c-0.74683,0 -1.47009,0.01236 -2.19345,0.04822c0.53152,-0.49341 1.06082,-0.98904 1.59128,-1.50601c8.55521,-8.55521 13.2785,-19.94186 13.2785,-32.07545c0,-12.12793 -4.72336,-23.52028 -13.30319,-32.0934c-8.55515,-8.56076 -19.95866,-13.2841 -32.0687,-13.2841c-12.12122,0 -23.52025,4.72334 -32.08777,13.2841c-0.51137,0.5181 -1.01822,1.04851 -1.5049,1.57895c0.03586,-0.72331 0.05266,-1.43991 0.05266,-2.16881c0,-25.02629 -20.35681,-45.3775 -45.37079,-45.3775m0,20.71901c13.61607,0 24.65851,11.03122 24.65851,24.65849c0,6.62749 -2.651,12.62137 -6.9101,17.04979l0,51.67419l36.53975,-36.53523c0.12001,-6.14418 2.48277,-12.24686 7.18146,-16.94667c4.81305,-4.81305 11.12094,-7.22409 17.44116,-7.22409c6.30228,0 12.61577,2.41104 17.43552,7.22409c9.62166,9.63287 9.62166,25.24948 0,34.87669c-4.69977,4.68634 -10.80803,7.04915 -16.95334,7.18147l-36.5341,36.53305l51.66742,0c4.42841,-4.25351 10.42905,-6.90451 17.08008,-6.90451c13.59137,0 24.62933,11.03799 24.62933,24.66525c0,13.61606 -11.03796,24.66519 -24.62933,24.66519c-6.65106,0 -12.65167,-2.66333 -17.08008,-6.91681l-51.64836,0l36.50273,36.50946c6.16995,0.14465 12.26587,2.50522 16.96568,7.20618c9.6216,9.61487 9.6216,25.23151 0,34.85757c-4.80856,4.81979 -11.13327,7.22974 -17.43556,7.22974c-6.32019,0 -12.63371,-2.40991 -17.44786,-7.22974c-4.68074,-4.68744 -7.04802,-10.79572 -7.17473,-16.94098l-36.53975,-36.53415l0,51.66742c4.25908,4.44635 6.9101,10.43466 6.9101,17.0621c0,13.62729 -11.04243,24.66415 -24.65851,24.66415c-13.62166,0 -24.65848,-11.0369 -24.65848,-24.66415c0,-6.62744 2.64539,-12.61575 6.90335,-17.0621l0,-51.66742l-36.53864,36.54648c-0.12672,6.14413 -2.48838,12.26477 -7.18147,16.94098c-4.81416,4.81873 -11.12206,7.22974 -17.42882,7.22974c-6.31461,0 -12.6225,-2.41101 -17.43555,-7.22974c-9.63284,-9.62833 -9.63284,-25.24277 0,-34.8699c4.68073,-4.67627 10.79012,-7.05026 16.94101,-7.18262l36.533,-36.53302l-51.66632,0c-4.44075,4.25348 -10.42902,6.91681 -17.06211,6.91681c-13.61606,0 -24.65288,-11.04913 -24.65288,-24.66519c0,-13.62726 11.03682,-24.66525 24.65288,-24.66525c6.63309,0 12.62136,2.651 17.06211,6.90451l51.68537,0l-36.55208,-36.54538c-6.14527,-0.12 -12.25354,-2.49403 -16.94775,-7.19377c-9.62611,-9.61493 -9.62611,-25.23715 0,-34.86441c4.81419,-4.81305 11.12769,-7.22406 17.44228,-7.22406c6.30676,0 12.61465,2.41101 17.42883,7.22406c4.69978,4.69307 7.06034,10.80246 7.18144,16.94777l36.5386,36.53299l0,-51.66074c-4.25795,-4.42841 -6.90334,-10.42229 -6.90334,-17.04979c0,-13.62726 11.03682,-24.65848 24.65848,-24.65848"/>
+ <path d="m188.82031,210.04688l16,-47l155,-148l107,100l-158,156.99999l-44,12l-76,-74z" id="svg_6" fill="url(#svg_10)" stroke="none"/>
+ <path d="m335.57031,40.29688c-11.5,39.75 55.5,115.25 109.25,98.75l21,-20.99999l-103,-101l-27.25,23.25z" id="svg_11" fill="url(#svg_18)" stroke="none"/>
+ <rect x="272.80404" y="20.76382" width="42.35197" height="232.66835" id="svg_13" fill="#ffffff" stroke="none" transform="rotate(45.9094, 293.98, 137.1)" opacity="0.4"/>
+ <rect x="282.80404" y="22.76382" width="14" height="232.66835" fill="#ffffff" stroke="none" transform="rotate(45.9094, 289.805, 139.1)" opacity="0.4" id="svg_14"/>
+ <ellipse cx="415.13312" cy="64.38066" id="svg_12" fill="#ea7598" stroke="none" rx="67.79251" ry="34.82026" transform="rotate(39.4735, 415.133, 64.379)"/>
+ <path d="m212.07031,166.04688c-8.5,47 36.25,103.75 99.25,96.75l-152.5,53.25l53.25,-150z" id="svg_4" fill="url(#svg_5)" stroke="none"/>
+ <path d="m181.32031,242.54688c0.5,20.5 26.75,45 46.75,48.5l-66.25,20l19.5,-68.5z" id="svg_3" fill="#27382f" stroke="none"/>
+ </g>
+ <g>
+ <title>Layer 2</title>
+ <path d="m152.82031,317.04688l51,-152l157,-153c40,-12.00001 118,48 105,105l-157,152.99999l-156,47z" id="svg_1" fill="none" stroke="#800000" stroke-width="17"/>
+ </g>
+</svg>
+</g>
+
+
+<g id="select">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <path stroke="#ffffff" fill="#000000" id="svg_13" d="m7.38168,2.46948l0.07502,17.03258l3.30083,-2.62617l2.62566,5.62751l4.20105,-2.62617l-3.30082,-4.80214l4.57614,-0.37517l-11.47787,-12.23044z"/>
+ </svg>
+</g>
+
+<g id="select_node">
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <circle stroke="#0000ff" fill="#00ffff" id="svg_44" r="3.87891" cy="5.3" cx="8.7" stroke-width="1.5"/>
+ <path d="m9.18161,5.6695l0.07763,15.16198l3.41588,-2.33775l2.71718,5.00947l4.34748,-2.33775l-3.41587,-4.27474l4.73565,-0.33397l-11.87794,-10.88723z" id="svg_13" fill="#000000" stroke="#ffffff"/>
+ </svg>
+</g>
+
+<g id="square">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient id="svg_2" x1="0.36328" y1="0.10156" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#3b7e9b" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="1.5" y="1.5" width="20" height="20" id="svg_1" fill="url(#svg_2)" stroke="#000000"/>
+ </svg>
+</g>
+
+<g id="rect">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.10156" x1="0.36328" id="svg_2">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#3b7e9b" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect transform="matrix(1, 0, 0, 1, 0, 0)" stroke="#000000" fill="url(#svg_2)" id="svg_1" height="12" width="20" y="5.5" x="1.5"/>
+ </svg>
+</g>
+
+<g id="fh_rect">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.10156" x1="0.36328" id="svg_2">
+
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#3b7e9b" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.3945" x2="0.6132" y1="0.1093" x1="0.3046" id="svg_9">
+ <stop stop-opacity="1" stop-color="#f9d225" offset="0"/>
+ <stop stop-opacity="1" stop-color="#bf5f00" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect stroke="#000000" stroke-width="2" fill="url(#svg_2)" id="svg_1" height="50" width="50" y="0.75" x="1.25"/>
+ <path stroke-width="2" stroke="#000000" fill="url(#svg_9)" id="svg_2" d="m31.5,0l-8.75,20.25l0.75,24l16.5,-16.5l6,-12.5"/>
+ <path stroke-width="2" stroke="#000000" fill="#fce0a9" id="svg_10" d="m39.5,28.5c-2,-9.25 -10.25,-11.75 -17,-7.4375l0.4843,24.4414z"/>
+ <path id="svg_11" stroke-width="2" stroke="#000000" fill="#000000" d="m26.9318,41.1745c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905l0.1087,6.2126z"/>
+</svg>
+</g>
+
+
+<g id="circle">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54">
+ <defs>
+ <linearGradient y2="1.0" x2="1.0" y1="0.1875" x1="0.171875" id="svg_4">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0.0"/>
+ <stop stop-opacity="1" stop-color="#ff6666" offset="1.0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <circle stroke-opacity="1" fill-opacity="1" stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" r="23" cy="27" cx="27"/>
+ </g>
+</svg>
+</g>
+
+<g id="ellipse">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 54 54">
+ <defs>
+ <linearGradient y2="1.0" x2="1.0" y1="0.1875" x1="0.171875" id="svg_4">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0.0"/>
+ <stop stop-opacity="1" stop-color="#ff6666" offset="1.0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <ellipse stroke-opacity="1" fill-opacity="1" stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" rx="23" ry="15" cy="27" cx="27"/>
+ </g>
+</svg>
+</g>
+
+<g id="fh_ellipse">
+<svg viewBox="0 0 52 52" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_9" x1="0.3046" y1="0.1093" x2="0.6132" y2="0.3945">
+ <stop offset="0" stop-color="#f9d225" stop-opacity="1"/>
+ <stop offset="1" stop-color="#bf5f00" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_4" x1="0.17188" y1="0.1875" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ff6666" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <ellipse stroke-width="2" stroke="#000000" fill="url(#svg_4)" id="svg_1" rx="23" ry="12" cy="37" cx="27"/>
+ <path d="m31.5,0l-8.75,20.25l0.75,24l16.5,-16.5l6,-12.5" id="svg_2" fill="url(#svg_9)" stroke="#000000" stroke-width="2"/>
+ <path d="m39.5,28.5c-2,-9.25 -10.25,-11.75 -17,-7.4375l0.4843,24.4414z" id="svg_10" fill="#fce0a9" stroke="#000000" stroke-width="2"/>
+ <path d="m26.9318,41.1745c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905l0.1087,6.2126z" fill="#000000" stroke="#000000" stroke-width="2" id="svg_11"/>
+ </svg>
+</g>
+
+<g id="pencil">
+<svg viewBox="0 0 48 52" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_9" x1="0.3046" y1="0.1093" x2="0.6132" y2="0.3945">
+ <stop offset="0.0" stop-color="#f9d225" stop-opacity="1"/>
+ <stop offset="1.0" stop-color="#bf5f00" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <path d="M31.5,0 l-8.75,20.25 l0.75,24 l16.5,-16.5 l6,-12.5" id="svg_2" fill="url(#svg_9)" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
+ <path d="M39.5,28.5 c-2,-9.25 -10.25,-11.75 -17,-7.4375 l0.4843,24.4414z" id="svg_10" fill="#fce0a9" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
+ <path d="M26.9318,41.1745 c-0.4491,-2.3511 -2.3021,-2.9866 -3.8181,-1.8905 l0.1087,6.2126z" fill="#000000" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1" id="svg_11"/>
+ <path d="M2.3132,4.6197 c12.4998,-1.6891 10.4729,7.0945 0,21.6215 c22.9729,-4.0539 12.1620,5.4053 12.1620,13.1756 c-0.3377,4.0539 8.7836,21.9594 26.0135,-1.3513" id="svg_12" fill="none" stroke="#000000" stroke-width="2" fill-opacity="1" stroke-opacity="1"/>
+</svg>
+</g>
+
+<g id="pen">
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_16" x1="0.46484" y1="0.15625" x2="0.9375" y2="0.39453">
+ <stop offset="0" stop-color="#f2feff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#14609b" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_19" x1="0.18359" y1="0.26172" x2="0.77734" y2="0.56641">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#fce564" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <line x1="0.99844" y1="1.49067" x2="12.97691" y2="21.14149" id="svg_5" stroke="#000000" fill="none"/>
+ <path d="m14.05272,13.68732l-1.46451,7.52632l4.03769,-6.32571" id="svg_6" fill="#a0a0a0" stroke="#000000"/>
+ <path d="m13.61215,10.26563c-0.38567,1.05257 -0.60723,2.40261 -0.50403,3.125l4.33468,1.81452c0.46153,-0.30769 1.6129,-1.71371 1.6129,-2.52016" id="svg_7" fill="url(#svg_19)" stroke="#000000"/>
+ <path d="m16.61335,1.00028l-3.67325,8.60247l7.10285,3.47318l3.17783,-7.20549" id="svg_8" fill="url(#svg_16)" stroke="#000000"/>
+ </svg>
+</g>
+
+<g id="text">
+ <svg viewBox="0 0 158 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <text x="58" y="120" id="svg_1" fill="#000000" stroke="none" font-size="120pt" font-family="sans-serif" text-anchor="middle" fill-opacity="1" stroke-opacity="1" font-weight="bold">A</text>
+ <line x1="136" y1="7" x2="136" y2="121" id="svg_2" stroke="#000000" fill="none" fill-opacity="1" stroke-opacity="1" stroke-width="5"/>
+ <line x1="120" y1="4" x2="152" y2="4" id="svg_3" stroke="#000000" stroke-width="5" fill="none" fill-opacity="1" stroke-opacity="1"/>
+ <line x1="120" y1="124" x2="152" y2="124" stroke="#000000" stroke-width="5" fill="none" fill-opacity="1" stroke-opacity="1" id="svg_4"/>
+ </svg>
+</g>
+
+
+<g id="path">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 124" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.28125" x1="0.33594" id="svg_4">
+ <stop stop-opacity="1" stop-color="#ffffff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#33a533" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke-dasharray="null" stroke-width="4" stroke="#000000" fill="url(#svg_4)" id="svg_1" d="m6,103l55,-87c85,33.64 -26,37.12 55,87l-110,0z"/>
+ </svg>
+</g>
+
+<g id="add_subpath">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 124 124" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_4" x1="0.33594" y1="0.28125" x2="1" y2="1">
+ <stop offset="0" stop-color="#ffffff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#33a533" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path d="m6,103l55,-87c85,33.64 -26,37.12 55,87l-110,0z" id="svg_1" fill="url(#svg_4)" stroke="#000000" stroke-width="4" stroke-dasharray="null"/>
+ <g id="svg_7">
+ <circle stroke-dasharray="null" stroke-width="5" stroke="#000000" fill="#ffffff" id="svg_6" r="22.63281" cy="88.5" cx="45.5"/>
+ <line stroke-dasharray="null" stroke-width="7" stroke="#000000" id="svg_2" y2="104.03768" x2="45.5" y1="72.96232" x1="45.5"/>
+ <line stroke-dasharray="null" stroke-width="7" stroke="#000000" id="svg_3" y2="88.5" x2="61.03768" y1="88.5" x1="29.96232"/>
+ </g>
+ </g>
+ </svg>
+</g>
+
+<g id="close_path">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m121.5,40l-84,106l27,115l166,2l29,-111"/>
+ <line x1="240" y1="136" x2="169.5" y2="74" stroke="#A00" stroke-width="25" fill="none"/>
+ <path stroke="none" fill ="#A00" d="m158,65l31,74l-3,-50l51,-3z"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ </g>
+</svg>
+</g>
+
+<g id="open_path">
+<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g>
+ <path stroke="#000" stroke-width="15" fill="#ffc8c8" d="m123.5,38l-84,106l27,115l166,2l29,-111"/>
+ <line x1="276.5" y1="153" x2="108.5" y2="24" stroke="#000" stroke-width="10" fill="none"/>
+ <g stroke-width="15" stroke="#00f" fill="#0ff">
+ <circle r="30" cy="41" cx="123"/>
+ <circle r="30" cy="146" cx="40"/>
+ <circle r="30" cy="260" cx="69"/>
+ <circle r="30" cy="260" cx="228"/>
+ <circle r="30" cy="148" cx="260"/>
+ </g>
+ <g stroke="#A00" stroke-width="15" fill="none">
+ <line x1="168" y1="24" x2="210" y2="150"/>
+ <line x1="210" y1="24" x2="168" y2="150"/>
+ </g>
+ </g>
+</svg>
+</g>
+
+
+<g id="image">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0" x1="1" id="svg_25">
+ <stop stop-opacity="1" stop-color="#10284c" offset="0"/>
+ <stop stop-opacity="1" stop-color="#5374ad" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.75781" x2="0.99609" y1="0" x1="1" id="svg_23">
+ <stop stop-opacity="1" stop-color="#162e84" offset="0"/>
+ <stop stop-opacity="1" stop-color="#97c4ef" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="1" y="3.83333" width="22" height="17" id="svg_18" fill="#202020" stroke="none"/>
+ <rect stroke-width="1.2" stroke="#ffffff" fill="#232947" id="svg_15" height="14" width="19" y="5.33333" x="2.5"/>
+ <rect fill="url(#svg_23)" id="svg_20" height="7.02244" width="15.96424" y="6.7266" x="4"/>
+ <rect fill="url(#svg_25)" id="svg_24" height="4.02393" width="15.96303" y="13.77454" x="4"/>
+ <circle fill="#ffffad" id="svg_26" r="1.83333" cy="9.82002" cx="7.13254"/>
+ <path d="m14.5696,13.77458l0.70243,-4.85313l-3.12899,4.85313l2.42656,0z" id="svg_14" fill="#404040" stroke="none"/>
+ <path d="m15.27203,8.98531c2.74584,0.06386 2.42657,4.21456 -0.63857,4.85313c0.70243,-1.27714 1.66028,-3.63985 0.63857,-4.85313z" id="svg_17" fill="#404040" stroke="none"/>
+</svg>
+</g>
+
+<g id="zoom">
+ <svg viewBox="0 0 150 150" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_30" x1="0" y1="0" x2="1" y2="0">
+ <stop offset="0" stop-color="#d3d3d3" stop-opacity="1"/>
+ <stop offset="1" stop-color="#424242" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <path d="m107.14774,101.03477l-0.64774,43.96523c5.00857,4.72089 14.00811,5.27188 19,0l-0.31667,-44.16l-9.61514,-19.84l-8.42046,20.03477z" id="svg_29" fill="url(#svg_30)" stroke="#202020" stroke-width="2" transform="rotate(-45, 116, 114)"/>
+ <circle cx="58" cy="58" r="51" id="svg_22" fill="#c0c0c0" stroke="#202020" stroke-width="5"/>
+ <circle cx="58" cy="58" r="43" id="svg_27" fill="#aaccff" stroke="none"/>
+ <path d="m15.68604,61.46511c38.13954,17.67442 48.13954,15.34883 85.11628,-0.46511c1.39536,18.60465 -19.30231,41.86047 -42.7907,40.93023c-21.6279,-0.93023 -42.7907,-21.86046 -42.32558,-40.46511z" id="svg_28" fill="#8cbaff" stroke="none"/>
+ </svg>
+</g>
+
+<g id="arrow_right">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 50">
+ <path stroke="#000000" fill="#000000" d="m0,0l0,50l25,-25l-25,-25z"/>
+ </svg>
+</g>
+
+<g id="arrow_right_big">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 50">
+ <path stroke="#000000" fill="#000000" d="m0,0l0,50l25,-25l-25,-25z"/>
+ </svg>
+</g>
+
+<g id="arrow_down">
+ <svg viewBox="0 0 50 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <path transform="rotate(90, 26, 13)" d="m14,-12l0,50l25,-25l-25,-25z" fill="#000000" stroke="#000000"/>
+ </svg>
+</g>
+
+<g id="fill">
+<svg width="32" height="33" xmlns="http://www.w3.org/2000/svg">
+ <g id="svg_5">
+ <path id="svg_4" d="m17.49167,10.97621c6.9875,-0.325 12.1875,2.70833 12.13333,7.36667l-0.325,10.075c-0.75833,4.0625 -2.275,3.0875 -3.03333,0.10833l0.21667,-9.64166c-0.43333,-0.975 -1.08333,-1.625 -1.95,-1.51667" stroke-linejoin="round" stroke="#606060" fill="#c0c0c0"/>
+ <path id="svg_1" d="m2.00055,17.1309l10.72445,-10.72445l12.67445,12.13279l-3.52056,0.05389l-9.15389,9.26223l-10.72445,-10.72445z" stroke-linejoin="round" stroke="#000000" fill="#c0c0c0"/>
+ <path id="svg_3" d="m14.35,13.57621c-0.1625,-3.95417 0.86667,-11.7 -1.84167,-11.59167c-2.70833,0.10833 -2.6,2.05833 -2.16667,6.93333" stroke-linejoin="round" stroke="#000000" fill="none"/>
+ <circle id="svg_2" r="1.60938" cy="15.20121" cx="14.45833" stroke-linejoin="round" stroke="#000000" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="stroke">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <rect fill="none" stroke="#707070" stroke-width="10" x="8.625" y="8.625" width="32.75" height="32.75" id="svg_1"/>
+</svg>
+</g>
+
+<g id="opacity">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient y2="0.1" x2="0.9" y1="0.9" x1="0.1" id="svg_7">
+ <stop stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect id="svg_4" height="50" width="50" y="0" x="0" fill="#ffffff"/>
+ <rect id="svg_1" height="25" width="25" y="0" x="0" fill="#a0a0a0"/>
+ <rect id="svg_2" height="25" width="25" y="25" x="25" fill="#a0a0a0"/>
+ <rect id="svg_3" height="50" width="50" y="0" x="0" stroke-width="2" stroke="url(#svg_7)" fill="url(#svg_7)"/>
+ </svg>
+</g>
+
+<g id="new_image">
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="2.42792" y="1.6692" width="18" height="21" id="svg_55" fill="#eaeaea" stroke="#606060"/>
+ <circle stroke="none" fill="url(#svg_9)" id="svg_65" r="6.300781" cy="7.529969" cx="17.761984"/>
+ <defs>
+ <radialGradient id="svg_9" cx="0.5" cy="0.5" r="0.5">
+ <stop offset="0.1" stop-color="#ffe500" stop-opacity="1"/>
+ <stop offset="1" stop-color="#ffff00" stop-opacity="0"/>
+ </radialGradient>
+ </defs>
+</svg>
+</g>
+
+<g id="save">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0" x2="1" y1="0" x1="0" id="svg_41">
+ <stop stop-opacity="1" stop-color="#727272" offset="0"/>
+ <stop stop-opacity="1" stop-color="#d6d6d6" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.875" x2="0.21484" y1="0.00391" x1="0.04297" id="svg_46">
+ <stop stop-opacity="1" stop-color="#81bbf4" offset="0"/>
+ <stop stop-opacity="1" stop-color="#376eb7" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#202020" fill="#e0e0e0" id="svg_21" d="m1.51669,22.3458l21.13245,-0.10111l0,-6.06673l-2.62892,-9.80789l-16.27907,0.10111l-2.32558,9.20121l0.10111,6.67341z"/>
+ <rect stroke="#efefef" fill="url(#svg_41)" id="svg_32" height="4.75108" width="19.21031" y="16.58227" x="2.42667"/>
+ <path stroke="#ffffff" fill="#c0c0c0" id="svg_42" d="m4.55005,11.12235l0.70779,-2.83114l13.04348,0l0.70779,3.13448c-0.70779,2.52781 -4.04479,3.84227 -7.17897,3.84227c-2.72977,0 -6.37007,-1.41557 -7.28008,-4.1456z"/>
+ <path stroke="#285582" fill="url(#svg_46)" id="svg_45" d="m7.14286,9.74903l5.21236,5.79151l5.50193,-5.88803l-2.50965,-0.09653l0,-2.79923c0,-2.3166 -2.3166,-5.59846 -6.56371,-5.59846c-4.05405,0 -6.27413,3.37838 -6.56371,6.75676c0.48263,-1.5444 2.7027,-4.53668 4.44015,-4.44015c2.12355,-0.09653 2.79923,1.64093 2.79923,3.37838l0.09653,2.79923l-2.41313,0.09653z"/>
+ </svg>
+</g>
+
+<g id="export">
+ <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient id="svg_5" x1="0.77734" y1="0.51172" x2="0.09375" y2="0.53516">
+ <stop offset="0" stop-color="#81bbf4"/>
+ <stop offset="1" stop-color="#376eb7"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <rect x="7.22599" y="1.3603" width="15.76465" height="21.51735" id="svg_55" fill="#eaeaea" stroke="#606060"/>
+ <circle fill="#31abed" stroke-width="0.5" cx="17.4206" cy="11.1278" r="4.69727" id="svg_3"/>
+ <path fill="#ffcc00" stroke-width="0.5" d="m9.67673,20.24302l7.38701,-6.80778l2.91746,6.71323" id="svg_4"/>
+ <rect fill="#ff5555" stroke-width="0.5" x="9.5385" y="2.94914" width="5.74652" height="5.74652" id="svg_2"/>
+ <path d="m6.13727,17.94236l5.77328,-4.91041l-5.86949,-5.1832l-0.09622,2.36426l-4.64805,-0.06751l-0.04665,5.54694l4.79093,-0.02342l0.09623,2.27334z" id="svg_45" fill="url(#svg_5)" stroke="#285582"/>
+ </g>
+ </svg>
+</g>
+
+<g id="open">
+<svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="0.91406" x2="0.65234" y1="0.14063" x1="0.42578" id="svg_76">
+ <stop stop-opacity="1" stop-color="#81bbf4" offset="0"/>
+ <stop stop-opacity="1" stop-color="#376eb7" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="1.65" y="3.75" width="9.8" height="16.72712" id="svg_98" fill="#c0c0c0" stroke="#606060"/>
+ <rect stroke="none" fill="#a0a0a0" id="svg_88" height="14.17459" width="6.39585" y="4.9758" x="2.89542"/>
+ <path d="m18.62576,4.54365l0,6.91443l-9.9395,0l-0.08643,-10.11236l6.828,0l3.19792,3.19793z" id="svg_99" fill="#e0e0e0" stroke="#404040"/>
+ <path d="m2.95,20.53644l1.65,-12.03644l16.2,0l-1.5,12l-16.35,0.03643z" id="svg_97" fill="url(#svg_76)" stroke="#285582"/>
+ <line fill="none" stroke="#606060" id="svg_89" y2="4.28436" x2="13.95851" y1="4.28436" x1="10.32844"/>
+ <line fill="none" stroke="#606060" id="svg_91" y2="6.53155" x2="14.82282" y1="6.53155" x1="10.32844"/>
+ <path stroke="none" fill="#ffffff" id="svg_100" d="m15.25895,1.95069l-0.00401,2.85225l2.89558,0.00004l-2.89157,-2.85229z"/>
+</svg>
+</g>
+
+<g id="import">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="0.875" x2="0.21484" y1="0.00391" x1="0.04297" id="svg_46_import">
+ <stop stop-opacity="1" stop-color="#81f4bb" offset="0"/>
+ <stop stop-opacity="1" stop-color="#37b76e" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="2.42792" y="1.6692" width="18" height="21" id="svg_55" fill="#eaeaea" stroke="#606060"/>
+ <path stroke="#285582" fill="url(#svg_46_import)" id="svg_45" d="m7.14286,12.74903l5.21236,5.79151l5.50193,-5.88803l-2.50965,-0.09653l0,-2.79923c0,-2.3166 -2.3166,-5.59846 -6.56371,-5.59846c-4.05405,0 -6.27413,3.37838 -6.56371,6.75676c0.48263,-1.5444 2.7027,-4.53668 4.44015,-4.44015c2.12355,-0.09653 2.79923,1.64093 2.79923,3.37838l0.09653,2.79923l-2.41313,0.09653z"/>
+</svg>
+</g>
+
+<g id="docprops">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0.5" x1="1" id="svg_53">
+ <stop stop-opacity="1" stop-color="#606060" offset="0"/>
+ <stop stop-opacity="0" stop-color="#5e5e5e" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect stroke="#606060" fill="#eaeaea" id="svg_55" height="21" width="18" y="1.6692" x="2.42792"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_56" y2="4.37757" x2="14.89023" y1="4.37757" x1="6.696"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_57" y2="7.10804" x2="12.92026" y1="7.10804" x1="6.6948"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_58" y2="9.84241" x2="15.64716" y1="9.84241" x1="6.6942"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_59" y2="12.36585" x2="13.21805" y1="12.36585" x1="6.69691"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_60" y2="15.06507" x2="14.43591" y1="15.06507" x1="6.69691"/>
+ <line fill="none" stroke="#a0a0a0" id="svg_61" y2="17.84241" x2="13.36979" y1="17.84241" x1="6.69691"/>
+ <g id="svg_54">
+ <path transform="rotate(-45, 12.5448, 11.7085)" stroke="none" fill="#606060" id="svg_31" d="m11.24329,8.73944l0,2.79974l2.53499,0.07777l0,-2.95528c1.78134,0.07777 2.26093,1.39987 2.12391,2.95528c-0.06851,1.63318 -1.30175,3.49967 -3.49418,3.26636c-2.19242,-0.31108 -2.87755,-1.39987 -3.15161,-2.72197c-0.27406,-1.39987 0.41108,-3.34413 1.98689,-3.4219z"/>
+ <rect opacity="0.95" transform="rotate(-45, 16.2485, 15.1732)" stroke="none" fill="url(#svg_53)" id="svg_50" height="4.85445" width="2.57974" y="12.746" x="15.04047"/>
+ </g>
+ </svg>
+</g>
+
+<g id="source">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 55 52">
+ <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_40" y="15" x="28.23" font-weight="bold">s</text>
+ <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_47" y="30" x="28.23" font-weight="bold">v</text>
+ <text xml:space="preserve" text-anchor="middle" font-family="monospace" font-size="24" stroke="none" fill="#019191" id="svg_48" y="44" x="28.23" font-weight="bold">g</text>
+ <line stroke-width="3" fill="none" stroke="#aa0000" id="svg_51" y2="43" x2="16" y1="25" x1="5"/>
+ <line id="svg_62" stroke-width="3" fill="none" stroke="#aa0000" y2="8" x2="16" y1="26" x1="5"/>
+ <line id="svg_63" stroke-width="3" fill="none" stroke="#aa0000" y2="43" x2="39" y1="25" x1="50"/>
+ <line id="svg_64" stroke-width="3" fill="none" stroke="#aa0000" y2="8" x2="39" y1="26" x1="51"/>
+ </svg>
+</g>
+
+<g id="wireframe">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <circle stroke="#000000" fill="none" id="svg_49" r="8" cy="9.5" cx="9.5"/>
+ <rect stroke="#000000" fill="none" id="svg_52" height="14" width="14" y="8.5" x="8.5"/>
+ </svg>
+</g>
+
+<g id="undo">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_66" x1="0.04297" y1="0.00391" x2="0.21484" y2="0.875">
+ <stop offset="0" stop-color="#f7f963" stop-opacity="1"/>
+ <stop offset="1" stop-color="#d3c310" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <path transform="rotate(-90, 10.3017, 11.5526)" d="m6.70188,10.72562l6.55493,-7.13388l6.65817,7.24912l-3.79441,0.03193l0,2.72259c-0.04257,2.74017 -2.76516,5.83068 -7.81235,6.02135c-5.18575,0 -7.1226,-3.75464 -7.49302,-7.41944c0.61736,1.6754 3.14913,3.78397 5.3716,3.67918c2.71635,0.1048 4.41501,-0.61714 4.41501,-2.50184l0,-2.64901l-3.89995,0z" id="svg_45" fill="url(#svg_66)" stroke="#b7a800"/>
+ </svg>
+</g>
+
+<g id="redo">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0" x1="1" id="svg_71">
+ <stop stop-opacity="1" stop-color="#98fc46" offset="0"/>
+ <stop stop-opacity="1" stop-color="#56aa25" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path transform="rotate(-90, 12.7299, 11.5526)" d="m9.11294,12.43144l6.54089,6.84566l6.6439,-6.95624l-3.78628,-0.03064l0,-2.61259c-0.04248,-2.62946 -2.75924,-5.5951 -7.79561,-5.77807c-5.17464,0 -7.10734,3.60294 -7.47697,7.11967c0.61604,-1.60771 3.14238,-3.63109 5.36009,-3.53053c2.71053,-0.10056 4.40555,0.59221 4.40555,2.40076l0,2.54198l-3.89159,0z" id="svg_45" fill="url(#svg_71)" stroke="#44aa00"/>
+ </svg>
+</g>
+
+<g id="clone">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="0" x1="0" id="svg_36">
+ <stop stop-opacity="1" stop-color="#f9f3de" offset="0"/>
+ <stop stop-opacity="1" stop-color="#ccbd8f" offset="1"/>
+ </linearGradient>
+ <linearGradient y2="0.80078" x2="0.42578" y1="0" x1="0" id="svg_69">
+ <stop stop-opacity="1" stop-color="#f9f3de" offset="0"/>
+ <stop stop-opacity="1" stop-color="#af995b" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#8f5902" fill="url(#svg_69)" id="svg_34" d="m2.11676,16.32061l-0.13787,-5.05515l1.93015,-2.02206l10.11029,0l2.02206,2.29779l0,4.77941l-13.92463,0z"/>
+ <rect x="7.85379" y="6.30027" width="2.2932" height="4.3407" id="svg_38" fill="url(#svg_36)" stroke="#8f5902" rx="1" ry="1"/>
+ <circle stroke="#8f5902" fill="url(#svg_36)" id="svg_35" r="2.96392" cy="4.48149" cx="9.11757"/>
+ <line x1="2.44838" y1="12.03512" x2="15.5524" y2="12.03512" id="svg_39" stroke="#f9f3de" fill="none"/>
+ <path d="m6.72427,12.55859l4.74203,0l-2.30831,2.07258l-2.43372,-2.07258z" id="svg_43" fill="#000000" stroke="none"/>
+</svg>
+</g>
+
+<g id="delete">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <rect ry="3" rx="3" stroke="#800000" fill="#aa0000" id="svg_37" height="20.29514" width="21.17486" y="1.70304" x="1.42011"/>
+ <rect ry="3" rx="3" stroke="#ff5555" fill="#aa0000" id="svg_67" height="18.63022" width="19.61118" y="2.53597" x="2.20258"/>
+ <line stroke-width="2" fill="none" stroke="#ffffff" id="svg_68" y2="16.85127" x2="17.00646" y1="6.85127" x1="7.00646"/>
+ <line stroke-width="2" id="svg_70" fill="none" stroke="#ffffff" y2="16.85127" x2="7.00646" y1="6.85127" x1="17.00646"/>
+ </svg>
+</g>
+
+<g id="go_up">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
+ <defs>
+ <linearGradient y2="0" x2="0.7" y1="0" x1="0" id="svg_74">
+ <stop stop-opacity="1" stop-color="#afe853" offset="0"/>
+ <stop stop-opacity="1" stop-color="#52a310" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#008000" fill="url(#svg_74)" id="svg_33" d="m5.38492,16.77043l7.07692,0l0,-5.23077l4.15385,0l-7.69231,-10.15385l-7.69231,10.15385l4.15385,0l0,5.23077z"/>
+ </svg>
+</g>
+
+<g id="go_down">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
+ <defs>
+ <linearGradient y2="0" x2="0.7" y1="0" x1="0" id="svg_75">
+ <stop stop-opacity="1" stop-color="#afe853" offset="0"/>
+ <stop stop-opacity="1" stop-color="#52a310" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#008000" fill="url(#svg_75)" id="svg_33" d="m5.3015,1.69202l6.93483,0l0,5.07323l4.07045,0l-7.53786,9.84803l-7.53786,-9.84803l4.07045,0l0,-5.07323z"/>
+ </svg>
+</g>
+
+<g id="context_menu">
+ <svg width="120" height="120" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="0" id="svg_11" d="m4.5,46.5l52,0l-26,38l-26,-38z" stroke="#000" fill="#000"/>
+ <g id="svg_16">
+ <line stroke-width="10" id="svg_12" y2="27.5" x2="117.5" y1="27.5" x1="59.5" stroke="#000" fill="#000"/>
+ <line id="svg_13" stroke-width="10" y2="51.5" x2="117.5" y1="51.5" x1="59.5" stroke="#000" fill="#000"/>
+ <line id="svg_14" stroke-width="10" y2="73.5" x2="117.5" y1="73.5" x1="59.5" stroke="#000" fill="#000"/>
+ <line id="svg_15" stroke-width="10" y2="97.5" x2="117.5" y1="97.5" x1="59.5" stroke="#000" fill="#000"/>
+ </g>
+ </svg>
+</g>
+
+<g id="move_bottom">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 23 23">
+ <defs>
+ <linearGradient y2="0" x2="1" y1="0" x1="0" id="svg_80">
+ <stop stop-opacity="1" stop-color="#bc7f05" offset="0"/>
+ <stop stop-opacity="1" stop-color="#fcfc9f" offset="1"/>
+ </linearGradient>
+ </defs>
+ <line stroke-width="2" fill="none" stroke="#000000" id="svg_72" y2="2.5" x2="22" y1="2.5" x1="10.5"/>
+ <line id="svg_73" stroke-width="2" fill="none" stroke="#000000" y2="6.5" x2="21.99844" y1="6.5" x1="10.49844"/>
+ <line id="svg_74" stroke-width="2" fill="none" stroke="#000000" y2="10.5" x2="21.99922" y1="10.5" x1="10.49922"/>
+ <line id="svg_75" stroke-width="2" fill="none" stroke="#000000" y2="14.5" x2="21.99922" y1="14.5" x1="10.49922"/>
+ <rect stroke="#000000" fill="url(#svg_80)" id="svg_77" height="2.2" width="20" y="17.65" x="1.65"/>
+ <path stroke="none" fill="#000000" id="svg_81" d="m4.25,1.55l2.35,0l0,11.05l2,0l-3.175,3.45l-3.175,-3.45l2,0l0,-11.05z"/>
+ </svg>
+</g>
+
+<g id="move_top">
+<svg viewBox="0 0 23 23" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_86" x1="0" y1="0" x2="1" y2="0">
+ <stop offset="0" stop-color="#9fdcf4" stop-opacity="1"/>
+ <stop offset="1" stop-color="#617e96" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <line x1="1.3" y1="8.19922" x2="12.8" y2="8.19922" id="svg_72" stroke="#000000" fill="none" stroke-width="2"/>
+ <line x1="1.29844" y1="12.19922" x2="12.79844" y2="12.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_73"/>
+ <line x1="1.29922" y1="16.19922" x2="12.79922" y2="16.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_74"/>
+ <line x1="1.29922" y1="20.19922" x2="12.79922" y2="20.19922" stroke="#000000" fill="none" stroke-width="2" id="svg_75"/>
+ <rect x="1.55" y="1.85" width="20" height="3.2" id="svg_77" fill="url(#svg_86)" stroke="#000000"/>
+ <path d="m16.83475,21.14603l2.33207,0l0,-11.04578l1.98474,0l-3.15077,-3.44869l-3.15077,3.44869l1.98474,0l0,11.04578z" id="svg_81" fill="#000000" stroke="none"/>
+ </svg>
+</g>
+
+<g id="to_path">
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient y2="0.46875" x2="0.42969" y1="0.10156" x1="0.10547" id="svg_105">
+ <stop stop-color="#ff0000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#ff0000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <circle cx="21" cy="21.3125" r="18.44531" id="svg_120" fill="url(#svg_105)" stroke="#000000"/>
+ <path fill="none" stroke="#000000" d="m2.875,21.3125c-0.375,-9.25 7.75,-18.875 17.75,-18" id="svg_115"/>
+ <line x1="25.375" y1="3.0625" x2="8.5" y2="3.0625" id="svg_116" stroke="#808080" fill="none"/>
+ <line x1="2.625" y1="24.75" x2="2.625" y2="9.8125" id="svg_117" stroke="#808080" fill="none"/>
+ <circle cx="8.5" cy="2.9375" r="1.95313" fill="#00ffff" stroke="#0000ff" stroke-width="0.5" id="svg_118"/>
+ <circle cx="2.625" cy="9.8125" r="1.95313" fill="#00ffff" stroke="#0000ff" stroke-width="0.5" id="svg_119"/>
+ <circle cx="20.875" cy="3.1875" r="2.5" id="svg_112" fill="#00ffff" stroke="#0000ff"/>
+ <circle cx="2.875" cy="21.0625" r="2.5" fill="#00ffff" stroke="#0000ff" id="svg_114"/>
+ </g>
+</svg>
+</g>
+
+<g id="link_controls">
+<svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" id="svg_102" d="m9.875,23c-2,-4.25 -1.6875,-7.375 1.6875,-10.5c3.375,-3.125 7.5625,-2.75 11.0625,2" stroke="#8dd35f" fill="none"/>
+ <line fill="none" stroke="#606060" id="svg_109" y2="4" x2="19" y1="19" x1="4"/>
+ <circle stroke="#0000ff" fill="#00ffff" id="svg_111" r="2.17578" cy="11.5" cx="11.5"/>
+ <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19"/>
+ <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19" cx="4"/>
+</svg>
+</g>
+
+<g id="reorient">
+<svg viewBox="0 0 24 24" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <linearGradient y2="1" x2="1" y1="1" x1="0" id="svg_113">
+ <stop stop-opacity="0" stop-color="#0000ff" offset="0"/>
+ <stop stop-opacity="1" stop-color="#507ece" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect stroke-dasharray="2,2" stroke="#0000ff" fill="none" id="svg_108" height="19.125" width="18.625" y="2.625" x="2.875"/>
+ <rect transform="rotate(45, 12.2344, 12.1719)" stroke="#000000" fill="url(#svg_113)" id="svg_107" height="6.125" width="16" y="9.10848" x="4.23267"/>
+</svg>
+</g>
+
+<g id="group">
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_90" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ccddff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#789fed" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_92" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#70a1e5" stop-opacity="1"/>
+ <stop offset="1" stop-color="#4b6baf" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="13.5" y="0.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_79"/>
+ <rect x="13.5" y="13.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_82"/>
+ <rect x="0.5" y="13.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_83"/>
+ <rect x="2.5" y="2.5" width="8" height="7" fill="#a0a0a0" stroke="#555555" id="svg_85"/>
+ <rect x="2.5" y="2.5" width="8" height="7" fill="url(#svg_90)" stroke="url(#svg_92)" id="svg_87"/>
+ <rect x="5.5" y="6.5" width="8" height="7" id="svg_84" fill="#7399d6" stroke="url(#svg_92)"/>
+ <rect x="0.5" y="0.5" width="2" height="2" id="svg_78" fill="#a0a0a0" stroke="#555555"/>
+ </svg>
+</g>
+
+<g id="ungroup">
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="svg_90" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#ccddff" stop-opacity="1"/>
+ <stop offset="1" stop-color="#789fed" stop-opacity="1"/>
+ </linearGradient>
+ <linearGradient id="svg_92" x1="0" y1="0" x2="1" y2="1">
+ <stop offset="0" stop-color="#70a1e5" stop-opacity="1"/>
+ <stop offset="1" stop-color="#4b6baf" stop-opacity="1"/>
+ </linearGradient>
+ </defs>
+ <rect x="2.5" y="2.5" width="8" height="7" fill="url(#svg_90)" stroke="url(#svg_92)" id="svg_87"/>
+ <rect x="5.5" y="6.5" width="8" height="7" id="svg_84" fill="#7399d6" stroke="url(#svg_92)"/>
+ <rect x="9.5" y="1.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_79"/>
+ <rect x="1.5" y="8.5" width="2" height="2" fill="#a0a0a0" stroke="#555555" id="svg_83"/>
+ <rect x="1.5" y="1.5" width="2" height="2" id="svg_78" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_93" x="12.5" y="5.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_94" x="12.5" y="12.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_95" x="4.5" y="12.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+ <rect id="svg_96" x="4.5" y="5.5" width="2" height="2" fill="#a0a0a0" stroke="#555555"/>
+</svg>
+</g>
+
+<g id="unlink_use">
+<svg width="222" height="222" xmlns="http://www.w3.org/2000/svg">
+ <path id="svg_1" d="m93.75,118.44922c-4.5,13.58447 -14.66553,11.5 -28.25,11.5l-34,0c-13.58447,0 -24.5,-7.16553 -24.5,-21.5c0,-14.33447 10.91553,-20.5 24.5,-20.5l34,0c13.58447,0 19.75,-2.33447 26.5,10.75" stroke-width="13" stroke="#3f3f3f" fill="none"/>
+ <g id="svg_11">
+ <line id="svg_4" y2="65.94563" x2="83.07683" y1="28.27895" x1="45.41017" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none"/>
+ <line id="svg_5" y2="15.01293" x2="109.41467" y1="65.94638" x1="109.41467" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none"/>
+ <line id="svg_6" y2="29.31928" x2="177.58937" y1="65.94638" x1="140.96227" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none"/>
+ </g>
+ <g id="svg_12" transform="rotate(-180, 108, 172.111)">
+ <line y2="190.94563" x2="79.57683" y1="153.27895" x1="41.91017" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none" id="svg_13"/>
+ <line y2="140.01293" x2="105.91467" y1="190.94638" x1="105.91467" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none" id="svg_14"/>
+ <line y2="154.31928" x2="174.08937" y1="190.94638" x1="137.46227" stroke-linecap="round" stroke-width="8" stroke="#007fff" fill="none" id="svg_15"/>
+ </g>
+ <path transform="rotate(-180, 172.125, 108.926)" id="svg_2" d="m215.5,118.44901c-4.5,13.58499 -14.6655,11.5 -28.25,11.5l-34,0c-13.5845,0 -24.5,-7.16501 -24.5,-21.5c0,-14.3343 10.9155,-20.4998 24.5,-20.4998l34,0c13.5845,0 19.75,-2.3345 26.5,10.75" stroke-width="13" stroke="#3f3f3f" fill="none"/>
+</svg>
+</g>
+
+<g id="width">
+ <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+ <path id="svg_6" d="m19,42.5l-7.5,7.5l7.5,7.5l0,-15zm0,7.5l62,0l0,-7.5l7.5,7.5l-7.5,7.5l0,-7.5" stroke-width="8" stroke="#000000" fill="#000000"/>
+ </svg>
+</g>
+
+<g id="height">
+ <svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+ <path transform="rotate(90, 50, 50)" fill="#000000" stroke="#000000" stroke-width="8" d="m19,42.5l-7.5,7.5l7.5,7.5l0,-15zm0,7.5l62,0l0,-7.5l7.5,7.5l-7.5,7.5l0,-7.5" id="svg_6"/>
+ </svg>
+</g>
+
+<g id="c_radius">
+<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg">
+ <rect stroke="#404040" fill="none" stroke-width="0.5" x="2.37501" y="2.4375" width="43.9375" height="43.9375" id="svg_1" rx="13" ry="13"/>
+ <path fill="none" stroke="#000000" d="m2.43674,15.88952l13.73722,0l0.08978,-13.46483m0.08978,14.08493" id="svg_3"/>
+ <line fill="none" stroke="#000000" x1="16.35107" y1="15.88934" x2="5.20504" y2="5.20504" id="svg_4" stroke-dasharray="2,2"/>
+</svg>
+</g>
+
+<g id="angle">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" stroke-dasharray="1,3" id="svg_6" d="m32.78778,41.03469c-0.40379,-8.68145 -4.50873,-16.79003 -12.11365,-20.5932" stroke="#000000" fill="none"/>
+ <path id="svg_7" d="m29.20348,7.67055l-24.20348,34.47921l41.16472,0" stroke-width="3" stroke="#404040" fill="none"/>
+</svg>
+</g>
+
+<g id="blur">
+<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <filter id="svg_4_blur" x="-50%" y="-50%" width="200%" height="200%">
+ <feGaussianBlur stdDeviation="25"/>
+ </filter>
+ </defs>
+ <circle fill="#000000" stroke="#000000" stroke-width="5" stroke-dasharray="null" cx="150" cy="150" r="91.80151" id="svg_4" filter="url(#svg_4_blur)"/>
+</svg>
+</g>
+
+<g id="fontsize">
+<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
+ <text fill="#606060" stroke="none" x="14.451" y="41.4587" id="svg_2" font-size="26" font-family="serif" text-anchor="middle">T</text>
+ <text fill="#000000" stroke="none" x="28.853" y="41.8685" font-size="52" font-family="serif" text-anchor="middle" xml:space="preserve" id="svg_3">T</text>
+</svg>
+</g>
+
+<g id="align">
+ <svg width="22" height="22" xmlns="http://www.w3.org/2000/svg">
+ <rect stroke="#606060" fill="#c0c0c0" id="svg_4" height="7" width="12" y="7.5" x="4.5"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="9.5"/>
+ <rect stroke="#ffffff" fill="none" id="svg_5" height="5" width="10" y="8.5" x="5.5"/>
+ </svg>
+</g>
+
+<g id="align_left">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
+ <rect stroke="#606060" fill="#ffffff" id="svg_4" height="7" width="12" y="2.5" x="2.5"/>
+ <rect stroke="none" fill="#c0c0c0" id="svg_5" height="4" width="11" y="4" x="2"/>
+ <rect id="svg_6" stroke="#606060" fill="#ffffff" height="7" width="18" y="12.5" x="2.5"/>
+ <rect id="svg_7" stroke="none" fill="#c0c0c0" height="4" width="17" y="14" x="2"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="1.5"/>
+ </svg>
+</g>
+
+<g id="align_center">
+ <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="1.5" y="12.5" width="18" height="7" fill="#c0c0c0" stroke="#606060" id="svg_6"/>
+ <rect x="4.5" y="2.5" width="12" height="7" id="svg_4" fill="#c0c0c0" stroke="#606060"/>
+ <rect x="9.5" y="-10" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
+ <rect x="2.5" y="13.5" width="16" height="5" fill="none" stroke="#ffffff" id="svg_7"/>
+ <rect x="5.5" y="3.5" width="10" height="5" id="svg_5" fill="none" stroke="#ffffff"/>
+ </svg>
+</g>
+
+<g id="align_right">
+ <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="7.5" y="2.5" width="12" height="7" id="svg_4" fill="#ffffff" stroke="#606060"/>
+ <rect x="9" y="4" width="11" height="4" id="svg_5" fill="#c0c0c0" stroke="none"/>
+ <rect x="1.5" y="12.5" width="18" height="7" fill="#ffffff" stroke="#606060" id="svg_6"/>
+ <rect x="3" y="14" width="17" height="4" fill="#c0c0c0" stroke="none" id="svg_7"/>
+ <rect x="18.5" y="-10" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
+ </svg>
+</g>
+
+<g id="align_top">
+ <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <g transform="rotate(90, 11, 11)" id="svg_1">
+ <rect x="2.5" y="3.5" width="12" height="7" id="svg_4" fill="#ffffff" stroke="#606060"/>
+ <rect x="2" y="5" width="11" height="4" id="svg_5" fill="#c0c0c0" stroke="none"/>
+ <rect x="2.5" y="13.5" width="18" height="7" fill="#ffffff" stroke="#606060" id="svg_6"/>
+ <rect x="2" y="15" width="17" height="4" fill="#c0c0c0" stroke="none" id="svg_7"/>
+ <rect x="1.5" y="-9" width="2" height="40" id="svg_2" fill="#ef9a23" stroke="#c15909"/>
+ </g>
+ </svg>
+</g>
+
+<g id="align_middle">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
+ <g transform="rotate(90, 12, 11.5)" id="svg_1">
+ <rect id="svg_6" stroke="#606060" fill="#c0c0c0" height="7" width="18" y="14" x="3"/>
+ <rect stroke="#606060" fill="#c0c0c0" id="svg_4" height="7" width="12" y="4" x="6"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-8.5" x="11"/>
+ <rect id="svg_7" stroke="#ffffff" fill="none" height="5" width="16" y="15" x="4"/>
+ <rect stroke="#ffffff" fill="none" id="svg_5" height="5" width="10" y="5" x="7"/>
+ </g>
+</svg>
+</g>
+
+<g id="align_bottom">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
+ <g transform="rotate(90, 11, 11)" id="svg_1">
+ <rect stroke="#606060" fill="#ffffff" id="svg_4" height="7" width="12" y="2.5" x="7.5"/>
+ <rect stroke="none" fill="#c0c0c0" id="svg_5" height="4" width="11" y="4" x="9"/>
+ <rect id="svg_6" stroke="#606060" fill="#ffffff" height="7" width="18" y="12.5" x="1.5"/>
+ <rect id="svg_7" stroke="none" fill="#c0c0c0" height="4" width="17" y="14" x="3"/>
+ <rect stroke="#c15909" fill="#ef9a23" id="svg_2" height="40" width="2" y="-10" x="18.5"/>
+ </g>
+</svg>
+</g>
+
+<g id="linecap_butt">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient id="svg_8" x1="0.8" y1="1" x2="0.2" y2="1">
+ <stop offset="0" stop-color="#000000" stop-opacity="1"/>
+ <stop offset="1" stop-color="#000000" stop-opacity="0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <rect fill="url(#svg_8)" stroke="#a0a0a0" stroke-width="2" x="-15.20196" y="43.5974" width="94.8373" height="50.3728" id="svg_3" transform="rotate(-45, 32.2148, 68.7832)"/>
+ <path id="svg_1" d="m6.63133,95.07755l59.17514,-59.17514" stroke-width="3" stroke="#00ffff" fill="none"/>
+ <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
+ </g>
+</svg>
+</g>
+
+<g id="linecap_square">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:se="http://svg-edit.googlecode.com" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient id="svg_8" x1="0.8" y1="1" x2="0.2" y2="1">
+ <stop offset="0" stop-color="#000000" stop-opacity="1"/>
+ <stop offset="1" stop-color="#000000" stop-opacity="0"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <rect fill="url(#svg_8)" stroke="none" x="-18.51568" y="35.5974" width="117.46469" height="50.3728" id="svg_3" transform="rotate(-45, 40.2168, 60.7832)"/>
+ <path id="svg_1" d="m6.63133,95.07755l59.17514,-59.17514" stroke-width="3" stroke="#00ffff" fill="none"/>
+ <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
+ </g>
+</svg>
+</g>
+
+<g id="linecap_round">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path transform="rotate(-45, 41.5117, 59.4648)" id="svg_3" d="m-19.0679,34.2946l94.8359,0c36.499,-1.4142 33.67101,48.9569 0,50.3711l-94.8359,0l0,-50.3711z" stroke-width="2" stroke="#a0a0a0" fill="url(#svg_8)"/>
+ <path id="svg_1" d="m6.63133,95.07755l59.17515,-59.17515" stroke-width="3" stroke="#00ffff" fill="none"/>
+ <path id="svg_2" d="m51.62893,36.10742l13.05662,-13.05662l13.05661,13.05662l-13.05661,13.05662l-13.05662,-13.05662z" stroke="none" fill="#00ffff"/>
+ </g>
+</svg>
+</g>
+
+<g id="linejoin_miter">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
+ <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
+ <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="linejoin_bevel">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path stroke-linejoin="bevel" fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
+ <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
+ <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="linejoin_round">
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://svg-edit.googlecode.com">
+ <!-- Created with SVG-edit - http://svg-edit.googlecode.com/ -->
+ <defs>
+ <linearGradient y2="1" x2="0.2" y1="1" x1="0.8" id="svg_8">
+ <stop stop-opacity="1" stop-color="#000000" offset="0"/>
+ <stop stop-opacity="0" stop-color="#000000" offset="1"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <path stroke-linejoin="round" fill="none" stroke="url(#svg_8)" stroke-width="49" d="m-15,-35l75,85l-75,75" id="svg_6"/>
+ <path transform="rotate(90, 57.8925, 50.2519)" fill="#00ffff" stroke="none" d="m44.83592,50.25187l13.05661,-13.05663l13.05661,13.05663l-13.05661,13.05662l-13.05661,-13.05662z" id="svg_2"/>
+ <path id="svg_4" d="m-15,-35l75,85l-75,75" stroke-width="3" stroke="#00ffff" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="eye">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 17">
+ <defs>
+ <linearGradient y2="0.79688" x2="0.5625" y1="0.19141" x1="0.42969" id="svg_91">
+ <stop stop-opacity="1" stop-color="#d3a16b" offset="0"/>
+ <stop stop-opacity="1" stop-color="#a37c53" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="none" fill="url(#svg_91)" id="svg_9" d="m0.12852,8.18338c3.59931,-7.71208 13.19749,-7.36932 16.75236,0.08569c-3.02165,7.5407 -13.59741,7.66924 -16.75236,-0.08569z"/>
+ <path id="svg_76" stroke="none" fill="#ffffff" d="m0.33033,8.2557c3.5173,-4.97159 12.89675,-4.75063 16.37062,0.05524c-2.95279,4.86111 -13.28756,4.94397 -16.37062,-0.05524z"/>
+ <circle stroke="none" fill="#4f92c1" id="svg_88" r="3.08008" cy="7.71116" cx="8.45861"/>
+ <circle stroke="none" fill="#000000" id="svg_89" r="1.27539" cy="7.6539" cx="8.43159"/>
+ </svg>
+</g>
+
+<g id="no_color">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <line fill="none" stroke="#d40000" id="svg_90" y2="24" x2="24" y1="0" x1="0"/>
+ <line id="svg_92" fill="none" stroke="#d40000" y2="24" x2="0" y1="0" x1="24"/>
+ </svg>
+</g>
+
+<g id="ok">
+ <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0.65625" x2="0.94141" y1="0.43359" x1="0.42969" id="svg_106">
+ <stop stop-opacity="1" stop-color="#38ff45" offset="0"/>
+ <stop stop-opacity="1" stop-color="#127c0c" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path transform="rotate(45, 12, 10)" stroke="#005500" fill="url(#svg_106)" id="svg_101" d="m7.9,15.9l4.9,-0.05l0,-13.75l3.8,0l0,17.6l-8.7,0l0,-3.8z"/>
+ </svg>
+</g>
+
+<g id="cancel">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0.65625" x2="0.94141" y1="0.43359" x1="0.42969" id="svg_9">
+ <stop stop-opacity="1" stop-color="#ff3838" offset="0"/>
+ <stop stop-opacity="1" stop-color="#7a0c0c" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path stroke="#550000" fill="url(#svg_9)" id="svg_101" d="m2.10526,10.52632l7.36842,0l0,-7.36842l3.68421,0l0,7.36842l7.36842,0l0,3.68421l-7.36842,0l0,7.36842l-3.68421,0l0,-7.36842l-7.36842,0l0,-3.68421z" transform="rotate(45, 11.3, 12.3)"/>
+ </svg>
+</g>
+
+<g id="warning">
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <defs>
+ <linearGradient y2="0.98047" x2="0.57813" y1="0.44922" x1="0.56641" id="svg_110">
+ <stop stop-opacity="1" stop-color="#ffff00" offset="0"/>
+ <stop stop-opacity="1" stop-color="#9e9e00" offset="1"/>
+ </linearGradient>
+ </defs>
+ <path d="m1.42857,21.55559l10.71429,-19.36489l10.71429,19.20352l-21.42857,0.16137z" id="svg_44" fill="url(#svg_110)" stroke="#916d1f" stroke-width="2"/>
+ <path stroke="none" fill="#000000" id="svg_103" d="m11.98371,14.68571c-0.57143,-3.82857 -1.82857,-6.4 0.11429,-6.4c2.11429,0 0.74286,2.57143 0.11429,6.4l-0.22857,0z"/>
+ <circle stroke="none" fill="#000000" id="svg_104" r="1.17578" cy="17.37143" cx="12.14308"/>
+ </svg>
+</g>
+
+<g id="node_delete">
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
+ <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
+ <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
+ <circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
+ <g transform="rotate(-45.291072845458984 9.81157112121582,9.244086265563965) " id="svg_6">
+ <line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
+ <line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="node_clone">
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
+ <path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
+ <circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
+ <circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
+ <circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
+ <line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
+ <line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
+</svg>
+</g>
+
+<g id="globe_link">
+<svg width="66" height="66" xmlns="http://www.w3.org/2000/svg">
+ <defs>
+ <radialGradient id="svg_8" spreadMethod="pad" cx="0.5" cy="0.32513">
+ <stop stop-color="#7791ef" stop-opacity="0.99219" offset="0"/>
+ <stop stop-color="#3c3cfc" offset="1"/>
+ </radialGradient>
+ <linearGradient id="svg_10" x1="0" y1="0" x2="1" y2="0">
+ <stop offset="0" stop-color="#333333" stop-opacity="0.99609"/>
+ <stop offset="1" stop-opacity="0.99609" stop-color="#666666"/>
+ </linearGradient>
+ </defs>
+ <g>
+ <title>Layer 1</title>
+ <g opacity="0.8" id="svg_5">
+ <circle id="svg_1" r="27.90625" cy="33" cx="33" stroke-width="0" stroke="#AAAAAA" fill="url(#svg_8)"/>
+ <g id="svg_7">
+ <path d="m38.2478,36.06121c-0.43732,0 -0.87463,0 -1.31195,0c-0.43731,0 -0.87463,0 -2.6239,0c-0.87463,0 -1.74926,0 -2.18658,0c-0.43732,0 -2.19828,0.33684 -2.6239,0.43732c-0.95172,0.22467 -1.27098,0.48253 -1.74927,0.87463c-1.21939,0.99965 -1.44004,1.00272 -1.74926,1.31195c-0.30923,0.30923 -0.21265,0.79756 -0.43732,1.74926c-0.10048,0.42562 0.16736,0.90792 0,1.31195c-0.23668,0.57138 -0.43732,0.87463 -0.43732,1.74926c0,0.43732 0.12809,0.56541 0.43732,0.87463c0.30923,0.30923 0.12809,0.56541 0.43732,0.87463c0.30923,0.30923 1.32364,0.77415 1.74926,0.87463c0.95171,0.22467 0.69349,0.69349 1.31195,1.31195c0.30923,0.30923 0.90791,-0.16736 1.31195,0c0.57138,0.23668 0.56541,0.56541 0.87463,0.87463c0.30923,0.30923 0.56541,0.12809 0.87463,0.43732c0.61846,0.61846 -0.10048,1.32365 0,1.74926c0.22467,0.95171 0.43732,1.31195 0.43732,2.6239c0,0.87463 0,2.18658 0,3.06121c0,0.43732 0,1.31195 0,2.6239c0,0.43732 0.12809,1.00272 0.43732,1.31195c0.30922,0.30923 1.31195,0 1.74926,0c0.87463,0 1.31195,0 1.74927,0c0.43731,0 0.6065,-0.40129 1.74926,-0.87464c0.40403,-0.16736 0.74057,-0.20064 1.31195,-0.43732c0.40403,-0.16736 0.63795,-0.74057 0.87463,-1.31195c0.16736,-0.40403 0.15712,-2.20917 0.43732,-3.93585c0.22151,-1.36505 0.43732,-2.18658 0.43732,-2.6239c0,-0.43732 -0.12928,-0.88101 0,-2.18658c0.21973,-2.21904 0.43732,-3.49853 0.43732,-3.93585c0,-0.43732 0,-0.87463 0,-1.74927c0,-1.31195 0.16736,-1.78254 0,-2.18658c-0.23668,-0.57138 -1.00272,-0.56541 -1.31195,-0.87463c-0.30923,-0.30922 -0.43732,-0.43731 -1.74926,-1.74926l0,-0.87463l-0.43732,0l0,-0.43732" id="svg_2" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ <path d="m5.66773,37.0452c1.12973,-0.3645 0.87463,-0.2187 1.74927,-0.656c0.87463,-0.4373 1.34081,-0.8211 2.18658,-1.3119c1.36372,-0.7915 1.44002,-1.4401 1.74922,-1.7493c0.3093,-0.3092 0.1281,-0.5654 0.4374,-0.8746c0.6184,-0.6185 0.8746,-0.4374 1.7492,-1.312c0.8747,-0.8746 1.0027,-1.0027 1.312,-1.3119c0.6184,-0.6185 0.1281,-1.0028 0.4373,-1.312c0.3092,-0.3092 0,-0.8746 0,-1.3119c0,-0.4374 0,-1.312 0,-1.7493c0,-0.4373 0.2009,-1.7727 0,-2.6239c-0.2247,-0.9517 -0.1281,-1.4401 -0.4373,-1.7493c-0.3093,-0.3092 -0.7073,-1.3452 -0.8746,-1.7492c-0.2367,-0.5714 -0.8747,-0.8747 -0.8747,-1.312c0,-0.4373 -0.4373,-0.4373 -0.4373,-0.8746l0,-0.4374l-1.2026,-0.8746c-3.7901,5.8674 -6.81486,11.6253 -5.79446,21.2099l-0.00001,0z" id="svg_3" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ <path d="m52.2419,13.1021c-0.4373,0.4373 -1.3495,0.8398 -2.1866,1.0933c-3.0182,0.9138 -3.2212,2.2857 -3.4985,2.6239c-1.4137,1.7245 -2.4979,1.3039 -4.8105,1.7493c-0.4294,0.0827 -0.4373,0.4373 -0.8746,0.4373c-0.4373,0 -0.8746,0 -1.312,0c-0.4373,0 -1.3119,0 -1.7492,0c-0.4373,0 -1.3453,-0.27 -1.7493,-0.4373c-0.5714,-0.2367 -0.5654,-0.5654 -0.8746,-0.8747c-0.3092,-0.3092 -0.5654,-0.1281 -0.8746,-0.4373c-0.3093,-0.3092 -0.8747,0 -1.312,0c-0.4373,0 -0.9079,-0.1673 -1.3119,0c-0.5714,0.2367 -0.3033,1.0753 -0.8747,1.312c-0.404,0.1673 -0.1281,0.5654 -0.4373,0.8746c-0.3092,0.3092 -0.4373,0.4373 -0.4373,0.8746c0,0.4373 0,0.8747 0,1.312c0,0.4373 0.0333,0.7073 0.4373,0.8746c0.5714,0.2367 0.638,0.7406 0.8746,1.312c0.1674,0.404 0.4374,0.4373 0.4374,0.8746c0,0.4373 0,0.8746 0,1.3119c0,0.4374 -0.4374,0.4374 -0.8747,0.8747c-1.3119,1.3119 -1.9499,1.1779 -2.1865,1.7492c-0.1674,0.4041 -1.0753,0.3033 -1.312,0.8747c-0.1674,0.404 0,0.8746 0.4373,0.8746c0.4373,0 0.8746,0.4373 1.312,0.4373c0.4373,0 0.8746,-0.4373 1.3119,-0.4373c0.4373,0 0.5654,-0.1281 0.8746,-0.4373c0.6185,-0.6185 1.312,0 1.7493,0c0.4373,0 0.397,-0.6543 2.1866,-0.8747c0.434,-0.0534 2.8801,-0.2561 3.4985,-0.8746c0.3093,-0.3092 0.8343,-0.6543 2.6239,-0.8746c0.4341,-0.0535 0.8747,0 1.312,0c0.4373,0 0.8746,0.4373 0.8746,0.8746c0,0.4373 0.4373,0.4373 0.4373,0.8746c0,0.4374 0.5654,2.3147 0.8746,2.6239c0.3093,0.3093 0.1281,1.0028 0.4374,1.312c0.3092,0.3092 2.1095,2.8366 3.0612,3.0612c0.4256,0.1005 0.8215,0.2158 2.1866,0.4373c0.4316,0.0701 1.3119,0 1.7492,0c0.4373,0 0.8864,0.1005 1.312,0c0.9517,-0.2246 1.44,-0.5654 1.7492,-0.8746c0.3093,-0.3092 0.8747,-0.4373 1.312,-0.4373c0.4373,0 0.5654,-0.5654 0.8746,-0.8746c0.3092,-0.3093 0.8746,0 1.312,0l1.0933,-0.656c1.1661,-7.7259 -2.4782,-14.1399 -7.6531,-20.5539l0,0z" id="svg_4" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ <path id="svg_6" d="m10.0409,48.3061c2.1137,-0.2187 4.6647,-0.2187 6.3411,1.9679c1.1662,1.5306 1.239,3.7172 0.2186,4.5918c-2.4052,-0.8746 -5.0291,-2.6239 -6.5597,-6.5597l0,0z" stroke="#007f00" fill="#44b544" stroke-width="0"/>
+ </g>
+ </g>
+ <rect transform="rotate(45, 16.9336, 16.9375)" ry="9" rx="9" id="svg_9" height="19.32339" width="29.34293" y="7.27574" x="2.26257" stroke-width="5" stroke="url(#svg_10)" fill="none" stroke-linecap="round"/>
+ <rect id="svg_11" transform="rotate(45, 49.0664, 49.0625)" ry="9" rx="9" height="19.32339" width="29.34293" y="39.40074" x="34.39538" stroke-width="5" stroke="url(#svg_10)" fill="none" stroke-linecap="round"/>
+ <line id="svg_12" y2="45.75" x2="45.75" y1="20.25" x1="20.25" stroke-linecap="round" stroke-width="5" stroke="url(#svg_10)" fill="none"/>
+ </g>
+</svg>
+</g>
+
+<g id="svg_eof"/>
+
+</svg>
diff --git a/files_svgedit/svg-edit/images/svg_edit_icons.svgz b/files_svgedit/svg-edit/images/svg_edit_icons.svgz
new file mode 100644
index 000000000..cb8c80cc5
--- /dev/null
+++ b/files_svgedit/svg-edit/images/svg_edit_icons.svgz
Binary files differ
diff --git a/files_svgedit/svg-edit/images/text.png b/files_svgedit/svg-edit/images/text.png
new file mode 100644
index 000000000..5652e2fab
--- /dev/null
+++ b/files_svgedit/svg-edit/images/text.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/text.svg b/files_svgedit/svg-edit/images/text.svg
new file mode 100644
index 000000000..5c28753c3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/text.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22.000000px"
+ height="22.000000px"
+ id="svg1306"
+ sodipodi:version="0.32"
+ inkscape:version="0.42.2"
+ sodipodi:docbase="/home/andreas/projekt/bild/tango/22"
+ sodipodi:docname="draw-text2.svg">
+ <defs
+ id="defs1308">
+ <linearGradient
+ id="linearGradient3682">
+ <stop
+ style="stop-color:#1f1f1f;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop3684" />
+ <stop
+ style="stop-color:#5c5c5c;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop3686" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3558">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3560" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3562" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3558"
+ id="radialGradient3564"
+ cx="22.571428"
+ cy="30.857143"
+ fx="22.571428"
+ fy="30.857143"
+ r="15.571428"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.300378e-15,10.75754)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient2834">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2836" />
+ <stop
+ style="stop-color:#b3b3b3;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop2838" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2834"
+ id="linearGradient2840"
+ x1="19.944447"
+ y1="16.527262"
+ x2="24.133829"
+ y2="19.642126"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.498259,0.000000,0.000000,0.466519,-0.799974,-0.839637)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3682"
+ id="linearGradient3688"
+ x1="23.305620"
+ y1="24.843527"
+ x2="14.388516"
+ y2="9.5902243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.498259,0.000000,0.000000,0.488600,-0.799974,-1.273557)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.000000"
+ inkscape:cx="17.541947"
+ inkscape:cy="12.572768"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1280"
+ inkscape:window-height="885"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata1311">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.47368422;color:#000000;fill:url(#radialGradient3564);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
+ id="path3556"
+ sodipodi:cx="22.571428"
+ sodipodi:cy="30.857143"
+ sodipodi:rx="15.571428"
+ sodipodi:ry="10.142858"
+ d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7.0000000,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
+ transform="matrix(0.706422,0.000000,0.000000,0.208015,-4.944952,13.47138)" />
+ <path
+ style="font-size:54.869392px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient3688);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.0000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
+ d="M 15.189363,15.520771 L 7.1531447,15.520771 L 5.8598048,19.513834 L 0.51627279,19.513834 L 8.1009381,0.48837876 L 14.228221,0.48837876 L 21.560524,19.464779 L 16.444188,19.464779 L 15.189363,15.520771 M 8.3990779,12.473977 L 13.858901,12.473977 L 11.171254,5.1526958 L 8.3990779,12.473977"
+ id="text1314"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ style="font-size:54.869392px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;opacity:0.37912086;fill:none;fill-opacity:1.0000000;stroke:url(#linearGradient2840);stroke-width:1.0000008;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
+ d="M 15.684541,15.159554 L 6.6710758,15.159554 L 5.4166733,18.527305 L 2.0035414,18.527305 L 8.7384662,1.4621947 L 13.512484,1.4621947 L 20.022564,18.410463 L 16.899702,18.410463 L 15.684541,15.159554 z "
+ id="path2047"
+ sodipodi:nodetypes="ccccccccc" />
+ <image
+ id="image2089"
+ height="459.00000"
+ width="400.00000"
+ sodipodi:absref="/home/andreas/palette2.png"
+ xlink:href="/home/andreas/palette2.png"
+ x="-354.93631"
+ y="-214.53793" />
+ <path
+ style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#999999;stroke-width:1.0000007;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000;opacity:0.51098901"
+ d="M 8.1686844,13.551882 L 14.147791,13.551882"
+ id="path5142"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/files_svgedit/svg-edit/images/to_path.png b/files_svgedit/svg-edit/images/to_path.png
new file mode 100644
index 000000000..4209828db
--- /dev/null
+++ b/files_svgedit/svg-edit/images/to_path.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/undo.png b/files_svgedit/svg-edit/images/undo.png
new file mode 100644
index 000000000..cd4ab955f
--- /dev/null
+++ b/files_svgedit/svg-edit/images/undo.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/view-refresh.png b/files_svgedit/svg-edit/images/view-refresh.png
new file mode 100644
index 000000000..3fd71d6e5
--- /dev/null
+++ b/files_svgedit/svg-edit/images/view-refresh.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/wave.png b/files_svgedit/svg-edit/images/wave.png
new file mode 100644
index 000000000..10fa7122d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/wave.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/wireframe.png b/files_svgedit/svg-edit/images/wireframe.png
new file mode 100644
index 000000000..89db7e9e3
--- /dev/null
+++ b/files_svgedit/svg-edit/images/wireframe.png
Binary files differ
diff --git a/files_svgedit/svg-edit/images/zoom.png b/files_svgedit/svg-edit/images/zoom.png
new file mode 100644
index 000000000..c4fb6f17d
--- /dev/null
+++ b/files_svgedit/svg-edit/images/zoom.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/all-wcprops b/files_svgedit/svg-edit/jgraduate/.svn/all-wcprops
new file mode 100644
index 000000000..dc5719f07
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/all-wcprops
@@ -0,0 +1,35 @@
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/1985/trunk/editor/jgraduate
+END
+jquery.jgraduate.js
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/1985/trunk/editor/jgraduate/jquery.jgraduate.js
+END
+jquery.jgraduate.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/1985/trunk/editor/jgraduate/jquery.jgraduate.min.js
+END
+LICENSE
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/346/trunk/editor/jgraduate/LICENSE
+END
+jpicker.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1985/trunk/editor/jgraduate/jpicker.min.js
+END
+README
+K 25
+svn:wc:ra_dav:version-url
+V 47
+/svn/!svn/ver/346/trunk/editor/jgraduate/README
+END
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/entries b/files_svgedit/svg-edit/jgraduate/.svn/entries
new file mode 100644
index 000000000..bbe06030d
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/entries
@@ -0,0 +1,204 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/jgraduate
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jquery.jgraduate.js
+file
+
+
+
+
+2012-03-25T18:41:47.432355Z
+ff99b45133d835543425db21e7d6d535
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+37174
+
+jquery.jgraduate.min.js
+file
+
+
+
+
+2012-03-25T18:41:47.436355Z
+631fa882e3a244d9fe43f3f38fe12030
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+19600
+
+LICENSE
+file
+
+
+
+
+2012-03-25T18:41:47.436355Z
+3b83ef96387f14655fc854ddc3c6bd57
+2009-07-30T22:45:59.713345Z
+346
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11358
+
+jpicker.min.js
+file
+
+
+
+
+2012-03-25T18:41:47.436355Z
+0d7b0098067125b5d5402193cd0f7b3e
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+36489
+
+images
+dir
+
+css
+dir
+
+README
+file
+
+
+
+
+2012-03-25T18:41:47.436355Z
+f80b46b3e71fb6a8120315ce57a51633
+2009-07-30T22:45:59.713345Z
+346
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+123
+
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jpicker.min.js.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jpicker.min.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jpicker.min.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.js.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.min.js.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.min.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/prop-base/jquery.jgraduate.min.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/text-base/LICENSE.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/text-base/LICENSE.svn-base
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/text-base/LICENSE.svn-base
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/text-base/README.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/text-base/README.svn-base
new file mode 100644
index 000000000..ef3e21ff8
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/text-base/README.svn-base
@@ -0,0 +1,3 @@
+jGraduate - A jQuery plugin for picking gradients
+
+Licensed under the Apache License 2. See LICENSE for more information.
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/text-base/jpicker.min.js.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/text-base/jpicker.min.js.svn-base
new file mode 100644
index 000000000..36c4836b0
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/text-base/jpicker.min.js.svn-base
@@ -0,0 +1 @@
+(function(e,a){Math.precision=function(j,h){if(h===undefined){h=0}return Math.round(j*Math.pow(10,h))/Math.pow(10,h)};var d=function(z,k){var o=this,j=z.find("img:first"),F=0,E=100,w=100,D=0,C=100,v=100,s=0,p=0,n,q,u=new Array(),l=function(y){for(var x=0;x<u.length;x++){u[x].call(o,o,y)}},H=function(x){var y=z.offset();n={l:y.left|0,t:y.top|0};clearTimeout(q);q=setTimeout(function(){A.call(o,x)},0);e(document).bind("mousemove",h).bind("mouseup",B);x.preventDefault()},h=function(x){clearTimeout(q);q=setTimeout(function(){A.call(o,x)},0);x.stopPropagation();x.preventDefault();return false},B=function(x){e(document).unbind("mouseup",B).unbind("mousemove",h);x.stopPropagation();x.preventDefault();return false},A=function(M){var K=M.pageX-n.l,x=M.pageY-n.t,L=z.w,y=z.h;if(K<0){K=0}else{if(K>L){K=L}}if(x<0){x=0}else{if(x>y){x=y}}J.call(o,"xy",{x:((K/L)*w)+F,y:((x/y)*v)+D})},r=function(){var L=0,x=0,N=z.w,K=z.h,M=j.w,y=j.h;setTimeout(function(){if(w>0){if(s==E){L=N}else{L=((s/w)*N)|0}}if(v>0){if(p==C){x=K}else{x=((p/v)*K)|0}}if(M>=N){L=(N>>1)-(M>>1)}else{L-=M>>1}if(y>=K){x=(K>>1)-(y>>1)}else{x-=y>>1}j.css({left:L+"px",top:x+"px"})},0)},J=function(x,K,y){var O=K!==undefined;if(!O){if(x===undefined||x==null){x="xy"}switch(x.toLowerCase()){case"x":return s;case"y":return p;case"xy":default:return{x:s,y:p}}}if(y!=null&&y==o){return}var N=false,M,L;if(x==null){x="xy"}switch(x.toLowerCase()){case"x":M=K&&(K.x&&K.x|0||K|0)||0;break;case"y":L=K&&(K.y&&K.y|0||K|0)||0;break;case"xy":default:M=K&&K.x&&K.x|0||0;L=K&&K.y&&K.y|0||0;break}if(M!=null){if(M<F){M=F}else{if(M>E){M=E}}if(s!=M){s=M;N=true}}if(L!=null){if(L<D){L=D}else{if(L>C){L=C}}if(p!=L){p=L;N=true}}N&&l.call(o,y||o)},t=function(x,L){var P=L!==undefined;if(!P){if(x===undefined||x==null){x="all"}switch(x.toLowerCase()){case"minx":return F;case"maxx":return E;case"rangex":return{minX:F,maxX:E,rangeX:w};case"miny":return D;case"maxy":return C;case"rangey":return{minY:D,maxY:C,rangeY:v};case"all":default:return{minX:F,maxX:E,rangeX:w,minY:D,maxY:C,rangeY:v}}}var O=false,N,K,M,y;if(x==null){x="all"}switch(x.toLowerCase()){case"minx":N=L&&(L.minX&&L.minX|0||L|0)||0;break;case"maxx":K=L&&(L.maxX&&L.maxX|0||L|0)||0;break;case"rangex":N=L&&L.minX&&L.minX|0||0;K=L&&L.maxX&&L.maxX|0||0;break;case"miny":M=L&&(L.minY&&L.minY|0||L|0)||0;break;case"maxy":y=L&&(L.maxY&&L.maxY|0||L|0)||0;break;case"rangey":M=L&&L.minY&&L.minY|0||0;y=L&&L.maxY&&L.maxY|0||0;break;case"all":default:N=L&&L.minX&&L.minX|0||0;K=L&&L.maxX&&L.maxX|0||0;M=L&&L.minY&&L.minY|0||0;y=L&&L.maxY&&L.maxY|0||0;break}if(N!=null&&F!=N){F=N;w=E-F}if(K!=null&&E!=K){E=K;w=E-F}if(M!=null&&D!=M){D=M;v=C-D}if(y!=null&&C!=y){C=y;v=C-D}},I=function(x){if(e.isFunction(x)){u.push(x)}},m=function(y){if(!e.isFunction(y)){return}var x;while((x=e.inArray(y,u))!=-1){u.splice(x,1)}},G=function(){e(document).unbind("mouseup",B).unbind("mousemove",h);z.unbind("mousedown",H);z=null;j=null;u=null};e.extend(true,o,{val:J,range:t,bind:I,unbind:m,destroy:G});j.src=k.arrow&&k.arrow.image;j.w=k.arrow&&k.arrow.width||j.width();j.h=k.arrow&&k.arrow.height||j.height();z.w=k.map&&k.map.width||z.width();z.h=k.map&&k.map.height||z.height();z.bind("mousedown",H);I.call(o,r)},b=function(u,z,k,y){var q=this,l=u.find("td.Text input"),r=l.eq(3),v=l.eq(4),h=l.eq(5),o=l.length>7?l.eq(6):null,n=l.eq(0),p=l.eq(1),x=l.eq(2),s=l.eq(l.length>7?7:6),B=l.length>7?l.eq(8):null,w=function(D){if(D.target.value==""&&D.target!=s.get(0)&&(k!=null&&D.target!=k.get(0)||k==null)){return}if(!t(D)){return D}switch(D.target){case r.get(0):r.val(j.call(q,r.val(),0,255));z.val("r",r.val(),D.target);break;case v.get(0):v.val(j.call(q,v.val(),0,255));z.val("g",v.val(),D.target);break;case h.get(0):h.val(j.call(q,h.val(),0,255));z.val("b",h.val(),D.target);break;case o&&o.get(0):o.val(j.call(q,o.val(),0,100));z.val("a",Math.precision((o.val()*255)/100,y),D.target);break;case n.get(0):n.val(j.call(q,n.val(),0,360));z.val("h",n.val(),D.target);break;case p.get(0):p.val(j.call(q,p.val(),0,100));z.val("s",p.val(),D.target);break;case x.get(0):x.val(j.call(q,x.val(),0,100));z.val("v",x.val(),D.target);break;case s.get(0):s.val(s.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,6));k&&k.val(s.val());z.val("hex",s.val()!=""?s.val():null,D.target);break;case k&&k.get(0):k.val(k.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,6));s.val(k.val());z.val("hex",k.val()!=""?k.val():null,D.target);break;case B&&B.get(0):B.val(B.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,2));z.val("a",B.val()!=null?parseInt(B.val(),16):null,D.target);break}},A=function(D){if(z.val()!=null){switch(D.target){case r.get(0):r.val(z.val("r"));break;case v.get(0):v.val(z.val("g"));break;case h.get(0):h.val(z.val("b"));break;case o&&o.get(0):o.val(Math.precision((z.val("a")*100)/255,y));break;case n.get(0):n.val(z.val("h"));break;case p.get(0):p.val(z.val("s"));break;case x.get(0):x.val(z.val("v"));break;case s.get(0):case k&&k.get(0):s.val(z.val("hex"));k&&k.val(z.val("hex"));break;case B&&B.get(0):B.val(z.val("ahex").substring(6));break}}},t=function(D){switch(D.keyCode){case 9:case 16:case 29:case 37:case 38:case 40:return false;case"c".charCodeAt():case"v".charCodeAt():if(D.ctrlKey){return false}}return true},j=function(F,E,D){if(F==""||isNaN(F)){return E}if(F>D){return D}if(F<E){return E}return F},m=function(F,D){var E=F.val("all");if(D!=r.get(0)){r.val(E!=null?E.r:"")}if(D!=v.get(0)){v.val(E!=null?E.g:"")}if(D!=h.get(0)){h.val(E!=null?E.b:"")}if(o&&D!=o.get(0)){o.val(E!=null?Math.precision((E.a*100)/255,y):"")}if(D!=n.get(0)){n.val(E!=null?E.h:"")}if(D!=p.get(0)){p.val(E!=null?E.s:"")}if(D!=x.get(0)){x.val(E!=null?E.v:"")}if(D!=s.get(0)&&(k&&D!=k.get(0)||!k)){s.val(E!=null?E.hex:"")}if(k&&D!=k.get(0)&&D!=s.get(0)){k.val(E!=null?E.hex:"")}if(B&&D!=B.get(0)){B.val(E!=null?E.ahex.substring(6):"")}},C=function(){r.add(v).add(h).add(o).add(n).add(p).add(x).add(s).add(k).add(B).unbind("keyup",w).unbind("blur",A);z.unbind(m);r=null;v=null;h=null;o=null;n=null;p=null;x=null;s=null;B=null};e.extend(true,q,{destroy:C});r.add(v).add(h).add(o).add(n).add(p).add(x).add(s).add(k).add(B).bind("keyup",w).bind("blur",A);z.bind(m)};e.jPicker={List:[],Color:function(z){var q=this,j,o,t,u,n,A,x,k=new Array(),m=function(r){for(var h=0;h<k.length;h++){k[h].call(q,q,r)}},l=function(h,G,r){var F=G!==undefined;if(!F){if(h===undefined||h==null||h==""){h="all"}if(j==null){return null}switch(h.toLowerCase()){case"ahex":return g.rgbaToHex({r:j,g:o,b:t,a:u});case"hex":return l("ahex").substring(0,6);case"all":return{r:j,g:o,b:t,a:u,h:n,s:A,v:x,hex:l.call(q,"hex"),ahex:l.call(q,"ahex")};default:var D={};for(var B=0;B<h.length;B++){switch(h.charAt(B)){case"r":if(h.length==1){D=j}else{D.r=j}break;case"g":if(h.length==1){D=o}else{D.g=o}break;case"b":if(h.length==1){D=t}else{D.b=t}break;case"a":if(h.length==1){D=u}else{D.a=u}break;case"h":if(h.length==1){D=n}else{D.h=n}break;case"s":if(h.length==1){D=A}else{D.s=A}break;case"v":if(h.length==1){D=x}else{D.v=x}break}}return D=={}?l.call(q,"all"):D;break}}if(r!=null&&r==q){return}var v=false;if(h==null){h=""}if(G==null){if(j!=null){j=null;v=true}if(o!=null){o=null;v=true}if(t!=null){t=null;v=true}if(u!=null){u=null;v=true}if(n!=null){n=null;v=true}if(A!=null){A=null;v=true}if(x!=null){x=null;v=true}v&&m.call(q,r||q);return}switch(h.toLowerCase()){case"ahex":case"hex":var D=g.hexToRgba(G&&(G.ahex||G.hex)||G||"00000000");l.call(q,"rgba",{r:D.r,g:D.g,b:D.b,a:h=="ahex"?D.a:u!=null?u:255},r);break;default:if(G&&(G.ahex!=null||G.hex!=null)){l.call(q,"ahex",G.ahex||G.hex||"00000000",r);return}var s={},E=false,C=false;if(G.r!==undefined&&!h.indexOf("r")==-1){h+="r"}if(G.g!==undefined&&!h.indexOf("g")==-1){h+="g"}if(G.b!==undefined&&!h.indexOf("b")==-1){h+="b"}if(G.a!==undefined&&!h.indexOf("a")==-1){h+="a"}if(G.h!==undefined&&!h.indexOf("h")==-1){h+="h"}if(G.s!==undefined&&!h.indexOf("s")==-1){h+="s"}if(G.v!==undefined&&!h.indexOf("v")==-1){h+="v"}for(var B=0;B<h.length;B++){switch(h.charAt(B)){case"r":if(C){continue}E=true;s.r=G&&G.r&&G.r|0||G&&G|0||0;if(s.r<0){s.r=0}else{if(s.r>255){s.r=255}}if(j!=s.r){j=s.r;v=true}break;case"g":if(C){continue}E=true;s.g=G&&G.g&&G.g|0||G&&G|0||0;if(s.g<0){s.g=0}else{if(s.g>255){s.g=255}}if(o!=s.g){o=s.g;v=true}break;case"b":if(C){continue}E=true;s.b=G&&G.b&&G.b|0||G&&G|0||0;if(s.b<0){s.b=0}else{if(s.b>255){s.b=255}}if(t!=s.b){t=s.b;v=true}break;case"a":s.a=G&&G.a!=null?G.a|0:G!=null?G|0:255;if(s.a<0){s.a=0}else{if(s.a>255){s.a=255}}if(u!=s.a){u=s.a;v=true}break;case"h":if(E){continue}C=true;s.h=G&&G.h&&G.h|0||G&&G|0||0;if(s.h<0){s.h=0}else{if(s.h>360){s.h=360}}if(n!=s.h){n=s.h;v=true}break;case"s":if(E){continue}C=true;s.s=G&&G.s!=null?G.s|0:G!=null?G|0:100;if(s.s<0){s.s=0}else{if(s.s>100){s.s=100}}if(A!=s.s){A=s.s;v=true}break;case"v":if(E){continue}C=true;s.v=G&&G.v!=null?G.v|0:G!=null?G|0:100;if(s.v<0){s.v=0}else{if(s.v>100){s.v=100}}if(x!=s.v){x=s.v;v=true}break}}if(v){if(E){j=j||0;o=o||0;t=t||0;var D=g.rgbToHsv({r:j,g:o,b:t});n=D.h;A=D.s;x=D.v}else{if(C){n=n||0;A=A!=null?A:100;x=x!=null?x:100;var D=g.hsvToRgb({h:n,s:A,v:x});j=D.r;o=D.g;t=D.b}}u=u!=null?u:255;m.call(q,r||q)}break}},p=function(h){if(e.isFunction(h)){k.push(h)}},y=function(r){if(!e.isFunction(r)){return}var h;while((h=e.inArray(r,k))!=-1){k.splice(h,1)}},w=function(){k=null};e.extend(true,q,{val:l,bind:p,unbind:y,destroy:w});if(z){if(z.ahex!=null){l("ahex",z)}else{if(z.hex!=null){l((z.a!=null?"a":"")+"hex",z.a!=null?{ahex:z.hex+g.intToHex(z.a)}:z)}else{if(z.r!=null&&z.g!=null&&z.b!=null){l("rgb"+(z.a!=null?"a":""),z)}else{if(z.h!=null&&z.s!=null&&z.v!=null){l("hsv"+(z.a!=null?"a":""),z)}}}}}},ColorMethods:{hexToRgba:function(m){m=this.validateHex(m);if(m==""){return{r:null,g:null,b:null,a:null}}var l="00",k="00",h="00",j="255";if(m.length==6){m+="ff"}if(m.length>6){l=m.substring(0,2);k=m.substring(2,4);h=m.substring(4,6);j=m.substring(6,m.length)}else{if(m.length>4){l=m.substring(4,m.length);m=m.substring(0,4)}if(m.length>2){k=m.substring(2,m.length);m=m.substring(0,2)}if(m.length>0){h=m.substring(0,m.length)}}return{r:this.hexToInt(l),g:this.hexToInt(k),b:this.hexToInt(h),a:this.hexToInt(j)}},validateHex:function(h){h=h.toLowerCase().replace(/[^a-f0-9]/g,"");if(h.length>8){h=h.substring(0,8)}return h},rgbaToHex:function(h){return this.intToHex(h.r)+this.intToHex(h.g)+this.intToHex(h.b)+this.intToHex(h.a)},intToHex:function(j){var h=(j|0).toString(16);if(h.length==1){h=("0"+h)}return h.toLowerCase()},hexToInt:function(h){return parseInt(h,16)},rgbToHsv:function(l){var o=l.r/255,n=l.g/255,j=l.b/255,k={h:0,s:0,v:0},m=0,h=0,p;if(o>=n&&o>=j){h=o;m=n>j?j:n}else{if(n>=j&&n>=o){h=n;m=o>j?j:o}else{h=j;m=n>o?o:n}}k.v=h;k.s=h?(h-m)/h:0;if(!k.s){k.h=0}else{p=h-m;if(o==h){k.h=(n-j)/p}else{if(n==h){k.h=2+(j-o)/p}else{k.h=4+(o-n)/p}}k.h=parseInt(k.h*60);if(k.h<0){k.h+=360}}k.s=(k.s*100)|0;k.v=(k.v*100)|0;return k},hsvToRgb:function(n){var r={r:0,g:0,b:0,a:100},m=n.h,x=n.s,u=n.v;if(x==0){if(u==0){r.r=r.g=r.b=0}else{r.r=r.g=r.b=(u*255/100)|0}}else{if(m==360){m=0}m/=60;x=x/100;u=u/100;var l=m|0,o=m-l,k=u*(1-x),j=u*(1-(x*o)),w=u*(1-(x*(1-o)));switch(l){case 0:r.r=u;r.g=w;r.b=k;break;case 1:r.r=j;r.g=u;r.b=k;break;case 2:r.r=k;r.g=u;r.b=w;break;case 3:r.r=k;r.g=j;r.b=u;break;case 4:r.r=w;r.g=k;r.b=u;break;case 5:r.r=u;r.g=k;r.b=j;break}r.r=(r.r*255)|0;r.g=(r.g*255)|0;r.b=(r.b*255)|0}return r}}};var f=e.jPicker.Color,c=e.jPicker.List,g=e.jPicker.ColorMethods;e.fn.jPicker=function(j){var h=arguments;return this.each(function(){var w=this,av=e.extend(true,{},e.fn.jPicker.defaults,j);if(e(w).get(0).nodeName.toLowerCase()=="input"){e.extend(true,av,{window:{bindToInput:true,expandable:true,input:e(w)}});if(e(w).val()==""){av.color.active=new f({hex:null});av.color.current=new f({hex:null})}else{if(g.validateHex(e(w).val())){av.color.active=new f({hex:e(w).val(),a:av.color.active.val("a")});av.color.current=new f({hex:e(w).val(),a:av.color.active.val("a")})}}}if(av.window.expandable){e(w).after('<span class="jPicker"><span class="Icon"><span class="Color">&nbsp;</span><span class="Alpha">&nbsp;</span><span class="Image" title="Click To Open Color Picker">&nbsp;</span><span class="Container">&nbsp;</span></span></span>')}else{av.window.liveUpdate=false}var Q=parseFloat(navigator.appVersion.split("MSIE")[1])<7&&document.body.filters,R=null,l=null,s=null,au=null,at=null,ar=null,P=null,O=null,N=null,M=null,L=null,K=null,D=null,U=null,aw=null,J=null,I=null,am=null,ai=null,E=null,an=null,ah=null,X=null,ab=null,aq=null,r=null,C=null,u=null,ag=function(aB){var aD=G.active,aE=n.clientPath,aA=aD.val("hex"),aC,az;av.color.mode=aB;switch(aB){case"h":setTimeout(function(){y.call(w,l,"transparent");x.call(w,au,0);Y.call(w,au,100);x.call(w,at,260);Y.call(w,at,100);y.call(w,s,"transparent");x.call(w,P,0);Y.call(w,P,100);x.call(w,O,260);Y.call(w,O,100);x.call(w,N,260);Y.call(w,N,100);x.call(w,M,260);Y.call(w,M,100);x.call(w,K,260);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:100,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:360});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("s"),y:100-aD.val("v")},D);U.val("y",360-aD.val("h"),U);break;case"s":setTimeout(function(){y.call(w,l,"transparent");x.call(w,au,-260);x.call(w,at,-520);x.call(w,P,-260);x.call(w,O,-520);x.call(w,K,260);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:360,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:100});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("h"),y:100-aD.val("v")},D);U.val("y",100-aD.val("s"),U);break;case"v":setTimeout(function(){y.call(w,l,"000000");x.call(w,au,-780);x.call(w,at,260);y.call(w,s,aA);x.call(w,P,-520);x.call(w,O,260);Y.call(w,O,100);x.call(w,K,260);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:360,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:100});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("h"),y:100-aD.val("s")},D);U.val("y",100-aD.val("v"),U);break;case"r":aC=-1040;az=-780;D.range("all",{minX:0,maxX:255,minY:0,maxY:255});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("b"),y:255-aD.val("g")},D);U.val("y",255-aD.val("r"),U);break;case"g":aC=-1560;az=-1820;D.range("all",{minX:0,maxX:255,minY:0,maxY:255});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("b"),y:255-aD.val("r")},D);U.val("y",255-aD.val("g"),U);break;case"b":aC=-2080;az=-2860;D.range("all",{minX:0,maxX:255,minY:0,maxY:255});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("r"),y:255-aD.val("g")},D);U.val("y",255-aD.val("b"),U);break;case"a":setTimeout(function(){y.call(w,l,"transparent");x.call(w,au,-260);x.call(w,at,-520);x.call(w,P,260);x.call(w,O,260);Y.call(w,O,100);x.call(w,K,0);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:360,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("h"),y:100-aD.val("v")},D);U.val("y",255-aD.val("a"),U);break;default:throw ("Invalid Mode");break}switch(aB){case"h":break;case"s":case"v":case"a":setTimeout(function(){Y.call(w,au,100);Y.call(w,P,100);x.call(w,N,260);Y.call(w,N,100);x.call(w,M,260);Y.call(w,M,100)},0);break;case"r":case"g":case"b":setTimeout(function(){y.call(w,l,"transparent");y.call(w,s,"transparent");Y.call(w,P,100);Y.call(w,au,100);x.call(w,au,aC);x.call(w,at,aC-260);x.call(w,P,az-780);x.call(w,O,az-520);x.call(w,N,az);x.call(w,M,az-260);x.call(w,K,260);Y.call(w,K,100)},0);break}if(aD.val("ahex")==null){return}aj.call(w,aD)},aj=function(aA,az){if(az==null||(az!=U&&az!=D)){v.call(w,aA,az)}setTimeout(function(){ay.call(w,aA);al.call(w,aA);W.call(w,aA)},0)},z=function(aA,az){var aC=G.active;if(az!=D&&aC.val()==null){return}var aB=aA.val("all");switch(av.color.mode){case"h":aC.val("sv",{s:aB.x,v:100-aB.y},az);break;case"s":case"a":aC.val("hv",{h:aB.x,v:100-aB.y},az);break;case"v":aC.val("hs",{h:aB.x,s:100-aB.y},az);break;case"r":aC.val("gb",{g:255-aB.y,b:aB.x},az);break;case"g":aC.val("rb",{r:255-aB.y,b:aB.x},az);break;case"b":aC.val("rg",{r:aB.x,g:255-aB.y},az);break}},ac=function(aA,az){var aB=G.active;if(az!=U&&aB.val()==null){return}switch(av.color.mode){case"h":aB.val("h",{h:360-aA.val("y")},az);break;case"s":aB.val("s",{s:100-aA.val("y")},az);break;case"v":aB.val("v",{v:100-aA.val("y")},az);break;case"r":aB.val("r",{r:255-aA.val("y")},az);break;case"g":aB.val("g",{g:255-aA.val("y")},az);break;case"b":aB.val("b",{b:255-aA.val("y")},az);break;case"a":aB.val("a",255-aA.val("y"),az);break}},v=function(aC,az){if(az!=D){switch(av.color.mode){case"h":var aH=aC.val("sv");D.val("xy",{x:aH!=null?aH.s:100,y:100-(aH!=null?aH.v:100)},az);break;case"s":case"a":var aB=aC.val("hv");D.val("xy",{x:aB&&aB.h||0,y:100-(aB!=null?aB.v:100)},az);break;case"v":var aE=aC.val("hs");D.val("xy",{x:aE&&aE.h||0,y:100-(aE!=null?aE.s:100)},az);break;case"r":var aA=aC.val("bg");D.val("xy",{x:aA&&aA.b||0,y:255-(aA&&aA.g||0)},az);break;case"g":var aI=aC.val("br");D.val("xy",{x:aI&&aI.b||0,y:255-(aI&&aI.r||0)},az);break;case"b":var aG=aC.val("rg");D.val("xy",{x:aG&&aG.r||0,y:255-(aG&&aG.g||0)},az);break}}if(az!=U){switch(av.color.mode){case"h":U.val("y",360-(aC.val("h")||0),az);break;case"s":var aJ=aC.val("s");U.val("y",100-(aJ!=null?aJ:100),az);break;case"v":var aF=aC.val("v");U.val("y",100-(aF!=null?aF:100),az);break;case"r":U.val("y",255-(aC.val("r")||0),az);break;case"g":U.val("y",255-(aC.val("g")||0),az);break;case"b":U.val("y",255-(aC.val("b")||0),az);break;case"a":var aD=aC.val("a");U.val("y",255-(aD!=null?aD:255),az);break}}},ay=function(aA){try{var az=aA.val("all");E.css({backgroundColor:az&&"#"+az.hex||"transparent"});Y.call(w,E,az&&Math.precision((az.a*100)/255,4)||0)}catch(aB){}},al=function(aC){switch(av.color.mode){case"h":y.call(w,l,new f({h:aC.val("h")||0,s:100,v:100}).val("hex"));break;case"s":case"a":var aB=aC.val("s");Y.call(w,at,100-(aB!=null?aB:100));break;case"v":var aA=aC.val("v");Y.call(w,au,aA!=null?aA:100);break;case"r":Y.call(w,at,Math.precision((aC.val("r")||0)/255*100,4));break;case"g":Y.call(w,at,Math.precision((aC.val("g")||0)/255*100,4));break;case"b":Y.call(w,at,Math.precision((aC.val("b")||0)/255*100));break}var az=aC.val("a");Y.call(w,ar,Math.precision(((255-(az||0))*100)/255,4))},W=function(aF){switch(av.color.mode){case"h":var aH=aF.val("a");Y.call(w,L,Math.precision(((255-(aH||0))*100)/255,4));break;case"s":var aA=aF.val("hva"),aB=new f({h:aA&&aA.h||0,s:100,v:aA!=null?aA.v:100});y.call(w,s,aB.val("hex"));Y.call(w,O,100-(aA!=null?aA.v:100));Y.call(w,L,Math.precision(((255-(aA&&aA.a||0))*100)/255,4));break;case"v":var aC=aF.val("hsa"),aE=new f({h:aC&&aC.h||0,s:aC!=null?aC.s:100,v:100});y.call(w,s,aE.val("hex"));Y.call(w,L,Math.precision(((255-(aC&&aC.a||0))*100)/255,4));break;case"r":case"g":case"b":var aD=0,aG=0,az=aF.val("rgba");if(av.color.mode=="r"){aD=az&&az.b||0;aG=az&&az.g||0}else{if(av.color.mode=="g"){aD=az&&az.b||0;aG=az&&az.r||0}else{if(av.color.mode=="b"){aD=az&&az.r||0;aG=az&&az.g||0}}}var aI=aG>aD?aD:aG;Y.call(w,O,aD>aG?Math.precision(((aD-aG)/(255-aG))*100,4):0);Y.call(w,N,aG>aD?Math.precision(((aG-aD)/(255-aD))*100,4):0);Y.call(w,M,Math.precision((aI/255)*100,4));Y.call(w,L,Math.precision(((255-(az&&az.a||0))*100)/255,4));break;case"a":var aH=aF.val("a");y.call(w,s,aF.val("hex")||"000000");Y.call(w,L,aH!=null?0:100);Y.call(w,K,aH!=null?100:0);break}},y=function(az,aA){az.css({backgroundColor:aA&&aA.length==6&&"#"+aA||"transparent"})},t=function(az,aA){if(Q&&(aA.indexOf("AlphaBar.png")!=-1||aA.indexOf("Bars.png")!=-1||aA.indexOf("Maps.png")!=-1)){az.attr("pngSrc",aA);az.css({backgroundImage:"none",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+aA+"', sizingMethod='scale')"})}else{az.css({backgroundImage:"url("+aA+")"})}},x=function(az,aA){az.css({top:aA+"px"})},Y=function(aA,az){aA.css({visibility:az>0?"visible":"hidden"});if(az>0&&az<100){if(Q){var aB=aA.attr("pngSrc");if(aB!=null&&(aB.indexOf("AlphaBar.png")!=-1||aB.indexOf("Bars.png")!=-1||aB.indexOf("Maps.png")!=-1)){aA.css({filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+aB+"', sizingMethod='scale') progid:DXImageTransform.Microsoft.Alpha(opacity="+az+")"})}else{aA.css({opacity:Math.precision(az/100,4)})}}else{aA.css({opacity:Math.precision(az/100,4)})}}else{if(az==0||az==100){if(Q){var aB=aA.attr("pngSrc");if(aB!=null&&(aB.indexOf("AlphaBar.png")!=-1||aB.indexOf("Bars.png")!=-1||aB.indexOf("Maps.png")!=-1)){aA.css({filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+aB+"', sizingMethod='scale')"})}else{aA.css({opacity:""})}}else{aA.css({opacity:""})}}}},B=function(){G.active.val("ahex",G.current.val("ahex"))},T=function(){G.current.val("ahex",G.active.val("ahex"))},A=function(az){e(this).parents("tbody:first").find('input:radio[value!="'+az.target.value+'"]').removeAttr("checked");ag.call(w,az.target.value)},Z=function(){B.call(w)},q=function(){B.call(w);av.window.expandable&&ao.call(w);e.isFunction(ax)&&ax.call(w,G.active,X)},m=function(){T.call(w);av.window.expandable&&ao.call(w);e.isFunction(ae)&&ae.call(w,G.active,ah)},af=function(){V.call(w)},ap=function(aB,az){var aA=aB.val("hex");an.css({backgroundColor:aA&&"#"+aA||"transparent"});Y.call(w,an,Math.precision(((aB.val("a")||0)*100)/255,4))},H=function(aC,az){var aB=aC.val("hex");var aA=aC.val("va");aq.css({backgroundColor:aB&&"#"+aB||"transparent"});Y.call(w,r,Math.precision(((255-(aA&&aA.a||0))*100)/255,4));if(av.window.bindToInput&&av.window.updateInputColor){av.window.input.css({backgroundColor:aB&&"#"+aB||"transparent",color:aA==null||aA.v>75?"#000000":"#ffffff"})}},S=function(aB){var az=av.window.element,aA=av.window.page;J=parseInt(R.css("left"));I=parseInt(R.css("top"));am=aB.pageX;ai=aB.pageY;e(document).bind("mousemove",k).bind("mouseup",p);aB.preventDefault()},k=function(az){R.css({left:J-(am-az.pageX)+"px",top:I-(ai-az.pageY)+"px"});if(av.window.expandable&&!e.support.boxModel){R.prev().css({left:R.css("left"),top:R.css("top")})}az.stopPropagation();az.preventDefault();return false},p=function(az){e(document).unbind("mousemove",k).unbind("mouseup",p);az.stopPropagation();az.preventDefault();return false},F=function(az){az.preventDefault();az.stopPropagation();G.active.val("ahex",e(this).attr("title")||null,az.target);return false},ae=e.isFunction(h[1])&&h[1]||null,ad=e.isFunction(h[2])&&h[2]||null,ax=e.isFunction(h[3])&&h[3]||null,V=function(){G.current.val("ahex",G.active.val("ahex"));var az=function(){if(!av.window.expandable||e.support.boxModel){return}var aA=R.find("table:first");R.before("<iframe/>");R.prev().css({width:aA.width(),height:R.height(),opacity:0,position:"absolute",left:R.css("left"),top:R.css("top")})};if(av.window.expandable){e(document.body).children("div.jPicker.Container").css({zIndex:10});R.css({zIndex:20})}switch(av.window.effects.type){case"fade":R.fadeIn(av.window.effects.speed.show,az);break;case"slide":R.slideDown(av.window.effects.speed.show,az);break;case"show":default:R.show(av.window.effects.speed.show,az);break}},ao=function(){var az=function(){if(av.window.expandable){R.css({zIndex:10})}if(!av.window.expandable||e.support.boxModel){return}R.prev().remove()};switch(av.window.effects.type){case"fade":R.fadeOut(av.window.effects.speed.hide,az);break;case"slide":R.slideUp(av.window.effects.speed.hide,az);break;case"show":default:R.hide(av.window.effects.speed.hide,az);break}},o=function(){var aG=av.window,az=aG.expandable?e(w).next().find(".Container:first"):null;R=aG.expandable?e("<div/>"):e(w);R.addClass("jPicker Container");if(aG.expandable){R.hide()}R.get(0).onselectstart=function(){return false};var aJ=G.active.val("all");if(aG.alphaPrecision<0){aG.alphaPrecision=0}else{if(aG.alphaPrecision>2){aG.alphaPrecision=2}}var aK='<table class="jPicker" cellpadding="0" cellspacing="0"><tbody>'+(aG.expandable?'<tr><td class="Move" colspan="5">&nbsp;</td></tr>':"")+'<tr><td rowspan="9"><h2 class="Title">'+(aG.title||aa.text.title)+'</h2><div class="Map"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><img src="'+n.clientPath+n.colorMap.arrow.file+'" class="Arrow"/></div></td><td rowspan="9"><div class="Bar"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><span class="Map4">&nbsp;</span><span class="Map5">&nbsp;</span><span class="Map6">&nbsp;</span><img src="'+n.clientPath+n.colorBar.arrow.file+'" class="Arrow"/></div></td><td colspan="2" class="Preview">'+aa.text.newColor+'<div><span class="Active" title="'+aa.tooltips.colors.newColor+'">&nbsp;</span><span class="Current" title="'+aa.tooltips.colors.currentColor+'">&nbsp;</span></div>'+aa.text.currentColor+'</td><td rowspan="9" class="Button"><input type="button" class="Ok" value="'+aa.text.ok+'" title="'+aa.tooltips.buttons.ok+'"/><input type="button" class="Cancel" value="'+aa.text.cancel+'" title="'+aa.tooltips.buttons.cancel+'"/><hr/><div class="Grid">&nbsp;</div></td></tr><tr class="Hue"><td class="Radio"><label title="'+aa.tooltips.hue.radio+'"><input type="radio" value="h"'+(av.color.mode=="h"?' checked="checked"':"")+'/>H:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.h:"")+'" title="'+aa.tooltips.hue.textbox+'"/>&nbsp;&deg;</td></tr><tr class="Saturation"><td class="Radio"><label title="'+aa.tooltips.saturation.radio+'"><input type="radio" value="s"'+(av.color.mode=="s"?' checked="checked"':"")+'/>S:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.s:"")+'" title="'+aa.tooltips.saturation.textbox+'"/>&nbsp;%</td></tr><tr class="Value"><td class="Radio"><label title="'+aa.tooltips.value.radio+'"><input type="radio" value="v"'+(av.color.mode=="v"?' checked="checked"':"")+'/>V:</label><br/><br/></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.v:"")+'" title="'+aa.tooltips.value.textbox+'"/>&nbsp;%<br/><br/></td></tr><tr class="Red"><td class="Radio"><label title="'+aa.tooltips.red.radio+'"><input type="radio" value="r"'+(av.color.mode=="r"?' checked="checked"':"")+'/>R:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.r:"")+'" title="'+aa.tooltips.red.textbox+'"/></td></tr><tr class="Green"><td class="Radio"><label title="'+aa.tooltips.green.radio+'"><input type="radio" value="g"'+(av.color.mode=="g"?' checked="checked"':"")+'/>G:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.g:"")+'" title="'+aa.tooltips.green.textbox+'"/></td></tr><tr class="Blue"><td class="Radio"><label title="'+aa.tooltips.blue.radio+'"><input type="radio" value="b"'+(av.color.mode=="b"?' checked="checked"':"")+'/>B:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.b:"")+'" title="'+aa.tooltips.blue.textbox+'"/></td></tr><tr class="Alpha"><td class="Radio">'+(aG.alphaSupport?'<label title="'+aa.tooltips.alpha.radio+'"><input type="radio" value="a"'+(av.color.mode=="a"?' checked="checked"':"")+"/>A:</label>":"&nbsp;")+'</td><td class="Text">'+(aG.alphaSupport?'<input type="text" maxlength="'+(3+aG.alphaPrecision)+'" value="'+(aJ!=null?Math.precision((aJ.a*100)/255,aG.alphaPrecision):"")+'" title="'+aa.tooltips.alpha.textbox+'"/>&nbsp;%':"&nbsp;")+'</td></tr><tr class="Hex"><td colspan="2" class="Text"><label title="'+aa.tooltips.hex.textbox+'">#:<input type="text" maxlength="6" class="Hex" value="'+(aJ!=null?aJ.hex:"")+'"/></label>'+(aG.alphaSupport?'<input type="text" maxlength="2" class="AHex" value="'+(aJ!=null?aJ.ahex.substring(6):"")+'" title="'+aa.tooltips.hex.alpha+'"/></td>':"&nbsp;")+"</tr></tbody></table>";if(aG.expandable){R.html(aK);if(e(document.body).children("div.jPicker.Container").length==0){e(document.body).prepend(R)}else{e(document.body).children("div.jPicker.Container:last").after(R)}R.mousedown(function(){e(document.body).children("div.jPicker.Container").css({zIndex:10});R.css({zIndex:20})});R.css({left:aG.position.x=="left"?(az.offset().left-530-(aG.position.y=="center"?25:0))+"px":aG.position.x=="center"?(az.offset().left-260)+"px":aG.position.x=="right"?(az.offset().left-10+(aG.position.y=="center"?25:0))+"px":aG.position.x=="screenCenter"?((e(document).width()>>1)-260)+"px":(az.offset().left+parseInt(aG.position.x))+"px",position:"absolute",top:aG.position.y=="top"?(az.offset().top-312)+"px":aG.position.y=="center"?(az.offset().top-156)+"px":aG.position.y=="bottom"?(az.offset().top+25)+"px":(az.offset().top+parseInt(aG.position.y))+"px"})}else{R=e(w);R.html(aK)}var aD=R.find("tbody:first");l=aD.find("div.Map:first");s=aD.find("div.Bar:first");var aL=l.find("span"),aI=s.find("span");au=aL.filter(".Map1:first");at=aL.filter(".Map2:first");ar=aL.filter(".Map3:first");P=aI.filter(".Map1:first");O=aI.filter(".Map2:first");N=aI.filter(".Map3:first");M=aI.filter(".Map4:first");L=aI.filter(".Map5:first");K=aI.filter(".Map6:first");D=new d(l,{map:{width:n.colorMap.width,height:n.colorMap.height},arrow:{image:n.clientPath+n.colorMap.arrow.file,width:n.colorMap.arrow.width,height:n.colorMap.arrow.height}});D.bind(z);U=new d(s,{map:{width:n.colorBar.width,height:n.colorBar.height},arrow:{image:n.clientPath+n.colorBar.arrow.file,width:n.colorBar.arrow.width,height:n.colorBar.arrow.height}});U.bind(ac);aw=new b(aD,G.active,aG.expandable&&aG.bindToInput?aG.input:null,aG.alphaPrecision);var aB=aJ!=null?aJ.hex:null,aH=aD.find(".Preview"),aF=aD.find(".Button");E=aH.find(".Active:first").css({backgroundColor:aB&&"#"+aB||"transparent"});an=aH.find(".Current:first").css({backgroundColor:aB&&"#"+aB||"transparent"}).bind("click",Z);Y.call(w,an,Math.precision(G.current.val("a")*100)/255,4);ah=aF.find(".Ok:first").bind("click",m);X=aF.find(".Cancel:first").bind("click",q);ab=aF.find(".Grid:first");setTimeout(function(){t.call(w,au,n.clientPath+"Maps.png");t.call(w,at,n.clientPath+"Maps.png");t.call(w,ar,n.clientPath+"map-opacity.png");t.call(w,P,n.clientPath+"Bars.png");t.call(w,O,n.clientPath+"Bars.png");t.call(w,N,n.clientPath+"Bars.png");t.call(w,M,n.clientPath+"Bars.png");t.call(w,L,n.clientPath+"bar-opacity.png");t.call(w,K,n.clientPath+"AlphaBar.png");t.call(w,aH.find("div:first"),n.clientPath+"preview-opacity.png")},0);aD.find("td.Radio input").bind("click",A);if(G.quickList&&G.quickList.length>0){var aE="";for(i=0;i<G.quickList.length;i++){if((typeof(G.quickList[i])).toString().toLowerCase()=="string"){G.quickList[i]=new f({hex:G.quickList[i]})}var aC=G.quickList[i].val("a");var aM=G.quickList[i].val("ahex");if(!aG.alphaSupport&&aM){aM=aM.substring(0,6)+"ff"}var aA=G.quickList[i].val("hex");aE+='<span class="QuickColor"'+(aM&&' title="#'+aM+'"'||"")+' style="background-color:'+(aA&&"#"+aA||"")+";"+(aA?"":"background-image:url("+n.clientPath+"NoColor.png)")+(aG.alphaSupport&&aC&&aC<255?";opacity:"+Math.precision(aC/255,4)+";filter:Alpha(opacity="+Math.precision(aC/2.55,4)+")":"")+'">&nbsp;</span>'}t.call(w,ab,n.clientPath+"bar-opacity.png");ab.html(aE);ab.find(".QuickColor").click(F)}ag.call(w,av.color.mode);G.active.bind(aj);e.isFunction(ad)&&G.active.bind(ad);G.current.bind(ap);if(aG.expandable){w.icon=az.parents(".Icon:first");aq=w.icon.find(".Color:first").css({backgroundColor:aB&&"#"+aB||"transparent"});r=w.icon.find(".Alpha:first");t.call(w,r,n.clientPath+"bar-opacity.png");Y.call(w,r,Math.precision(((255-(aJ!=null?aJ.a:0))*100)/255,4));C=w.icon.find(".Image:first").css({backgroundImage:"url("+n.clientPath+n.picker.file+")"}).bind("click",af);if(aG.bindToInput&&aG.updateInputColor){aG.input.css({backgroundColor:aB&&"#"+aB||"transparent",color:aJ==null||aJ.v>75?"#000000":"#ffffff"})}u=aD.find(".Move:first").bind("mousedown",S);G.active.bind(H)}else{V.call(w)}},ak=function(){R.find("td.Radio input").unbind("click",A);an.unbind("click",Z);X.unbind("click",q);ah.unbind("click",m);if(av.window.expandable){C.unbind("click",af);u.unbind("mousedown",S);w.icon=null}R.find(".QuickColor").unbind("click",F);l=null;s=null;au=null;at=null;ar=null;P=null;O=null;N=null;M=null;L=null;K=null;D.destroy();D=null;U.destroy();U=null;aw.destroy();aw=null;E=null;an=null;ah=null;X=null;ab=null;ae=null;ax=null;ad=null;R.html("");for(i=0;i<c.length;i++){if(c[i]==w){c.splice(i,1)}}},n=av.images,aa=av.localization,G={active:(typeof(av.color.active)).toString().toLowerCase()=="string"?new f({ahex:!av.window.alphaSupport&&av.color.active?av.color.active.substring(0,6)+"ff":av.color.active}):new f({ahex:!av.window.alphaSupport&&av.color.active.val("ahex")?av.color.active.val("ahex").substring(0,6)+"ff":av.color.active.val("ahex")}),current:(typeof(av.color.active)).toString().toLowerCase()=="string"?new f({ahex:!av.window.alphaSupport&&av.color.active?av.color.active.substring(0,6)+"ff":av.color.active}):new f({ahex:!av.window.alphaSupport&&av.color.active.val("ahex")?av.color.active.val("ahex").substring(0,6)+"ff":av.color.active.val("ahex")}),quickList:av.color.quickList};e.extend(true,w,{commitCallback:ae,liveCallback:ad,cancelCallback:ax,color:G,show:V,hide:ao,destroy:ak});c.push(w);setTimeout(function(){o.call(w)},0)})};e.fn.jPicker.defaults={window:{title:null,effects:{type:"slide",speed:{show:"slow",hide:"fast"}},position:{x:"screenCenter",y:"top"},expandable:false,liveUpdate:true,alphaSupport:false,alphaPrecision:0,updateInputColor:true},color:{mode:"h",active:new f({ahex:"#ffcc00ff"}),quickList:[new f({h:360,s:33,v:100}),new f({h:360,s:66,v:100}),new f({h:360,s:100,v:100}),new f({h:360,s:100,v:75}),new f({h:360,s:100,v:50}),new f({h:180,s:0,v:100}),new f({h:30,s:33,v:100}),new f({h:30,s:66,v:100}),new f({h:30,s:100,v:100}),new f({h:30,s:100,v:75}),new f({h:30,s:100,v:50}),new f({h:180,s:0,v:90}),new f({h:60,s:33,v:100}),new f({h:60,s:66,v:100}),new f({h:60,s:100,v:100}),new f({h:60,s:100,v:75}),new f({h:60,s:100,v:50}),new f({h:180,s:0,v:80}),new f({h:90,s:33,v:100}),new f({h:90,s:66,v:100}),new f({h:90,s:100,v:100}),new f({h:90,s:100,v:75}),new f({h:90,s:100,v:50}),new f({h:180,s:0,v:70}),new f({h:120,s:33,v:100}),new f({h:120,s:66,v:100}),new f({h:120,s:100,v:100}),new f({h:120,s:100,v:75}),new f({h:120,s:100,v:50}),new f({h:180,s:0,v:60}),new f({h:150,s:33,v:100}),new f({h:150,s:66,v:100}),new f({h:150,s:100,v:100}),new f({h:150,s:100,v:75}),new f({h:150,s:100,v:50}),new f({h:180,s:0,v:50}),new f({h:180,s:33,v:100}),new f({h:180,s:66,v:100}),new f({h:180,s:100,v:100}),new f({h:180,s:100,v:75}),new f({h:180,s:100,v:50}),new f({h:180,s:0,v:40}),new f({h:210,s:33,v:100}),new f({h:210,s:66,v:100}),new f({h:210,s:100,v:100}),new f({h:210,s:100,v:75}),new f({h:210,s:100,v:50}),new f({h:180,s:0,v:30}),new f({h:240,s:33,v:100}),new f({h:240,s:66,v:100}),new f({h:240,s:100,v:100}),new f({h:240,s:100,v:75}),new f({h:240,s:100,v:50}),new f({h:180,s:0,v:20}),new f({h:270,s:33,v:100}),new f({h:270,s:66,v:100}),new f({h:270,s:100,v:100}),new f({h:270,s:100,v:75}),new f({h:270,s:100,v:50}),new f({h:180,s:0,v:10}),new f({h:300,s:33,v:100}),new f({h:300,s:66,v:100}),new f({h:300,s:100,v:100}),new f({h:300,s:100,v:75}),new f({h:300,s:100,v:50}),new f({h:180,s:0,v:0}),new f({h:330,s:33,v:100}),new f({h:330,s:66,v:100}),new f({h:330,s:100,v:100}),new f({h:330,s:100,v:75}),new f({h:330,s:100,v:50}),new f()]},images:{clientPath:"/jPicker/images/",colorMap:{width:256,height:256,arrow:{file:"mappoint.gif",width:15,height:15}},colorBar:{width:20,height:256,arrow:{file:"rangearrows.gif",width:20,height:7}},picker:{file:"picker.gif",width:25,height:24}},localization:{text:{title:"Drag Markers To Pick A Color",newColor:"new",currentColor:"current",ok:"OK",cancel:"Cancel"},tooltips:{colors:{newColor:"New Color - Press &ldquo;OK&rdquo; To Commit",currentColor:"Click To Revert To Original Color"},buttons:{ok:"Commit To This Color Selection",cancel:"Cancel And Revert To Original Color"},hue:{radio:"Set To &ldquo;Hue&rdquo; Color Mode",textbox:"Enter A &ldquo;Hue&rdquo; Value (0-360&deg;)"},saturation:{radio:"Set To &ldquo;Saturation&rdquo; Color Mode",textbox:"Enter A &ldquo;Saturation&rdquo; Value (0-100%)"},value:{radio:"Set To &ldquo;Value&rdquo; Color Mode",textbox:"Enter A &ldquo;Value&rdquo; Value (0-100%)"},red:{radio:"Set To &ldquo;Red&rdquo; Color Mode",textbox:"Enter A &ldquo;Red&rdquo; Value (0-255)"},green:{radio:"Set To &ldquo;Green&rdquo; Color Mode",textbox:"Enter A &ldquo;Green&rdquo; Value (0-255)"},blue:{radio:"Set To &ldquo;Blue&rdquo; Color Mode",textbox:"Enter A &ldquo;Blue&rdquo; Value (0-255)"},alpha:{radio:"Set To &ldquo;Alpha&rdquo; Color Mode",textbox:"Enter A &ldquo;Alpha&rdquo; Value (0-100)"},hex:{textbox:"Enter A &ldquo;Hex&rdquo; Color Value (#000000-#ffffff)",alpha:"Enter A &ldquo;Alpha&rdquo; Value (#00-#ff)"}}}}})(jQuery,"1.1.5"); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.js.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.js.svn-base
new file mode 100644
index 000000000..d4baa6935
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.js.svn-base
@@ -0,0 +1,1175 @@
+/*
+ * jGraduate 0.4
+ *
+ * jQuery Plugin for a gradient picker
+ *
+ * Copyright (c) 2010 Jeff Schiller
+ * http://blog.codedread.com/
+ * Copyright (c) 2010 Alexis Deveria
+ * http://a.deveria.com/
+ *
+ * Apache 2 License
+
+jGraduate( options, okCallback, cancelCallback )
+
+where options is an object literal:
+ {
+ window: { title: "Pick the start color and opacity for the gradient" },
+ images: { clientPath: "images/" },
+ paint: a Paint object,
+ newstop: String of value "same", "inverse", "black" or "white"
+ OR object with one or both values {color: #Hex color, opac: number 0-1}
+ }
+
+- the Paint object is:
+ Paint {
+ type: String, // one of "none", "solidColor", "linearGradient", "radialGradient"
+ alpha: Number representing opacity (0-100),
+ solidColor: String representing #RRGGBB hex of color,
+ linearGradient: object of interface SVGLinearGradientElement,
+ radialGradient: object of interface SVGRadialGradientElement,
+ }
+
+$.jGraduate.Paint() -> constructs a 'none' color
+$.jGraduate.Paint({copy: o}) -> creates a copy of the paint o
+$.jGraduate.Paint({hex: "#rrggbb"}) -> creates a solid color paint with hex = "#rrggbb"
+$.jGraduate.Paint({linearGradient: o, a: 50}) -> creates a linear gradient paint with opacity=0.5
+$.jGraduate.Paint({radialGradient: o, a: 7}) -> creates a radial gradient paint with opacity=0.07
+$.jGraduate.Paint({hex: "#rrggbb", linearGradient: o}) -> throws an exception?
+
+- picker accepts the following object as input:
+ {
+ okCallback: function to call when Ok is pressed
+ cancelCallback: function to call when Cancel is pressed
+ paint: object describing the paint to display initially, if not set, then default to opaque white
+ }
+
+- okCallback receives a Paint object
+
+ *
+ */
+
+(function() {
+
+var ns = { svg: 'http://www.w3.org/2000/svg', xlink: 'http://www.w3.org/1999/xlink' };
+if(!window.console) {
+ window.console = new function() {
+ this.log = function(str) {};
+ this.dir = function(str) {};
+ };
+}
+
+$.jGraduate = {
+ Paint:
+ function(opt) {
+ var options = opt || {};
+ this.alpha = isNaN(options.alpha) ? 100 : options.alpha;
+ // copy paint object
+ if (options.copy) {
+ this.type = options.copy.type;
+ this.alpha = options.copy.alpha;
+ this.solidColor = null;
+ this.linearGradient = null;
+ this.radialGradient = null;
+
+ switch(this.type) {
+ case "none":
+ break;
+ case "solidColor":
+ this.solidColor = options.copy.solidColor;
+ break;
+ case "linearGradient":
+ this.linearGradient = options.copy.linearGradient.cloneNode(true);
+ break;
+ case "radialGradient":
+ this.radialGradient = options.copy.radialGradient.cloneNode(true);
+ break;
+ }
+ }
+ // create linear gradient paint
+ else if (options.linearGradient) {
+ this.type = "linearGradient";
+ this.solidColor = null;
+ this.radialGradient = null;
+ this.linearGradient = options.linearGradient.cloneNode(true);
+ }
+ // create linear gradient paint
+ else if (options.radialGradient) {
+ this.type = "radialGradient";
+ this.solidColor = null;
+ this.linearGradient = null;
+ this.radialGradient = options.radialGradient.cloneNode(true);
+ }
+ // create solid color paint
+ else if (options.solidColor) {
+ this.type = "solidColor";
+ this.solidColor = options.solidColor;
+ }
+ // create empty paint
+ else {
+ this.type = "none";
+ this.solidColor = null;
+ this.linearGradient = null;
+ this.radialGradient = null;
+ }
+ }
+};
+
+jQuery.fn.jGraduateDefaults = {
+ paint: new $.jGraduate.Paint(),
+ window: {
+ pickerTitle: "Drag markers to pick a paint"
+ },
+ images: {
+ clientPath: "images/"
+ },
+ newstop: 'inverse' // same, inverse, black, white
+};
+
+var isGecko = navigator.userAgent.indexOf('Gecko/') >= 0;
+
+function setAttrs(elem, attrs) {
+ if(isGecko) {
+ for (var aname in attrs) elem.setAttribute(aname, attrs[aname]);
+ } else {
+ for (var aname in attrs) {
+ var val = attrs[aname], prop = elem[aname];
+ if(prop && prop.constructor === 'SVGLength') {
+ prop.baseVal.value = val;
+ } else {
+ elem.setAttribute(aname, val);
+ }
+ }
+ }
+}
+
+function mkElem(name, attrs, newparent) {
+ var elem = document.createElementNS(ns.svg, name);
+ setAttrs(elem, attrs);
+ if(newparent) newparent.appendChild(elem);
+ return elem;
+}
+
+jQuery.fn.jGraduate =
+ function(options) {
+ var $arguments = arguments;
+ return this.each( function() {
+ var $this = $(this), $settings = $.extend(true, {}, jQuery.fn.jGraduateDefaults, options),
+ id = $this.attr('id'),
+ idref = '#'+$this.attr('id')+' ';
+
+ if (!idref)
+ {
+ alert('Container element must have an id attribute to maintain unique id strings for sub-elements.');
+ return;
+ }
+
+ var okClicked = function() {
+ switch ( $this.paint.type ) {
+ case "radialGradient":
+ $this.paint.linearGradient = null;
+ break;
+ case "linearGradient":
+ $this.paint.radialGradient = null;
+ break;
+ case "solidColor":
+ $this.paint.radialGradient = $this.paint.linearGradient = null;
+ break;
+ }
+ $.isFunction($this.okCallback) && $this.okCallback($this.paint);
+ $this.hide();
+ },
+ cancelClicked = function() {
+ $.isFunction($this.cancelCallback) && $this.cancelCallback();
+ $this.hide();
+ };
+
+ $.extend(true, $this, // public properties, methods, and callbacks
+ {
+ // make a copy of the incoming paint
+ paint: new $.jGraduate.Paint({copy: $settings.paint}),
+ okCallback: $.isFunction($arguments[1]) && $arguments[1] || null,
+ cancelCallback: $.isFunction($arguments[2]) && $arguments[2] || null
+ });
+
+ var pos = $this.position(),
+ color = null;
+ var $win = $(window);
+
+ if ($this.paint.type == "none") {
+ $this.paint = $.jGraduate.Paint({solidColor: 'ffffff'});
+ }
+
+ $this.addClass('jGraduate_Picker');
+ $this.html('<ul class="jGraduate_tabs">' +
+ '<li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li>' +
+ '<li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li>' +
+ '<li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li>' +
+ '</ul>' +
+ '<div class="jGraduate_colPick"></div>' +
+ '<div class="jGraduate_gradPick"></div>' +
+ '<div class="jGraduate_LightBox"></div>' +
+ '<div id="' + id + '_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>'
+
+
+ );
+ var colPicker = $(idref + '> .jGraduate_colPick');
+ var gradPicker = $(idref + '> .jGraduate_gradPick');
+
+ gradPicker.html(
+ '<div id="' + id + '_jGraduate_Swatch" class="jGraduate_Swatch">' +
+ '<h2 class="jGraduate_Title">' + $settings.window.pickerTitle + '</h2>' +
+ '<div id="' + id + '_jGraduate_GradContainer" class="jGraduate_GradContainer"></div>' +
+ '<div id="' + id + '_jGraduate_StopSlider" class="jGraduate_StopSlider"></div>' +
+ '</div>' +
+ '<div class="jGraduate_Form jGraduate_Points jGraduate_lg_field">' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">Begin Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">End Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_Form jGraduate_Points jGraduate_rg_field">' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">Center Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">Focal Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>Match center: <input type="checkbox" checked="checked" id="' + id + '_jGraduate_match_ctr"/></label><br/>' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_StopSection jGraduate_SpreadMethod">' +
+ '<label class="jGraduate_Form_Heading">Spread method</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<select class="jGraduate_spreadMethod">' +
+ '<option value=pad selected>Pad</option>' +
+ '<option value=reflect>Reflect</option>' +
+ '<option value=repeat>Repeat</option>' +
+ '</select>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_Form">' +
+ '<div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field">' +
+ '<label class="prelabel">Radius:</label>' +
+ '<div id="' + id + '_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius">' +
+ '<img id="' + id + '_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_RadiusInput" size="3" value="100"/>%</label>' +
+ '</div>' +
+ '<div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field">' +
+ '<label class="prelabel">Ellip:</label>' +
+ '<div id="' + id + '_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip">' +
+ '<img id="' + id + '_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_EllipInput" size="3" value="0"/>%</label>' +
+ '</div>' +
+ '<div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field">' +
+ '<label class="prelabel">Angle:</label>' +
+ '<div id="' + id + '_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle">' +
+ '<img id="' + id + '_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_AngleInput" size="3" value="0"/>deg</label>' +
+ '</div>' +
+ '<div class="jGraduate_Slider jGraduate_OpacField">' +
+ '<label class="prelabel">Opac:</label>' +
+ '<div id="' + id + '_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac">' +
+ '<img id="' + id + '_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_OpacInput" size="3" value="100"/>%</label>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_OkCancel">' +
+ '<input type="button" id="' + id + '_jGraduate_Ok" class="jGraduate_Ok" value="OK"/>' +
+ '<input type="button" id="' + id + '_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/>' +
+ '</div>');
+
+ // --------------
+ // Set up all the SVG elements (the gradient, stops and rectangle)
+ var MAX = 256, MARGINX = 0, MARGINY = 0, STOP_RADIUS = 15/2,
+ SIZEX = MAX - 2*MARGINX, SIZEY = MAX - 2*MARGINY;
+
+ var curType, curGradient, previewRect;
+
+ var attr_input = {};
+
+ var SLIDERW = 145;
+ $('.jGraduate_SliderBar').width(SLIDERW);
+
+ var container = $('#' + id+'_jGraduate_GradContainer')[0];
+
+ var svg = mkElem('svg', {
+ id: id + '_jgraduate_svg',
+ width: MAX,
+ height: MAX,
+ xmlns: ns.svg
+ }, container);
+
+ // if we are sent a gradient, import it
+
+ curType = curType || $this.paint.type;
+
+ var grad = curGradient = $this.paint[curType];
+
+ var gradalpha = $this.paint.alpha;
+
+ var isSolid = curType === 'solidColor';
+
+ // Make any missing gradients
+ switch ( curType ) {
+ case "solidColor":
+ // fall through
+ case "linearGradient":
+ if(!isSolid) {
+ curGradient.id = id+'_lg_jgraduate_grad';
+ grad = curGradient = svg.appendChild(curGradient);//.cloneNode(true));
+ }
+ mkElem('radialGradient', {
+ id: id + '_rg_jgraduate_grad'
+ }, svg);
+ if(curType === "linearGradient") break;
+ case "radialGradient":
+ if(!isSolid) {
+ curGradient.id = id+'_rg_jgraduate_grad';
+ grad = curGradient = svg.appendChild(curGradient);//.cloneNode(true));
+ }
+ mkElem('linearGradient', {
+ id: id + '_lg_jgraduate_grad'
+ }, svg);
+ }
+
+ if(isSolid) {
+ grad = curGradient = $('#' + id + '_lg_jgraduate_grad')[0];
+ var color = $this.paint[curType];
+ mkStop(0, '#' + color, 1);
+
+ var type = typeof $settings.newstop;
+
+ if(type === 'string') {
+ switch ( $settings.newstop ) {
+ case 'same':
+ mkStop(1, '#' + color, 1);
+ break;
+
+ case 'inverse':
+ // Invert current color for second stop
+ var inverted = '';
+
+ for(var i = 0; i < 6; i += 2) {
+ var ch = color.substr(i, 2);
+ var inv = (255 - parseInt(color.substr(i, 2), 16)).toString(16);
+ if(inv.length < 2) inv = 0 + inv;
+ inverted += inv;
+ }
+ mkStop(1, '#' + inverted, 1);
+ break;
+
+ case 'white':
+ mkStop(1, '#ffffff', 1);
+ break;
+
+ case 'black':
+ mkStop(1, '#000000', 1);
+ break;
+ }
+ } else if(type === 'object'){
+ var opac = ('opac' in $settings.newstop) ? $settings.newstop.opac : 1;
+ mkStop(1, ($settings.newstop.color || '#' + color), opac);
+ }
+ }
+
+
+ var x1 = parseFloat(grad.getAttribute('x1')||0.0),
+ y1 = parseFloat(grad.getAttribute('y1')||0.0),
+ x2 = parseFloat(grad.getAttribute('x2')||1.0),
+ y2 = parseFloat(grad.getAttribute('y2')||0.0);
+
+ var cx = parseFloat(grad.getAttribute('cx')||0.5),
+ cy = parseFloat(grad.getAttribute('cy')||0.5),
+ fx = parseFloat(grad.getAttribute('fx')|| cx),
+ fy = parseFloat(grad.getAttribute('fy')|| cy);
+
+
+ var previewRect = mkElem('rect', {
+ id: id + '_jgraduate_rect',
+ x: MARGINX,
+ y: MARGINY,
+ width: SIZEX,
+ height: SIZEY,
+ fill: 'url(#'+id+'_jgraduate_grad)',
+ 'fill-opacity': gradalpha/100
+ }, svg);
+
+ // stop visuals created here
+ var beginCoord = $('<div/>').attr({
+ 'class': 'grad_coord jGraduate_lg_field',
+ title: 'Begin Stop'
+ }).text(1).css({
+ top: y1 * MAX,
+ left: x1 * MAX
+ }).data('coord', 'start').appendTo(container);
+
+ var endCoord = beginCoord.clone().text(2).css({
+ top: y2 * MAX,
+ left: x2 * MAX
+ }).attr('title', 'End stop').data('coord', 'end').appendTo(container);
+
+ var centerCoord = $('<div/>').attr({
+ 'class': 'grad_coord jGraduate_rg_field',
+ title: 'Center stop'
+ }).text('C').css({
+ top: cy * MAX,
+ left: cx * MAX
+ }).data('coord', 'center').appendTo(container);
+
+ var focusCoord = centerCoord.clone().text('F').css({
+ top: fy * MAX,
+ left: fx * MAX,
+ display: 'none'
+ }).attr('title', 'Focus point').data('coord', 'focus').appendTo(container);
+
+ focusCoord[0].id = id + '_jGraduate_focusCoord';
+
+ var coords = $(idref + ' .grad_coord');
+
+// $(container).hover(function() {
+// coords.animate({
+// opacity: 1
+// }, 500);
+// }, function() {
+// coords.animate({
+// opacity: .2
+// }, 500);
+// });
+
+ $.each(['x1', 'y1', 'x2', 'y2', 'cx', 'cy', 'fx', 'fy'], function(i, attr) {
+ var attrval = curGradient.getAttribute(attr);
+
+ var isRadial = isNaN(attr[1]);
+
+ if(!attrval) {
+ // Set defaults
+ if(isRadial) {
+ // For radial points
+ attrval = "0.5";
+ } else {
+ // Only x2 is 1
+ attrval = attr === 'x2' ? "1.0" : "0.0";
+ }
+ }
+
+ attr_input[attr] = $('#'+id+'_jGraduate_' + attr)
+ .val(attrval)
+ .change(function() {
+ // TODO: Support values < 0 and > 1 (zoomable preview?)
+ if (isNaN(parseFloat(this.value)) || this.value < 0) {
+ this.value = 0.0;
+ } else if(this.value > 1) {
+ this.value = 1.0;
+ }
+
+ if(!(attr[0] === 'f' && !showFocus)) {
+ if(isRadial && curType === 'radialGradient' || !isRadial && curType === 'linearGradient') {
+ curGradient.setAttribute(attr, this.value);
+ }
+ }
+
+ if(isRadial) {
+ var $elem = attr[0] === "c" ? centerCoord : focusCoord;
+ } else {
+ var $elem = attr[1] === "1" ? beginCoord : endCoord;
+ }
+
+ var cssName = attr.indexOf('x') >= 0 ? 'left' : 'top';
+
+ $elem.css(cssName, this.value * MAX);
+ }).change();
+ });
+
+
+
+ function mkStop(n, color, opac, sel, stop_elem) {
+ var stop = stop_elem || mkElem('stop',{'stop-color':color,'stop-opacity':opac,offset:n}, curGradient);
+ if(stop_elem) {
+ color = stop_elem.getAttribute('stop-color');
+ opac = stop_elem.getAttribute('stop-opacity');
+ n = stop_elem.getAttribute('offset');
+ } else {
+ curGradient.appendChild(stop);
+ }
+ if(opac === null) opac = 1;
+
+ var picker_d = 'M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z';
+
+ var pathbg = mkElem('path',{
+ d: picker_d,
+ fill: 'url(#jGraduate_trans)',
+ transform: 'translate(' + (10 + n * MAX) + ', 26)'
+ }, stopGroup);
+
+ var path = mkElem('path',{
+ d: picker_d,
+ fill: color,
+ 'fill-opacity': opac,
+ transform: 'translate(' + (10 + n * MAX) + ', 26)',
+ stroke: '#000',
+ 'stroke-width': 1.5
+ }, stopGroup);
+
+ $(path).mousedown(function(e) {
+ selectStop(this);
+ drag = cur_stop;
+ $win.mousemove(dragColor).mouseup(remDrags);
+ stop_offset = stopMakerDiv.offset();
+ e.preventDefault();
+ return false;
+ }).data('stop', stop).data('bg', pathbg).dblclick(function() {
+ $('div.jGraduate_LightBox').show();
+ var colorhandle = this;
+ var stopOpacity = +stop.getAttribute('stop-opacity') || 1;
+ var stopColor = stop.getAttribute('stop-color') || 1;
+ var thisAlpha = (parseFloat(stopOpacity)*255).toString(16);
+ while (thisAlpha.length < 2) { thisAlpha = "0" + thisAlpha; }
+ color = stopColor.substr(1) + thisAlpha;
+ $('#'+id+'_jGraduate_stopPicker').css({'left': 100, 'bottom': 15}).jPicker({
+ window: { title: "Pick the start color and opacity for the gradient" },
+ images: { clientPath: $settings.images.clientPath },
+ color: { active: color, alphaSupport: true }
+ }, function(color, arg2){
+ stopColor = color.val('hex') ? ('#'+color.val('hex')) : "none";
+ stopOpacity = color.val('a') !== null ? color.val('a')/256 : 1;
+ colorhandle.setAttribute('fill', stopColor);
+ colorhandle.setAttribute('fill-opacity', stopOpacity);
+ stop.setAttribute('stop-color', stopColor);
+ stop.setAttribute('stop-opacity', stopOpacity);
+ $('div.jGraduate_LightBox').hide();
+ $('#'+id+'_jGraduate_stopPicker').hide();
+ }, null, function() {
+ $('div.jGraduate_LightBox').hide();
+ $('#'+id+'_jGraduate_stopPicker').hide();
+ });
+ });
+
+ $(curGradient).find('stop').each(function() {
+ var cur_s = $(this);
+ if(+this.getAttribute('offset') > n) {
+ if(!color) {
+ var newcolor = this.getAttribute('stop-color');
+ var newopac = this.getAttribute('stop-opacity');
+ stop.setAttribute('stop-color', newcolor);
+ path.setAttribute('fill', newcolor);
+ stop.setAttribute('stop-opacity', newopac === null ? 1 : newopac);
+ path.setAttribute('fill-opacity', newopac === null ? 1 : newopac);
+ }
+ cur_s.before(stop);
+ return false;
+ }
+ });
+ if(sel) selectStop(path);
+ return stop;
+ }
+
+ function remStop() {
+ delStop.setAttribute('display', 'none');
+ var path = $(cur_stop);
+ var stop = path.data('stop');
+ var bg = path.data('bg');
+ $([cur_stop, stop, bg]).remove();
+ }
+
+
+ var stops, stopGroup;
+
+ var stopMakerDiv = $('#' + id + '_jGraduate_StopSlider');
+
+ var cur_stop, stopGroup, stopMakerSVG, drag;
+
+ var delStop = mkElem('path',{
+ d:'m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5',
+ fill:'none',
+ stroke:'#D00',
+ 'stroke-width':5,
+ display:'none'
+ }, stopMakerSVG);
+
+
+ function selectStop(item) {
+ if(cur_stop) cur_stop.setAttribute('stroke', '#000');
+ item.setAttribute('stroke', 'blue');
+ cur_stop = item;
+ cur_stop.parentNode.appendChild(cur_stop);
+ // stops = $('stop');
+ // opac_select.val(cur_stop.attr('fill-opacity') || 1);
+ // root.append(delStop);
+ }
+
+ var stop_offset;
+
+ function remDrags() {
+ $win.unbind('mousemove', dragColor);
+ if(delStop.getAttribute('display') !== 'none') {
+ remStop();
+ }
+ drag = null;
+ }
+
+ var scale_x = 1, scale_y = 1, angle = 0;
+ var c_x = cx;
+ var c_y = cy;
+
+ function xform() {
+ var rot = angle?'rotate(' + angle + ',' + c_x + ',' + c_y + ') ':'';
+ if(scale_x === 1 && scale_y === 1) {
+ curGradient.removeAttribute('gradientTransform');
+// $('#ang').addClass('dis');
+ } else {
+ var x = -c_x * (scale_x-1);
+ var y = -c_y * (scale_y-1);
+ curGradient.setAttribute('gradientTransform', rot + 'translate(' + x + ',' + y + ') scale(' + scale_x + ',' + scale_y + ')');
+// $('#ang').removeClass('dis');
+ }
+ }
+
+ function dragColor(evt) {
+
+ var x = evt.pageX - stop_offset.left;
+ var y = evt.pageY - stop_offset.top;
+ x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10: x;
+
+ var xf_str = 'translate(' + x + ', 26)';
+ if(y < -60 || y > 130) {
+ delStop.setAttribute('display', 'block');
+ delStop.setAttribute('transform', xf_str);
+ } else {
+ delStop.setAttribute('display', 'none');
+ }
+
+ drag.setAttribute('transform', xf_str);
+ $.data(drag, 'bg').setAttribute('transform', xf_str);
+ var stop = $.data(drag, 'stop');
+ var s_x = (x - 10) / MAX;
+
+ stop.setAttribute('offset', s_x);
+ var last = 0;
+
+ $(curGradient).find('stop').each(function(i) {
+ var cur = this.getAttribute('offset');
+ var t = $(this);
+ if(cur < last) {
+ t.prev().before(t);
+ stops = $(curGradient).find('stop');
+ }
+ last = cur;
+ });
+
+ }
+
+ stopMakerSVG = mkElem('svg', {
+ width: '100%',
+ height: 45
+ }, stopMakerDiv[0]);
+
+ var trans_pattern = mkElem('pattern', {
+ width: 16,
+ height: 16,
+ patternUnits: 'userSpaceOnUse',
+ id: 'jGraduate_trans'
+ }, stopMakerSVG);
+
+ var trans_img = mkElem('image', {
+ width: 16,
+ height: 16
+ }, trans_pattern);
+
+ var bg_image = $settings.images.clientPath + 'map-opacity.png';
+
+ trans_img.setAttributeNS(ns.xlink, 'xlink:href', bg_image);
+
+ $(stopMakerSVG).click(function(evt) {
+ stop_offset = stopMakerDiv.offset();
+ var target = evt.target;
+ if(target.tagName === 'path') return;
+ var x = evt.pageX - stop_offset.left - 8;
+ x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10: x;
+ mkStop(x / MAX, 0, 0, true);
+ evt.stopPropagation();
+ });
+
+ $(stopMakerSVG).mouseover(function() {
+ stopMakerSVG.appendChild(delStop);
+ });
+
+ stopGroup = mkElem('g', {}, stopMakerSVG);
+
+ mkElem('line', {
+ x1: 10,
+ y1: 15,
+ x2: MAX + 10,
+ y2: 15,
+ 'stroke-width': 2,
+ stroke: '#000'
+ }, stopMakerSVG);
+
+
+ var spreadMethodOpt = gradPicker.find('.jGraduate_spreadMethod').change(function() {
+ curGradient.setAttribute('spreadMethod', $(this).val());
+ });
+
+
+ // handle dragging the stop around the swatch
+ var draggingCoord = null;
+
+ var onCoordDrag = function(evt) {
+ var x = evt.pageX - offset.left;
+ var y = evt.pageY - offset.top;
+
+ // clamp stop to the swatch
+ x = x < 0 ? 0 : x > MAX ? MAX : x;
+ y = y < 0 ? 0 : y > MAX ? MAX : y;
+
+ draggingCoord.css('left', x).css('top', y);
+
+ // calculate stop offset
+ var fracx = x / SIZEX;
+ var fracy = y / SIZEY;
+
+ var type = draggingCoord.data('coord');
+ var grad = curGradient;
+
+ switch ( type ) {
+ case 'start':
+ attr_input.x1.val(fracx);
+ attr_input.y1.val(fracy);
+ grad.setAttribute('x1', fracx);
+ grad.setAttribute('y1', fracy);
+ break;
+ case 'end':
+ attr_input.x2.val(fracx);
+ attr_input.y2.val(fracy);
+ grad.setAttribute('x2', fracx);
+ grad.setAttribute('y2', fracy);
+ break;
+ case 'center':
+ attr_input.cx.val(fracx);
+ attr_input.cy.val(fracy);
+ grad.setAttribute('cx', fracx);
+ grad.setAttribute('cy', fracy);
+ c_x = fracx;
+ c_y = fracy;
+ xform();
+ break;
+ case 'focus':
+ attr_input.fx.val(fracx);
+ attr_input.fy.val(fracy);
+ grad.setAttribute('fx', fracx);
+ grad.setAttribute('fy', fracy);
+ xform();
+ }
+
+ evt.preventDefault();
+ }
+
+ var onCoordUp = function() {
+ draggingCoord = null;
+ $win.unbind('mousemove', onCoordDrag).unbind('mouseup', onCoordUp);
+ }
+
+ // Linear gradient
+// (function() {
+
+
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+
+ // if there are not at least two stops, then
+ if (numstops < 2) {
+ while (numstops < 2) {
+ curGradient.appendChild( document.createElementNS(ns.svg, 'stop') );
+ ++numstops;
+ }
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+ }
+
+ var numstops = stops.length;
+ for(var i = 0; i < numstops; i++) {
+ mkStop(0, 0, 0, 0, stops[i]);
+ }
+
+ spreadMethodOpt.val(curGradient.getAttribute('spreadMethod') || 'pad');
+
+ var offset;
+
+ // No match, so show focus point
+ var showFocus = false;
+
+ previewRect.setAttribute('fill-opacity', gradalpha/100);
+
+
+ $('#' + id + ' div.grad_coord').mousedown(function(evt) {
+ evt.preventDefault();
+ draggingCoord = $(this);
+ var s_pos = draggingCoord.offset();
+ offset = draggingCoord.parent().offset();
+ $win.mousemove(onCoordDrag).mouseup(onCoordUp);
+ });
+
+ // bind GUI elements
+ $('#'+id+'_jGraduate_Ok').bind('click', function() {
+ $this.paint.type = curType;
+ $this.paint[curType] = curGradient.cloneNode(true);;
+ $this.paint.solidColor = null;
+ okClicked();
+ });
+ $('#'+id+'_jGraduate_Cancel').bind('click', function(paint) {
+ cancelClicked();
+ });
+
+ if(curType === 'radialGradient') {
+ if(showFocus) {
+ focusCoord.show();
+ } else {
+ focusCoord.hide();
+ attr_input.fx.val("");
+ attr_input.fy.val("");
+ }
+ }
+
+ $("#" + id + "_jGraduate_match_ctr")[0].checked = !showFocus;
+
+ var lastfx, lastfy;
+
+ $("#" + id + "_jGraduate_match_ctr").change(function() {
+ showFocus = !this.checked;
+ focusCoord.toggle(showFocus);
+ attr_input.fx.val('');
+ attr_input.fy.val('');
+ var grad = curGradient;
+ if(!showFocus) {
+ lastfx = grad.getAttribute('fx');
+ lastfy = grad.getAttribute('fy');
+ grad.removeAttribute('fx');
+ grad.removeAttribute('fy');
+ } else {
+ var fx = lastfx || .5;
+ var fy = lastfy || .5;
+ grad.setAttribute('fx', fx);
+ grad.setAttribute('fy', fy);
+ attr_input.fx.val(fx);
+ attr_input.fy.val(fy);
+ }
+ });
+
+ var stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+ var numstops = stops.length;
+ // if there are not at least two stops, then
+ if (numstops < 2) {
+ while (numstops < 2) {
+ curGradient.appendChild( document.createElementNS(ns.svg, 'stop') );
+ ++numstops;
+ }
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+ }
+
+ var slider;
+
+ var setSlider = function(e) {
+ var offset = slider.offset;
+ var div = slider.parent;
+ var x = (e.pageX - offset.left - parseInt(div.css('border-left-width')));
+ if (x > SLIDERW) x = SLIDERW;
+ if (x <= 0) x = 0;
+ var posx = x - 5;
+ x /= SLIDERW;
+
+ switch ( slider.type ) {
+ case 'radius':
+ x = Math.pow(x * 2, 2.5);
+ if(x > .98 && x < 1.02) x = 1;
+ if (x <= .01) x = .01;
+ curGradient.setAttribute('r', x);
+ break;
+ case 'opacity':
+ $this.paint.alpha = parseInt(x*100);
+ previewRect.setAttribute('fill-opacity', x);
+ break;
+ case 'ellip':
+ scale_x = 1, scale_y = 1;
+ if(x < .5) {
+ x /= .5; // 0.001
+ scale_x = x <= 0 ? .01 : x;
+ } else if(x > .5) {
+ x /= .5; // 2
+ x = 2 - x;
+ scale_y = x <= 0 ? .01 : x;
+ }
+ xform();
+ x -= 1;
+ if(scale_y === x + 1) {
+ x = Math.abs(x);
+ }
+ break;
+ case 'angle':
+ x = x - .5;
+ angle = x *= 180;
+ xform();
+ x /= 100;
+ break;
+ }
+ slider.elem.css({'margin-left':posx});
+ x = Math.round(x*100);
+ slider.input.val(x);
+ };
+
+ var ellip_val = 0, angle_val = 0;
+
+ if(curType === 'radialGradient') {
+ var tlist = curGradient.gradientTransform.baseVal;
+ if(tlist.numberOfItems === 2) {
+ var t = tlist.getItem(0);
+ var s = tlist.getItem(1);
+ if(t.type === 2 && s.type === 3) {
+ var m = s.matrix;
+ if(m.a !== 1) {
+ ellip_val = Math.round(-(1 - m.a) * 100);
+ } else if(m.d !== 1) {
+ ellip_val = Math.round((1 - m.d) * 100);
+ }
+ }
+ } else if(tlist.numberOfItems === 3) {
+ // Assume [R][T][S]
+ var r = tlist.getItem(0);
+ var t = tlist.getItem(1);
+ var s = tlist.getItem(2);
+
+ if(r.type === 4
+ && t.type === 2
+ && s.type === 3) {
+
+ angle_val = Math.round(r.angle);
+ var m = s.matrix;
+ if(m.a !== 1) {
+ ellip_val = Math.round(-(1 - m.a) * 100);
+ } else if(m.d !== 1) {
+ ellip_val = Math.round((1 - m.d) * 100);
+ }
+
+ }
+ }
+ }
+
+ var sliders = {
+ radius: {
+ handle: '#' + id + '_jGraduate_RadiusArrows',
+ input: '#' + id + '_jGraduate_RadiusInput',
+ val: (curGradient.getAttribute('r') || .5) * 100
+ },
+ opacity: {
+ handle: '#' + id + '_jGraduate_OpacArrows',
+ input: '#' + id + '_jGraduate_OpacInput',
+ val: $this.paint.alpha || 100
+ },
+ ellip: {
+ handle: '#' + id + '_jGraduate_EllipArrows',
+ input: '#' + id + '_jGraduate_EllipInput',
+ val: ellip_val
+ },
+ angle: {
+ handle: '#' + id + '_jGraduate_AngleArrows',
+ input: '#' + id + '_jGraduate_AngleInput',
+ val: angle_val
+ }
+ }
+
+ $.each(sliders, function(type, data) {
+ var handle = $(data.handle);
+ handle.mousedown(function(evt) {
+ var parent = handle.parent();
+ slider = {
+ type: type,
+ elem: handle,
+ input: $(data.input),
+ parent: parent,
+ offset: parent.offset()
+ };
+ $win.mousemove(dragSlider).mouseup(stopSlider);
+ evt.preventDefault();
+ });
+
+ $(data.input).val(data.val).change(function() {
+ var val = +this.value;
+ var xpos = 0;
+ var isRad = curType === 'radialGradient';
+ switch ( type ) {
+ case 'radius':
+ if(isRad) curGradient.setAttribute('r', val / 100);
+ xpos = (Math.pow(val / 100, 1 / 2.5) / 2) * SLIDERW;
+ break;
+
+ case 'opacity':
+ $this.paint.alpha = val;
+ previewRect.setAttribute('fill-opacity', val / 100);
+ xpos = val * (SLIDERW / 100);
+ break;
+
+ case 'ellip':
+ scale_x = scale_y = 1;
+ if(val === 0) {
+ xpos = SLIDERW * .5;
+ break;
+ }
+ if(val > 99.5) val = 99.5;
+ if(val > 0) {
+ scale_y = 1 - (val / 100);
+ } else {
+ scale_x = - (val / 100) - 1;
+ }
+
+ xpos = SLIDERW * ((val + 100) / 2) / 100;
+ if(isRad) xform();
+ break;
+
+ case 'angle':
+ angle = val;
+ xpos = angle / 180;
+ xpos += .5;
+ xpos *= SLIDERW;
+ if(isRad) xform();
+ }
+ if(xpos > SLIDERW) {
+ xpos = SLIDERW;
+ } else if(xpos < 0) {
+ xpos = 0;
+ }
+ handle.css({'margin-left': xpos - 5});
+ }).change();
+ });
+
+ var dragSlider = function(evt) {
+ setSlider(evt);
+ evt.preventDefault();
+ };
+
+ var stopSlider = function(evt) {
+ $win.unbind('mousemove', dragSlider).unbind('mouseup', stopSlider);
+ slider = null;
+ };
+
+
+ // --------------
+ var thisAlpha = ($this.paint.alpha*255/100).toString(16);
+ while (thisAlpha.length < 2) { thisAlpha = "0" + thisAlpha; }
+ thisAlpha = thisAlpha.split(".")[0];
+ color = $this.paint.solidColor == "none" ? "" : $this.paint.solidColor + thisAlpha;
+
+ if(!isSolid) {
+ color = stops[0].getAttribute('stop-color');
+ }
+
+ // This should be done somewhere else, probably
+ $.extend($.fn.jPicker.defaults.window, {
+ alphaSupport: true, effects: {type: 'show',speed: 0}
+ });
+
+ colPicker.jPicker(
+ {
+ window: { title: $settings.window.pickerTitle },
+ images: { clientPath: $settings.images.clientPath },
+ color: { active: color, alphaSupport: true }
+ },
+ function(color) {
+ $this.paint.type = "solidColor";
+ $this.paint.alpha = color.val('ahex') ? Math.round((color.val('a') / 255) * 100) : 100;
+ $this.paint.solidColor = color.val('hex') ? color.val('hex') : "none";
+ $this.paint.radialGradient = null;
+ okClicked();
+ },
+ null,
+ function(){ cancelClicked(); }
+ );
+
+
+ var tabs = $(idref + ' .jGraduate_tabs li');
+ tabs.click(function() {
+ tabs.removeClass('jGraduate_tab_current');
+ $(this).addClass('jGraduate_tab_current');
+ $(idref + " > div").hide();
+ var type = $(this).attr('data-type');
+ var container = $(idref + ' .jGraduate_gradPick').show();
+ if(type === 'rg' || type === 'lg') {
+ // Show/hide appropriate fields
+ $('.jGraduate_' + type + '_field').show();
+ $('.jGraduate_' + (type === 'lg' ? 'rg' : 'lg') + '_field').hide();
+
+ $('#' + id + '_jgraduate_rect')[0].setAttribute('fill', 'url(#' + id + '_' + type + '_jgraduate_grad)');
+
+ // Copy stops
+
+ curType = type === 'lg' ? 'linearGradient' : 'radialGradient';
+
+ $('#' + id + '_jGraduate_OpacInput').val($this.paint.alpha).change();
+
+ var newGrad = $('#' + id + '_' + type + '_jgraduate_grad')[0];
+
+ if(curGradient !== newGrad) {
+ var cur_stops = $(curGradient).find('stop');
+ $(newGrad).empty().append(cur_stops);
+ curGradient = newGrad;
+ var sm = spreadMethodOpt.val();
+ curGradient.setAttribute('spreadMethod', sm);
+ }
+ showFocus = type === 'rg' && curGradient.getAttribute('fx') != null && !(cx == fx && cy == fy);
+ $('#' + id + '_jGraduate_focusCoord').toggle(showFocus);
+ if(showFocus) {
+ $('#' + id + '_jGraduate_match_ctr')[0].checked = false;
+ }
+ } else {
+ $(idref + ' .jGraduate_gradPick').hide();
+ $(idref + ' .jGraduate_colPick').show();
+ }
+ });
+ $(idref + " > div").hide();
+ tabs.removeClass('jGraduate_tab_current');
+ var tab;
+ switch ( $this.paint.type ) {
+ case 'linearGradient':
+ tab = $(idref + ' .jGraduate_tab_lingrad');
+ break;
+ case 'radialGradient':
+ tab = $(idref + ' .jGraduate_tab_radgrad');
+ break;
+ default:
+ tab = $(idref + ' .jGraduate_tab_color');
+ break;
+ }
+ $this.show();
+
+ // jPicker will try to show after a 0ms timeout, so need to fire this after that
+ setTimeout(function() {
+ tab.addClass('jGraduate_tab_current').click();
+ }, 10);
+ });
+ };
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.min.js.svn-base b/files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.min.js.svn-base
new file mode 100644
index 000000000..84144eec9
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/.svn/text-base/jquery.jgraduate.min.js.svn-base
@@ -0,0 +1,37 @@
+(function(){function r(i,z,t){i=document.createElementNS(A.svg,i);if(Ba)for(var B in z)i.setAttribute(B,z[B]);else for(B in z){var W=z[B],w=i[B];if(w&&w.constructor==="SVGLength")w.baseVal.value=W;else i.setAttribute(B,W)}t&&t.appendChild(i);return i}var A={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};if(!window.console)window.console=new function(){this.log=function(){};this.dir=function(){}};$.jGraduate={Paint:function(i){i=i||{};this.alpha=isNaN(i.alpha)?100:i.alpha;if(i.copy){this.type=
+i.copy.type;this.alpha=i.copy.alpha;this.radialGradient=this.linearGradient=this.solidColor=null;switch(this.type){case "solidColor":this.solidColor=i.copy.solidColor;break;case "linearGradient":this.linearGradient=i.copy.linearGradient.cloneNode(true);break;case "radialGradient":this.radialGradient=i.copy.radialGradient.cloneNode(true)}}else if(i.linearGradient){this.type="linearGradient";this.radialGradient=this.solidColor=null;this.linearGradient=i.linearGradient.cloneNode(true)}else if(i.radialGradient){this.type=
+"radialGradient";this.linearGradient=this.solidColor=null;this.radialGradient=i.radialGradient.cloneNode(true)}else if(i.solidColor){this.type="solidColor";this.solidColor=i.solidColor}else{this.type="none";this.radialGradient=this.linearGradient=this.solidColor=null}}};jQuery.fn.jGraduateDefaults={paint:new $.jGraduate.Paint,window:{pickerTitle:"Drag markers to pick a paint"},images:{clientPath:"images/"},newstop:"inverse"};var Ba=navigator.userAgent.indexOf("Gecko/")>=0;jQuery.fn.jGraduate=function(i){var z=
+arguments;return this.each(function(){function t(c,a,d,h,f){var l=f||r("stop",{"stop-color":a,"stop-opacity":d,offset:c},g);if(f){a=f.getAttribute("stop-color");d=f.getAttribute("stop-opacity");c=f.getAttribute("offset")}else g.appendChild(l);if(d===null)d=1;f=r("path",{d:"M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z",fill:"url(#jGraduate_trans)",transform:"translate("+(10+c*j)+", 26)"},fa);var X=r("path",{d:"M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z",
+fill:a,"fill-opacity":d,transform:"translate("+(10+c*j)+", 26)",stroke:"#000","stroke-width":1.5},fa);$(X).mousedown(function(M){B(this);R=F;N.mousemove(la).mouseup(W);S=ga.offset();M.preventDefault();return false}).data("stop",l).data("bg",f).dblclick(function(){$("div.jGraduate_LightBox").show();for(var M=this,I=+l.getAttribute("stop-opacity")||1,C=l.getAttribute("stop-color")||1,Y=(parseFloat(I)*255).toString(16);Y.length<2;)Y="0"+Y;a=C.substr(1)+Y;$("#"+b+"_jGraduate_stopPicker").css({left:100,
+bottom:15}).jPicker({window:{title:"Pick the start color and opacity for the gradient"},images:{clientPath:o.images.clientPath},color:{active:a,alphaSupport:true}},function(Z){C=Z.val("hex")?"#"+Z.val("hex"):"none";I=Z.val("a")!==null?Z.val("a")/256:1;M.setAttribute("fill",C);M.setAttribute("fill-opacity",I);l.setAttribute("stop-color",C);l.setAttribute("stop-opacity",I);$("div.jGraduate_LightBox").hide();$("#"+b+"_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide();
+$("#"+b+"_jGraduate_stopPicker").hide()})});$(g).find("stop").each(function(){var M=$(this);if(+this.getAttribute("offset")>c){if(!a){var I=this.getAttribute("stop-color"),C=this.getAttribute("stop-opacity");l.setAttribute("stop-color",I);X.setAttribute("fill",I);l.setAttribute("stop-opacity",C===null?1:C);X.setAttribute("fill-opacity",C===null?1:C)}M.before(l);return false}});h&&B(X);return l}function B(c){F&&F.setAttribute("stroke","#000");c.setAttribute("stroke","blue");F=c;F.parentNode.appendChild(F)}
+function W(){N.unbind("mousemove",la);if(O.getAttribute("display")!=="none"){O.setAttribute("display","none");var c=$(F),a=c.data("stop");c=c.data("bg");$([F,a,c]).remove()}R=null}function w(){var c=T?"rotate("+T+","+ha+","+ia+") ":"";J===1&&G===1?g.removeAttribute("gradientTransform"):g.setAttribute("gradientTransform",c+"translate("+-ha*(J-1)+","+-ia*(G-1)+") scale("+J+","+G+")")}function la(c){var a=c.pageX-S.left;c=c.pageY-S.top;a=a<10?10:a>j+10?j+10:a;var d="translate("+a+", 26)";if(c<-60||c>
+130){O.setAttribute("display","block");O.setAttribute("transform",d)}else O.setAttribute("display","none");R.setAttribute("transform",d);$.data(R,"bg").setAttribute("transform",d);$.data(R,"stop").setAttribute("offset",(a-10)/j);var h=0;$(g).find("stop").each(function(){var f=this.getAttribute("offset"),l=$(this);if(f<h){l.prev().before(l);D=$(g).find("stop")}h=f})}var e=$(this),o=$.extend(true,{},jQuery.fn.jGraduateDefaults,i),b=e.attr("id"),s="#"+e.attr("id")+" ";if(s){var ma=function(){switch(e.paint.type){case "radialGradient":e.paint.linearGradient=
+null;break;case "linearGradient":e.paint.radialGradient=null;break;case "solidColor":e.paint.radialGradient=e.paint.linearGradient=null}$.isFunction(e.okCallback)&&e.okCallback(e.paint);e.hide()},na=function(){$.isFunction(e.cancelCallback)&&e.cancelCallback();e.hide()};$.extend(true,e,{paint:new $.jGraduate.Paint({copy:o.paint}),okCallback:$.isFunction(z[1])&&z[1]||null,cancelCallback:$.isFunction(z[2])&&z[2]||null});e.position();var u=null,N=$(window);if(e.paint.type=="none")e.paint=$.jGraduate.Paint({solidColor:"ffffff"});
+e.addClass("jGraduate_Picker");e.html('<ul class="jGraduate_tabs"><li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li><li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li><li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li></ul><div class="jGraduate_colPick"></div><div class="jGraduate_gradPick"></div><div class="jGraduate_LightBox"></div><div id="'+b+'_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>');var Ca=$(s+"> .jGraduate_colPick"),
+n=$(s+"> .jGraduate_gradPick");n.html('<div id="'+b+'_jGraduate_Swatch" class="jGraduate_Swatch"><h2 class="jGraduate_Title">'+o.window.pickerTitle+'</h2><div id="'+b+'_jGraduate_GradContainer" class="jGraduate_GradContainer"></div><div id="'+b+'_jGraduate_StopSlider" class="jGraduate_StopSlider"></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_lg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Begin Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+
+b+'_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+b+'_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">End Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+b+'_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+
+b+'_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_rg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Center Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+b+'_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+b+'_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Focal Point</label><div class="jGraduate_Form_Section"><label>Match center: <input type="checkbox" checked="checked" id="'+
+b+'_jGraduate_match_ctr"/></label><br/><label>x:</label><input type="text" id="'+b+'_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+b+'_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_StopSection jGraduate_SpreadMethod"><label class="jGraduate_Form_Heading">Spread method</label><div class="jGraduate_Form_Section"><select class="jGraduate_spreadMethod"><option value=pad selected>Pad</option><option value=reflect>Reflect</option><option value=repeat>Repeat</option></select></div></div><div class="jGraduate_Form"><div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field"><label class="prelabel">Radius:</label><div id="'+
+b+'_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius"><img id="'+b+'_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="'+o.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_RadiusInput" size="3" value="100"/>%</label></div><div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field"><label class="prelabel">Ellip:</label><div id="'+b+'_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip"><img id="'+
+b+'_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="'+o.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_EllipInput" size="3" value="0"/>%</label></div><div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field"><label class="prelabel">Angle:</label><div id="'+b+'_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle"><img id="'+b+'_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="'+o.images.clientPath+
+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_AngleInput" size="3" value="0"/>deg</label></div><div class="jGraduate_Slider jGraduate_OpacField"><label class="prelabel">Opac:</label><div id="'+b+'_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac"><img id="'+b+'_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="'+o.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_OpacInput" size="3" value="100"/>%</label></div></div><div class="jGraduate_OkCancel"><input type="button" id="'+
+b+'_jGraduate_Ok" class="jGraduate_Ok" value="OK"/><input type="button" id="'+b+'_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/></div>');var j=256,oa=j-0,pa=j-0,p,g,aa,q={};$(".jGraduate_SliderBar").width(145);var x=$("#"+b+"_jGraduate_GradContainer")[0],m=r("svg",{id:b+"_jgraduate_svg",width:j,height:j,xmlns:A.svg},x);p=p||e.paint.type;var v=g=e.paint[p],U=e.paint.alpha,ba=p==="solidColor";switch(p){case "solidColor":case "linearGradient":if(!ba){g.id=b+"_lg_jgraduate_grad";v=g=m.appendChild(g)}r("radialGradient",
+{id:b+"_rg_jgraduate_grad"},m);if(p==="linearGradient")break;case "radialGradient":if(!ba){g.id=b+"_rg_jgraduate_grad";v=g=m.appendChild(g)}r("linearGradient",{id:b+"_lg_jgraduate_grad"},m)}if(ba){v=g=$("#"+b+"_lg_jgraduate_grad")[0];u=e.paint[p];t(0,"#"+u,1);var K=typeof o.newstop;if(K==="string")switch(o.newstop){case "same":t(1,"#"+u,1);break;case "inverse":K="";for(var y=0;y<6;y+=2){u.substr(y,2);var P=(255-parseInt(u.substr(y,2),16)).toString(16);if(P.length<2)P=0+P;K+=P}t(1,"#"+K,1);break;case "white":t(1,
+"#ffffff",1);break;case "black":t(1,"#000000",1)}else if(K==="object")t(1,o.newstop.color||"#"+u,"opac"in o.newstop?o.newstop.opac:1)}u=parseFloat(v.getAttribute("x1")||0);K=parseFloat(v.getAttribute("y1")||0);y=parseFloat(v.getAttribute("x2")||1);P=parseFloat(v.getAttribute("y2")||0);var ca=parseFloat(v.getAttribute("cx")||0.5),da=parseFloat(v.getAttribute("cy")||0.5),qa=parseFloat(v.getAttribute("fx")||ca),ra=parseFloat(v.getAttribute("fy")||da);aa=r("rect",{id:b+"_jgraduate_rect",x:0,y:0,width:oa,
+height:pa,fill:"url(#"+b+"_jgraduate_grad)","fill-opacity":U/100},m);var sa=$("<div/>").attr({"class":"grad_coord jGraduate_lg_field",title:"Begin Stop"}).text(1).css({top:K*j,left:u*j}).data("coord","start").appendTo(x),Da=sa.clone().text(2).css({top:P*j,left:y*j}).attr("title","End stop").data("coord","end").appendTo(x),ta=$("<div/>").attr({"class":"grad_coord jGraduate_rg_field",title:"Center stop"}).text("C").css({top:da*j,left:ca*j}).data("coord","center").appendTo(x),V=ta.clone().text("F").css({top:ra*
+j,left:qa*j,display:"none"}).attr("title","Focus point").data("coord","focus").appendTo(x);V[0].id=b+"_jGraduate_focusCoord";$(s+" .grad_coord");$.each(["x1","y1","x2","y2","cx","cy","fx","fy"],function(c,a){var d=g.getAttribute(a),h=isNaN(a[1]);d||(d=h?"0.5":a==="x2"?"1.0":"0.0");q[a]=$("#"+b+"_jGraduate_"+a).val(d).change(function(){if(isNaN(parseFloat(this.value))||this.value<0)this.value=0;else if(this.value>1)this.value=1;if(!(a[0]==="f"&&!E))if(h&&p==="radialGradient"||!h&&p==="linearGradient")g.setAttribute(a,
+this.value);var f=h?a[0]==="c"?ta:V:a[1]==="1"?sa:Da,l=a.indexOf("x")>=0?"left":"top";f.css(l,this.value*j)}).change()});var D,fa,ga=$("#"+b+"_jGraduate_StopSlider"),F,H,R,O=r("path",{d:"m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5",fill:"none",stroke:"#D00","stroke-width":5,display:"none"},H),S,J=1,G=1,T=0,ha=ca,ia=da;H=r("svg",{width:"100%",height:45},ga[0]);x=r("pattern",{width:16,height:16,patternUnits:"userSpaceOnUse",id:"jGraduate_trans"},H);r("image",{width:16,height:16},x).setAttributeNS(A.xlink,
+"xlink:href",o.images.clientPath+"map-opacity.png");$(H).click(function(c){S=ga.offset();if(c.target.tagName!=="path"){var a=c.pageX-S.left-8;a=a<10?10:a>j+10?j+10:a;t(a/j,0,0,true);c.stopPropagation()}});$(H).mouseover(function(){H.appendChild(O)});fa=r("g",{},H);r("line",{x1:10,y1:15,x2:j+10,y2:15,"stroke-width":2,stroke:"#000"},H);var ua=n.find(".jGraduate_spreadMethod").change(function(){g.setAttribute("spreadMethod",$(this).val())}),Q=null,va=function(c){var a=c.pageX-ja.left,d=c.pageY-ja.top;
+a=a<0?0:a>j?j:a;d=d<0?0:d>j?j:d;Q.css("left",a).css("top",d);a=a/oa;d=d/pa;var h=Q.data("coord"),f=g;switch(h){case "start":q.x1.val(a);q.y1.val(d);f.setAttribute("x1",a);f.setAttribute("y1",d);break;case "end":q.x2.val(a);q.y2.val(d);f.setAttribute("x2",a);f.setAttribute("y2",d);break;case "center":q.cx.val(a);q.cy.val(d);f.setAttribute("cx",a);f.setAttribute("cy",d);ha=a;ia=d;w();break;case "focus":q.fx.val(a);q.fy.val(d);f.setAttribute("fx",a);f.setAttribute("fy",d);w()}c.preventDefault()},wa=
+function(){Q=null;N.unbind("mousemove",va).unbind("mouseup",wa)};D=g.getElementsByTagNameNS(A.svg,"stop");if(k<2){for(;k<2;){g.appendChild(document.createElementNS(A.svg,"stop"));++k}D=g.getElementsByTagNameNS(A.svg,"stop")}var k=D.length;for(y=0;y<k;y++)t(0,0,0,0,D[y]);ua.val(g.getAttribute("spreadMethod")||"pad");var ja,E=false;aa.setAttribute("fill-opacity",U/100);$("#"+b+" div.grad_coord").mousedown(function(c){c.preventDefault();Q=$(this);Q.offset();ja=Q.parent().offset();N.mousemove(va).mouseup(wa)});
+$("#"+b+"_jGraduate_Ok").bind("click",function(){e.paint.type=p;e.paint[p]=g.cloneNode(true);e.paint.solidColor=null;ma()});$("#"+b+"_jGraduate_Cancel").bind("click",function(){na()});if(p==="radialGradient")if(E)V.show();else{V.hide();q.fx.val("");q.fy.val("")}$("#"+b+"_jGraduate_match_ctr")[0].checked=!E;var xa,ya;$("#"+b+"_jGraduate_match_ctr").change(function(){E=!this.checked;V.toggle(E);q.fx.val("");q.fy.val("");var c=g;if(E){var a=xa||0.5,d=ya||0.5;c.setAttribute("fx",a);c.setAttribute("fy",
+d);q.fx.val(a);q.fy.val(d)}else{xa=c.getAttribute("fx");ya=c.getAttribute("fy");c.removeAttribute("fx");c.removeAttribute("fy")}});D=g.getElementsByTagNameNS(A.svg,"stop");k=D.length;if(k<2){for(;k<2;){g.appendChild(document.createElementNS(A.svg,"stop"));++k}D=g.getElementsByTagNameNS(A.svg,"stop")}var L;U=n=0;if(p==="radialGradient"){m=g.gradientTransform.baseVal;if(m.numberOfItems===2){k=m.getItem(0);m=m.getItem(1);if(k.type===2&&m.type===3){k=m.matrix;if(k.a!==1)n=Math.round(-(1-k.a)*100);else if(k.d!==
+1)n=Math.round((1-k.d)*100)}}else if(m.numberOfItems===3){x=m.getItem(0);k=m.getItem(1);m=m.getItem(2);if(x.type===4&&k.type===2&&m.type===3){U=Math.round(x.angle);k=m.matrix;if(k.a!==1)n=Math.round(-(1-k.a)*100);else if(k.d!==1)n=Math.round((1-k.d)*100)}}}n={radius:{handle:"#"+b+"_jGraduate_RadiusArrows",input:"#"+b+"_jGraduate_RadiusInput",val:(g.getAttribute("r")||0.5)*100},opacity:{handle:"#"+b+"_jGraduate_OpacArrows",input:"#"+b+"_jGraduate_OpacInput",val:e.paint.alpha||100},ellip:{handle:"#"+
+b+"_jGraduate_EllipArrows",input:"#"+b+"_jGraduate_EllipInput",val:n},angle:{handle:"#"+b+"_jGraduate_AngleArrows",input:"#"+b+"_jGraduate_AngleInput",val:U}};$.each(n,function(c,a){var d=$(a.handle);d.mousedown(function(h){var f=d.parent();L={type:c,elem:d,input:$(a.input),parent:f,offset:f.offset()};N.mousemove(za).mouseup(Aa);h.preventDefault()});$(a.input).val(a.val).change(function(){var h=+this.value,f=0,l=p==="radialGradient";switch(c){case "radius":l&&g.setAttribute("r",h/100);f=Math.pow(h/
+100,0.4)/2*145;break;case "opacity":e.paint.alpha=h;aa.setAttribute("fill-opacity",h/100);f=h*1.45;break;case "ellip":J=G=1;if(h===0){f=72.5;break}if(h>99.5)h=99.5;if(h>0)G=1-h/100;else J=-(h/100)-1;f=145*((h+100)/2)/100;l&&w();break;case "angle":T=h;f=T/180;f+=0.5;f*=145;l&&w()}if(f>145)f=145;else if(f<0)f=0;d.css({"margin-left":f-5})}).change()});var za=function(c){var a=c.pageX-L.offset.left-parseInt(L.parent.css("border-left-width"));if(a>145)a=145;if(a<=0)a=0;var d=a-5;a/=145;switch(L.type){case "radius":a=
+Math.pow(a*2,2.5);if(a>0.98&&a<1.02)a=1;if(a<=0.01)a=0.01;g.setAttribute("r",a);break;case "opacity":e.paint.alpha=parseInt(a*100);aa.setAttribute("fill-opacity",a);break;case "ellip":G=J=1;if(a<0.5){a/=0.5;J=a<=0?0.01:a}else if(a>0.5){a/=0.5;a=2-a;G=a<=0?0.01:a}w();a-=1;if(G===a+1)a=Math.abs(a);break;case "angle":a-=0.5;T=a*=180;w();a/=100}L.elem.css({"margin-left":d});a=Math.round(a*100);L.input.val(a);c.preventDefault()},Aa=function(){N.unbind("mousemove",za).unbind("mouseup",Aa);L=null};for(n=
+(e.paint.alpha*255/100).toString(16);n.length<2;)n="0"+n;n=n.split(".")[0];u=e.paint.solidColor=="none"?"":e.paint.solidColor+n;ba||(u=D[0].getAttribute("stop-color"));$.extend($.fn.jPicker.defaults.window,{alphaSupport:true,effects:{type:"show",speed:0}});Ca.jPicker({window:{title:o.window.pickerTitle},images:{clientPath:o.images.clientPath},color:{active:u,alphaSupport:true}},function(c){e.paint.type="solidColor";e.paint.alpha=c.val("ahex")?Math.round(c.val("a")/255*100):100;e.paint.solidColor=
+c.val("hex")?c.val("hex"):"none";e.paint.radialGradient=null;ma()},null,function(){na()});var ka=$(s+" .jGraduate_tabs li");ka.click(function(){ka.removeClass("jGraduate_tab_current");$(this).addClass("jGraduate_tab_current");$(s+" > div").hide();var c=$(this).attr("data-type");$(s+" .jGraduate_gradPick").show();if(c==="rg"||c==="lg"){$(".jGraduate_"+c+"_field").show();$(".jGraduate_"+(c==="lg"?"rg":"lg")+"_field").hide();$("#"+b+"_jgraduate_rect")[0].setAttribute("fill","url(#"+b+"_"+c+"_jgraduate_grad)");
+p=c==="lg"?"linearGradient":"radialGradient";$("#"+b+"_jGraduate_OpacInput").val(e.paint.alpha).change();var a=$("#"+b+"_"+c+"_jgraduate_grad")[0];if(g!==a){var d=$(g).find("stop");$(a).empty().append(d);g=a;a=ua.val();g.setAttribute("spreadMethod",a)}E=c==="rg"&&g.getAttribute("fx")!=null&&!(ca==qa&&da==ra);$("#"+b+"_jGraduate_focusCoord").toggle(E);if(E)$("#"+b+"_jGraduate_match_ctr")[0].checked=false}else{$(s+" .jGraduate_gradPick").hide();$(s+" .jGraduate_colPick").show()}});$(s+" > div").hide();
+ka.removeClass("jGraduate_tab_current");var ea;switch(e.paint.type){case "linearGradient":ea=$(s+" .jGraduate_tab_lingrad");break;case "radialGradient":ea=$(s+" .jGraduate_tab_radgrad");break;default:ea=$(s+" .jGraduate_tab_color")}e.show();setTimeout(function(){ea.addClass("jGraduate_tab_current").click()},10)}else alert("Container element must have an id attribute to maintain unique id strings for sub-elements.")})}})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/LICENSE b/files_svgedit/svg-edit/jgraduate/LICENSE
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/files_svgedit/svg-edit/jgraduate/README b/files_svgedit/svg-edit/jgraduate/README
new file mode 100644
index 000000000..ef3e21ff8
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/README
@@ -0,0 +1,3 @@
+jGraduate - A jQuery plugin for picking gradients
+
+Licensed under the Apache License 2. See LICENSE for more information.
diff --git a/files_svgedit/svg-edit/jgraduate/css/.svn/all-wcprops b/files_svgedit/svg-edit/jgraduate/css/.svn/all-wcprops
new file mode 100644
index 000000000..b8d956b31
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/1899/trunk/editor/jgraduate/css
+END
+jgraduate.css
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/1899/trunk/editor/jgraduate/css/jgraduate.css
+END
+jPicker.css
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1802/trunk/editor/jgraduate/css/jPicker.css
+END
diff --git a/files_svgedit/svg-edit/jgraduate/css/.svn/entries b/files_svgedit/svg-edit/jgraduate/css/.svn/entries
new file mode 100644
index 000000000..0a4e29f8e
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/jgraduate/css
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-01-07T18:37:21.600728Z
+1899
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jgraduate.css
+file
+
+
+
+
+2012-03-25T18:41:47.428355Z
+56713b4cef3e31525f38cebe503ebd39
+2011-01-07T18:37:21.600728Z
+1899
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5557
+
+jPicker.css
+file
+
+
+
+
+2012-03-25T18:41:47.428355Z
+28a4ada3eeeff9da22638fa16511dae0
+2010-10-14T16:54:15.861470Z
+1802
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3539
+
diff --git a/files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jPicker.css.svn-base b/files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jPicker.css.svn-base
new file mode 100644
index 000000000..69cd89925
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jPicker.css.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 8
+text/css
+END
diff --git a/files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jgraduate.css.svn-base b/files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jgraduate.css.svn-base
new file mode 100644
index 000000000..69cd89925
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/.svn/prop-base/jgraduate.css.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 8
+text/css
+END
diff --git a/files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jPicker.css.svn-base b/files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jPicker.css.svn-base
new file mode 100644
index 000000000..d186af7b1
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jPicker.css.svn-base
@@ -0,0 +1 @@
+.jPicker .Icon{display:inline-block;height:24px;position:relative;text-align:left;width:25px}.jPicker .Icon span.Color,.jPicker .Icon span.Alpha{background-position:2px 2px;display:block;height:100%;left:0;position:absolute;top:0;width:100%}.jPicker .Icon span.Image{background-repeat:no-repeat;cursor:pointer;display:block;height:100%;left:0;position:absolute;top:0;width:100%}.jPicker.Container{z-index:10}table.jPicker{background-color:#efefef;border:1px outset #666;font-family:Arial,Helvetica,Sans-Serif;font-size:12px!important;margin:0;padding:5px;width:545px;z-index:20}.jPicker .Move{background-color:#ddd;border-color:#fff #666 #666 #fff;border-style:solid;border-width:1px;cursor:move;height:12px;padding:0}.jPicker .Title{font-size:11px!important;font-weight:bold;margin:-2px 0 0 0;padding:0;text-align:center;width:100%}.jPicker div.Map{border-bottom:2px solid #fff;border-left:2px solid #9a9a9a;border-right:2px solid #fff;border-top:2px solid #9a9a9a;cursor:crosshair;height:260px;margin:0 5px 0 5px;overflow:hidden;padding:0;position:relative;width:260px}.jPicker div[class="Map"]{height:256px;width:256px}.jPicker div.Bar{border-bottom:2px solid #fff;border-left:2px solid #9a9a9a;border-right:2px solid #fff;border-top:2px solid #9a9a9a;cursor:n-resize;height:260px;margin:12px 10px 0 5px;overflow:hidden;padding:0;position:relative;width:24px}.jPicker div[class="Bar"]{height:256px;width:20px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Map .Map3,.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4,.jPicker .Bar .Map5,.jPicker .Bar .Map6{background-color:transparent;background-image:none;display:block;left:0;position:absolute;top:0}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Map .Map3{height:2596px;width:256px}.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4{height:3896px;width:20px}.jPicker .Bar .Map5,.jPicker .Bar .Map6{height:256px;width:20px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Bar .Map6{background-repeat:no-repeat}.jPicker .Map .Map3,.jPicker .Bar .Map5{background-repeat:repeat}.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4{background-repeat:repeat-x}.jPicker .Map .Arrow{display:block;position:absolute}.jPicker .Bar .Arrow{display:block;left:0;position:absolute}.jPicker .Preview{font-size:9px;text-align:center}.jPicker .Preview div{border:2px inset #eee;height:62px;margin:0 auto;padding:0;width:62px}.jPicker .Preview div span{border:1px solid #000;display:block;height:30px;margin:0 auto;padding:0;width:60px}.jPicker .Preview .Active{border-bottom-width:0}.jPicker .Preview .Current{border-top-width:0;cursor:pointer}.jPicker .Button{text-align:center;width:115px}.jPicker .Button input{width:100px}.jPicker .Button .Ok{margin:12px 0 5px 0}.jPicker td.Radio{margin:0;padding:0;width:31px}.jPicker td.Radio input{margin:0 5px 0 0;padding:0}.jPicker td.Text{font-size:12px!important;height:22px;margin:0;padding:0;text-align:left;width:70px}.jPicker tr.Hex td.Text{width:100px}.jPicker td.Text input{background-color:#fff;border:1px inset #aaa;height:19px;margin:0 0 0 5px;text-align:left;width:30px}.jPicker td[class="Text"] input{height:15px}.jPicker tr.Hex td.Text input.Hex{width:50px}.jPicker tr.Hex td.Text input.AHex{width:20px}.jPicker .Grid{text-align:center;width:114px}.jPicker .Grid span.QuickColor{border:1px inset #aaa;cursor:pointer;display:inline-block;height:15px;line-height:15px;margin:0;padding:0;width:19px}.jPicker .Grid span[class="QuickColor"]{width:17px} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jgraduate.css.svn-base b/files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jgraduate.css.svn-base
new file mode 100644
index 000000000..238980a14
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/.svn/text-base/jgraduate.css.svn-base
@@ -0,0 +1,351 @@
+/*
+ * jGraduate Default CSS
+ *
+ * Copyright (c) 2010 Jeff Schiller
+ * http://blog.codedread.com/
+ *
+ * Copyright (c) 2010 Alexis Deveria
+ * http://a.deveria.com/
+ *
+ * Licensed under the Apache License Version 2
+ */
+
+h2.jGraduate_Title {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 11px !important;
+ font-weight: bold;
+ margin: -13px 0px 0px 0px;
+ padding: 0px;
+ text-align: center;
+}
+
+.jGraduate_Picker {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 12px;
+ border-style: solid;
+ border-color: lightgrey black black lightgrey;
+ border-width: 1px;
+ background-color: #EFEFEF;
+ position: absolute;
+ padding: 10px;
+}
+
+.jGraduate_tabs li {
+ background-color: #ccc;
+ display: inline;
+ border: solid 1px grey;
+ padding: 3px;
+ margin: 2px;
+ cursor: pointer;
+}
+
+li.jGraduate_tab_current {
+ background-color: #EFEFEF;
+ display: inline;
+ padding: 3px;
+ margin: 2px;
+ border: solid 1px black;
+ cursor: pointer;
+}
+
+.jGraduate_colPick {
+ display: none;
+}
+
+.jGraduate_gradPick {
+ display: none;
+ border: outset 1px #666;
+ padding: 10px 7px 5px 5px;
+ overflow: auto;
+}
+
+.jGraduate_gradPick {
+ display: none;
+ border: outset 1px #666;
+ padding: 10px 7px 5px 5px;
+ overflow: auto;
+/* position: relative;*/
+}
+
+.jGraduate_tabs {
+ position: relative;
+ background-color: #EFEFEF;
+ padding: 0px;
+ margin: 0px;
+ margin-bottom: 5px;
+}
+
+div.jGraduate_Swatch {
+ float: left;
+ margin: 8px;
+}
+div.jGraduate_GradContainer {
+ border: 2px inset #EEE;
+ background-image: url(../images/map-opacity.png);
+ background-position: 0px 0px;
+ height: 256px;
+ width: 256px;
+ position: relative;
+}
+
+div.jGraduate_GradContainer div.grad_coord {
+ background: #000;
+ border: 1px solid #fff;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ margin: -5px -5px;
+ top: 0;
+ left: 0;
+ text-align: center;
+ font-size: xx-small;
+ line-height: 10px;
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
+
+.jGraduate_AlphaArrows {
+ position: absolute;
+ margin-top: -10px;
+ margin-left: 250.5px;
+}
+
+div.jGraduate_Opacity {
+ border: 2px inset #eee;
+ margin-top: 14px;
+ background-color: black;
+ background-image: url(../images/Maps.png);
+ background-position: 0px -2816px;
+ height: 20px;
+ cursor: ew-resize;
+}
+
+div.jGraduate_StopSlider {
+/* border: 2px inset #eee;*/
+ margin: 0 0 0 -10px;
+ width: 276px;
+ overflow: visible;
+ background: #efefef;
+ height: 45px;
+ cursor: pointer;
+}
+
+div.jGraduate_StopSection {
+ width: 120px;
+ text-align: center;
+}
+
+
+
+
+input.jGraduate_Ok, input.jGraduate_Cancel {
+ display: block;
+ width: 100px;
+ margin-left: -4px;
+ margin-right: -4px;
+}
+input.jGraduate_Ok {
+ margin: 9px -4px 5px -4px;
+}
+
+.colorBox {
+ float: left;
+ height: 16px;
+ width: 16px;
+ border: 1px solid #808080;
+ cursor: pointer;
+ margin: 4px 4px 4px 30px;
+}
+
+.colorBox + label {
+ float: left;
+ margin-top: 7px;
+}
+
+label.jGraduate_Form_Heading {
+ position: relative;
+ top: 10px;
+ background-color: #EFEFEF;
+ padding: 2px;
+ font-weight: bold;
+ font-size: 13px;
+}
+
+div.jGraduate_Form_Section {
+ border-style: solid;
+ border-width: 1px;
+ border-color: grey;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ padding: 15px 5px 5px 5px;
+ margin: 5px 2px;
+ width: 110px;
+ text-align: center;
+ overflow: auto;
+}
+
+div.jGraduate_Form_Section label {
+ padding: 0 2px;
+}
+
+div.jGraduate_StopSection input[type=text],
+div.jGraduate_Slider input[type=text] {
+ width: 33px;
+}
+
+div.jGraduate_LightBox {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ background-color: #000;
+ opacity: 0.5;
+ display: none;
+}
+
+div.jGraduate_stopPicker {
+ position: absolute;
+ display: none;
+ background: #E8E8E8;
+}
+
+
+.jGraduate_gradPick {
+ width: 535px;
+}
+
+.jGraduate_gradPick div.jGraduate_OpacField {
+
+ position: absolute;
+ left: 0;
+ bottom: 5px;
+/*
+ width: 270px;
+
+ left: 284px;
+ width: 266px;
+ height: 200px;
+ top: 167px;
+ margin: -3px 3px 0px 4px;
+*/
+}
+
+.jGraduate_gradPick .jGraduate_Form {
+ float: left;
+ width: 270px;
+ position: absolute;
+ left: 284px;
+ width: 266px;
+ height: 200px;
+ top: 167px;
+ margin: -3px 3px 0px 10px;
+}
+
+.jGraduate_gradPick .jGraduate_Points {
+ position: static;
+ width: 150px;
+ margin-left: 0;
+}
+
+.jGraduate_SpreadMethod {
+ position: absolute;
+ right: 8px;
+ top: 100px;
+}
+
+.jGraduate_Colorblocks {
+ display: table;
+ border-spacing: 0 5px;
+}
+
+.jGraduate_colorblock {
+ display: table-row;
+}
+
+.jGraduate_Colorblocks .jGraduate_colorblock > * {
+ display: table-cell;
+ vertical-align: middle;
+ margin: 0;
+ float: none;
+}
+
+.jGraduate_gradPick div.jGraduate_StopSection {
+ float: left;
+ width: 133px;
+ margin-top: -8px;
+}
+
+
+.jGraduate_gradPick .jGraduate_Form_Section {
+ padding-top: 9px;
+}
+
+
+.jGraduate_Slider {
+ text-align: center;
+ float: left;
+ width: 100%;
+}
+
+.jGraduate_Slider .jGraduate_Form_Section {
+ border: none;
+ width: 250px;
+ padding: 0 2px;
+ overflow: visible;
+}
+
+.jGraduate_Slider label {
+ display: inline-block;
+ float: left;
+ line-height: 50px;
+ padding: 0;
+}
+
+.jGraduate_Slider label.prelabel {
+ width: 40px;
+ text-align: left;
+}
+
+.jGraduate_SliderBar {
+ width: 140px;
+ float: left;
+ margin-right: 5px;
+ border:1px solid #BBB;
+ height:20px;
+ margin-top:14px;
+ margin-left:5px;
+ position: relative;
+}
+
+div.jGraduate_Slider input {
+ margin-top: 5px;
+}
+
+div.jGraduate_Slider img {
+ top: 0;
+ left: 0;
+ position: absolute;
+ margin-top: -10px;
+ cursor:ew-resize;
+}
+
+
+.jGraduate_gradPick .jGraduate_OkCancel {
+ position: absolute;
+ top: 39px;
+ right: 10px;
+ width: 113px;
+
+}
+
+.jGraduate_OpacField {
+ position: absolute;
+ right: -10px;
+ bottom: 0;
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/css/jPicker.css b/files_svgedit/svg-edit/jgraduate/css/jPicker.css
new file mode 100644
index 000000000..d186af7b1
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/jPicker.css
@@ -0,0 +1 @@
+.jPicker .Icon{display:inline-block;height:24px;position:relative;text-align:left;width:25px}.jPicker .Icon span.Color,.jPicker .Icon span.Alpha{background-position:2px 2px;display:block;height:100%;left:0;position:absolute;top:0;width:100%}.jPicker .Icon span.Image{background-repeat:no-repeat;cursor:pointer;display:block;height:100%;left:0;position:absolute;top:0;width:100%}.jPicker.Container{z-index:10}table.jPicker{background-color:#efefef;border:1px outset #666;font-family:Arial,Helvetica,Sans-Serif;font-size:12px!important;margin:0;padding:5px;width:545px;z-index:20}.jPicker .Move{background-color:#ddd;border-color:#fff #666 #666 #fff;border-style:solid;border-width:1px;cursor:move;height:12px;padding:0}.jPicker .Title{font-size:11px!important;font-weight:bold;margin:-2px 0 0 0;padding:0;text-align:center;width:100%}.jPicker div.Map{border-bottom:2px solid #fff;border-left:2px solid #9a9a9a;border-right:2px solid #fff;border-top:2px solid #9a9a9a;cursor:crosshair;height:260px;margin:0 5px 0 5px;overflow:hidden;padding:0;position:relative;width:260px}.jPicker div[class="Map"]{height:256px;width:256px}.jPicker div.Bar{border-bottom:2px solid #fff;border-left:2px solid #9a9a9a;border-right:2px solid #fff;border-top:2px solid #9a9a9a;cursor:n-resize;height:260px;margin:12px 10px 0 5px;overflow:hidden;padding:0;position:relative;width:24px}.jPicker div[class="Bar"]{height:256px;width:20px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Map .Map3,.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4,.jPicker .Bar .Map5,.jPicker .Bar .Map6{background-color:transparent;background-image:none;display:block;left:0;position:absolute;top:0}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Map .Map3{height:2596px;width:256px}.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4{height:3896px;width:20px}.jPicker .Bar .Map5,.jPicker .Bar .Map6{height:256px;width:20px}.jPicker .Map .Map1,.jPicker .Map .Map2,.jPicker .Bar .Map6{background-repeat:no-repeat}.jPicker .Map .Map3,.jPicker .Bar .Map5{background-repeat:repeat}.jPicker .Bar .Map1,.jPicker .Bar .Map2,.jPicker .Bar .Map3,.jPicker .Bar .Map4{background-repeat:repeat-x}.jPicker .Map .Arrow{display:block;position:absolute}.jPicker .Bar .Arrow{display:block;left:0;position:absolute}.jPicker .Preview{font-size:9px;text-align:center}.jPicker .Preview div{border:2px inset #eee;height:62px;margin:0 auto;padding:0;width:62px}.jPicker .Preview div span{border:1px solid #000;display:block;height:30px;margin:0 auto;padding:0;width:60px}.jPicker .Preview .Active{border-bottom-width:0}.jPicker .Preview .Current{border-top-width:0;cursor:pointer}.jPicker .Button{text-align:center;width:115px}.jPicker .Button input{width:100px}.jPicker .Button .Ok{margin:12px 0 5px 0}.jPicker td.Radio{margin:0;padding:0;width:31px}.jPicker td.Radio input{margin:0 5px 0 0;padding:0}.jPicker td.Text{font-size:12px!important;height:22px;margin:0;padding:0;text-align:left;width:70px}.jPicker tr.Hex td.Text{width:100px}.jPicker td.Text input{background-color:#fff;border:1px inset #aaa;height:19px;margin:0 0 0 5px;text-align:left;width:30px}.jPicker td[class="Text"] input{height:15px}.jPicker tr.Hex td.Text input.Hex{width:50px}.jPicker tr.Hex td.Text input.AHex{width:20px}.jPicker .Grid{text-align:center;width:114px}.jPicker .Grid span.QuickColor{border:1px inset #aaa;cursor:pointer;display:inline-block;height:15px;line-height:15px;margin:0;padding:0;width:19px}.jPicker .Grid span[class="QuickColor"]{width:17px} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/css/jgraduate.css b/files_svgedit/svg-edit/jgraduate/css/jgraduate.css
new file mode 100644
index 000000000..238980a14
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/css/jgraduate.css
@@ -0,0 +1,351 @@
+/*
+ * jGraduate Default CSS
+ *
+ * Copyright (c) 2010 Jeff Schiller
+ * http://blog.codedread.com/
+ *
+ * Copyright (c) 2010 Alexis Deveria
+ * http://a.deveria.com/
+ *
+ * Licensed under the Apache License Version 2
+ */
+
+h2.jGraduate_Title {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 11px !important;
+ font-weight: bold;
+ margin: -13px 0px 0px 0px;
+ padding: 0px;
+ text-align: center;
+}
+
+.jGraduate_Picker {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 12px;
+ border-style: solid;
+ border-color: lightgrey black black lightgrey;
+ border-width: 1px;
+ background-color: #EFEFEF;
+ position: absolute;
+ padding: 10px;
+}
+
+.jGraduate_tabs li {
+ background-color: #ccc;
+ display: inline;
+ border: solid 1px grey;
+ padding: 3px;
+ margin: 2px;
+ cursor: pointer;
+}
+
+li.jGraduate_tab_current {
+ background-color: #EFEFEF;
+ display: inline;
+ padding: 3px;
+ margin: 2px;
+ border: solid 1px black;
+ cursor: pointer;
+}
+
+.jGraduate_colPick {
+ display: none;
+}
+
+.jGraduate_gradPick {
+ display: none;
+ border: outset 1px #666;
+ padding: 10px 7px 5px 5px;
+ overflow: auto;
+}
+
+.jGraduate_gradPick {
+ display: none;
+ border: outset 1px #666;
+ padding: 10px 7px 5px 5px;
+ overflow: auto;
+/* position: relative;*/
+}
+
+.jGraduate_tabs {
+ position: relative;
+ background-color: #EFEFEF;
+ padding: 0px;
+ margin: 0px;
+ margin-bottom: 5px;
+}
+
+div.jGraduate_Swatch {
+ float: left;
+ margin: 8px;
+}
+div.jGraduate_GradContainer {
+ border: 2px inset #EEE;
+ background-image: url(../images/map-opacity.png);
+ background-position: 0px 0px;
+ height: 256px;
+ width: 256px;
+ position: relative;
+}
+
+div.jGraduate_GradContainer div.grad_coord {
+ background: #000;
+ border: 1px solid #fff;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ margin: -5px -5px;
+ top: 0;
+ left: 0;
+ text-align: center;
+ font-size: xx-small;
+ line-height: 10px;
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
+
+.jGraduate_AlphaArrows {
+ position: absolute;
+ margin-top: -10px;
+ margin-left: 250.5px;
+}
+
+div.jGraduate_Opacity {
+ border: 2px inset #eee;
+ margin-top: 14px;
+ background-color: black;
+ background-image: url(../images/Maps.png);
+ background-position: 0px -2816px;
+ height: 20px;
+ cursor: ew-resize;
+}
+
+div.jGraduate_StopSlider {
+/* border: 2px inset #eee;*/
+ margin: 0 0 0 -10px;
+ width: 276px;
+ overflow: visible;
+ background: #efefef;
+ height: 45px;
+ cursor: pointer;
+}
+
+div.jGraduate_StopSection {
+ width: 120px;
+ text-align: center;
+}
+
+
+
+
+input.jGraduate_Ok, input.jGraduate_Cancel {
+ display: block;
+ width: 100px;
+ margin-left: -4px;
+ margin-right: -4px;
+}
+input.jGraduate_Ok {
+ margin: 9px -4px 5px -4px;
+}
+
+.colorBox {
+ float: left;
+ height: 16px;
+ width: 16px;
+ border: 1px solid #808080;
+ cursor: pointer;
+ margin: 4px 4px 4px 30px;
+}
+
+.colorBox + label {
+ float: left;
+ margin-top: 7px;
+}
+
+label.jGraduate_Form_Heading {
+ position: relative;
+ top: 10px;
+ background-color: #EFEFEF;
+ padding: 2px;
+ font-weight: bold;
+ font-size: 13px;
+}
+
+div.jGraduate_Form_Section {
+ border-style: solid;
+ border-width: 1px;
+ border-color: grey;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ padding: 15px 5px 5px 5px;
+ margin: 5px 2px;
+ width: 110px;
+ text-align: center;
+ overflow: auto;
+}
+
+div.jGraduate_Form_Section label {
+ padding: 0 2px;
+}
+
+div.jGraduate_StopSection input[type=text],
+div.jGraduate_Slider input[type=text] {
+ width: 33px;
+}
+
+div.jGraduate_LightBox {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ background-color: #000;
+ opacity: 0.5;
+ display: none;
+}
+
+div.jGraduate_stopPicker {
+ position: absolute;
+ display: none;
+ background: #E8E8E8;
+}
+
+
+.jGraduate_gradPick {
+ width: 535px;
+}
+
+.jGraduate_gradPick div.jGraduate_OpacField {
+
+ position: absolute;
+ left: 0;
+ bottom: 5px;
+/*
+ width: 270px;
+
+ left: 284px;
+ width: 266px;
+ height: 200px;
+ top: 167px;
+ margin: -3px 3px 0px 4px;
+*/
+}
+
+.jGraduate_gradPick .jGraduate_Form {
+ float: left;
+ width: 270px;
+ position: absolute;
+ left: 284px;
+ width: 266px;
+ height: 200px;
+ top: 167px;
+ margin: -3px 3px 0px 10px;
+}
+
+.jGraduate_gradPick .jGraduate_Points {
+ position: static;
+ width: 150px;
+ margin-left: 0;
+}
+
+.jGraduate_SpreadMethod {
+ position: absolute;
+ right: 8px;
+ top: 100px;
+}
+
+.jGraduate_Colorblocks {
+ display: table;
+ border-spacing: 0 5px;
+}
+
+.jGraduate_colorblock {
+ display: table-row;
+}
+
+.jGraduate_Colorblocks .jGraduate_colorblock > * {
+ display: table-cell;
+ vertical-align: middle;
+ margin: 0;
+ float: none;
+}
+
+.jGraduate_gradPick div.jGraduate_StopSection {
+ float: left;
+ width: 133px;
+ margin-top: -8px;
+}
+
+
+.jGraduate_gradPick .jGraduate_Form_Section {
+ padding-top: 9px;
+}
+
+
+.jGraduate_Slider {
+ text-align: center;
+ float: left;
+ width: 100%;
+}
+
+.jGraduate_Slider .jGraduate_Form_Section {
+ border: none;
+ width: 250px;
+ padding: 0 2px;
+ overflow: visible;
+}
+
+.jGraduate_Slider label {
+ display: inline-block;
+ float: left;
+ line-height: 50px;
+ padding: 0;
+}
+
+.jGraduate_Slider label.prelabel {
+ width: 40px;
+ text-align: left;
+}
+
+.jGraduate_SliderBar {
+ width: 140px;
+ float: left;
+ margin-right: 5px;
+ border:1px solid #BBB;
+ height:20px;
+ margin-top:14px;
+ margin-left:5px;
+ position: relative;
+}
+
+div.jGraduate_Slider input {
+ margin-top: 5px;
+}
+
+div.jGraduate_Slider img {
+ top: 0;
+ left: 0;
+ position: absolute;
+ margin-top: -10px;
+ cursor:ew-resize;
+}
+
+
+.jGraduate_gradPick .jGraduate_OkCancel {
+ position: absolute;
+ top: 39px;
+ right: 10px;
+ width: 113px;
+
+}
+
+.jGraduate_OpacField {
+ position: absolute;
+ right: -10px;
+ bottom: 0;
+} \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/all-wcprops b/files_svgedit/svg-edit/jgraduate/images/.svn/all-wcprops
new file mode 100644
index 000000000..94571ffde
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/all-wcprops
@@ -0,0 +1,83 @@
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/1802/trunk/editor/jgraduate/images
+END
+mappoint_f.png
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1452/trunk/editor/jgraduate/images/mappoint_f.png
+END
+rangearrows2.gif
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/346/trunk/editor/jgraduate/images/rangearrows2.gif
+END
+picker.gif
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/346/trunk/editor/jgraduate/images/picker.gif
+END
+Maps.png
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1802/trunk/editor/jgraduate/images/Maps.png
+END
+map-opacity.png
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/346/trunk/editor/jgraduate/images/map-opacity.png
+END
+preview-opacity.png
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/346/trunk/editor/jgraduate/images/preview-opacity.png
+END
+Bars.png
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/1802/trunk/editor/jgraduate/images/Bars.png
+END
+mappoint.gif
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/346/trunk/editor/jgraduate/images/mappoint.gif
+END
+mappoint_c.png
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/1452/trunk/editor/jgraduate/images/mappoint_c.png
+END
+AlphaBar.png
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/1295/trunk/editor/jgraduate/images/AlphaBar.png
+END
+bar-opacity.png
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/346/trunk/editor/jgraduate/images/bar-opacity.png
+END
+NoColor.png
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/1802/trunk/editor/jgraduate/images/NoColor.png
+END
+rangearrows.gif
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/1802/trunk/editor/jgraduate/images/rangearrows.gif
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/entries b/files_svgedit/svg-edit/jgraduate/images/.svn/entries
new file mode 100644
index 000000000..702cf3c79
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/entries
@@ -0,0 +1,470 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/jgraduate/images
+http://svg-edit.googlecode.com/svn
+
+
+
+2010-10-14T16:54:15.861470Z
+1802
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+mappoint_f.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+0c17085a7caf65365fb2b61873431fa0
+2010-03-10T18:17:48.285517Z
+1452
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+255
+
+rangearrows2.gif
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+1b07a9b976981e69278b633d0d597976
+2009-07-30T22:45:59.713345Z
+346
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+93
+
+picker.gif
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+d88c26dca0ca8c159befb1a4f91a817c
+2009-07-30T22:45:59.713345Z
+346
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+146
+
+Maps.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+db163b6d98c20097ec791f4d7dd938fd
+2010-10-14T16:54:15.861470Z
+1802
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+78245
+
+map-opacity.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+47d63ecea460265f78ab03b88d2b0b10
+2009-07-30T22:45:59.713345Z
+346
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+139
+
+preview-opacity.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+ab27137e3f7161c011a7b8bb89782c73
+2009-07-30T22:45:59.713345Z
+346
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+135
+
+Bars.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+fe1c7cbad0cbc0e2d90a0291658dbbcb
+2010-10-14T16:54:15.861470Z
+1802
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+382
+
+mappoint.gif
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+9f6dd30bc97b892fbd971271d1a82ce7
+2009-07-30T22:45:59.713345Z
+346
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+93
+
+mappoint_c.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+45998f6535bc015f13441afec78bdc56
+2010-03-10T18:17:48.285517Z
+1452
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+252
+
+AlphaBar.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+5c5791930e0644f718c68296a62251cd
+2010-01-29T05:39:57.390828Z
+1295
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2195
+
+bar-opacity.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+ca51657e035c8ec7101a2ba3e4fb027c
+2009-07-30T22:45:59.713345Z
+346
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+134
+
+NoColor.png
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+e87e86990aa254a676d19240d7707204
+2010-10-14T16:54:15.861470Z
+1802
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+552
+
+rangearrows.gif
+file
+
+
+
+
+2012-03-25T18:41:46.708351Z
+33873ca90e5739a504ea50ed6c675eb9
+2010-10-14T16:54:15.861470Z
+1802
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+76
+
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/AlphaBar.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/AlphaBar.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/AlphaBar.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Bars.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Bars.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Bars.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Maps.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Maps.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/Maps.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/NoColor.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/NoColor.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/NoColor.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/bar-opacity.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/bar-opacity.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/bar-opacity.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/map-opacity.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/map-opacity.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/map-opacity.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint.gif.svn-base
new file mode 100644
index 000000000..1c48e39a0
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint.gif.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/gif
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_c.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_c.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_c.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_f.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_f.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/mappoint_f.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/picker.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/picker.gif.svn-base
new file mode 100644
index 000000000..1c48e39a0
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/picker.gif.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/gif
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/preview-opacity.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/preview-opacity.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/preview-opacity.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows.gif.svn-base
new file mode 100644
index 000000000..1c48e39a0
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows.gif.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/gif
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows2.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows2.gif.svn-base
new file mode 100644
index 000000000..1c48e39a0
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/prop-base/rangearrows2.gif.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/gif
+END
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/AlphaBar.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/AlphaBar.png.svn-base
new file mode 100644
index 000000000..2950daeb8
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/AlphaBar.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Bars.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Bars.png.svn-base
new file mode 100644
index 000000000..80eb2bbe7
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Bars.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Maps.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Maps.png.svn-base
new file mode 100644
index 000000000..853d38c68
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/Maps.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/NoColor.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/NoColor.png.svn-base
new file mode 100644
index 000000000..5dc47670e
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/NoColor.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/bar-opacity.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/bar-opacity.png.svn-base
new file mode 100644
index 000000000..e42ad0812
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/bar-opacity.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/map-opacity.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/map-opacity.png.svn-base
new file mode 100644
index 000000000..6756cee6d
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/map-opacity.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint.gif.svn-base
new file mode 100644
index 000000000..f5f855745
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint.gif.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_c.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_c.png.svn-base
new file mode 100644
index 000000000..d0a6e1cea
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_c.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_f.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_f.png.svn-base
new file mode 100644
index 000000000..563ff87c2
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/mappoint_f.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/picker.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/picker.gif.svn-base
new file mode 100644
index 000000000..374d89104
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/picker.gif.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/preview-opacity.png.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/preview-opacity.png.svn-base
new file mode 100644
index 000000000..0dd9a2f8b
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/preview-opacity.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows.gif.svn-base
new file mode 100644
index 000000000..9fe89f472
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows.gif.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows2.gif.svn-base b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows2.gif.svn-base
new file mode 100644
index 000000000..fdeb54a10
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/.svn/text-base/rangearrows2.gif.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/AlphaBar.png b/files_svgedit/svg-edit/jgraduate/images/AlphaBar.png
new file mode 100644
index 000000000..2950daeb8
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/AlphaBar.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/Bars.png b/files_svgedit/svg-edit/jgraduate/images/Bars.png
new file mode 100644
index 000000000..80eb2bbe7
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/Bars.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/Maps.png b/files_svgedit/svg-edit/jgraduate/images/Maps.png
new file mode 100644
index 000000000..853d38c68
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/Maps.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/NoColor.png b/files_svgedit/svg-edit/jgraduate/images/NoColor.png
new file mode 100644
index 000000000..5dc47670e
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/NoColor.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/bar-opacity.png b/files_svgedit/svg-edit/jgraduate/images/bar-opacity.png
new file mode 100644
index 000000000..e42ad0812
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/bar-opacity.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/map-opacity.png b/files_svgedit/svg-edit/jgraduate/images/map-opacity.png
new file mode 100644
index 000000000..6756cee6d
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/map-opacity.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/mappoint.gif b/files_svgedit/svg-edit/jgraduate/images/mappoint.gif
new file mode 100644
index 000000000..f5f855745
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/mappoint.gif
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/mappoint_c.png b/files_svgedit/svg-edit/jgraduate/images/mappoint_c.png
new file mode 100644
index 000000000..d0a6e1cea
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/mappoint_c.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/mappoint_f.png b/files_svgedit/svg-edit/jgraduate/images/mappoint_f.png
new file mode 100644
index 000000000..563ff87c2
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/mappoint_f.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/picker.gif b/files_svgedit/svg-edit/jgraduate/images/picker.gif
new file mode 100644
index 000000000..374d89104
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/picker.gif
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/preview-opacity.png b/files_svgedit/svg-edit/jgraduate/images/preview-opacity.png
new file mode 100644
index 000000000..0dd9a2f8b
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/preview-opacity.png
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/rangearrows.gif b/files_svgedit/svg-edit/jgraduate/images/rangearrows.gif
new file mode 100644
index 000000000..9fe89f472
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/rangearrows.gif
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/images/rangearrows2.gif b/files_svgedit/svg-edit/jgraduate/images/rangearrows2.gif
new file mode 100644
index 000000000..fdeb54a10
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/images/rangearrows2.gif
Binary files differ
diff --git a/files_svgedit/svg-edit/jgraduate/jpicker.min.js b/files_svgedit/svg-edit/jgraduate/jpicker.min.js
new file mode 100644
index 000000000..36c4836b0
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/jpicker.min.js
@@ -0,0 +1 @@
+(function(e,a){Math.precision=function(j,h){if(h===undefined){h=0}return Math.round(j*Math.pow(10,h))/Math.pow(10,h)};var d=function(z,k){var o=this,j=z.find("img:first"),F=0,E=100,w=100,D=0,C=100,v=100,s=0,p=0,n,q,u=new Array(),l=function(y){for(var x=0;x<u.length;x++){u[x].call(o,o,y)}},H=function(x){var y=z.offset();n={l:y.left|0,t:y.top|0};clearTimeout(q);q=setTimeout(function(){A.call(o,x)},0);e(document).bind("mousemove",h).bind("mouseup",B);x.preventDefault()},h=function(x){clearTimeout(q);q=setTimeout(function(){A.call(o,x)},0);x.stopPropagation();x.preventDefault();return false},B=function(x){e(document).unbind("mouseup",B).unbind("mousemove",h);x.stopPropagation();x.preventDefault();return false},A=function(M){var K=M.pageX-n.l,x=M.pageY-n.t,L=z.w,y=z.h;if(K<0){K=0}else{if(K>L){K=L}}if(x<0){x=0}else{if(x>y){x=y}}J.call(o,"xy",{x:((K/L)*w)+F,y:((x/y)*v)+D})},r=function(){var L=0,x=0,N=z.w,K=z.h,M=j.w,y=j.h;setTimeout(function(){if(w>0){if(s==E){L=N}else{L=((s/w)*N)|0}}if(v>0){if(p==C){x=K}else{x=((p/v)*K)|0}}if(M>=N){L=(N>>1)-(M>>1)}else{L-=M>>1}if(y>=K){x=(K>>1)-(y>>1)}else{x-=y>>1}j.css({left:L+"px",top:x+"px"})},0)},J=function(x,K,y){var O=K!==undefined;if(!O){if(x===undefined||x==null){x="xy"}switch(x.toLowerCase()){case"x":return s;case"y":return p;case"xy":default:return{x:s,y:p}}}if(y!=null&&y==o){return}var N=false,M,L;if(x==null){x="xy"}switch(x.toLowerCase()){case"x":M=K&&(K.x&&K.x|0||K|0)||0;break;case"y":L=K&&(K.y&&K.y|0||K|0)||0;break;case"xy":default:M=K&&K.x&&K.x|0||0;L=K&&K.y&&K.y|0||0;break}if(M!=null){if(M<F){M=F}else{if(M>E){M=E}}if(s!=M){s=M;N=true}}if(L!=null){if(L<D){L=D}else{if(L>C){L=C}}if(p!=L){p=L;N=true}}N&&l.call(o,y||o)},t=function(x,L){var P=L!==undefined;if(!P){if(x===undefined||x==null){x="all"}switch(x.toLowerCase()){case"minx":return F;case"maxx":return E;case"rangex":return{minX:F,maxX:E,rangeX:w};case"miny":return D;case"maxy":return C;case"rangey":return{minY:D,maxY:C,rangeY:v};case"all":default:return{minX:F,maxX:E,rangeX:w,minY:D,maxY:C,rangeY:v}}}var O=false,N,K,M,y;if(x==null){x="all"}switch(x.toLowerCase()){case"minx":N=L&&(L.minX&&L.minX|0||L|0)||0;break;case"maxx":K=L&&(L.maxX&&L.maxX|0||L|0)||0;break;case"rangex":N=L&&L.minX&&L.minX|0||0;K=L&&L.maxX&&L.maxX|0||0;break;case"miny":M=L&&(L.minY&&L.minY|0||L|0)||0;break;case"maxy":y=L&&(L.maxY&&L.maxY|0||L|0)||0;break;case"rangey":M=L&&L.minY&&L.minY|0||0;y=L&&L.maxY&&L.maxY|0||0;break;case"all":default:N=L&&L.minX&&L.minX|0||0;K=L&&L.maxX&&L.maxX|0||0;M=L&&L.minY&&L.minY|0||0;y=L&&L.maxY&&L.maxY|0||0;break}if(N!=null&&F!=N){F=N;w=E-F}if(K!=null&&E!=K){E=K;w=E-F}if(M!=null&&D!=M){D=M;v=C-D}if(y!=null&&C!=y){C=y;v=C-D}},I=function(x){if(e.isFunction(x)){u.push(x)}},m=function(y){if(!e.isFunction(y)){return}var x;while((x=e.inArray(y,u))!=-1){u.splice(x,1)}},G=function(){e(document).unbind("mouseup",B).unbind("mousemove",h);z.unbind("mousedown",H);z=null;j=null;u=null};e.extend(true,o,{val:J,range:t,bind:I,unbind:m,destroy:G});j.src=k.arrow&&k.arrow.image;j.w=k.arrow&&k.arrow.width||j.width();j.h=k.arrow&&k.arrow.height||j.height();z.w=k.map&&k.map.width||z.width();z.h=k.map&&k.map.height||z.height();z.bind("mousedown",H);I.call(o,r)},b=function(u,z,k,y){var q=this,l=u.find("td.Text input"),r=l.eq(3),v=l.eq(4),h=l.eq(5),o=l.length>7?l.eq(6):null,n=l.eq(0),p=l.eq(1),x=l.eq(2),s=l.eq(l.length>7?7:6),B=l.length>7?l.eq(8):null,w=function(D){if(D.target.value==""&&D.target!=s.get(0)&&(k!=null&&D.target!=k.get(0)||k==null)){return}if(!t(D)){return D}switch(D.target){case r.get(0):r.val(j.call(q,r.val(),0,255));z.val("r",r.val(),D.target);break;case v.get(0):v.val(j.call(q,v.val(),0,255));z.val("g",v.val(),D.target);break;case h.get(0):h.val(j.call(q,h.val(),0,255));z.val("b",h.val(),D.target);break;case o&&o.get(0):o.val(j.call(q,o.val(),0,100));z.val("a",Math.precision((o.val()*255)/100,y),D.target);break;case n.get(0):n.val(j.call(q,n.val(),0,360));z.val("h",n.val(),D.target);break;case p.get(0):p.val(j.call(q,p.val(),0,100));z.val("s",p.val(),D.target);break;case x.get(0):x.val(j.call(q,x.val(),0,100));z.val("v",x.val(),D.target);break;case s.get(0):s.val(s.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,6));k&&k.val(s.val());z.val("hex",s.val()!=""?s.val():null,D.target);break;case k&&k.get(0):k.val(k.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,6));s.val(k.val());z.val("hex",k.val()!=""?k.val():null,D.target);break;case B&&B.get(0):B.val(B.val().replace(/[^a-fA-F0-9]/g,"").toLowerCase().substring(0,2));z.val("a",B.val()!=null?parseInt(B.val(),16):null,D.target);break}},A=function(D){if(z.val()!=null){switch(D.target){case r.get(0):r.val(z.val("r"));break;case v.get(0):v.val(z.val("g"));break;case h.get(0):h.val(z.val("b"));break;case o&&o.get(0):o.val(Math.precision((z.val("a")*100)/255,y));break;case n.get(0):n.val(z.val("h"));break;case p.get(0):p.val(z.val("s"));break;case x.get(0):x.val(z.val("v"));break;case s.get(0):case k&&k.get(0):s.val(z.val("hex"));k&&k.val(z.val("hex"));break;case B&&B.get(0):B.val(z.val("ahex").substring(6));break}}},t=function(D){switch(D.keyCode){case 9:case 16:case 29:case 37:case 38:case 40:return false;case"c".charCodeAt():case"v".charCodeAt():if(D.ctrlKey){return false}}return true},j=function(F,E,D){if(F==""||isNaN(F)){return E}if(F>D){return D}if(F<E){return E}return F},m=function(F,D){var E=F.val("all");if(D!=r.get(0)){r.val(E!=null?E.r:"")}if(D!=v.get(0)){v.val(E!=null?E.g:"")}if(D!=h.get(0)){h.val(E!=null?E.b:"")}if(o&&D!=o.get(0)){o.val(E!=null?Math.precision((E.a*100)/255,y):"")}if(D!=n.get(0)){n.val(E!=null?E.h:"")}if(D!=p.get(0)){p.val(E!=null?E.s:"")}if(D!=x.get(0)){x.val(E!=null?E.v:"")}if(D!=s.get(0)&&(k&&D!=k.get(0)||!k)){s.val(E!=null?E.hex:"")}if(k&&D!=k.get(0)&&D!=s.get(0)){k.val(E!=null?E.hex:"")}if(B&&D!=B.get(0)){B.val(E!=null?E.ahex.substring(6):"")}},C=function(){r.add(v).add(h).add(o).add(n).add(p).add(x).add(s).add(k).add(B).unbind("keyup",w).unbind("blur",A);z.unbind(m);r=null;v=null;h=null;o=null;n=null;p=null;x=null;s=null;B=null};e.extend(true,q,{destroy:C});r.add(v).add(h).add(o).add(n).add(p).add(x).add(s).add(k).add(B).bind("keyup",w).bind("blur",A);z.bind(m)};e.jPicker={List:[],Color:function(z){var q=this,j,o,t,u,n,A,x,k=new Array(),m=function(r){for(var h=0;h<k.length;h++){k[h].call(q,q,r)}},l=function(h,G,r){var F=G!==undefined;if(!F){if(h===undefined||h==null||h==""){h="all"}if(j==null){return null}switch(h.toLowerCase()){case"ahex":return g.rgbaToHex({r:j,g:o,b:t,a:u});case"hex":return l("ahex").substring(0,6);case"all":return{r:j,g:o,b:t,a:u,h:n,s:A,v:x,hex:l.call(q,"hex"),ahex:l.call(q,"ahex")};default:var D={};for(var B=0;B<h.length;B++){switch(h.charAt(B)){case"r":if(h.length==1){D=j}else{D.r=j}break;case"g":if(h.length==1){D=o}else{D.g=o}break;case"b":if(h.length==1){D=t}else{D.b=t}break;case"a":if(h.length==1){D=u}else{D.a=u}break;case"h":if(h.length==1){D=n}else{D.h=n}break;case"s":if(h.length==1){D=A}else{D.s=A}break;case"v":if(h.length==1){D=x}else{D.v=x}break}}return D=={}?l.call(q,"all"):D;break}}if(r!=null&&r==q){return}var v=false;if(h==null){h=""}if(G==null){if(j!=null){j=null;v=true}if(o!=null){o=null;v=true}if(t!=null){t=null;v=true}if(u!=null){u=null;v=true}if(n!=null){n=null;v=true}if(A!=null){A=null;v=true}if(x!=null){x=null;v=true}v&&m.call(q,r||q);return}switch(h.toLowerCase()){case"ahex":case"hex":var D=g.hexToRgba(G&&(G.ahex||G.hex)||G||"00000000");l.call(q,"rgba",{r:D.r,g:D.g,b:D.b,a:h=="ahex"?D.a:u!=null?u:255},r);break;default:if(G&&(G.ahex!=null||G.hex!=null)){l.call(q,"ahex",G.ahex||G.hex||"00000000",r);return}var s={},E=false,C=false;if(G.r!==undefined&&!h.indexOf("r")==-1){h+="r"}if(G.g!==undefined&&!h.indexOf("g")==-1){h+="g"}if(G.b!==undefined&&!h.indexOf("b")==-1){h+="b"}if(G.a!==undefined&&!h.indexOf("a")==-1){h+="a"}if(G.h!==undefined&&!h.indexOf("h")==-1){h+="h"}if(G.s!==undefined&&!h.indexOf("s")==-1){h+="s"}if(G.v!==undefined&&!h.indexOf("v")==-1){h+="v"}for(var B=0;B<h.length;B++){switch(h.charAt(B)){case"r":if(C){continue}E=true;s.r=G&&G.r&&G.r|0||G&&G|0||0;if(s.r<0){s.r=0}else{if(s.r>255){s.r=255}}if(j!=s.r){j=s.r;v=true}break;case"g":if(C){continue}E=true;s.g=G&&G.g&&G.g|0||G&&G|0||0;if(s.g<0){s.g=0}else{if(s.g>255){s.g=255}}if(o!=s.g){o=s.g;v=true}break;case"b":if(C){continue}E=true;s.b=G&&G.b&&G.b|0||G&&G|0||0;if(s.b<0){s.b=0}else{if(s.b>255){s.b=255}}if(t!=s.b){t=s.b;v=true}break;case"a":s.a=G&&G.a!=null?G.a|0:G!=null?G|0:255;if(s.a<0){s.a=0}else{if(s.a>255){s.a=255}}if(u!=s.a){u=s.a;v=true}break;case"h":if(E){continue}C=true;s.h=G&&G.h&&G.h|0||G&&G|0||0;if(s.h<0){s.h=0}else{if(s.h>360){s.h=360}}if(n!=s.h){n=s.h;v=true}break;case"s":if(E){continue}C=true;s.s=G&&G.s!=null?G.s|0:G!=null?G|0:100;if(s.s<0){s.s=0}else{if(s.s>100){s.s=100}}if(A!=s.s){A=s.s;v=true}break;case"v":if(E){continue}C=true;s.v=G&&G.v!=null?G.v|0:G!=null?G|0:100;if(s.v<0){s.v=0}else{if(s.v>100){s.v=100}}if(x!=s.v){x=s.v;v=true}break}}if(v){if(E){j=j||0;o=o||0;t=t||0;var D=g.rgbToHsv({r:j,g:o,b:t});n=D.h;A=D.s;x=D.v}else{if(C){n=n||0;A=A!=null?A:100;x=x!=null?x:100;var D=g.hsvToRgb({h:n,s:A,v:x});j=D.r;o=D.g;t=D.b}}u=u!=null?u:255;m.call(q,r||q)}break}},p=function(h){if(e.isFunction(h)){k.push(h)}},y=function(r){if(!e.isFunction(r)){return}var h;while((h=e.inArray(r,k))!=-1){k.splice(h,1)}},w=function(){k=null};e.extend(true,q,{val:l,bind:p,unbind:y,destroy:w});if(z){if(z.ahex!=null){l("ahex",z)}else{if(z.hex!=null){l((z.a!=null?"a":"")+"hex",z.a!=null?{ahex:z.hex+g.intToHex(z.a)}:z)}else{if(z.r!=null&&z.g!=null&&z.b!=null){l("rgb"+(z.a!=null?"a":""),z)}else{if(z.h!=null&&z.s!=null&&z.v!=null){l("hsv"+(z.a!=null?"a":""),z)}}}}}},ColorMethods:{hexToRgba:function(m){m=this.validateHex(m);if(m==""){return{r:null,g:null,b:null,a:null}}var l="00",k="00",h="00",j="255";if(m.length==6){m+="ff"}if(m.length>6){l=m.substring(0,2);k=m.substring(2,4);h=m.substring(4,6);j=m.substring(6,m.length)}else{if(m.length>4){l=m.substring(4,m.length);m=m.substring(0,4)}if(m.length>2){k=m.substring(2,m.length);m=m.substring(0,2)}if(m.length>0){h=m.substring(0,m.length)}}return{r:this.hexToInt(l),g:this.hexToInt(k),b:this.hexToInt(h),a:this.hexToInt(j)}},validateHex:function(h){h=h.toLowerCase().replace(/[^a-f0-9]/g,"");if(h.length>8){h=h.substring(0,8)}return h},rgbaToHex:function(h){return this.intToHex(h.r)+this.intToHex(h.g)+this.intToHex(h.b)+this.intToHex(h.a)},intToHex:function(j){var h=(j|0).toString(16);if(h.length==1){h=("0"+h)}return h.toLowerCase()},hexToInt:function(h){return parseInt(h,16)},rgbToHsv:function(l){var o=l.r/255,n=l.g/255,j=l.b/255,k={h:0,s:0,v:0},m=0,h=0,p;if(o>=n&&o>=j){h=o;m=n>j?j:n}else{if(n>=j&&n>=o){h=n;m=o>j?j:o}else{h=j;m=n>o?o:n}}k.v=h;k.s=h?(h-m)/h:0;if(!k.s){k.h=0}else{p=h-m;if(o==h){k.h=(n-j)/p}else{if(n==h){k.h=2+(j-o)/p}else{k.h=4+(o-n)/p}}k.h=parseInt(k.h*60);if(k.h<0){k.h+=360}}k.s=(k.s*100)|0;k.v=(k.v*100)|0;return k},hsvToRgb:function(n){var r={r:0,g:0,b:0,a:100},m=n.h,x=n.s,u=n.v;if(x==0){if(u==0){r.r=r.g=r.b=0}else{r.r=r.g=r.b=(u*255/100)|0}}else{if(m==360){m=0}m/=60;x=x/100;u=u/100;var l=m|0,o=m-l,k=u*(1-x),j=u*(1-(x*o)),w=u*(1-(x*(1-o)));switch(l){case 0:r.r=u;r.g=w;r.b=k;break;case 1:r.r=j;r.g=u;r.b=k;break;case 2:r.r=k;r.g=u;r.b=w;break;case 3:r.r=k;r.g=j;r.b=u;break;case 4:r.r=w;r.g=k;r.b=u;break;case 5:r.r=u;r.g=k;r.b=j;break}r.r=(r.r*255)|0;r.g=(r.g*255)|0;r.b=(r.b*255)|0}return r}}};var f=e.jPicker.Color,c=e.jPicker.List,g=e.jPicker.ColorMethods;e.fn.jPicker=function(j){var h=arguments;return this.each(function(){var w=this,av=e.extend(true,{},e.fn.jPicker.defaults,j);if(e(w).get(0).nodeName.toLowerCase()=="input"){e.extend(true,av,{window:{bindToInput:true,expandable:true,input:e(w)}});if(e(w).val()==""){av.color.active=new f({hex:null});av.color.current=new f({hex:null})}else{if(g.validateHex(e(w).val())){av.color.active=new f({hex:e(w).val(),a:av.color.active.val("a")});av.color.current=new f({hex:e(w).val(),a:av.color.active.val("a")})}}}if(av.window.expandable){e(w).after('<span class="jPicker"><span class="Icon"><span class="Color">&nbsp;</span><span class="Alpha">&nbsp;</span><span class="Image" title="Click To Open Color Picker">&nbsp;</span><span class="Container">&nbsp;</span></span></span>')}else{av.window.liveUpdate=false}var Q=parseFloat(navigator.appVersion.split("MSIE")[1])<7&&document.body.filters,R=null,l=null,s=null,au=null,at=null,ar=null,P=null,O=null,N=null,M=null,L=null,K=null,D=null,U=null,aw=null,J=null,I=null,am=null,ai=null,E=null,an=null,ah=null,X=null,ab=null,aq=null,r=null,C=null,u=null,ag=function(aB){var aD=G.active,aE=n.clientPath,aA=aD.val("hex"),aC,az;av.color.mode=aB;switch(aB){case"h":setTimeout(function(){y.call(w,l,"transparent");x.call(w,au,0);Y.call(w,au,100);x.call(w,at,260);Y.call(w,at,100);y.call(w,s,"transparent");x.call(w,P,0);Y.call(w,P,100);x.call(w,O,260);Y.call(w,O,100);x.call(w,N,260);Y.call(w,N,100);x.call(w,M,260);Y.call(w,M,100);x.call(w,K,260);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:100,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:360});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("s"),y:100-aD.val("v")},D);U.val("y",360-aD.val("h"),U);break;case"s":setTimeout(function(){y.call(w,l,"transparent");x.call(w,au,-260);x.call(w,at,-520);x.call(w,P,-260);x.call(w,O,-520);x.call(w,K,260);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:360,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:100});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("h"),y:100-aD.val("v")},D);U.val("y",100-aD.val("s"),U);break;case"v":setTimeout(function(){y.call(w,l,"000000");x.call(w,au,-780);x.call(w,at,260);y.call(w,s,aA);x.call(w,P,-520);x.call(w,O,260);Y.call(w,O,100);x.call(w,K,260);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:360,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:100});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("h"),y:100-aD.val("s")},D);U.val("y",100-aD.val("v"),U);break;case"r":aC=-1040;az=-780;D.range("all",{minX:0,maxX:255,minY:0,maxY:255});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("b"),y:255-aD.val("g")},D);U.val("y",255-aD.val("r"),U);break;case"g":aC=-1560;az=-1820;D.range("all",{minX:0,maxX:255,minY:0,maxY:255});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("b"),y:255-aD.val("r")},D);U.val("y",255-aD.val("g"),U);break;case"b":aC=-2080;az=-2860;D.range("all",{minX:0,maxX:255,minY:0,maxY:255});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("r"),y:255-aD.val("g")},D);U.val("y",255-aD.val("b"),U);break;case"a":setTimeout(function(){y.call(w,l,"transparent");x.call(w,au,-260);x.call(w,at,-520);x.call(w,P,260);x.call(w,O,260);Y.call(w,O,100);x.call(w,K,0);Y.call(w,K,100)},0);D.range("all",{minX:0,maxX:360,minY:0,maxY:100});U.range("rangeY",{minY:0,maxY:255});if(aD.val("ahex")==null){break}D.val("xy",{x:aD.val("h"),y:100-aD.val("v")},D);U.val("y",255-aD.val("a"),U);break;default:throw ("Invalid Mode");break}switch(aB){case"h":break;case"s":case"v":case"a":setTimeout(function(){Y.call(w,au,100);Y.call(w,P,100);x.call(w,N,260);Y.call(w,N,100);x.call(w,M,260);Y.call(w,M,100)},0);break;case"r":case"g":case"b":setTimeout(function(){y.call(w,l,"transparent");y.call(w,s,"transparent");Y.call(w,P,100);Y.call(w,au,100);x.call(w,au,aC);x.call(w,at,aC-260);x.call(w,P,az-780);x.call(w,O,az-520);x.call(w,N,az);x.call(w,M,az-260);x.call(w,K,260);Y.call(w,K,100)},0);break}if(aD.val("ahex")==null){return}aj.call(w,aD)},aj=function(aA,az){if(az==null||(az!=U&&az!=D)){v.call(w,aA,az)}setTimeout(function(){ay.call(w,aA);al.call(w,aA);W.call(w,aA)},0)},z=function(aA,az){var aC=G.active;if(az!=D&&aC.val()==null){return}var aB=aA.val("all");switch(av.color.mode){case"h":aC.val("sv",{s:aB.x,v:100-aB.y},az);break;case"s":case"a":aC.val("hv",{h:aB.x,v:100-aB.y},az);break;case"v":aC.val("hs",{h:aB.x,s:100-aB.y},az);break;case"r":aC.val("gb",{g:255-aB.y,b:aB.x},az);break;case"g":aC.val("rb",{r:255-aB.y,b:aB.x},az);break;case"b":aC.val("rg",{r:aB.x,g:255-aB.y},az);break}},ac=function(aA,az){var aB=G.active;if(az!=U&&aB.val()==null){return}switch(av.color.mode){case"h":aB.val("h",{h:360-aA.val("y")},az);break;case"s":aB.val("s",{s:100-aA.val("y")},az);break;case"v":aB.val("v",{v:100-aA.val("y")},az);break;case"r":aB.val("r",{r:255-aA.val("y")},az);break;case"g":aB.val("g",{g:255-aA.val("y")},az);break;case"b":aB.val("b",{b:255-aA.val("y")},az);break;case"a":aB.val("a",255-aA.val("y"),az);break}},v=function(aC,az){if(az!=D){switch(av.color.mode){case"h":var aH=aC.val("sv");D.val("xy",{x:aH!=null?aH.s:100,y:100-(aH!=null?aH.v:100)},az);break;case"s":case"a":var aB=aC.val("hv");D.val("xy",{x:aB&&aB.h||0,y:100-(aB!=null?aB.v:100)},az);break;case"v":var aE=aC.val("hs");D.val("xy",{x:aE&&aE.h||0,y:100-(aE!=null?aE.s:100)},az);break;case"r":var aA=aC.val("bg");D.val("xy",{x:aA&&aA.b||0,y:255-(aA&&aA.g||0)},az);break;case"g":var aI=aC.val("br");D.val("xy",{x:aI&&aI.b||0,y:255-(aI&&aI.r||0)},az);break;case"b":var aG=aC.val("rg");D.val("xy",{x:aG&&aG.r||0,y:255-(aG&&aG.g||0)},az);break}}if(az!=U){switch(av.color.mode){case"h":U.val("y",360-(aC.val("h")||0),az);break;case"s":var aJ=aC.val("s");U.val("y",100-(aJ!=null?aJ:100),az);break;case"v":var aF=aC.val("v");U.val("y",100-(aF!=null?aF:100),az);break;case"r":U.val("y",255-(aC.val("r")||0),az);break;case"g":U.val("y",255-(aC.val("g")||0),az);break;case"b":U.val("y",255-(aC.val("b")||0),az);break;case"a":var aD=aC.val("a");U.val("y",255-(aD!=null?aD:255),az);break}}},ay=function(aA){try{var az=aA.val("all");E.css({backgroundColor:az&&"#"+az.hex||"transparent"});Y.call(w,E,az&&Math.precision((az.a*100)/255,4)||0)}catch(aB){}},al=function(aC){switch(av.color.mode){case"h":y.call(w,l,new f({h:aC.val("h")||0,s:100,v:100}).val("hex"));break;case"s":case"a":var aB=aC.val("s");Y.call(w,at,100-(aB!=null?aB:100));break;case"v":var aA=aC.val("v");Y.call(w,au,aA!=null?aA:100);break;case"r":Y.call(w,at,Math.precision((aC.val("r")||0)/255*100,4));break;case"g":Y.call(w,at,Math.precision((aC.val("g")||0)/255*100,4));break;case"b":Y.call(w,at,Math.precision((aC.val("b")||0)/255*100));break}var az=aC.val("a");Y.call(w,ar,Math.precision(((255-(az||0))*100)/255,4))},W=function(aF){switch(av.color.mode){case"h":var aH=aF.val("a");Y.call(w,L,Math.precision(((255-(aH||0))*100)/255,4));break;case"s":var aA=aF.val("hva"),aB=new f({h:aA&&aA.h||0,s:100,v:aA!=null?aA.v:100});y.call(w,s,aB.val("hex"));Y.call(w,O,100-(aA!=null?aA.v:100));Y.call(w,L,Math.precision(((255-(aA&&aA.a||0))*100)/255,4));break;case"v":var aC=aF.val("hsa"),aE=new f({h:aC&&aC.h||0,s:aC!=null?aC.s:100,v:100});y.call(w,s,aE.val("hex"));Y.call(w,L,Math.precision(((255-(aC&&aC.a||0))*100)/255,4));break;case"r":case"g":case"b":var aD=0,aG=0,az=aF.val("rgba");if(av.color.mode=="r"){aD=az&&az.b||0;aG=az&&az.g||0}else{if(av.color.mode=="g"){aD=az&&az.b||0;aG=az&&az.r||0}else{if(av.color.mode=="b"){aD=az&&az.r||0;aG=az&&az.g||0}}}var aI=aG>aD?aD:aG;Y.call(w,O,aD>aG?Math.precision(((aD-aG)/(255-aG))*100,4):0);Y.call(w,N,aG>aD?Math.precision(((aG-aD)/(255-aD))*100,4):0);Y.call(w,M,Math.precision((aI/255)*100,4));Y.call(w,L,Math.precision(((255-(az&&az.a||0))*100)/255,4));break;case"a":var aH=aF.val("a");y.call(w,s,aF.val("hex")||"000000");Y.call(w,L,aH!=null?0:100);Y.call(w,K,aH!=null?100:0);break}},y=function(az,aA){az.css({backgroundColor:aA&&aA.length==6&&"#"+aA||"transparent"})},t=function(az,aA){if(Q&&(aA.indexOf("AlphaBar.png")!=-1||aA.indexOf("Bars.png")!=-1||aA.indexOf("Maps.png")!=-1)){az.attr("pngSrc",aA);az.css({backgroundImage:"none",filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+aA+"', sizingMethod='scale')"})}else{az.css({backgroundImage:"url("+aA+")"})}},x=function(az,aA){az.css({top:aA+"px"})},Y=function(aA,az){aA.css({visibility:az>0?"visible":"hidden"});if(az>0&&az<100){if(Q){var aB=aA.attr("pngSrc");if(aB!=null&&(aB.indexOf("AlphaBar.png")!=-1||aB.indexOf("Bars.png")!=-1||aB.indexOf("Maps.png")!=-1)){aA.css({filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+aB+"', sizingMethod='scale') progid:DXImageTransform.Microsoft.Alpha(opacity="+az+")"})}else{aA.css({opacity:Math.precision(az/100,4)})}}else{aA.css({opacity:Math.precision(az/100,4)})}}else{if(az==0||az==100){if(Q){var aB=aA.attr("pngSrc");if(aB!=null&&(aB.indexOf("AlphaBar.png")!=-1||aB.indexOf("Bars.png")!=-1||aB.indexOf("Maps.png")!=-1)){aA.css({filter:"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+aB+"', sizingMethod='scale')"})}else{aA.css({opacity:""})}}else{aA.css({opacity:""})}}}},B=function(){G.active.val("ahex",G.current.val("ahex"))},T=function(){G.current.val("ahex",G.active.val("ahex"))},A=function(az){e(this).parents("tbody:first").find('input:radio[value!="'+az.target.value+'"]').removeAttr("checked");ag.call(w,az.target.value)},Z=function(){B.call(w)},q=function(){B.call(w);av.window.expandable&&ao.call(w);e.isFunction(ax)&&ax.call(w,G.active,X)},m=function(){T.call(w);av.window.expandable&&ao.call(w);e.isFunction(ae)&&ae.call(w,G.active,ah)},af=function(){V.call(w)},ap=function(aB,az){var aA=aB.val("hex");an.css({backgroundColor:aA&&"#"+aA||"transparent"});Y.call(w,an,Math.precision(((aB.val("a")||0)*100)/255,4))},H=function(aC,az){var aB=aC.val("hex");var aA=aC.val("va");aq.css({backgroundColor:aB&&"#"+aB||"transparent"});Y.call(w,r,Math.precision(((255-(aA&&aA.a||0))*100)/255,4));if(av.window.bindToInput&&av.window.updateInputColor){av.window.input.css({backgroundColor:aB&&"#"+aB||"transparent",color:aA==null||aA.v>75?"#000000":"#ffffff"})}},S=function(aB){var az=av.window.element,aA=av.window.page;J=parseInt(R.css("left"));I=parseInt(R.css("top"));am=aB.pageX;ai=aB.pageY;e(document).bind("mousemove",k).bind("mouseup",p);aB.preventDefault()},k=function(az){R.css({left:J-(am-az.pageX)+"px",top:I-(ai-az.pageY)+"px"});if(av.window.expandable&&!e.support.boxModel){R.prev().css({left:R.css("left"),top:R.css("top")})}az.stopPropagation();az.preventDefault();return false},p=function(az){e(document).unbind("mousemove",k).unbind("mouseup",p);az.stopPropagation();az.preventDefault();return false},F=function(az){az.preventDefault();az.stopPropagation();G.active.val("ahex",e(this).attr("title")||null,az.target);return false},ae=e.isFunction(h[1])&&h[1]||null,ad=e.isFunction(h[2])&&h[2]||null,ax=e.isFunction(h[3])&&h[3]||null,V=function(){G.current.val("ahex",G.active.val("ahex"));var az=function(){if(!av.window.expandable||e.support.boxModel){return}var aA=R.find("table:first");R.before("<iframe/>");R.prev().css({width:aA.width(),height:R.height(),opacity:0,position:"absolute",left:R.css("left"),top:R.css("top")})};if(av.window.expandable){e(document.body).children("div.jPicker.Container").css({zIndex:10});R.css({zIndex:20})}switch(av.window.effects.type){case"fade":R.fadeIn(av.window.effects.speed.show,az);break;case"slide":R.slideDown(av.window.effects.speed.show,az);break;case"show":default:R.show(av.window.effects.speed.show,az);break}},ao=function(){var az=function(){if(av.window.expandable){R.css({zIndex:10})}if(!av.window.expandable||e.support.boxModel){return}R.prev().remove()};switch(av.window.effects.type){case"fade":R.fadeOut(av.window.effects.speed.hide,az);break;case"slide":R.slideUp(av.window.effects.speed.hide,az);break;case"show":default:R.hide(av.window.effects.speed.hide,az);break}},o=function(){var aG=av.window,az=aG.expandable?e(w).next().find(".Container:first"):null;R=aG.expandable?e("<div/>"):e(w);R.addClass("jPicker Container");if(aG.expandable){R.hide()}R.get(0).onselectstart=function(){return false};var aJ=G.active.val("all");if(aG.alphaPrecision<0){aG.alphaPrecision=0}else{if(aG.alphaPrecision>2){aG.alphaPrecision=2}}var aK='<table class="jPicker" cellpadding="0" cellspacing="0"><tbody>'+(aG.expandable?'<tr><td class="Move" colspan="5">&nbsp;</td></tr>':"")+'<tr><td rowspan="9"><h2 class="Title">'+(aG.title||aa.text.title)+'</h2><div class="Map"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><img src="'+n.clientPath+n.colorMap.arrow.file+'" class="Arrow"/></div></td><td rowspan="9"><div class="Bar"><span class="Map1">&nbsp;</span><span class="Map2">&nbsp;</span><span class="Map3">&nbsp;</span><span class="Map4">&nbsp;</span><span class="Map5">&nbsp;</span><span class="Map6">&nbsp;</span><img src="'+n.clientPath+n.colorBar.arrow.file+'" class="Arrow"/></div></td><td colspan="2" class="Preview">'+aa.text.newColor+'<div><span class="Active" title="'+aa.tooltips.colors.newColor+'">&nbsp;</span><span class="Current" title="'+aa.tooltips.colors.currentColor+'">&nbsp;</span></div>'+aa.text.currentColor+'</td><td rowspan="9" class="Button"><input type="button" class="Ok" value="'+aa.text.ok+'" title="'+aa.tooltips.buttons.ok+'"/><input type="button" class="Cancel" value="'+aa.text.cancel+'" title="'+aa.tooltips.buttons.cancel+'"/><hr/><div class="Grid">&nbsp;</div></td></tr><tr class="Hue"><td class="Radio"><label title="'+aa.tooltips.hue.radio+'"><input type="radio" value="h"'+(av.color.mode=="h"?' checked="checked"':"")+'/>H:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.h:"")+'" title="'+aa.tooltips.hue.textbox+'"/>&nbsp;&deg;</td></tr><tr class="Saturation"><td class="Radio"><label title="'+aa.tooltips.saturation.radio+'"><input type="radio" value="s"'+(av.color.mode=="s"?' checked="checked"':"")+'/>S:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.s:"")+'" title="'+aa.tooltips.saturation.textbox+'"/>&nbsp;%</td></tr><tr class="Value"><td class="Radio"><label title="'+aa.tooltips.value.radio+'"><input type="radio" value="v"'+(av.color.mode=="v"?' checked="checked"':"")+'/>V:</label><br/><br/></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.v:"")+'" title="'+aa.tooltips.value.textbox+'"/>&nbsp;%<br/><br/></td></tr><tr class="Red"><td class="Radio"><label title="'+aa.tooltips.red.radio+'"><input type="radio" value="r"'+(av.color.mode=="r"?' checked="checked"':"")+'/>R:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.r:"")+'" title="'+aa.tooltips.red.textbox+'"/></td></tr><tr class="Green"><td class="Radio"><label title="'+aa.tooltips.green.radio+'"><input type="radio" value="g"'+(av.color.mode=="g"?' checked="checked"':"")+'/>G:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.g:"")+'" title="'+aa.tooltips.green.textbox+'"/></td></tr><tr class="Blue"><td class="Radio"><label title="'+aa.tooltips.blue.radio+'"><input type="radio" value="b"'+(av.color.mode=="b"?' checked="checked"':"")+'/>B:</label></td><td class="Text"><input type="text" maxlength="3" value="'+(aJ!=null?aJ.b:"")+'" title="'+aa.tooltips.blue.textbox+'"/></td></tr><tr class="Alpha"><td class="Radio">'+(aG.alphaSupport?'<label title="'+aa.tooltips.alpha.radio+'"><input type="radio" value="a"'+(av.color.mode=="a"?' checked="checked"':"")+"/>A:</label>":"&nbsp;")+'</td><td class="Text">'+(aG.alphaSupport?'<input type="text" maxlength="'+(3+aG.alphaPrecision)+'" value="'+(aJ!=null?Math.precision((aJ.a*100)/255,aG.alphaPrecision):"")+'" title="'+aa.tooltips.alpha.textbox+'"/>&nbsp;%':"&nbsp;")+'</td></tr><tr class="Hex"><td colspan="2" class="Text"><label title="'+aa.tooltips.hex.textbox+'">#:<input type="text" maxlength="6" class="Hex" value="'+(aJ!=null?aJ.hex:"")+'"/></label>'+(aG.alphaSupport?'<input type="text" maxlength="2" class="AHex" value="'+(aJ!=null?aJ.ahex.substring(6):"")+'" title="'+aa.tooltips.hex.alpha+'"/></td>':"&nbsp;")+"</tr></tbody></table>";if(aG.expandable){R.html(aK);if(e(document.body).children("div.jPicker.Container").length==0){e(document.body).prepend(R)}else{e(document.body).children("div.jPicker.Container:last").after(R)}R.mousedown(function(){e(document.body).children("div.jPicker.Container").css({zIndex:10});R.css({zIndex:20})});R.css({left:aG.position.x=="left"?(az.offset().left-530-(aG.position.y=="center"?25:0))+"px":aG.position.x=="center"?(az.offset().left-260)+"px":aG.position.x=="right"?(az.offset().left-10+(aG.position.y=="center"?25:0))+"px":aG.position.x=="screenCenter"?((e(document).width()>>1)-260)+"px":(az.offset().left+parseInt(aG.position.x))+"px",position:"absolute",top:aG.position.y=="top"?(az.offset().top-312)+"px":aG.position.y=="center"?(az.offset().top-156)+"px":aG.position.y=="bottom"?(az.offset().top+25)+"px":(az.offset().top+parseInt(aG.position.y))+"px"})}else{R=e(w);R.html(aK)}var aD=R.find("tbody:first");l=aD.find("div.Map:first");s=aD.find("div.Bar:first");var aL=l.find("span"),aI=s.find("span");au=aL.filter(".Map1:first");at=aL.filter(".Map2:first");ar=aL.filter(".Map3:first");P=aI.filter(".Map1:first");O=aI.filter(".Map2:first");N=aI.filter(".Map3:first");M=aI.filter(".Map4:first");L=aI.filter(".Map5:first");K=aI.filter(".Map6:first");D=new d(l,{map:{width:n.colorMap.width,height:n.colorMap.height},arrow:{image:n.clientPath+n.colorMap.arrow.file,width:n.colorMap.arrow.width,height:n.colorMap.arrow.height}});D.bind(z);U=new d(s,{map:{width:n.colorBar.width,height:n.colorBar.height},arrow:{image:n.clientPath+n.colorBar.arrow.file,width:n.colorBar.arrow.width,height:n.colorBar.arrow.height}});U.bind(ac);aw=new b(aD,G.active,aG.expandable&&aG.bindToInput?aG.input:null,aG.alphaPrecision);var aB=aJ!=null?aJ.hex:null,aH=aD.find(".Preview"),aF=aD.find(".Button");E=aH.find(".Active:first").css({backgroundColor:aB&&"#"+aB||"transparent"});an=aH.find(".Current:first").css({backgroundColor:aB&&"#"+aB||"transparent"}).bind("click",Z);Y.call(w,an,Math.precision(G.current.val("a")*100)/255,4);ah=aF.find(".Ok:first").bind("click",m);X=aF.find(".Cancel:first").bind("click",q);ab=aF.find(".Grid:first");setTimeout(function(){t.call(w,au,n.clientPath+"Maps.png");t.call(w,at,n.clientPath+"Maps.png");t.call(w,ar,n.clientPath+"map-opacity.png");t.call(w,P,n.clientPath+"Bars.png");t.call(w,O,n.clientPath+"Bars.png");t.call(w,N,n.clientPath+"Bars.png");t.call(w,M,n.clientPath+"Bars.png");t.call(w,L,n.clientPath+"bar-opacity.png");t.call(w,K,n.clientPath+"AlphaBar.png");t.call(w,aH.find("div:first"),n.clientPath+"preview-opacity.png")},0);aD.find("td.Radio input").bind("click",A);if(G.quickList&&G.quickList.length>0){var aE="";for(i=0;i<G.quickList.length;i++){if((typeof(G.quickList[i])).toString().toLowerCase()=="string"){G.quickList[i]=new f({hex:G.quickList[i]})}var aC=G.quickList[i].val("a");var aM=G.quickList[i].val("ahex");if(!aG.alphaSupport&&aM){aM=aM.substring(0,6)+"ff"}var aA=G.quickList[i].val("hex");aE+='<span class="QuickColor"'+(aM&&' title="#'+aM+'"'||"")+' style="background-color:'+(aA&&"#"+aA||"")+";"+(aA?"":"background-image:url("+n.clientPath+"NoColor.png)")+(aG.alphaSupport&&aC&&aC<255?";opacity:"+Math.precision(aC/255,4)+";filter:Alpha(opacity="+Math.precision(aC/2.55,4)+")":"")+'">&nbsp;</span>'}t.call(w,ab,n.clientPath+"bar-opacity.png");ab.html(aE);ab.find(".QuickColor").click(F)}ag.call(w,av.color.mode);G.active.bind(aj);e.isFunction(ad)&&G.active.bind(ad);G.current.bind(ap);if(aG.expandable){w.icon=az.parents(".Icon:first");aq=w.icon.find(".Color:first").css({backgroundColor:aB&&"#"+aB||"transparent"});r=w.icon.find(".Alpha:first");t.call(w,r,n.clientPath+"bar-opacity.png");Y.call(w,r,Math.precision(((255-(aJ!=null?aJ.a:0))*100)/255,4));C=w.icon.find(".Image:first").css({backgroundImage:"url("+n.clientPath+n.picker.file+")"}).bind("click",af);if(aG.bindToInput&&aG.updateInputColor){aG.input.css({backgroundColor:aB&&"#"+aB||"transparent",color:aJ==null||aJ.v>75?"#000000":"#ffffff"})}u=aD.find(".Move:first").bind("mousedown",S);G.active.bind(H)}else{V.call(w)}},ak=function(){R.find("td.Radio input").unbind("click",A);an.unbind("click",Z);X.unbind("click",q);ah.unbind("click",m);if(av.window.expandable){C.unbind("click",af);u.unbind("mousedown",S);w.icon=null}R.find(".QuickColor").unbind("click",F);l=null;s=null;au=null;at=null;ar=null;P=null;O=null;N=null;M=null;L=null;K=null;D.destroy();D=null;U.destroy();U=null;aw.destroy();aw=null;E=null;an=null;ah=null;X=null;ab=null;ae=null;ax=null;ad=null;R.html("");for(i=0;i<c.length;i++){if(c[i]==w){c.splice(i,1)}}},n=av.images,aa=av.localization,G={active:(typeof(av.color.active)).toString().toLowerCase()=="string"?new f({ahex:!av.window.alphaSupport&&av.color.active?av.color.active.substring(0,6)+"ff":av.color.active}):new f({ahex:!av.window.alphaSupport&&av.color.active.val("ahex")?av.color.active.val("ahex").substring(0,6)+"ff":av.color.active.val("ahex")}),current:(typeof(av.color.active)).toString().toLowerCase()=="string"?new f({ahex:!av.window.alphaSupport&&av.color.active?av.color.active.substring(0,6)+"ff":av.color.active}):new f({ahex:!av.window.alphaSupport&&av.color.active.val("ahex")?av.color.active.val("ahex").substring(0,6)+"ff":av.color.active.val("ahex")}),quickList:av.color.quickList};e.extend(true,w,{commitCallback:ae,liveCallback:ad,cancelCallback:ax,color:G,show:V,hide:ao,destroy:ak});c.push(w);setTimeout(function(){o.call(w)},0)})};e.fn.jPicker.defaults={window:{title:null,effects:{type:"slide",speed:{show:"slow",hide:"fast"}},position:{x:"screenCenter",y:"top"},expandable:false,liveUpdate:true,alphaSupport:false,alphaPrecision:0,updateInputColor:true},color:{mode:"h",active:new f({ahex:"#ffcc00ff"}),quickList:[new f({h:360,s:33,v:100}),new f({h:360,s:66,v:100}),new f({h:360,s:100,v:100}),new f({h:360,s:100,v:75}),new f({h:360,s:100,v:50}),new f({h:180,s:0,v:100}),new f({h:30,s:33,v:100}),new f({h:30,s:66,v:100}),new f({h:30,s:100,v:100}),new f({h:30,s:100,v:75}),new f({h:30,s:100,v:50}),new f({h:180,s:0,v:90}),new f({h:60,s:33,v:100}),new f({h:60,s:66,v:100}),new f({h:60,s:100,v:100}),new f({h:60,s:100,v:75}),new f({h:60,s:100,v:50}),new f({h:180,s:0,v:80}),new f({h:90,s:33,v:100}),new f({h:90,s:66,v:100}),new f({h:90,s:100,v:100}),new f({h:90,s:100,v:75}),new f({h:90,s:100,v:50}),new f({h:180,s:0,v:70}),new f({h:120,s:33,v:100}),new f({h:120,s:66,v:100}),new f({h:120,s:100,v:100}),new f({h:120,s:100,v:75}),new f({h:120,s:100,v:50}),new f({h:180,s:0,v:60}),new f({h:150,s:33,v:100}),new f({h:150,s:66,v:100}),new f({h:150,s:100,v:100}),new f({h:150,s:100,v:75}),new f({h:150,s:100,v:50}),new f({h:180,s:0,v:50}),new f({h:180,s:33,v:100}),new f({h:180,s:66,v:100}),new f({h:180,s:100,v:100}),new f({h:180,s:100,v:75}),new f({h:180,s:100,v:50}),new f({h:180,s:0,v:40}),new f({h:210,s:33,v:100}),new f({h:210,s:66,v:100}),new f({h:210,s:100,v:100}),new f({h:210,s:100,v:75}),new f({h:210,s:100,v:50}),new f({h:180,s:0,v:30}),new f({h:240,s:33,v:100}),new f({h:240,s:66,v:100}),new f({h:240,s:100,v:100}),new f({h:240,s:100,v:75}),new f({h:240,s:100,v:50}),new f({h:180,s:0,v:20}),new f({h:270,s:33,v:100}),new f({h:270,s:66,v:100}),new f({h:270,s:100,v:100}),new f({h:270,s:100,v:75}),new f({h:270,s:100,v:50}),new f({h:180,s:0,v:10}),new f({h:300,s:33,v:100}),new f({h:300,s:66,v:100}),new f({h:300,s:100,v:100}),new f({h:300,s:100,v:75}),new f({h:300,s:100,v:50}),new f({h:180,s:0,v:0}),new f({h:330,s:33,v:100}),new f({h:330,s:66,v:100}),new f({h:330,s:100,v:100}),new f({h:330,s:100,v:75}),new f({h:330,s:100,v:50}),new f()]},images:{clientPath:"/jPicker/images/",colorMap:{width:256,height:256,arrow:{file:"mappoint.gif",width:15,height:15}},colorBar:{width:20,height:256,arrow:{file:"rangearrows.gif",width:20,height:7}},picker:{file:"picker.gif",width:25,height:24}},localization:{text:{title:"Drag Markers To Pick A Color",newColor:"new",currentColor:"current",ok:"OK",cancel:"Cancel"},tooltips:{colors:{newColor:"New Color - Press &ldquo;OK&rdquo; To Commit",currentColor:"Click To Revert To Original Color"},buttons:{ok:"Commit To This Color Selection",cancel:"Cancel And Revert To Original Color"},hue:{radio:"Set To &ldquo;Hue&rdquo; Color Mode",textbox:"Enter A &ldquo;Hue&rdquo; Value (0-360&deg;)"},saturation:{radio:"Set To &ldquo;Saturation&rdquo; Color Mode",textbox:"Enter A &ldquo;Saturation&rdquo; Value (0-100%)"},value:{radio:"Set To &ldquo;Value&rdquo; Color Mode",textbox:"Enter A &ldquo;Value&rdquo; Value (0-100%)"},red:{radio:"Set To &ldquo;Red&rdquo; Color Mode",textbox:"Enter A &ldquo;Red&rdquo; Value (0-255)"},green:{radio:"Set To &ldquo;Green&rdquo; Color Mode",textbox:"Enter A &ldquo;Green&rdquo; Value (0-255)"},blue:{radio:"Set To &ldquo;Blue&rdquo; Color Mode",textbox:"Enter A &ldquo;Blue&rdquo; Value (0-255)"},alpha:{radio:"Set To &ldquo;Alpha&rdquo; Color Mode",textbox:"Enter A &ldquo;Alpha&rdquo; Value (0-100)"},hex:{textbox:"Enter A &ldquo;Hex&rdquo; Color Value (#000000-#ffffff)",alpha:"Enter A &ldquo;Alpha&rdquo; Value (#00-#ff)"}}}}})(jQuery,"1.1.5"); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/jquery.jgraduate.js b/files_svgedit/svg-edit/jgraduate/jquery.jgraduate.js
new file mode 100644
index 000000000..d4baa6935
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/jquery.jgraduate.js
@@ -0,0 +1,1175 @@
+/*
+ * jGraduate 0.4
+ *
+ * jQuery Plugin for a gradient picker
+ *
+ * Copyright (c) 2010 Jeff Schiller
+ * http://blog.codedread.com/
+ * Copyright (c) 2010 Alexis Deveria
+ * http://a.deveria.com/
+ *
+ * Apache 2 License
+
+jGraduate( options, okCallback, cancelCallback )
+
+where options is an object literal:
+ {
+ window: { title: "Pick the start color and opacity for the gradient" },
+ images: { clientPath: "images/" },
+ paint: a Paint object,
+ newstop: String of value "same", "inverse", "black" or "white"
+ OR object with one or both values {color: #Hex color, opac: number 0-1}
+ }
+
+- the Paint object is:
+ Paint {
+ type: String, // one of "none", "solidColor", "linearGradient", "radialGradient"
+ alpha: Number representing opacity (0-100),
+ solidColor: String representing #RRGGBB hex of color,
+ linearGradient: object of interface SVGLinearGradientElement,
+ radialGradient: object of interface SVGRadialGradientElement,
+ }
+
+$.jGraduate.Paint() -> constructs a 'none' color
+$.jGraduate.Paint({copy: o}) -> creates a copy of the paint o
+$.jGraduate.Paint({hex: "#rrggbb"}) -> creates a solid color paint with hex = "#rrggbb"
+$.jGraduate.Paint({linearGradient: o, a: 50}) -> creates a linear gradient paint with opacity=0.5
+$.jGraduate.Paint({radialGradient: o, a: 7}) -> creates a radial gradient paint with opacity=0.07
+$.jGraduate.Paint({hex: "#rrggbb", linearGradient: o}) -> throws an exception?
+
+- picker accepts the following object as input:
+ {
+ okCallback: function to call when Ok is pressed
+ cancelCallback: function to call when Cancel is pressed
+ paint: object describing the paint to display initially, if not set, then default to opaque white
+ }
+
+- okCallback receives a Paint object
+
+ *
+ */
+
+(function() {
+
+var ns = { svg: 'http://www.w3.org/2000/svg', xlink: 'http://www.w3.org/1999/xlink' };
+if(!window.console) {
+ window.console = new function() {
+ this.log = function(str) {};
+ this.dir = function(str) {};
+ };
+}
+
+$.jGraduate = {
+ Paint:
+ function(opt) {
+ var options = opt || {};
+ this.alpha = isNaN(options.alpha) ? 100 : options.alpha;
+ // copy paint object
+ if (options.copy) {
+ this.type = options.copy.type;
+ this.alpha = options.copy.alpha;
+ this.solidColor = null;
+ this.linearGradient = null;
+ this.radialGradient = null;
+
+ switch(this.type) {
+ case "none":
+ break;
+ case "solidColor":
+ this.solidColor = options.copy.solidColor;
+ break;
+ case "linearGradient":
+ this.linearGradient = options.copy.linearGradient.cloneNode(true);
+ break;
+ case "radialGradient":
+ this.radialGradient = options.copy.radialGradient.cloneNode(true);
+ break;
+ }
+ }
+ // create linear gradient paint
+ else if (options.linearGradient) {
+ this.type = "linearGradient";
+ this.solidColor = null;
+ this.radialGradient = null;
+ this.linearGradient = options.linearGradient.cloneNode(true);
+ }
+ // create linear gradient paint
+ else if (options.radialGradient) {
+ this.type = "radialGradient";
+ this.solidColor = null;
+ this.linearGradient = null;
+ this.radialGradient = options.radialGradient.cloneNode(true);
+ }
+ // create solid color paint
+ else if (options.solidColor) {
+ this.type = "solidColor";
+ this.solidColor = options.solidColor;
+ }
+ // create empty paint
+ else {
+ this.type = "none";
+ this.solidColor = null;
+ this.linearGradient = null;
+ this.radialGradient = null;
+ }
+ }
+};
+
+jQuery.fn.jGraduateDefaults = {
+ paint: new $.jGraduate.Paint(),
+ window: {
+ pickerTitle: "Drag markers to pick a paint"
+ },
+ images: {
+ clientPath: "images/"
+ },
+ newstop: 'inverse' // same, inverse, black, white
+};
+
+var isGecko = navigator.userAgent.indexOf('Gecko/') >= 0;
+
+function setAttrs(elem, attrs) {
+ if(isGecko) {
+ for (var aname in attrs) elem.setAttribute(aname, attrs[aname]);
+ } else {
+ for (var aname in attrs) {
+ var val = attrs[aname], prop = elem[aname];
+ if(prop && prop.constructor === 'SVGLength') {
+ prop.baseVal.value = val;
+ } else {
+ elem.setAttribute(aname, val);
+ }
+ }
+ }
+}
+
+function mkElem(name, attrs, newparent) {
+ var elem = document.createElementNS(ns.svg, name);
+ setAttrs(elem, attrs);
+ if(newparent) newparent.appendChild(elem);
+ return elem;
+}
+
+jQuery.fn.jGraduate =
+ function(options) {
+ var $arguments = arguments;
+ return this.each( function() {
+ var $this = $(this), $settings = $.extend(true, {}, jQuery.fn.jGraduateDefaults, options),
+ id = $this.attr('id'),
+ idref = '#'+$this.attr('id')+' ';
+
+ if (!idref)
+ {
+ alert('Container element must have an id attribute to maintain unique id strings for sub-elements.');
+ return;
+ }
+
+ var okClicked = function() {
+ switch ( $this.paint.type ) {
+ case "radialGradient":
+ $this.paint.linearGradient = null;
+ break;
+ case "linearGradient":
+ $this.paint.radialGradient = null;
+ break;
+ case "solidColor":
+ $this.paint.radialGradient = $this.paint.linearGradient = null;
+ break;
+ }
+ $.isFunction($this.okCallback) && $this.okCallback($this.paint);
+ $this.hide();
+ },
+ cancelClicked = function() {
+ $.isFunction($this.cancelCallback) && $this.cancelCallback();
+ $this.hide();
+ };
+
+ $.extend(true, $this, // public properties, methods, and callbacks
+ {
+ // make a copy of the incoming paint
+ paint: new $.jGraduate.Paint({copy: $settings.paint}),
+ okCallback: $.isFunction($arguments[1]) && $arguments[1] || null,
+ cancelCallback: $.isFunction($arguments[2]) && $arguments[2] || null
+ });
+
+ var pos = $this.position(),
+ color = null;
+ var $win = $(window);
+
+ if ($this.paint.type == "none") {
+ $this.paint = $.jGraduate.Paint({solidColor: 'ffffff'});
+ }
+
+ $this.addClass('jGraduate_Picker');
+ $this.html('<ul class="jGraduate_tabs">' +
+ '<li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li>' +
+ '<li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li>' +
+ '<li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li>' +
+ '</ul>' +
+ '<div class="jGraduate_colPick"></div>' +
+ '<div class="jGraduate_gradPick"></div>' +
+ '<div class="jGraduate_LightBox"></div>' +
+ '<div id="' + id + '_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>'
+
+
+ );
+ var colPicker = $(idref + '> .jGraduate_colPick');
+ var gradPicker = $(idref + '> .jGraduate_gradPick');
+
+ gradPicker.html(
+ '<div id="' + id + '_jGraduate_Swatch" class="jGraduate_Swatch">' +
+ '<h2 class="jGraduate_Title">' + $settings.window.pickerTitle + '</h2>' +
+ '<div id="' + id + '_jGraduate_GradContainer" class="jGraduate_GradContainer"></div>' +
+ '<div id="' + id + '_jGraduate_StopSlider" class="jGraduate_StopSlider"></div>' +
+ '</div>' +
+ '<div class="jGraduate_Form jGraduate_Points jGraduate_lg_field">' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">Begin Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">End Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_Form jGraduate_Points jGraduate_rg_field">' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">Center Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_StopSection">' +
+ '<label class="jGraduate_Form_Heading">Focal Point</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<label>Match center: <input type="checkbox" checked="checked" id="' + id + '_jGraduate_match_ctr"/></label><br/>' +
+ '<label>x:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/>' +
+ '<label> y:</label>' +
+ '<input type="text" id="' + id + '_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_StopSection jGraduate_SpreadMethod">' +
+ '<label class="jGraduate_Form_Heading">Spread method</label>' +
+ '<div class="jGraduate_Form_Section">' +
+ '<select class="jGraduate_spreadMethod">' +
+ '<option value=pad selected>Pad</option>' +
+ '<option value=reflect>Reflect</option>' +
+ '<option value=repeat>Repeat</option>' +
+ '</select>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_Form">' +
+ '<div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field">' +
+ '<label class="prelabel">Radius:</label>' +
+ '<div id="' + id + '_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius">' +
+ '<img id="' + id + '_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_RadiusInput" size="3" value="100"/>%</label>' +
+ '</div>' +
+ '<div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field">' +
+ '<label class="prelabel">Ellip:</label>' +
+ '<div id="' + id + '_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip">' +
+ '<img id="' + id + '_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_EllipInput" size="3" value="0"/>%</label>' +
+ '</div>' +
+ '<div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field">' +
+ '<label class="prelabel">Angle:</label>' +
+ '<div id="' + id + '_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle">' +
+ '<img id="' + id + '_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_AngleInput" size="3" value="0"/>deg</label>' +
+ '</div>' +
+ '<div class="jGraduate_Slider jGraduate_OpacField">' +
+ '<label class="prelabel">Opac:</label>' +
+ '<div id="' + id + '_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac">' +
+ '<img id="' + id + '_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="' + $settings.images.clientPath + 'rangearrows2.gif">' +
+ '</div>' +
+ '<label><input type="text" id="' + id + '_jGraduate_OpacInput" size="3" value="100"/>%</label>' +
+ '</div>' +
+ '</div>' +
+ '<div class="jGraduate_OkCancel">' +
+ '<input type="button" id="' + id + '_jGraduate_Ok" class="jGraduate_Ok" value="OK"/>' +
+ '<input type="button" id="' + id + '_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/>' +
+ '</div>');
+
+ // --------------
+ // Set up all the SVG elements (the gradient, stops and rectangle)
+ var MAX = 256, MARGINX = 0, MARGINY = 0, STOP_RADIUS = 15/2,
+ SIZEX = MAX - 2*MARGINX, SIZEY = MAX - 2*MARGINY;
+
+ var curType, curGradient, previewRect;
+
+ var attr_input = {};
+
+ var SLIDERW = 145;
+ $('.jGraduate_SliderBar').width(SLIDERW);
+
+ var container = $('#' + id+'_jGraduate_GradContainer')[0];
+
+ var svg = mkElem('svg', {
+ id: id + '_jgraduate_svg',
+ width: MAX,
+ height: MAX,
+ xmlns: ns.svg
+ }, container);
+
+ // if we are sent a gradient, import it
+
+ curType = curType || $this.paint.type;
+
+ var grad = curGradient = $this.paint[curType];
+
+ var gradalpha = $this.paint.alpha;
+
+ var isSolid = curType === 'solidColor';
+
+ // Make any missing gradients
+ switch ( curType ) {
+ case "solidColor":
+ // fall through
+ case "linearGradient":
+ if(!isSolid) {
+ curGradient.id = id+'_lg_jgraduate_grad';
+ grad = curGradient = svg.appendChild(curGradient);//.cloneNode(true));
+ }
+ mkElem('radialGradient', {
+ id: id + '_rg_jgraduate_grad'
+ }, svg);
+ if(curType === "linearGradient") break;
+ case "radialGradient":
+ if(!isSolid) {
+ curGradient.id = id+'_rg_jgraduate_grad';
+ grad = curGradient = svg.appendChild(curGradient);//.cloneNode(true));
+ }
+ mkElem('linearGradient', {
+ id: id + '_lg_jgraduate_grad'
+ }, svg);
+ }
+
+ if(isSolid) {
+ grad = curGradient = $('#' + id + '_lg_jgraduate_grad')[0];
+ var color = $this.paint[curType];
+ mkStop(0, '#' + color, 1);
+
+ var type = typeof $settings.newstop;
+
+ if(type === 'string') {
+ switch ( $settings.newstop ) {
+ case 'same':
+ mkStop(1, '#' + color, 1);
+ break;
+
+ case 'inverse':
+ // Invert current color for second stop
+ var inverted = '';
+
+ for(var i = 0; i < 6; i += 2) {
+ var ch = color.substr(i, 2);
+ var inv = (255 - parseInt(color.substr(i, 2), 16)).toString(16);
+ if(inv.length < 2) inv = 0 + inv;
+ inverted += inv;
+ }
+ mkStop(1, '#' + inverted, 1);
+ break;
+
+ case 'white':
+ mkStop(1, '#ffffff', 1);
+ break;
+
+ case 'black':
+ mkStop(1, '#000000', 1);
+ break;
+ }
+ } else if(type === 'object'){
+ var opac = ('opac' in $settings.newstop) ? $settings.newstop.opac : 1;
+ mkStop(1, ($settings.newstop.color || '#' + color), opac);
+ }
+ }
+
+
+ var x1 = parseFloat(grad.getAttribute('x1')||0.0),
+ y1 = parseFloat(grad.getAttribute('y1')||0.0),
+ x2 = parseFloat(grad.getAttribute('x2')||1.0),
+ y2 = parseFloat(grad.getAttribute('y2')||0.0);
+
+ var cx = parseFloat(grad.getAttribute('cx')||0.5),
+ cy = parseFloat(grad.getAttribute('cy')||0.5),
+ fx = parseFloat(grad.getAttribute('fx')|| cx),
+ fy = parseFloat(grad.getAttribute('fy')|| cy);
+
+
+ var previewRect = mkElem('rect', {
+ id: id + '_jgraduate_rect',
+ x: MARGINX,
+ y: MARGINY,
+ width: SIZEX,
+ height: SIZEY,
+ fill: 'url(#'+id+'_jgraduate_grad)',
+ 'fill-opacity': gradalpha/100
+ }, svg);
+
+ // stop visuals created here
+ var beginCoord = $('<div/>').attr({
+ 'class': 'grad_coord jGraduate_lg_field',
+ title: 'Begin Stop'
+ }).text(1).css({
+ top: y1 * MAX,
+ left: x1 * MAX
+ }).data('coord', 'start').appendTo(container);
+
+ var endCoord = beginCoord.clone().text(2).css({
+ top: y2 * MAX,
+ left: x2 * MAX
+ }).attr('title', 'End stop').data('coord', 'end').appendTo(container);
+
+ var centerCoord = $('<div/>').attr({
+ 'class': 'grad_coord jGraduate_rg_field',
+ title: 'Center stop'
+ }).text('C').css({
+ top: cy * MAX,
+ left: cx * MAX
+ }).data('coord', 'center').appendTo(container);
+
+ var focusCoord = centerCoord.clone().text('F').css({
+ top: fy * MAX,
+ left: fx * MAX,
+ display: 'none'
+ }).attr('title', 'Focus point').data('coord', 'focus').appendTo(container);
+
+ focusCoord[0].id = id + '_jGraduate_focusCoord';
+
+ var coords = $(idref + ' .grad_coord');
+
+// $(container).hover(function() {
+// coords.animate({
+// opacity: 1
+// }, 500);
+// }, function() {
+// coords.animate({
+// opacity: .2
+// }, 500);
+// });
+
+ $.each(['x1', 'y1', 'x2', 'y2', 'cx', 'cy', 'fx', 'fy'], function(i, attr) {
+ var attrval = curGradient.getAttribute(attr);
+
+ var isRadial = isNaN(attr[1]);
+
+ if(!attrval) {
+ // Set defaults
+ if(isRadial) {
+ // For radial points
+ attrval = "0.5";
+ } else {
+ // Only x2 is 1
+ attrval = attr === 'x2' ? "1.0" : "0.0";
+ }
+ }
+
+ attr_input[attr] = $('#'+id+'_jGraduate_' + attr)
+ .val(attrval)
+ .change(function() {
+ // TODO: Support values < 0 and > 1 (zoomable preview?)
+ if (isNaN(parseFloat(this.value)) || this.value < 0) {
+ this.value = 0.0;
+ } else if(this.value > 1) {
+ this.value = 1.0;
+ }
+
+ if(!(attr[0] === 'f' && !showFocus)) {
+ if(isRadial && curType === 'radialGradient' || !isRadial && curType === 'linearGradient') {
+ curGradient.setAttribute(attr, this.value);
+ }
+ }
+
+ if(isRadial) {
+ var $elem = attr[0] === "c" ? centerCoord : focusCoord;
+ } else {
+ var $elem = attr[1] === "1" ? beginCoord : endCoord;
+ }
+
+ var cssName = attr.indexOf('x') >= 0 ? 'left' : 'top';
+
+ $elem.css(cssName, this.value * MAX);
+ }).change();
+ });
+
+
+
+ function mkStop(n, color, opac, sel, stop_elem) {
+ var stop = stop_elem || mkElem('stop',{'stop-color':color,'stop-opacity':opac,offset:n}, curGradient);
+ if(stop_elem) {
+ color = stop_elem.getAttribute('stop-color');
+ opac = stop_elem.getAttribute('stop-opacity');
+ n = stop_elem.getAttribute('offset');
+ } else {
+ curGradient.appendChild(stop);
+ }
+ if(opac === null) opac = 1;
+
+ var picker_d = 'M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z';
+
+ var pathbg = mkElem('path',{
+ d: picker_d,
+ fill: 'url(#jGraduate_trans)',
+ transform: 'translate(' + (10 + n * MAX) + ', 26)'
+ }, stopGroup);
+
+ var path = mkElem('path',{
+ d: picker_d,
+ fill: color,
+ 'fill-opacity': opac,
+ transform: 'translate(' + (10 + n * MAX) + ', 26)',
+ stroke: '#000',
+ 'stroke-width': 1.5
+ }, stopGroup);
+
+ $(path).mousedown(function(e) {
+ selectStop(this);
+ drag = cur_stop;
+ $win.mousemove(dragColor).mouseup(remDrags);
+ stop_offset = stopMakerDiv.offset();
+ e.preventDefault();
+ return false;
+ }).data('stop', stop).data('bg', pathbg).dblclick(function() {
+ $('div.jGraduate_LightBox').show();
+ var colorhandle = this;
+ var stopOpacity = +stop.getAttribute('stop-opacity') || 1;
+ var stopColor = stop.getAttribute('stop-color') || 1;
+ var thisAlpha = (parseFloat(stopOpacity)*255).toString(16);
+ while (thisAlpha.length < 2) { thisAlpha = "0" + thisAlpha; }
+ color = stopColor.substr(1) + thisAlpha;
+ $('#'+id+'_jGraduate_stopPicker').css({'left': 100, 'bottom': 15}).jPicker({
+ window: { title: "Pick the start color and opacity for the gradient" },
+ images: { clientPath: $settings.images.clientPath },
+ color: { active: color, alphaSupport: true }
+ }, function(color, arg2){
+ stopColor = color.val('hex') ? ('#'+color.val('hex')) : "none";
+ stopOpacity = color.val('a') !== null ? color.val('a')/256 : 1;
+ colorhandle.setAttribute('fill', stopColor);
+ colorhandle.setAttribute('fill-opacity', stopOpacity);
+ stop.setAttribute('stop-color', stopColor);
+ stop.setAttribute('stop-opacity', stopOpacity);
+ $('div.jGraduate_LightBox').hide();
+ $('#'+id+'_jGraduate_stopPicker').hide();
+ }, null, function() {
+ $('div.jGraduate_LightBox').hide();
+ $('#'+id+'_jGraduate_stopPicker').hide();
+ });
+ });
+
+ $(curGradient).find('stop').each(function() {
+ var cur_s = $(this);
+ if(+this.getAttribute('offset') > n) {
+ if(!color) {
+ var newcolor = this.getAttribute('stop-color');
+ var newopac = this.getAttribute('stop-opacity');
+ stop.setAttribute('stop-color', newcolor);
+ path.setAttribute('fill', newcolor);
+ stop.setAttribute('stop-opacity', newopac === null ? 1 : newopac);
+ path.setAttribute('fill-opacity', newopac === null ? 1 : newopac);
+ }
+ cur_s.before(stop);
+ return false;
+ }
+ });
+ if(sel) selectStop(path);
+ return stop;
+ }
+
+ function remStop() {
+ delStop.setAttribute('display', 'none');
+ var path = $(cur_stop);
+ var stop = path.data('stop');
+ var bg = path.data('bg');
+ $([cur_stop, stop, bg]).remove();
+ }
+
+
+ var stops, stopGroup;
+
+ var stopMakerDiv = $('#' + id + '_jGraduate_StopSlider');
+
+ var cur_stop, stopGroup, stopMakerSVG, drag;
+
+ var delStop = mkElem('path',{
+ d:'m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5',
+ fill:'none',
+ stroke:'#D00',
+ 'stroke-width':5,
+ display:'none'
+ }, stopMakerSVG);
+
+
+ function selectStop(item) {
+ if(cur_stop) cur_stop.setAttribute('stroke', '#000');
+ item.setAttribute('stroke', 'blue');
+ cur_stop = item;
+ cur_stop.parentNode.appendChild(cur_stop);
+ // stops = $('stop');
+ // opac_select.val(cur_stop.attr('fill-opacity') || 1);
+ // root.append(delStop);
+ }
+
+ var stop_offset;
+
+ function remDrags() {
+ $win.unbind('mousemove', dragColor);
+ if(delStop.getAttribute('display') !== 'none') {
+ remStop();
+ }
+ drag = null;
+ }
+
+ var scale_x = 1, scale_y = 1, angle = 0;
+ var c_x = cx;
+ var c_y = cy;
+
+ function xform() {
+ var rot = angle?'rotate(' + angle + ',' + c_x + ',' + c_y + ') ':'';
+ if(scale_x === 1 && scale_y === 1) {
+ curGradient.removeAttribute('gradientTransform');
+// $('#ang').addClass('dis');
+ } else {
+ var x = -c_x * (scale_x-1);
+ var y = -c_y * (scale_y-1);
+ curGradient.setAttribute('gradientTransform', rot + 'translate(' + x + ',' + y + ') scale(' + scale_x + ',' + scale_y + ')');
+// $('#ang').removeClass('dis');
+ }
+ }
+
+ function dragColor(evt) {
+
+ var x = evt.pageX - stop_offset.left;
+ var y = evt.pageY - stop_offset.top;
+ x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10: x;
+
+ var xf_str = 'translate(' + x + ', 26)';
+ if(y < -60 || y > 130) {
+ delStop.setAttribute('display', 'block');
+ delStop.setAttribute('transform', xf_str);
+ } else {
+ delStop.setAttribute('display', 'none');
+ }
+
+ drag.setAttribute('transform', xf_str);
+ $.data(drag, 'bg').setAttribute('transform', xf_str);
+ var stop = $.data(drag, 'stop');
+ var s_x = (x - 10) / MAX;
+
+ stop.setAttribute('offset', s_x);
+ var last = 0;
+
+ $(curGradient).find('stop').each(function(i) {
+ var cur = this.getAttribute('offset');
+ var t = $(this);
+ if(cur < last) {
+ t.prev().before(t);
+ stops = $(curGradient).find('stop');
+ }
+ last = cur;
+ });
+
+ }
+
+ stopMakerSVG = mkElem('svg', {
+ width: '100%',
+ height: 45
+ }, stopMakerDiv[0]);
+
+ var trans_pattern = mkElem('pattern', {
+ width: 16,
+ height: 16,
+ patternUnits: 'userSpaceOnUse',
+ id: 'jGraduate_trans'
+ }, stopMakerSVG);
+
+ var trans_img = mkElem('image', {
+ width: 16,
+ height: 16
+ }, trans_pattern);
+
+ var bg_image = $settings.images.clientPath + 'map-opacity.png';
+
+ trans_img.setAttributeNS(ns.xlink, 'xlink:href', bg_image);
+
+ $(stopMakerSVG).click(function(evt) {
+ stop_offset = stopMakerDiv.offset();
+ var target = evt.target;
+ if(target.tagName === 'path') return;
+ var x = evt.pageX - stop_offset.left - 8;
+ x = x < 10 ? 10 : x > MAX + 10 ? MAX + 10: x;
+ mkStop(x / MAX, 0, 0, true);
+ evt.stopPropagation();
+ });
+
+ $(stopMakerSVG).mouseover(function() {
+ stopMakerSVG.appendChild(delStop);
+ });
+
+ stopGroup = mkElem('g', {}, stopMakerSVG);
+
+ mkElem('line', {
+ x1: 10,
+ y1: 15,
+ x2: MAX + 10,
+ y2: 15,
+ 'stroke-width': 2,
+ stroke: '#000'
+ }, stopMakerSVG);
+
+
+ var spreadMethodOpt = gradPicker.find('.jGraduate_spreadMethod').change(function() {
+ curGradient.setAttribute('spreadMethod', $(this).val());
+ });
+
+
+ // handle dragging the stop around the swatch
+ var draggingCoord = null;
+
+ var onCoordDrag = function(evt) {
+ var x = evt.pageX - offset.left;
+ var y = evt.pageY - offset.top;
+
+ // clamp stop to the swatch
+ x = x < 0 ? 0 : x > MAX ? MAX : x;
+ y = y < 0 ? 0 : y > MAX ? MAX : y;
+
+ draggingCoord.css('left', x).css('top', y);
+
+ // calculate stop offset
+ var fracx = x / SIZEX;
+ var fracy = y / SIZEY;
+
+ var type = draggingCoord.data('coord');
+ var grad = curGradient;
+
+ switch ( type ) {
+ case 'start':
+ attr_input.x1.val(fracx);
+ attr_input.y1.val(fracy);
+ grad.setAttribute('x1', fracx);
+ grad.setAttribute('y1', fracy);
+ break;
+ case 'end':
+ attr_input.x2.val(fracx);
+ attr_input.y2.val(fracy);
+ grad.setAttribute('x2', fracx);
+ grad.setAttribute('y2', fracy);
+ break;
+ case 'center':
+ attr_input.cx.val(fracx);
+ attr_input.cy.val(fracy);
+ grad.setAttribute('cx', fracx);
+ grad.setAttribute('cy', fracy);
+ c_x = fracx;
+ c_y = fracy;
+ xform();
+ break;
+ case 'focus':
+ attr_input.fx.val(fracx);
+ attr_input.fy.val(fracy);
+ grad.setAttribute('fx', fracx);
+ grad.setAttribute('fy', fracy);
+ xform();
+ }
+
+ evt.preventDefault();
+ }
+
+ var onCoordUp = function() {
+ draggingCoord = null;
+ $win.unbind('mousemove', onCoordDrag).unbind('mouseup', onCoordUp);
+ }
+
+ // Linear gradient
+// (function() {
+
+
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+
+ // if there are not at least two stops, then
+ if (numstops < 2) {
+ while (numstops < 2) {
+ curGradient.appendChild( document.createElementNS(ns.svg, 'stop') );
+ ++numstops;
+ }
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+ }
+
+ var numstops = stops.length;
+ for(var i = 0; i < numstops; i++) {
+ mkStop(0, 0, 0, 0, stops[i]);
+ }
+
+ spreadMethodOpt.val(curGradient.getAttribute('spreadMethod') || 'pad');
+
+ var offset;
+
+ // No match, so show focus point
+ var showFocus = false;
+
+ previewRect.setAttribute('fill-opacity', gradalpha/100);
+
+
+ $('#' + id + ' div.grad_coord').mousedown(function(evt) {
+ evt.preventDefault();
+ draggingCoord = $(this);
+ var s_pos = draggingCoord.offset();
+ offset = draggingCoord.parent().offset();
+ $win.mousemove(onCoordDrag).mouseup(onCoordUp);
+ });
+
+ // bind GUI elements
+ $('#'+id+'_jGraduate_Ok').bind('click', function() {
+ $this.paint.type = curType;
+ $this.paint[curType] = curGradient.cloneNode(true);;
+ $this.paint.solidColor = null;
+ okClicked();
+ });
+ $('#'+id+'_jGraduate_Cancel').bind('click', function(paint) {
+ cancelClicked();
+ });
+
+ if(curType === 'radialGradient') {
+ if(showFocus) {
+ focusCoord.show();
+ } else {
+ focusCoord.hide();
+ attr_input.fx.val("");
+ attr_input.fy.val("");
+ }
+ }
+
+ $("#" + id + "_jGraduate_match_ctr")[0].checked = !showFocus;
+
+ var lastfx, lastfy;
+
+ $("#" + id + "_jGraduate_match_ctr").change(function() {
+ showFocus = !this.checked;
+ focusCoord.toggle(showFocus);
+ attr_input.fx.val('');
+ attr_input.fy.val('');
+ var grad = curGradient;
+ if(!showFocus) {
+ lastfx = grad.getAttribute('fx');
+ lastfy = grad.getAttribute('fy');
+ grad.removeAttribute('fx');
+ grad.removeAttribute('fy');
+ } else {
+ var fx = lastfx || .5;
+ var fy = lastfy || .5;
+ grad.setAttribute('fx', fx);
+ grad.setAttribute('fy', fy);
+ attr_input.fx.val(fx);
+ attr_input.fy.val(fy);
+ }
+ });
+
+ var stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+ var numstops = stops.length;
+ // if there are not at least two stops, then
+ if (numstops < 2) {
+ while (numstops < 2) {
+ curGradient.appendChild( document.createElementNS(ns.svg, 'stop') );
+ ++numstops;
+ }
+ stops = curGradient.getElementsByTagNameNS(ns.svg, 'stop');
+ }
+
+ var slider;
+
+ var setSlider = function(e) {
+ var offset = slider.offset;
+ var div = slider.parent;
+ var x = (e.pageX - offset.left - parseInt(div.css('border-left-width')));
+ if (x > SLIDERW) x = SLIDERW;
+ if (x <= 0) x = 0;
+ var posx = x - 5;
+ x /= SLIDERW;
+
+ switch ( slider.type ) {
+ case 'radius':
+ x = Math.pow(x * 2, 2.5);
+ if(x > .98 && x < 1.02) x = 1;
+ if (x <= .01) x = .01;
+ curGradient.setAttribute('r', x);
+ break;
+ case 'opacity':
+ $this.paint.alpha = parseInt(x*100);
+ previewRect.setAttribute('fill-opacity', x);
+ break;
+ case 'ellip':
+ scale_x = 1, scale_y = 1;
+ if(x < .5) {
+ x /= .5; // 0.001
+ scale_x = x <= 0 ? .01 : x;
+ } else if(x > .5) {
+ x /= .5; // 2
+ x = 2 - x;
+ scale_y = x <= 0 ? .01 : x;
+ }
+ xform();
+ x -= 1;
+ if(scale_y === x + 1) {
+ x = Math.abs(x);
+ }
+ break;
+ case 'angle':
+ x = x - .5;
+ angle = x *= 180;
+ xform();
+ x /= 100;
+ break;
+ }
+ slider.elem.css({'margin-left':posx});
+ x = Math.round(x*100);
+ slider.input.val(x);
+ };
+
+ var ellip_val = 0, angle_val = 0;
+
+ if(curType === 'radialGradient') {
+ var tlist = curGradient.gradientTransform.baseVal;
+ if(tlist.numberOfItems === 2) {
+ var t = tlist.getItem(0);
+ var s = tlist.getItem(1);
+ if(t.type === 2 && s.type === 3) {
+ var m = s.matrix;
+ if(m.a !== 1) {
+ ellip_val = Math.round(-(1 - m.a) * 100);
+ } else if(m.d !== 1) {
+ ellip_val = Math.round((1 - m.d) * 100);
+ }
+ }
+ } else if(tlist.numberOfItems === 3) {
+ // Assume [R][T][S]
+ var r = tlist.getItem(0);
+ var t = tlist.getItem(1);
+ var s = tlist.getItem(2);
+
+ if(r.type === 4
+ && t.type === 2
+ && s.type === 3) {
+
+ angle_val = Math.round(r.angle);
+ var m = s.matrix;
+ if(m.a !== 1) {
+ ellip_val = Math.round(-(1 - m.a) * 100);
+ } else if(m.d !== 1) {
+ ellip_val = Math.round((1 - m.d) * 100);
+ }
+
+ }
+ }
+ }
+
+ var sliders = {
+ radius: {
+ handle: '#' + id + '_jGraduate_RadiusArrows',
+ input: '#' + id + '_jGraduate_RadiusInput',
+ val: (curGradient.getAttribute('r') || .5) * 100
+ },
+ opacity: {
+ handle: '#' + id + '_jGraduate_OpacArrows',
+ input: '#' + id + '_jGraduate_OpacInput',
+ val: $this.paint.alpha || 100
+ },
+ ellip: {
+ handle: '#' + id + '_jGraduate_EllipArrows',
+ input: '#' + id + '_jGraduate_EllipInput',
+ val: ellip_val
+ },
+ angle: {
+ handle: '#' + id + '_jGraduate_AngleArrows',
+ input: '#' + id + '_jGraduate_AngleInput',
+ val: angle_val
+ }
+ }
+
+ $.each(sliders, function(type, data) {
+ var handle = $(data.handle);
+ handle.mousedown(function(evt) {
+ var parent = handle.parent();
+ slider = {
+ type: type,
+ elem: handle,
+ input: $(data.input),
+ parent: parent,
+ offset: parent.offset()
+ };
+ $win.mousemove(dragSlider).mouseup(stopSlider);
+ evt.preventDefault();
+ });
+
+ $(data.input).val(data.val).change(function() {
+ var val = +this.value;
+ var xpos = 0;
+ var isRad = curType === 'radialGradient';
+ switch ( type ) {
+ case 'radius':
+ if(isRad) curGradient.setAttribute('r', val / 100);
+ xpos = (Math.pow(val / 100, 1 / 2.5) / 2) * SLIDERW;
+ break;
+
+ case 'opacity':
+ $this.paint.alpha = val;
+ previewRect.setAttribute('fill-opacity', val / 100);
+ xpos = val * (SLIDERW / 100);
+ break;
+
+ case 'ellip':
+ scale_x = scale_y = 1;
+ if(val === 0) {
+ xpos = SLIDERW * .5;
+ break;
+ }
+ if(val > 99.5) val = 99.5;
+ if(val > 0) {
+ scale_y = 1 - (val / 100);
+ } else {
+ scale_x = - (val / 100) - 1;
+ }
+
+ xpos = SLIDERW * ((val + 100) / 2) / 100;
+ if(isRad) xform();
+ break;
+
+ case 'angle':
+ angle = val;
+ xpos = angle / 180;
+ xpos += .5;
+ xpos *= SLIDERW;
+ if(isRad) xform();
+ }
+ if(xpos > SLIDERW) {
+ xpos = SLIDERW;
+ } else if(xpos < 0) {
+ xpos = 0;
+ }
+ handle.css({'margin-left': xpos - 5});
+ }).change();
+ });
+
+ var dragSlider = function(evt) {
+ setSlider(evt);
+ evt.preventDefault();
+ };
+
+ var stopSlider = function(evt) {
+ $win.unbind('mousemove', dragSlider).unbind('mouseup', stopSlider);
+ slider = null;
+ };
+
+
+ // --------------
+ var thisAlpha = ($this.paint.alpha*255/100).toString(16);
+ while (thisAlpha.length < 2) { thisAlpha = "0" + thisAlpha; }
+ thisAlpha = thisAlpha.split(".")[0];
+ color = $this.paint.solidColor == "none" ? "" : $this.paint.solidColor + thisAlpha;
+
+ if(!isSolid) {
+ color = stops[0].getAttribute('stop-color');
+ }
+
+ // This should be done somewhere else, probably
+ $.extend($.fn.jPicker.defaults.window, {
+ alphaSupport: true, effects: {type: 'show',speed: 0}
+ });
+
+ colPicker.jPicker(
+ {
+ window: { title: $settings.window.pickerTitle },
+ images: { clientPath: $settings.images.clientPath },
+ color: { active: color, alphaSupport: true }
+ },
+ function(color) {
+ $this.paint.type = "solidColor";
+ $this.paint.alpha = color.val('ahex') ? Math.round((color.val('a') / 255) * 100) : 100;
+ $this.paint.solidColor = color.val('hex') ? color.val('hex') : "none";
+ $this.paint.radialGradient = null;
+ okClicked();
+ },
+ null,
+ function(){ cancelClicked(); }
+ );
+
+
+ var tabs = $(idref + ' .jGraduate_tabs li');
+ tabs.click(function() {
+ tabs.removeClass('jGraduate_tab_current');
+ $(this).addClass('jGraduate_tab_current');
+ $(idref + " > div").hide();
+ var type = $(this).attr('data-type');
+ var container = $(idref + ' .jGraduate_gradPick').show();
+ if(type === 'rg' || type === 'lg') {
+ // Show/hide appropriate fields
+ $('.jGraduate_' + type + '_field').show();
+ $('.jGraduate_' + (type === 'lg' ? 'rg' : 'lg') + '_field').hide();
+
+ $('#' + id + '_jgraduate_rect')[0].setAttribute('fill', 'url(#' + id + '_' + type + '_jgraduate_grad)');
+
+ // Copy stops
+
+ curType = type === 'lg' ? 'linearGradient' : 'radialGradient';
+
+ $('#' + id + '_jGraduate_OpacInput').val($this.paint.alpha).change();
+
+ var newGrad = $('#' + id + '_' + type + '_jgraduate_grad')[0];
+
+ if(curGradient !== newGrad) {
+ var cur_stops = $(curGradient).find('stop');
+ $(newGrad).empty().append(cur_stops);
+ curGradient = newGrad;
+ var sm = spreadMethodOpt.val();
+ curGradient.setAttribute('spreadMethod', sm);
+ }
+ showFocus = type === 'rg' && curGradient.getAttribute('fx') != null && !(cx == fx && cy == fy);
+ $('#' + id + '_jGraduate_focusCoord').toggle(showFocus);
+ if(showFocus) {
+ $('#' + id + '_jGraduate_match_ctr')[0].checked = false;
+ }
+ } else {
+ $(idref + ' .jGraduate_gradPick').hide();
+ $(idref + ' .jGraduate_colPick').show();
+ }
+ });
+ $(idref + " > div").hide();
+ tabs.removeClass('jGraduate_tab_current');
+ var tab;
+ switch ( $this.paint.type ) {
+ case 'linearGradient':
+ tab = $(idref + ' .jGraduate_tab_lingrad');
+ break;
+ case 'radialGradient':
+ tab = $(idref + ' .jGraduate_tab_radgrad');
+ break;
+ default:
+ tab = $(idref + ' .jGraduate_tab_color');
+ break;
+ }
+ $this.show();
+
+ // jPicker will try to show after a 0ms timeout, so need to fire this after that
+ setTimeout(function() {
+ tab.addClass('jGraduate_tab_current').click();
+ }, 10);
+ });
+ };
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jgraduate/jquery.jgraduate.min.js b/files_svgedit/svg-edit/jgraduate/jquery.jgraduate.min.js
new file mode 100644
index 000000000..84144eec9
--- /dev/null
+++ b/files_svgedit/svg-edit/jgraduate/jquery.jgraduate.min.js
@@ -0,0 +1,37 @@
+(function(){function r(i,z,t){i=document.createElementNS(A.svg,i);if(Ba)for(var B in z)i.setAttribute(B,z[B]);else for(B in z){var W=z[B],w=i[B];if(w&&w.constructor==="SVGLength")w.baseVal.value=W;else i.setAttribute(B,W)}t&&t.appendChild(i);return i}var A={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};if(!window.console)window.console=new function(){this.log=function(){};this.dir=function(){}};$.jGraduate={Paint:function(i){i=i||{};this.alpha=isNaN(i.alpha)?100:i.alpha;if(i.copy){this.type=
+i.copy.type;this.alpha=i.copy.alpha;this.radialGradient=this.linearGradient=this.solidColor=null;switch(this.type){case "solidColor":this.solidColor=i.copy.solidColor;break;case "linearGradient":this.linearGradient=i.copy.linearGradient.cloneNode(true);break;case "radialGradient":this.radialGradient=i.copy.radialGradient.cloneNode(true)}}else if(i.linearGradient){this.type="linearGradient";this.radialGradient=this.solidColor=null;this.linearGradient=i.linearGradient.cloneNode(true)}else if(i.radialGradient){this.type=
+"radialGradient";this.linearGradient=this.solidColor=null;this.radialGradient=i.radialGradient.cloneNode(true)}else if(i.solidColor){this.type="solidColor";this.solidColor=i.solidColor}else{this.type="none";this.radialGradient=this.linearGradient=this.solidColor=null}}};jQuery.fn.jGraduateDefaults={paint:new $.jGraduate.Paint,window:{pickerTitle:"Drag markers to pick a paint"},images:{clientPath:"images/"},newstop:"inverse"};var Ba=navigator.userAgent.indexOf("Gecko/")>=0;jQuery.fn.jGraduate=function(i){var z=
+arguments;return this.each(function(){function t(c,a,d,h,f){var l=f||r("stop",{"stop-color":a,"stop-opacity":d,offset:c},g);if(f){a=f.getAttribute("stop-color");d=f.getAttribute("stop-opacity");c=f.getAttribute("offset")}else g.appendChild(l);if(d===null)d=1;f=r("path",{d:"M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z",fill:"url(#jGraduate_trans)",transform:"translate("+(10+c*j)+", 26)"},fa);var X=r("path",{d:"M-6.2,0.9c3.6-4,6.7-4.3,6.7-12.4c-0.2,7.9,3.1,8.8,6.5,12.4c3.5,3.8,2.9,9.6,0,12.3c-3.1,2.8-10.4,2.7-13.2,0C-9.6,9.9-9.4,4.4-6.2,0.9z",
+fill:a,"fill-opacity":d,transform:"translate("+(10+c*j)+", 26)",stroke:"#000","stroke-width":1.5},fa);$(X).mousedown(function(M){B(this);R=F;N.mousemove(la).mouseup(W);S=ga.offset();M.preventDefault();return false}).data("stop",l).data("bg",f).dblclick(function(){$("div.jGraduate_LightBox").show();for(var M=this,I=+l.getAttribute("stop-opacity")||1,C=l.getAttribute("stop-color")||1,Y=(parseFloat(I)*255).toString(16);Y.length<2;)Y="0"+Y;a=C.substr(1)+Y;$("#"+b+"_jGraduate_stopPicker").css({left:100,
+bottom:15}).jPicker({window:{title:"Pick the start color and opacity for the gradient"},images:{clientPath:o.images.clientPath},color:{active:a,alphaSupport:true}},function(Z){C=Z.val("hex")?"#"+Z.val("hex"):"none";I=Z.val("a")!==null?Z.val("a")/256:1;M.setAttribute("fill",C);M.setAttribute("fill-opacity",I);l.setAttribute("stop-color",C);l.setAttribute("stop-opacity",I);$("div.jGraduate_LightBox").hide();$("#"+b+"_jGraduate_stopPicker").hide()},null,function(){$("div.jGraduate_LightBox").hide();
+$("#"+b+"_jGraduate_stopPicker").hide()})});$(g).find("stop").each(function(){var M=$(this);if(+this.getAttribute("offset")>c){if(!a){var I=this.getAttribute("stop-color"),C=this.getAttribute("stop-opacity");l.setAttribute("stop-color",I);X.setAttribute("fill",I);l.setAttribute("stop-opacity",C===null?1:C);X.setAttribute("fill-opacity",C===null?1:C)}M.before(l);return false}});h&&B(X);return l}function B(c){F&&F.setAttribute("stroke","#000");c.setAttribute("stroke","blue");F=c;F.parentNode.appendChild(F)}
+function W(){N.unbind("mousemove",la);if(O.getAttribute("display")!=="none"){O.setAttribute("display","none");var c=$(F),a=c.data("stop");c=c.data("bg");$([F,a,c]).remove()}R=null}function w(){var c=T?"rotate("+T+","+ha+","+ia+") ":"";J===1&&G===1?g.removeAttribute("gradientTransform"):g.setAttribute("gradientTransform",c+"translate("+-ha*(J-1)+","+-ia*(G-1)+") scale("+J+","+G+")")}function la(c){var a=c.pageX-S.left;c=c.pageY-S.top;a=a<10?10:a>j+10?j+10:a;var d="translate("+a+", 26)";if(c<-60||c>
+130){O.setAttribute("display","block");O.setAttribute("transform",d)}else O.setAttribute("display","none");R.setAttribute("transform",d);$.data(R,"bg").setAttribute("transform",d);$.data(R,"stop").setAttribute("offset",(a-10)/j);var h=0;$(g).find("stop").each(function(){var f=this.getAttribute("offset"),l=$(this);if(f<h){l.prev().before(l);D=$(g).find("stop")}h=f})}var e=$(this),o=$.extend(true,{},jQuery.fn.jGraduateDefaults,i),b=e.attr("id"),s="#"+e.attr("id")+" ";if(s){var ma=function(){switch(e.paint.type){case "radialGradient":e.paint.linearGradient=
+null;break;case "linearGradient":e.paint.radialGradient=null;break;case "solidColor":e.paint.radialGradient=e.paint.linearGradient=null}$.isFunction(e.okCallback)&&e.okCallback(e.paint);e.hide()},na=function(){$.isFunction(e.cancelCallback)&&e.cancelCallback();e.hide()};$.extend(true,e,{paint:new $.jGraduate.Paint({copy:o.paint}),okCallback:$.isFunction(z[1])&&z[1]||null,cancelCallback:$.isFunction(z[2])&&z[2]||null});e.position();var u=null,N=$(window);if(e.paint.type=="none")e.paint=$.jGraduate.Paint({solidColor:"ffffff"});
+e.addClass("jGraduate_Picker");e.html('<ul class="jGraduate_tabs"><li class="jGraduate_tab_color jGraduate_tab_current" data-type="col">Solid Color</li><li class="jGraduate_tab_lingrad" data-type="lg">Linear Gradient</li><li class="jGraduate_tab_radgrad" data-type="rg">Radial Gradient</li></ul><div class="jGraduate_colPick"></div><div class="jGraduate_gradPick"></div><div class="jGraduate_LightBox"></div><div id="'+b+'_jGraduate_stopPicker" class="jGraduate_stopPicker"></div>');var Ca=$(s+"> .jGraduate_colPick"),
+n=$(s+"> .jGraduate_gradPick");n.html('<div id="'+b+'_jGraduate_Swatch" class="jGraduate_Swatch"><h2 class="jGraduate_Title">'+o.window.pickerTitle+'</h2><div id="'+b+'_jGraduate_GradContainer" class="jGraduate_GradContainer"></div><div id="'+b+'_jGraduate_StopSlider" class="jGraduate_StopSlider"></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_lg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Begin Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+
+b+'_jGraduate_x1" size="3" title="Enter starting x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+b+'_jGraduate_y1" size="3" title="Enter starting y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">End Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+b+'_jGraduate_x2" size="3" title="Enter ending x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+
+b+'_jGraduate_y2" size="3" title="Enter ending y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_Form jGraduate_Points jGraduate_rg_field"><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Center Point</label><div class="jGraduate_Form_Section"><label>x:</label><input type="text" id="'+b+'_jGraduate_cx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+b+'_jGraduate_cy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div><div class="jGraduate_StopSection"><label class="jGraduate_Form_Heading">Focal Point</label><div class="jGraduate_Form_Section"><label>Match center: <input type="checkbox" checked="checked" id="'+
+b+'_jGraduate_match_ctr"/></label><br/><label>x:</label><input type="text" id="'+b+'_jGraduate_fx" size="3" title="Enter x value between 0.0 and 1.0"/><label> y:</label><input type="text" id="'+b+'_jGraduate_fy" size="3" title="Enter y value between 0.0 and 1.0"/></div></div></div><div class="jGraduate_StopSection jGraduate_SpreadMethod"><label class="jGraduate_Form_Heading">Spread method</label><div class="jGraduate_Form_Section"><select class="jGraduate_spreadMethod"><option value=pad selected>Pad</option><option value=reflect>Reflect</option><option value=repeat>Repeat</option></select></div></div><div class="jGraduate_Form"><div class="jGraduate_Slider jGraduate_RadiusField jGraduate_rg_field"><label class="prelabel">Radius:</label><div id="'+
+b+'_jGraduate_Radius" class="jGraduate_SliderBar jGraduate_Radius" title="Click to set radius"><img id="'+b+'_jGraduate_RadiusArrows" class="jGraduate_RadiusArrows" src="'+o.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_RadiusInput" size="3" value="100"/>%</label></div><div class="jGraduate_Slider jGraduate_EllipField jGraduate_rg_field"><label class="prelabel">Ellip:</label><div id="'+b+'_jGraduate_Ellip" class="jGraduate_SliderBar jGraduate_Ellip" title="Click to set Ellip"><img id="'+
+b+'_jGraduate_EllipArrows" class="jGraduate_EllipArrows" src="'+o.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_EllipInput" size="3" value="0"/>%</label></div><div class="jGraduate_Slider jGraduate_AngleField jGraduate_rg_field"><label class="prelabel">Angle:</label><div id="'+b+'_jGraduate_Angle" class="jGraduate_SliderBar jGraduate_Angle" title="Click to set Angle"><img id="'+b+'_jGraduate_AngleArrows" class="jGraduate_AngleArrows" src="'+o.images.clientPath+
+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_AngleInput" size="3" value="0"/>deg</label></div><div class="jGraduate_Slider jGraduate_OpacField"><label class="prelabel">Opac:</label><div id="'+b+'_jGraduate_Opac" class="jGraduate_SliderBar jGraduate_Opac" title="Click to set Opac"><img id="'+b+'_jGraduate_OpacArrows" class="jGraduate_OpacArrows" src="'+o.images.clientPath+'rangearrows2.gif"></div><label><input type="text" id="'+b+'_jGraduate_OpacInput" size="3" value="100"/>%</label></div></div><div class="jGraduate_OkCancel"><input type="button" id="'+
+b+'_jGraduate_Ok" class="jGraduate_Ok" value="OK"/><input type="button" id="'+b+'_jGraduate_Cancel" class="jGraduate_Cancel" value="Cancel"/></div>');var j=256,oa=j-0,pa=j-0,p,g,aa,q={};$(".jGraduate_SliderBar").width(145);var x=$("#"+b+"_jGraduate_GradContainer")[0],m=r("svg",{id:b+"_jgraduate_svg",width:j,height:j,xmlns:A.svg},x);p=p||e.paint.type;var v=g=e.paint[p],U=e.paint.alpha,ba=p==="solidColor";switch(p){case "solidColor":case "linearGradient":if(!ba){g.id=b+"_lg_jgraduate_grad";v=g=m.appendChild(g)}r("radialGradient",
+{id:b+"_rg_jgraduate_grad"},m);if(p==="linearGradient")break;case "radialGradient":if(!ba){g.id=b+"_rg_jgraduate_grad";v=g=m.appendChild(g)}r("linearGradient",{id:b+"_lg_jgraduate_grad"},m)}if(ba){v=g=$("#"+b+"_lg_jgraduate_grad")[0];u=e.paint[p];t(0,"#"+u,1);var K=typeof o.newstop;if(K==="string")switch(o.newstop){case "same":t(1,"#"+u,1);break;case "inverse":K="";for(var y=0;y<6;y+=2){u.substr(y,2);var P=(255-parseInt(u.substr(y,2),16)).toString(16);if(P.length<2)P=0+P;K+=P}t(1,"#"+K,1);break;case "white":t(1,
+"#ffffff",1);break;case "black":t(1,"#000000",1)}else if(K==="object")t(1,o.newstop.color||"#"+u,"opac"in o.newstop?o.newstop.opac:1)}u=parseFloat(v.getAttribute("x1")||0);K=parseFloat(v.getAttribute("y1")||0);y=parseFloat(v.getAttribute("x2")||1);P=parseFloat(v.getAttribute("y2")||0);var ca=parseFloat(v.getAttribute("cx")||0.5),da=parseFloat(v.getAttribute("cy")||0.5),qa=parseFloat(v.getAttribute("fx")||ca),ra=parseFloat(v.getAttribute("fy")||da);aa=r("rect",{id:b+"_jgraduate_rect",x:0,y:0,width:oa,
+height:pa,fill:"url(#"+b+"_jgraduate_grad)","fill-opacity":U/100},m);var sa=$("<div/>").attr({"class":"grad_coord jGraduate_lg_field",title:"Begin Stop"}).text(1).css({top:K*j,left:u*j}).data("coord","start").appendTo(x),Da=sa.clone().text(2).css({top:P*j,left:y*j}).attr("title","End stop").data("coord","end").appendTo(x),ta=$("<div/>").attr({"class":"grad_coord jGraduate_rg_field",title:"Center stop"}).text("C").css({top:da*j,left:ca*j}).data("coord","center").appendTo(x),V=ta.clone().text("F").css({top:ra*
+j,left:qa*j,display:"none"}).attr("title","Focus point").data("coord","focus").appendTo(x);V[0].id=b+"_jGraduate_focusCoord";$(s+" .grad_coord");$.each(["x1","y1","x2","y2","cx","cy","fx","fy"],function(c,a){var d=g.getAttribute(a),h=isNaN(a[1]);d||(d=h?"0.5":a==="x2"?"1.0":"0.0");q[a]=$("#"+b+"_jGraduate_"+a).val(d).change(function(){if(isNaN(parseFloat(this.value))||this.value<0)this.value=0;else if(this.value>1)this.value=1;if(!(a[0]==="f"&&!E))if(h&&p==="radialGradient"||!h&&p==="linearGradient")g.setAttribute(a,
+this.value);var f=h?a[0]==="c"?ta:V:a[1]==="1"?sa:Da,l=a.indexOf("x")>=0?"left":"top";f.css(l,this.value*j)}).change()});var D,fa,ga=$("#"+b+"_jGraduate_StopSlider"),F,H,R,O=r("path",{d:"m9.75,-6l-19.5,19.5m0,-19.5l19.5,19.5",fill:"none",stroke:"#D00","stroke-width":5,display:"none"},H),S,J=1,G=1,T=0,ha=ca,ia=da;H=r("svg",{width:"100%",height:45},ga[0]);x=r("pattern",{width:16,height:16,patternUnits:"userSpaceOnUse",id:"jGraduate_trans"},H);r("image",{width:16,height:16},x).setAttributeNS(A.xlink,
+"xlink:href",o.images.clientPath+"map-opacity.png");$(H).click(function(c){S=ga.offset();if(c.target.tagName!=="path"){var a=c.pageX-S.left-8;a=a<10?10:a>j+10?j+10:a;t(a/j,0,0,true);c.stopPropagation()}});$(H).mouseover(function(){H.appendChild(O)});fa=r("g",{},H);r("line",{x1:10,y1:15,x2:j+10,y2:15,"stroke-width":2,stroke:"#000"},H);var ua=n.find(".jGraduate_spreadMethod").change(function(){g.setAttribute("spreadMethod",$(this).val())}),Q=null,va=function(c){var a=c.pageX-ja.left,d=c.pageY-ja.top;
+a=a<0?0:a>j?j:a;d=d<0?0:d>j?j:d;Q.css("left",a).css("top",d);a=a/oa;d=d/pa;var h=Q.data("coord"),f=g;switch(h){case "start":q.x1.val(a);q.y1.val(d);f.setAttribute("x1",a);f.setAttribute("y1",d);break;case "end":q.x2.val(a);q.y2.val(d);f.setAttribute("x2",a);f.setAttribute("y2",d);break;case "center":q.cx.val(a);q.cy.val(d);f.setAttribute("cx",a);f.setAttribute("cy",d);ha=a;ia=d;w();break;case "focus":q.fx.val(a);q.fy.val(d);f.setAttribute("fx",a);f.setAttribute("fy",d);w()}c.preventDefault()},wa=
+function(){Q=null;N.unbind("mousemove",va).unbind("mouseup",wa)};D=g.getElementsByTagNameNS(A.svg,"stop");if(k<2){for(;k<2;){g.appendChild(document.createElementNS(A.svg,"stop"));++k}D=g.getElementsByTagNameNS(A.svg,"stop")}var k=D.length;for(y=0;y<k;y++)t(0,0,0,0,D[y]);ua.val(g.getAttribute("spreadMethod")||"pad");var ja,E=false;aa.setAttribute("fill-opacity",U/100);$("#"+b+" div.grad_coord").mousedown(function(c){c.preventDefault();Q=$(this);Q.offset();ja=Q.parent().offset();N.mousemove(va).mouseup(wa)});
+$("#"+b+"_jGraduate_Ok").bind("click",function(){e.paint.type=p;e.paint[p]=g.cloneNode(true);e.paint.solidColor=null;ma()});$("#"+b+"_jGraduate_Cancel").bind("click",function(){na()});if(p==="radialGradient")if(E)V.show();else{V.hide();q.fx.val("");q.fy.val("")}$("#"+b+"_jGraduate_match_ctr")[0].checked=!E;var xa,ya;$("#"+b+"_jGraduate_match_ctr").change(function(){E=!this.checked;V.toggle(E);q.fx.val("");q.fy.val("");var c=g;if(E){var a=xa||0.5,d=ya||0.5;c.setAttribute("fx",a);c.setAttribute("fy",
+d);q.fx.val(a);q.fy.val(d)}else{xa=c.getAttribute("fx");ya=c.getAttribute("fy");c.removeAttribute("fx");c.removeAttribute("fy")}});D=g.getElementsByTagNameNS(A.svg,"stop");k=D.length;if(k<2){for(;k<2;){g.appendChild(document.createElementNS(A.svg,"stop"));++k}D=g.getElementsByTagNameNS(A.svg,"stop")}var L;U=n=0;if(p==="radialGradient"){m=g.gradientTransform.baseVal;if(m.numberOfItems===2){k=m.getItem(0);m=m.getItem(1);if(k.type===2&&m.type===3){k=m.matrix;if(k.a!==1)n=Math.round(-(1-k.a)*100);else if(k.d!==
+1)n=Math.round((1-k.d)*100)}}else if(m.numberOfItems===3){x=m.getItem(0);k=m.getItem(1);m=m.getItem(2);if(x.type===4&&k.type===2&&m.type===3){U=Math.round(x.angle);k=m.matrix;if(k.a!==1)n=Math.round(-(1-k.a)*100);else if(k.d!==1)n=Math.round((1-k.d)*100)}}}n={radius:{handle:"#"+b+"_jGraduate_RadiusArrows",input:"#"+b+"_jGraduate_RadiusInput",val:(g.getAttribute("r")||0.5)*100},opacity:{handle:"#"+b+"_jGraduate_OpacArrows",input:"#"+b+"_jGraduate_OpacInput",val:e.paint.alpha||100},ellip:{handle:"#"+
+b+"_jGraduate_EllipArrows",input:"#"+b+"_jGraduate_EllipInput",val:n},angle:{handle:"#"+b+"_jGraduate_AngleArrows",input:"#"+b+"_jGraduate_AngleInput",val:U}};$.each(n,function(c,a){var d=$(a.handle);d.mousedown(function(h){var f=d.parent();L={type:c,elem:d,input:$(a.input),parent:f,offset:f.offset()};N.mousemove(za).mouseup(Aa);h.preventDefault()});$(a.input).val(a.val).change(function(){var h=+this.value,f=0,l=p==="radialGradient";switch(c){case "radius":l&&g.setAttribute("r",h/100);f=Math.pow(h/
+100,0.4)/2*145;break;case "opacity":e.paint.alpha=h;aa.setAttribute("fill-opacity",h/100);f=h*1.45;break;case "ellip":J=G=1;if(h===0){f=72.5;break}if(h>99.5)h=99.5;if(h>0)G=1-h/100;else J=-(h/100)-1;f=145*((h+100)/2)/100;l&&w();break;case "angle":T=h;f=T/180;f+=0.5;f*=145;l&&w()}if(f>145)f=145;else if(f<0)f=0;d.css({"margin-left":f-5})}).change()});var za=function(c){var a=c.pageX-L.offset.left-parseInt(L.parent.css("border-left-width"));if(a>145)a=145;if(a<=0)a=0;var d=a-5;a/=145;switch(L.type){case "radius":a=
+Math.pow(a*2,2.5);if(a>0.98&&a<1.02)a=1;if(a<=0.01)a=0.01;g.setAttribute("r",a);break;case "opacity":e.paint.alpha=parseInt(a*100);aa.setAttribute("fill-opacity",a);break;case "ellip":G=J=1;if(a<0.5){a/=0.5;J=a<=0?0.01:a}else if(a>0.5){a/=0.5;a=2-a;G=a<=0?0.01:a}w();a-=1;if(G===a+1)a=Math.abs(a);break;case "angle":a-=0.5;T=a*=180;w();a/=100}L.elem.css({"margin-left":d});a=Math.round(a*100);L.input.val(a);c.preventDefault()},Aa=function(){N.unbind("mousemove",za).unbind("mouseup",Aa);L=null};for(n=
+(e.paint.alpha*255/100).toString(16);n.length<2;)n="0"+n;n=n.split(".")[0];u=e.paint.solidColor=="none"?"":e.paint.solidColor+n;ba||(u=D[0].getAttribute("stop-color"));$.extend($.fn.jPicker.defaults.window,{alphaSupport:true,effects:{type:"show",speed:0}});Ca.jPicker({window:{title:o.window.pickerTitle},images:{clientPath:o.images.clientPath},color:{active:u,alphaSupport:true}},function(c){e.paint.type="solidColor";e.paint.alpha=c.val("ahex")?Math.round(c.val("a")/255*100):100;e.paint.solidColor=
+c.val("hex")?c.val("hex"):"none";e.paint.radialGradient=null;ma()},null,function(){na()});var ka=$(s+" .jGraduate_tabs li");ka.click(function(){ka.removeClass("jGraduate_tab_current");$(this).addClass("jGraduate_tab_current");$(s+" > div").hide();var c=$(this).attr("data-type");$(s+" .jGraduate_gradPick").show();if(c==="rg"||c==="lg"){$(".jGraduate_"+c+"_field").show();$(".jGraduate_"+(c==="lg"?"rg":"lg")+"_field").hide();$("#"+b+"_jgraduate_rect")[0].setAttribute("fill","url(#"+b+"_"+c+"_jgraduate_grad)");
+p=c==="lg"?"linearGradient":"radialGradient";$("#"+b+"_jGraduate_OpacInput").val(e.paint.alpha).change();var a=$("#"+b+"_"+c+"_jgraduate_grad")[0];if(g!==a){var d=$(g).find("stop");$(a).empty().append(d);g=a;a=ua.val();g.setAttribute("spreadMethod",a)}E=c==="rg"&&g.getAttribute("fx")!=null&&!(ca==qa&&da==ra);$("#"+b+"_jGraduate_focusCoord").toggle(E);if(E)$("#"+b+"_jGraduate_match_ctr")[0].checked=false}else{$(s+" .jGraduate_gradPick").hide();$(s+" .jGraduate_colPick").show()}});$(s+" > div").hide();
+ka.removeClass("jGraduate_tab_current");var ea;switch(e.paint.type){case "linearGradient":ea=$(s+" .jGraduate_tab_lingrad");break;case "radialGradient":ea=$(s+" .jGraduate_tab_radgrad");break;default:ea=$(s+" .jGraduate_tab_color")}e.show();setTimeout(function(){ea.addClass("jGraduate_tab_current").click()},10)}else alert("Container element must have an id attribute to maintain unique id strings for sub-elements.")})}})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquery-ui/.svn/all-wcprops b/files_svgedit/svg-edit/jquery-ui/.svn/all-wcprops
new file mode 100644
index 000000000..f10e3d9c7
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/2052/trunk/editor/jquery-ui
+END
+jquery-ui-1.8.custom.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/!svn/ver/1984/trunk/editor/jquery-ui/jquery-ui-1.8.custom.min.js
+END
+jquery-ui-1.8.17.custom.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2052/trunk/editor/jquery-ui/jquery-ui-1.8.17.custom.min.js
+END
diff --git a/files_svgedit/svg-edit/jquery-ui/.svn/entries b/files_svgedit/svg-edit/jquery-ui/.svn/entries
new file mode 100644
index 000000000..bb489cd88
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/jquery-ui
+http://svg-edit.googlecode.com/svn
+
+
+
+2012-02-23T02:48:21.539764Z
+2052
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jquery-ui-1.8.custom.min.js
+file
+
+
+
+
+2012-03-25T18:41:39.604316Z
+6f7efed710692754d5b9c581df38dc10
+2011-02-09T06:14:47.166399Z
+1984
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+38744
+
+jquery-ui-1.8.17.custom.min.js
+file
+
+
+
+
+2012-03-25T18:41:39.604316Z
+bccd307793225e81186b09bc25110163
+2012-02-23T02:48:21.539764Z
+2052
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+39216
+
diff --git a/files_svgedit/svg-edit/jquery-ui/.svn/prop-base/jquery-ui-1.8.custom.min.js.svn-base b/files_svgedit/svg-edit/jquery-ui/.svn/prop-base/jquery-ui-1.8.custom.min.js.svn-base
new file mode 100644
index 000000000..931becff8
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/.svn/prop-base/jquery-ui-1.8.custom.min.js.svn-base
@@ -0,0 +1,9 @@
+K 14
+svn:executable
+V 1
+*
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.17.custom.min.js.svn-base b/files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.17.custom.min.js.svn-base
new file mode 100644
index 000000000..1a8ef1acd
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.17.custom.min.js.svn-base
@@ -0,0 +1,54 @@
+/*!
+ * jQuery UI 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.17",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
+ * jQuery UI Widget 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
+ * jQuery UI Draggable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute"));return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.17"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!!e.length){var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);/*
+ * jQuery UI Slider 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=!0,f=a(this).data("index.ui-slider-handle"),g,h,i,j;if(!b.options.disabled){switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:e=!1;if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),g=b._start(d,f);if(g===!1)return}}j=b.options.step,b.options.values&&b.options.values.length?h=i=b.values(f):h=i=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:i=b._valueMin();break;case a.ui.keyCode.END:i=b._valueMax();break;case a.ui.keyCode.PAGE_UP:i=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:i=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(h===b._valueMax())return;i=b._trimAlignValue(h+j);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(h===b._valueMin())return;i=b._trimAlignValue(h-j)}b._slide(d,f,i);return e}}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length)this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);else return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()}},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;a=this._trimAlignValue(a);return a},_values:function(a){var b,c,d;if(arguments.length){b=this.options.values[a],b=this._trimAlignValue(b);return b}c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.17"})})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.custom.min.js.svn-base b/files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.custom.min.js.svn-base
new file mode 100644
index 000000000..6e6602160
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/.svn/text-base/jquery-ui-1.8.custom.min.js.svn-base
@@ -0,0 +1,84 @@
+/*!
+ * jQuery UI 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ *//*
+ * jQuery UI 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(a){a.ui={version:"1.8",plugin:{add:function(c,d,f){var e=a.ui[c].prototype;for(var b in f){e.plugins[b]=e.plugins[b]||[];e.plugins[b].push([d,f[b]])}},call:function(b,d,c){var f=b.plugins[d];if(!f||!b.element[0].parentNode){return}for(var e=0;e<f.length;e++){if(b.options[f[e][0]]){f[e][1].apply(b.element,c)}}}},contains:function(d,c){return document.compareDocumentPosition?d.compareDocumentPosition(c)&16:d!==c&&d.contains(c)},hasScroll:function(e,c){if(a(e).css("overflow")=="hidden"){return false}var b=(c&&c=="left")?"scrollLeft":"scrollTop",d=false;if(e[b]>0){return true}e[b]=1;d=(e[b]>0);e[b]=0;return d},isOverAxis:function(c,b,d){return(c>b)&&(c<(b+d))},isOver:function(g,c,f,e,b,d){return a.ui.isOverAxis(g,f,b)&&a.ui.isOverAxis(c,e,d)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};a.fn.extend({_focus:a.fn.focus,focus:function(b,c){return typeof b==="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus();(c&&c.call(d))},b)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var b;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){b=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{b=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!b.length?a(document):b},zIndex:function(e){if(e!==undefined){return this.css("zIndex",e)}if(this.length){var c=a(this[0]),b,d;while(c.length&&c[0]!==document){b=c.css("position");if(b=="absolute"||b=="relative"||b=="fixed"){d=parseInt(c.css("zIndex"));if(!isNaN(d)&&d!=0){return d}}c=c.parent()}}return 0}});a.extend(a.expr[":"],{data:function(d,c,b){return !!a.data(d,b[3])},focusable:function(c){var d=c.nodeName.toLowerCase(),b=a.attr(c,"tabindex");return(/input|select|textarea|button|object/.test(d)?!c.disabled:"a"==d||"area"==d?c.href||!isNaN(b):!isNaN(b))&&!a(c)["area"==d?"parents":"closest"](":hidden").length},tabbable:function(c){var b=a.attr(c,"tabindex");return(isNaN(b)||b>=0)&&a(c).is(":focusable")}})})(jQuery);;/*!
+ * jQuery UI Widget 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Widget
+ *//*
+ * jQuery UI Widget 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b){var a=b.fn.remove;b.fn.remove=function(c,d){return this.each(function(){if(!d){if(!c||b.filter(c,[this]).length){b("*",this).add(this).each(function(){b(this).triggerHandler("remove")})}}return a.call(b(this),c,d)})};b.widget=function(d,f,c){var e=d.split(".")[0],h;d=d.split(".")[1];h=e+"-"+d;if(!c){c=f;f=b.Widget}b.expr[":"][h]=function(i){return !!b.data(i,d)};b[e]=b[e]||{};b[e][d]=function(i,j){if(arguments.length){this._createWidget(i,j)}};var g=new f();g.options=b.extend({},g.options);b[e][d].prototype=b.extend(true,g,{namespace:e,widgetName:d,widgetEventPrefix:b[e][d].prototype.widgetEventPrefix||d,widgetBaseClass:h},c);b.widget.bridge(d,b[e][d])};b.widget.bridge=function(d,c){b.fn[d]=function(g){var e=typeof g==="string",f=Array.prototype.slice.call(arguments,1),h=this;g=!e&&f.length?b.extend.apply(null,[true,g].concat(f)):g;if(e&&g.substring(0,1)==="_"){return h}if(e){this.each(function(){var i=b.data(this,d),j=i&&b.isFunction(i[g])?i[g].apply(i,f):i;if(j!==i&&j!==undefined){h=j;return false}})}else{this.each(function(){var i=b.data(this,d);if(i){if(g){i.option(g)}i._init()}else{b.data(this,d,new c(g,this))}})}return h}};b.Widget=function(c,d){if(arguments.length){this._createWidget(c,d)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(d,e){this.element=b(e).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(e)[this.widgetName],d);var c=this;this.element.bind("remove."+this.widgetName,function(){c.destroy()});this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled")},widget:function(){return this.element},option:function(e,f){var d=e,c=this;if(arguments.length===0){return b.extend({},c.options)}if(typeof e==="string"){if(f===undefined){return this.options[e]}d={};d[e]=f}b.each(d,function(g,h){c._setOption(g,h)});return c},_setOption:function(c,d){this.options[c]=d;if(c==="disabled"){this.widget()[d?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",d)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(d,e,f){var h=this.options[d];e=b.Event(e);e.type=(d===this.widgetEventPrefix?d:this.widgetEventPrefix+d).toLowerCase();f=f||{};if(e.originalEvent){for(var c=b.event.props.length,g;c;){g=b.event.props[--c];e[g]=e.originalEvent[g]}}this.element.trigger(e,f);return !(b.isFunction(h)&&h.call(this.element[0],e,f)===false||e.isDefaultPrevented())}}})(jQuery);;/*!
+ * jQuery UI Mouse 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ *//*
+ * jQuery UI Mouse 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(c){return b._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(b._preventClickEvent){b._preventClickEvent=false;c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(d){d.originalEvent=d.originalEvent||{};if(d.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(d));this._mouseDownEvent=d;var c=this,e=(d.which==1),b=(typeof this.options.cancel=="string"?a(d.target).parents().add(d.target).filter(this.options.cancel).length:false);if(!e||b||!this._mouseCapture(d)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(d)!==false);if(!this._mouseStarted){d.preventDefault();return true}}this._mouseMoveDelegate=function(f){return c._mouseMove(f)};this._mouseUpDelegate=function(f){return c._mouseUp(f)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(a.browser.safari||d.preventDefault());d.originalEvent.mouseHandled=true;return true},_mouseMove:function(b){if(a.browser.msie&&!b.button){return this._mouseUp(b)}if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,b)!==false);(this._mouseStarted?this._mouseDrag(b):this._mouseUp(b))}return !this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(b.target==this._mouseDownEvent.target);this._mouseStop(b)}return false},_mouseDistanceMet:function(b){return(Math.max(Math.abs(this._mouseDownEvent.pageX-b.pageX),Math.abs(this._mouseDownEvent.pageY-b.pageY))>=this.options.distance)},_mouseDelayMet:function(b){return this.mouseDelayMet},_mouseStart:function(b){},_mouseDrag:function(b){},_mouseStop:function(b){},_mouseCapture:function(b){return true}})})(jQuery);;/*
+ * jQuery UI Draggable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;(c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt));if(c.containment){this._setContainment()}if(this._trigger("start",b)===false){this._clear();return false}this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();if(this._trigger("drag",b,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode){return false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){if(b._trigger("stop",c)!==false){b._clear()}})}else{if(this._trigger("stop",c)!==false){this._clear()}}return false},cancel:function(){if(this.helper.is(".ui-draggable-dragging")){this._mouseUp({})}else{this._clear()}return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(typeof b=="string"){b=b.split(" ")}if(a.isArray(b)){b={left:+b[0],top:+b[1]||0}}if("left" in b){this.offset.click.left=b.left+this.margins.left}if("right" in b){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if("top" in b){this.offset.click.top=b.top+this.margins.top}if("bottom" in b){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(c,d){var f=a(this).data("draggable").options;var e=a.makeArray(a(f.stack)).sort(function(h,g){return(parseInt(a(h).css("zIndex"),10)||0)-(parseInt(a(g).css("zIndex"),10)||0)});if(!e.length){return}var b=parseInt(e[0].style.zIndex)||0;a(e).each(function(g){this.style.zIndex=b+g});this[0].style.zIndex=b+e.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
+ * jQuery UI Slider 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(b){var a=5;b.widget("ui.slider",b.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options;this._keySliding=false;this._mouseSliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");if(d.disabled){this.element.addClass("ui-slider-disabled ui-disabled")}this.range=b([]);if(d.range){if(d.range===true){this.range=b("<div></div>");if(!d.values){d.values=[this._valueMin(),this._valueMin()]}if(d.values.length&&d.values.length!=2){d.values=[d.values[0],d.values[0]]}}else{this.range=b("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(d.range=="min"||d.range=="max"){this.range.addClass("ui-slider-range-"+d.range)}this.range.addClass("ui-widget-header")}if(b(".ui-slider-handle",this.element).length==0){b('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(d.values&&d.values.length){while(b(".ui-slider-handle",this.element).length<d.values.length){b('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=b(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(e){e.preventDefault()}).hover(function(){if(!d.disabled){b(this).addClass("ui-state-hover")}},function(){b(this).removeClass("ui-state-hover")}).focus(function(){if(!d.disabled){b(".ui-slider .ui-state-focus").removeClass("ui-state-focus");b(this).addClass("ui-state-focus")}else{b(this).blur()}}).blur(function(){b(this).removeClass("ui-state-focus")});this.handles.each(function(e){b(this).data("index.ui-slider-handle",e)});this.handles.keydown(function(j){var g=true;var f=b(this).data("index.ui-slider-handle");if(c.options.disabled){return}switch(j.keyCode){case b.ui.keyCode.HOME:case b.ui.keyCode.END:case b.ui.keyCode.PAGE_UP:case b.ui.keyCode.PAGE_DOWN:case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:g=false;if(!c._keySliding){c._keySliding=true;b(this).addClass("ui-state-active");c._start(j,f)}break}var h,e,i=c._step();if(c.options.values&&c.options.values.length){h=e=c.values(f)}else{h=e=c.value()}switch(j.keyCode){case b.ui.keyCode.HOME:e=c._valueMin();break;case b.ui.keyCode.END:e=c._valueMax();break;case b.ui.keyCode.PAGE_UP:e=h+((c._valueMax()-c._valueMin())/a);break;case b.ui.keyCode.PAGE_DOWN:e=h-((c._valueMax()-c._valueMin())/a);break;case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:if(h==c._valueMax()){return}e=h+i;break;case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(h==c._valueMin()){return}e=h-i;break}c._slide(j,f,e);return g}).keyup(function(f){var e=b(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(f,e);c._change(f,e);b(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();return this},_mouseCapture:function(e){var f=this.options;if(f.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var i={x:e.pageX,y:e.pageY};var k=this._normValueFromMouse(i);var d=this._valueMax()-this._valueMin()+1,g;var l=this,j;this.handles.each(function(m){var n=Math.abs(k-l.values(m));if(d>n){d=n;g=b(this);j=m}});if(f.range==true&&this.values(1)==f.min){g=b(this.handles[++j])}this._start(e,j);this._mouseSliding=true;l._handleIndex=j;g.addClass("ui-state-active").focus();var h=g.offset();var c=!b(e.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=c?{left:0,top:0}:{left:e.pageX-h.left-(g.width()/2),top:e.pageY-h.top-(g.height()/2)-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};k=this._normValueFromMouse(i);this._slide(e,j,k);this._animateOff=true;return true},_mouseStart:function(c){return true},_mouseDrag:function(e){var c={x:e.pageX,y:e.pageY};var d=this._normValueFromMouse(c);this._slide(e,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._handleIndex=null;this._clickOffset=null;this._animateOff=false;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var d,i;if("horizontal"==this.orientation){d=this.elementSize.width;i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var g=(i/d);if(g>1){g=1}if(g<0){g=0}if("vertical"==this.orientation){g=1-g}var f=this._valueMax()-this._valueMin(),j=g*f,c=j%this.options.step,h=this._valueMin()+j-c;if(c>(this.options.step/2)){h+=this.options.step}return parseFloat(h.toFixed(5))},_start:function(e,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("start",e,c)},_slide:function(g,f,e){var h=this.handles[f];if(this.options.values&&this.options.values.length){var c=this.values(f?0:1);if((this.options.values.length==2&&this.options.range===true)&&((f==0&&e>c)||(f==1&&e<c))){e=c}if(e!=this.values(f)){var d=this.values();d[f]=e;var i=this._trigger("slide",g,{handle:this.handles[f],value:e,values:d});var c=this.values(f?0:1);if(i!==false){this.values(f,e,true)}}}else{if(e!=this.value()){var i=this._trigger("slide",g,{handle:this.handles[f],value:e});if(i!==false){this.value(e)}}}},_stop:function(e,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("stop",e,c)},_change:function(e,d){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("change",e,c)}},value:function(c){if(arguments.length){this.options.value=this._trimValue(c);this._refreshValue();this._change(null,0)}return this._value()},values:function(e,h){if(arguments.length>1){this.options.values[e]=this._trimValue(h);this._refreshValue();this._change(null,e)}if(arguments.length){if(b.isArray(arguments[0])){var g=this.options.values,d=arguments[0];for(var f=0,c=g.length;f<c;f++){g[f]=this._trimValue(d[f]);this._change(null,f)}this._refreshValue()}else{if(this.options.values&&this.options.values.length){return this._values(e)}else{return this.value()}}}else{return this._values()}},_setOption:function(d,e){var c,f=0;if(jQuery.isArray(this.options.values)){f=this.options.values.length}b.Widget.prototype._setOption.apply(this,arguments);switch(d){case"disabled":if(e){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case"value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case"values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c++){this._change(null,c)}this._animateOff=false;break}},_step:function(){var c=this.options.step;return c},_value:function(){var c=this.options.value;c=this._trimValue(c);return c},_values:function(d){if(arguments.length){var g=this.options.values[d];g=this._trimValue(g);return g}else{var f=this.options.values.slice();for(var e=0,c=f.length;e<c;e++){f[e]=this._trimValue(f[e])}return f}},_trimValue:function(c){if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c},_valueMin:function(){var c=this.options.min;return c},_valueMax:function(){var c=this.options.max;return c},_refreshValue:function(){var g=this.options.range,e=this.options,m=this;var d=(!this._animateOff)?e.animate:false;if(this.options.values&&this.options.values.length){var j,i;this.handles.each(function(q,o){var p=(m.values(q)-m._valueMin())/(m._valueMax()-m._valueMin())*100;var n={};n[m.orientation=="horizontal"?"left":"bottom"]=p+"%";b(this).stop(1,1)[d?"animate":"css"](n,e.animate);if(m.options.range===true){if(m.orientation=="horizontal"){(q==0)&&m.range.stop(1,1)[d?"animate":"css"]({left:p+"%"},e.animate);(q==1)&&m.range[d?"animate":"css"]({width:(p-lastValPercent)+"%"},{queue:false,duration:e.animate})}else{(q==0)&&m.range.stop(1,1)[d?"animate":"css"]({bottom:(p)+"%"},e.animate);(q==1)&&m.range[d?"animate":"css"]({height:(p-lastValPercent)+"%"},{queue:false,duration:e.animate})}}lastValPercent=p})}else{var k=this.value(),h=this._valueMin(),l=this._valueMax(),f=l!=h?(k-h)/(l-h)*100:0;var c={};c[m.orientation=="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[d?"animate":"css"](c,e.animate);(g=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[d?"animate":"css"]({width:f+"%"},e.animate);(g=="max")&&(this.orientation=="horizontal")&&this.range[d?"animate":"css"]({width:(100-f)+"%"},{queue:false,duration:e.animate});(g=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[d?"animate":"css"]({height:f+"%"},e.animate);(g=="max")&&(this.orientation=="vertical")&&this.range[d?"animate":"css"]({height:(100-f)+"%"},{queue:false,duration:e.animate})}}});b.extend(b.ui.slider,{version:"1.8"})})(jQuery);; \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.17.custom.min.js b/files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.17.custom.min.js
new file mode 100644
index 000000000..1a8ef1acd
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.17.custom.min.js
@@ -0,0 +1,54 @@
+/*!
+ * jQuery UI 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.17",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);/*!
+ * jQuery UI Widget 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);/*
+ * jQuery UI Draggable 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1},_create:function(){this.options.helper=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},destroy:function(){if(!!this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy();return this}},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle"))return!1;this.handle=this._getHandle(b);if(!this.handle)return!1;c.iframeFix&&a(c.iframeFix===!0?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(a(this).offset()).appendTo("body")});return!0},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),c.containment&&this._setContainment();if(this._trigger("start",b)===!1){this._clear();return!1}this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.helper.addClass("ui-draggable-dragging"),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b);return!0},_mouseDrag:function(b,c){this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute");if(!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1){this._mouseUp({});return!1}this.position=d.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,b);return!1},_mouseStop:function(b){var c=!1;a.ui.ddmanager&&!this.options.dropBehaviour&&(c=a.ui.ddmanager.drop(this,b)),this.dropped&&(c=this.dropped,this.dropped=!1);if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return!1;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var d=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){d._trigger("stop",b)!==!1&&d._clear()})}else this._trigger("stop",b)!==!1&&this._clear();return!1},_mouseUp:function(b){this.options.iframeFix===!0&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b);return a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?!0:!1;a(this.options.handle,this.element).find("*").andSelf().each(function(){this==b.target&&(c=!0)});return c},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo),d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(b){typeof b=="string"&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)b={top:0,left:0};return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b=this.options;b.containment=="parent"&&(b.containment=this.helper[0].parentNode);if(b.containment=="document"||b.containment=="window")this.containment=[b.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,b.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(b.containment=="document"?0:a(window).scrollLeft())+a(b.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(b.containment=="document"?0:a(window).scrollTop())+(a(b.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(b.containment)&&b.containment.constructor!=Array){var c=a(b.containment),d=c[0];if(!d)return;var e=c.offset(),f=a(d).css("overflow")!="hidden";this.containment=[(parseInt(a(d).css("borderLeftWidth"),10)||0)+(parseInt(a(d).css("paddingLeft"),10)||0),(parseInt(a(d).css("borderTopWidth"),10)||0)+(parseInt(a(d).css("paddingTop"),10)||0),(f?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(a(d).css("borderLeftWidth"),10)||0)-(parseInt(a(d).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(f?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(a(d).css("borderTopWidth"),10)||0)-(parseInt(a(d).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=c}else b.containment.constructor==Array&&(this.containment=b.containment)},_convertPositionTo:function(b,c){c||(c=this.position);var d=b=="absolute"?1:-1,e=this.options,f=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=/(html|body)/i.test(f[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():g?0:f.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:f.scrollLeft())*d)}},_generatePosition:function(b){var c=this.options,d=this.cssPosition=="absolute"&&(this.scrollParent[0]==document||!a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(d[0].tagName),f=b.pageX,g=b.pageY;if(this.originalPosition){var h;if(this.containment){if(this.relative_container){var i=this.relative_container.offset();h=[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]}else h=this.containment;b.pageX-this.offset.click.left<h[0]&&(f=h[0]+this.offset.click.left),b.pageY-this.offset.click.top<h[1]&&(g=h[1]+this.offset.click.top),b.pageX-this.offset.click.left>h[2]&&(f=h[2]+this.offset.click.left),b.pageY-this.offset.click.top>h[3]&&(g=h[3]+this.offset.click.top)}if(c.grid){var j=c.grid[1]?this.originalPageY+Math.round((g-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;g=h?j-this.offset.click.top<h[1]||j-this.offset.click.top>h[3]?j-this.offset.click.top<h[1]?j+c.grid[1]:j-c.grid[1]:j:j;var k=c.grid[0]?this.originalPageX+Math.round((f-this.originalPageX)/c.grid[0])*c.grid[0]:this.originalPageX;f=h?k-this.offset.click.left<h[0]||k-this.offset.click.left>h[2]?k-this.offset.click.left<h[0]?k+c.grid[0]:k-c.grid[0]:k:k}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:d.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:d.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(b,c,d){d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d]),b=="drag"&&(this.positionAbs=this._convertPositionTo("absolute"));return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(a){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.extend(a.ui.draggable,{version:"1.8.17"}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c){var d=a(this).data("draggable"),e=d.options,f=a.extend({},c,{item:d.element});d.sortables=[],a(e.connectToSortable).each(function(){var c=a.data(this,"sortable");c&&!c.options.disabled&&(d.sortables.push({instance:c,shouldRevert:c.options.revert}),c.refreshPositions(),c._trigger("activate",b,f))})},stop:function(b,c){var d=a(this).data("draggable"),e=a.extend({},c,{item:d.element});a.each(d.sortables,function(){this.instance.isOver?(this.instance.isOver=0,d.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=!0),this.instance._mouseStop(b),this.instance.options.helper=this.instance.options._helper,d.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",b,e))})},drag:function(b,c){var d=a(this).data("draggable"),e=this,f=function(b){var c=this.offset.click.top,d=this.offset.click.left,e=this.positionAbs.top,f=this.positionAbs.left,g=b.height,h=b.width,i=b.top,j=b.left;return a.ui.isOver(e+c,f+d,i,j,g,h)};a.each(d.sortables,function(f){this.instance.positionAbs=d.positionAbs,this.instance.helperProportions=d.helperProportions,this.instance.offset.click=d.offset.click,this.instance._intersectsWith(this.instance.containerCache)?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=a(e).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return c.helper[0]},b.target=this.instance.currentItem[0],this.instance._mouseCapture(b,!0),this.instance._mouseStart(b,!0,!0),this.instance.offset.click.top=d.offset.click.top,this.instance.offset.click.left=d.offset.click.left,this.instance.offset.parent.left-=d.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=d.offset.parent.top-this.instance.offset.parent.top,d._trigger("toSortable",b),d.dropped=this.instance.element,d.currentItem=d.element,this.instance.fromOutside=d),this.instance.currentItem&&this.instance._mouseDrag(b)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",b,this.instance._uiHash(this.instance)),this.instance._mouseStop(b,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),d._trigger("fromSortable",b),d.dropped=!1)})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c){var d=a("body"),e=a(this).data("draggable").options;d.css("cursor")&&(e._cursor=d.css("cursor")),d.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("opacity")&&(e._opacity=d.css("opacity")),d.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(b,c){var d=a(this).data("draggable");d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"&&(d.overflowOffset=d.scrollParent.offset())},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=!1;if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!="x")d.overflowOffset.top+d.scrollParent[0].offsetHeight-b.pageY<e.scrollSensitivity?d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(d.scrollParent[0].scrollTop=f=d.scrollParent[0].scrollTop-e.scrollSpeed);if(!e.axis||e.axis!="y")d.overflowOffset.left+d.scrollParent[0].offsetWidth-b.pageX<e.scrollSensitivity?d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(d.scrollParent[0].scrollLeft=f=d.scrollParent[0].scrollLeft-e.scrollSpeed)}else{if(!e.axis||e.axis!="x")b.pageY-a(document).scrollTop()<e.scrollSensitivity?f=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(document).scrollTop())<e.scrollSensitivity&&(f=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed));if(!e.axis||e.axis!="y")b.pageX-a(document).scrollLeft()<e.scrollSensitivity?f=a(document).scrollLeft(a(document).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(document).scrollLeft())<e.scrollSensitivity&&(f=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed))}f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c){var d=a(this).data("draggable"),e=d.options;d.snapElements=[],a(e.snap.constructor!=String?e.snap.items||":data(draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!=d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c){var d=a(this).data("draggable"),e=d.options,f=e.snapTolerance,g=c.offset.left,h=g+d.helperProportions.width,i=c.offset.top,j=i+d.helperProportions.height;for(var k=d.snapElements.length-1;k>=0;k--){var l=d.snapElements[k].left,m=l+d.snapElements[k].width,n=d.snapElements[k].top,o=n+d.snapElements[k].height;if(!(l-f<g&&g<m+f&&n-f<i&&i<o+f||l-f<g&&g<m+f&&n-f<j&&j<o+f||l-f<h&&h<m+f&&n-f<i&&i<o+f||l-f<h&&h<m+f&&n-f<j&&j<o+f)){d.snapElements[k].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=!1;continue}if(e.snapMode!="inner"){var p=Math.abs(n-j)<=f,q=Math.abs(o-i)<=f,r=Math.abs(l-h)<=f,s=Math.abs(m-g)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n-d.helperProportions.height,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l-d.helperProportions.width}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m}).left-d.margins.left)}var t=p||q||r||s;if(e.snapMode!="outer"){var p=Math.abs(n-i)<=f,q=Math.abs(o-j)<=f,r=Math.abs(l-g)<=f,s=Math.abs(m-h)<=f;p&&(c.position.top=d._convertPositionTo("relative",{top:n,left:0}).top-d.margins.top),q&&(c.position.top=d._convertPositionTo("relative",{top:o-d.helperProportions.height,left:0}).top-d.margins.top),r&&(c.position.left=d._convertPositionTo("relative",{top:0,left:l}).left-d.margins.left),s&&(c.position.left=d._convertPositionTo("relative",{top:0,left:m-d.helperProportions.width}).left-d.margins.left)}!d.snapElements[k].snapping&&(p||q||r||s||t)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[k].item})),d.snapElements[k].snapping=p||q||r||s||t}}}),a.ui.plugin.add("draggable","stack",{start:function(b,c){var d=a(this).data("draggable").options,e=a.makeArray(a(d.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});if(!!e.length){var f=parseInt(e[0].style.zIndex)||0;a(e).each(function(a){this.style.zIndex=f+a}),this[0].style.zIndex=f+e.length}}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c){var d=a(c.helper),e=a(this).data("draggable").options;d.css("zIndex")&&(e._zIndex=d.css("zIndex")),d.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);/*
+ * jQuery UI Slider 1.8.17
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=!0,f=a(this).data("index.ui-slider-handle"),g,h,i,j;if(!b.options.disabled){switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:e=!1;if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),g=b._start(d,f);if(g===!1)return}}j=b.options.step,b.options.values&&b.options.values.length?h=i=b.values(f):h=i=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:i=b._valueMin();break;case a.ui.keyCode.END:i=b._valueMax();break;case a.ui.keyCode.PAGE_UP:i=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:i=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(h===b._valueMax())return;i=b._trimAlignValue(h+j);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(h===b._valueMin())return;i=b._trimAlignValue(h-j)}b._slide(d,f,i);return e}}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;if(c.disabled)return!1;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i);if(j===!1)return!1;this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0;return!0},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);this._slide(a,this._handleIndex,c);return!1},_mouseStop:function(a){this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1;return!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e;return this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values());return this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length)this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);else return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);else{if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()}},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;a=this._trimAlignValue(a);return a},_values:function(a){var b,c,d;if(arguments.length){b=this.options.values[a],b=this._trimAlignValue(b);return b}c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;Math.abs(c)*2>=b&&(d+=c>0?b:-b);return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.17"})})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.custom.min.js b/files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.custom.min.js
new file mode 100755
index 000000000..6e6602160
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery-ui/jquery-ui-1.8.custom.min.js
@@ -0,0 +1,84 @@
+/*!
+ * jQuery UI 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ *//*
+ * jQuery UI 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(a){a.ui={version:"1.8",plugin:{add:function(c,d,f){var e=a.ui[c].prototype;for(var b in f){e.plugins[b]=e.plugins[b]||[];e.plugins[b].push([d,f[b]])}},call:function(b,d,c){var f=b.plugins[d];if(!f||!b.element[0].parentNode){return}for(var e=0;e<f.length;e++){if(b.options[f[e][0]]){f[e][1].apply(b.element,c)}}}},contains:function(d,c){return document.compareDocumentPosition?d.compareDocumentPosition(c)&16:d!==c&&d.contains(c)},hasScroll:function(e,c){if(a(e).css("overflow")=="hidden"){return false}var b=(c&&c=="left")?"scrollLeft":"scrollTop",d=false;if(e[b]>0){return true}e[b]=1;d=(e[b]>0);e[b]=0;return d},isOverAxis:function(c,b,d){return(c>b)&&(c<(b+d))},isOver:function(g,c,f,e,b,d){return a.ui.isOverAxis(g,f,b)&&a.ui.isOverAxis(c,e,d)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};a.fn.extend({_focus:a.fn.focus,focus:function(b,c){return typeof b==="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus();(c&&c.call(d))},b)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var b;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){b=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{b=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!b.length?a(document):b},zIndex:function(e){if(e!==undefined){return this.css("zIndex",e)}if(this.length){var c=a(this[0]),b,d;while(c.length&&c[0]!==document){b=c.css("position");if(b=="absolute"||b=="relative"||b=="fixed"){d=parseInt(c.css("zIndex"));if(!isNaN(d)&&d!=0){return d}}c=c.parent()}}return 0}});a.extend(a.expr[":"],{data:function(d,c,b){return !!a.data(d,b[3])},focusable:function(c){var d=c.nodeName.toLowerCase(),b=a.attr(c,"tabindex");return(/input|select|textarea|button|object/.test(d)?!c.disabled:"a"==d||"area"==d?c.href||!isNaN(b):!isNaN(b))&&!a(c)["area"==d?"parents":"closest"](":hidden").length},tabbable:function(c){var b=a.attr(c,"tabindex");return(isNaN(b)||b>=0)&&a(c).is(":focusable")}})})(jQuery);;/*!
+ * jQuery UI Widget 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Widget
+ *//*
+ * jQuery UI Widget 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b){var a=b.fn.remove;b.fn.remove=function(c,d){return this.each(function(){if(!d){if(!c||b.filter(c,[this]).length){b("*",this).add(this).each(function(){b(this).triggerHandler("remove")})}}return a.call(b(this),c,d)})};b.widget=function(d,f,c){var e=d.split(".")[0],h;d=d.split(".")[1];h=e+"-"+d;if(!c){c=f;f=b.Widget}b.expr[":"][h]=function(i){return !!b.data(i,d)};b[e]=b[e]||{};b[e][d]=function(i,j){if(arguments.length){this._createWidget(i,j)}};var g=new f();g.options=b.extend({},g.options);b[e][d].prototype=b.extend(true,g,{namespace:e,widgetName:d,widgetEventPrefix:b[e][d].prototype.widgetEventPrefix||d,widgetBaseClass:h},c);b.widget.bridge(d,b[e][d])};b.widget.bridge=function(d,c){b.fn[d]=function(g){var e=typeof g==="string",f=Array.prototype.slice.call(arguments,1),h=this;g=!e&&f.length?b.extend.apply(null,[true,g].concat(f)):g;if(e&&g.substring(0,1)==="_"){return h}if(e){this.each(function(){var i=b.data(this,d),j=i&&b.isFunction(i[g])?i[g].apply(i,f):i;if(j!==i&&j!==undefined){h=j;return false}})}else{this.each(function(){var i=b.data(this,d);if(i){if(g){i.option(g)}i._init()}else{b.data(this,d,new c(g,this))}})}return h}};b.Widget=function(c,d){if(arguments.length){this._createWidget(c,d)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(d,e){this.element=b(e).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(e)[this.widgetName],d);var c=this;this.element.bind("remove."+this.widgetName,function(){c.destroy()});this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled")},widget:function(){return this.element},option:function(e,f){var d=e,c=this;if(arguments.length===0){return b.extend({},c.options)}if(typeof e==="string"){if(f===undefined){return this.options[e]}d={};d[e]=f}b.each(d,function(g,h){c._setOption(g,h)});return c},_setOption:function(c,d){this.options[c]=d;if(c==="disabled"){this.widget()[d?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",d)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(d,e,f){var h=this.options[d];e=b.Event(e);e.type=(d===this.widgetEventPrefix?d:this.widgetEventPrefix+d).toLowerCase();f=f||{};if(e.originalEvent){for(var c=b.event.props.length,g;c;){g=b.event.props[--c];e[g]=e.originalEvent[g]}}this.element.trigger(e,f);return !(b.isFunction(h)&&h.call(this.element[0],e,f)===false||e.isDefaultPrevented())}}})(jQuery);;/*!
+ * jQuery UI Mouse 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ *//*
+ * jQuery UI Mouse 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(c){return b._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(b._preventClickEvent){b._preventClickEvent=false;c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(d){d.originalEvent=d.originalEvent||{};if(d.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(d));this._mouseDownEvent=d;var c=this,e=(d.which==1),b=(typeof this.options.cancel=="string"?a(d.target).parents().add(d.target).filter(this.options.cancel).length:false);if(!e||b||!this._mouseCapture(d)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(d)!==false);if(!this._mouseStarted){d.preventDefault();return true}}this._mouseMoveDelegate=function(f){return c._mouseMove(f)};this._mouseUpDelegate=function(f){return c._mouseUp(f)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(a.browser.safari||d.preventDefault());d.originalEvent.mouseHandled=true;return true},_mouseMove:function(b){if(a.browser.msie&&!b.button){return this._mouseUp(b)}if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,b)!==false);(this._mouseStarted?this._mouseDrag(b):this._mouseUp(b))}return !this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(b.target==this._mouseDownEvent.target);this._mouseStop(b)}return false},_mouseDistanceMet:function(b){return(Math.max(Math.abs(this._mouseDownEvent.pageX-b.pageX),Math.abs(this._mouseDownEvent.pageY-b.pageY))>=this.options.distance)},_mouseDelayMet:function(b){return this.mouseDelayMet},_mouseStart:function(b){},_mouseDrag:function(b){},_mouseStop:function(b){},_mouseCapture:function(b){return true}})})(jQuery);;/*
+ * jQuery UI Draggable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;(c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt));if(c.containment){this._setContainment()}if(this._trigger("start",b)===false){this._clear();return false}this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();if(this._trigger("drag",b,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode){return false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){if(b._trigger("stop",c)!==false){b._clear()}})}else{if(this._trigger("stop",c)!==false){this._clear()}}return false},cancel:function(){if(this.helper.is(".ui-draggable-dragging")){this._mouseUp({})}else{this._clear()}return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(typeof b=="string"){b=b.split(" ")}if(a.isArray(b)){b={left:+b[0],top:+b[1]||0}}if("left" in b){this.offset.click.left=b.left+this.margins.left}if("right" in b){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if("top" in b){this.offset.click.top=b.top+this.margins.top}if("bottom" in b){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(c,d){var f=a(this).data("draggable").options;var e=a.makeArray(a(f.stack)).sort(function(h,g){return(parseInt(a(h).css("zIndex"),10)||0)-(parseInt(a(g).css("zIndex"),10)||0)});if(!e.length){return}var b=parseInt(e[0].style.zIndex)||0;a(e).each(function(g){this.style.zIndex=b+g});this[0].style.zIndex=b+e.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
+ * jQuery UI Slider 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */(function(b){var a=5;b.widget("ui.slider",b.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var c=this,d=this.options;this._keySliding=false;this._mouseSliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");if(d.disabled){this.element.addClass("ui-slider-disabled ui-disabled")}this.range=b([]);if(d.range){if(d.range===true){this.range=b("<div></div>");if(!d.values){d.values=[this._valueMin(),this._valueMin()]}if(d.values.length&&d.values.length!=2){d.values=[d.values[0],d.values[0]]}}else{this.range=b("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(d.range=="min"||d.range=="max"){this.range.addClass("ui-slider-range-"+d.range)}this.range.addClass("ui-widget-header")}if(b(".ui-slider-handle",this.element).length==0){b('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}if(d.values&&d.values.length){while(b(".ui-slider-handle",this.element).length<d.values.length){b('<a href="#"></a>').appendTo(this.element).addClass("ui-slider-handle")}}this.handles=b(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(e){e.preventDefault()}).hover(function(){if(!d.disabled){b(this).addClass("ui-state-hover")}},function(){b(this).removeClass("ui-state-hover")}).focus(function(){if(!d.disabled){b(".ui-slider .ui-state-focus").removeClass("ui-state-focus");b(this).addClass("ui-state-focus")}else{b(this).blur()}}).blur(function(){b(this).removeClass("ui-state-focus")});this.handles.each(function(e){b(this).data("index.ui-slider-handle",e)});this.handles.keydown(function(j){var g=true;var f=b(this).data("index.ui-slider-handle");if(c.options.disabled){return}switch(j.keyCode){case b.ui.keyCode.HOME:case b.ui.keyCode.END:case b.ui.keyCode.PAGE_UP:case b.ui.keyCode.PAGE_DOWN:case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:g=false;if(!c._keySliding){c._keySliding=true;b(this).addClass("ui-state-active");c._start(j,f)}break}var h,e,i=c._step();if(c.options.values&&c.options.values.length){h=e=c.values(f)}else{h=e=c.value()}switch(j.keyCode){case b.ui.keyCode.HOME:e=c._valueMin();break;case b.ui.keyCode.END:e=c._valueMax();break;case b.ui.keyCode.PAGE_UP:e=h+((c._valueMax()-c._valueMin())/a);break;case b.ui.keyCode.PAGE_DOWN:e=h-((c._valueMax()-c._valueMin())/a);break;case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:if(h==c._valueMax()){return}e=h+i;break;case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(h==c._valueMin()){return}e=h-i;break}c._slide(j,f,e);return g}).keyup(function(f){var e=b(this).data("index.ui-slider-handle");if(c._keySliding){c._keySliding=false;c._stop(f,e);c._change(f,e);b(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();return this},_mouseCapture:function(e){var f=this.options;if(f.disabled){return false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();var i={x:e.pageX,y:e.pageY};var k=this._normValueFromMouse(i);var d=this._valueMax()-this._valueMin()+1,g;var l=this,j;this.handles.each(function(m){var n=Math.abs(k-l.values(m));if(d>n){d=n;g=b(this);j=m}});if(f.range==true&&this.values(1)==f.min){g=b(this.handles[++j])}this._start(e,j);this._mouseSliding=true;l._handleIndex=j;g.addClass("ui-state-active").focus();var h=g.offset();var c=!b(e.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=c?{left:0,top:0}:{left:e.pageX-h.left-(g.width()/2),top:e.pageY-h.top-(g.height()/2)-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};k=this._normValueFromMouse(i);this._slide(e,j,k);this._animateOff=true;return true},_mouseStart:function(c){return true},_mouseDrag:function(e){var c={x:e.pageX,y:e.pageY};var d=this._normValueFromMouse(c);this._slide(e,this._handleIndex,d);return false},_mouseStop:function(c){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(c,this._handleIndex);this._change(c,this._handleIndex);this._handleIndex=null;this._clickOffset=null;this._animateOff=false;return false},_detectOrientation:function(){this.orientation=this.options.orientation=="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var d,i;if("horizontal"==this.orientation){d=this.elementSize.width;i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{d=this.elementSize.height;i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}var g=(i/d);if(g>1){g=1}if(g<0){g=0}if("vertical"==this.orientation){g=1-g}var f=this._valueMax()-this._valueMin(),j=g*f,c=j%this.options.step,h=this._valueMin()+j-c;if(c>(this.options.step/2)){h+=this.options.step}return parseFloat(h.toFixed(5))},_start:function(e,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("start",e,c)},_slide:function(g,f,e){var h=this.handles[f];if(this.options.values&&this.options.values.length){var c=this.values(f?0:1);if((this.options.values.length==2&&this.options.range===true)&&((f==0&&e>c)||(f==1&&e<c))){e=c}if(e!=this.values(f)){var d=this.values();d[f]=e;var i=this._trigger("slide",g,{handle:this.handles[f],value:e,values:d});var c=this.values(f?0:1);if(i!==false){this.values(f,e,true)}}}else{if(e!=this.value()){var i=this._trigger("slide",g,{handle:this.handles[f],value:e});if(i!==false){this.value(e)}}}},_stop:function(e,d){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("stop",e,c)},_change:function(e,d){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[d],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(d);c.values=this.values()}this._trigger("change",e,c)}},value:function(c){if(arguments.length){this.options.value=this._trimValue(c);this._refreshValue();this._change(null,0)}return this._value()},values:function(e,h){if(arguments.length>1){this.options.values[e]=this._trimValue(h);this._refreshValue();this._change(null,e)}if(arguments.length){if(b.isArray(arguments[0])){var g=this.options.values,d=arguments[0];for(var f=0,c=g.length;f<c;f++){g[f]=this._trimValue(d[f]);this._change(null,f)}this._refreshValue()}else{if(this.options.values&&this.options.values.length){return this._values(e)}else{return this.value()}}}else{return this._values()}},_setOption:function(d,e){var c,f=0;if(jQuery.isArray(this.options.values)){f=this.options.values.length}b.Widget.prototype._setOption.apply(this,arguments);switch(d){case"disabled":if(e){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case"value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case"values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c++){this._change(null,c)}this._animateOff=false;break}},_step:function(){var c=this.options.step;return c},_value:function(){var c=this.options.value;c=this._trimValue(c);return c},_values:function(d){if(arguments.length){var g=this.options.values[d];g=this._trimValue(g);return g}else{var f=this.options.values.slice();for(var e=0,c=f.length;e<c;e++){f[e]=this._trimValue(f[e])}return f}},_trimValue:function(c){if(c<this._valueMin()){c=this._valueMin()}if(c>this._valueMax()){c=this._valueMax()}return c},_valueMin:function(){var c=this.options.min;return c},_valueMax:function(){var c=this.options.max;return c},_refreshValue:function(){var g=this.options.range,e=this.options,m=this;var d=(!this._animateOff)?e.animate:false;if(this.options.values&&this.options.values.length){var j,i;this.handles.each(function(q,o){var p=(m.values(q)-m._valueMin())/(m._valueMax()-m._valueMin())*100;var n={};n[m.orientation=="horizontal"?"left":"bottom"]=p+"%";b(this).stop(1,1)[d?"animate":"css"](n,e.animate);if(m.options.range===true){if(m.orientation=="horizontal"){(q==0)&&m.range.stop(1,1)[d?"animate":"css"]({left:p+"%"},e.animate);(q==1)&&m.range[d?"animate":"css"]({width:(p-lastValPercent)+"%"},{queue:false,duration:e.animate})}else{(q==0)&&m.range.stop(1,1)[d?"animate":"css"]({bottom:(p)+"%"},e.animate);(q==1)&&m.range[d?"animate":"css"]({height:(p-lastValPercent)+"%"},{queue:false,duration:e.animate})}}lastValPercent=p})}else{var k=this.value(),h=this._valueMin(),l=this._valueMax(),f=l!=h?(k-h)/(l-h)*100:0;var c={};c[m.orientation=="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[d?"animate":"css"](c,e.animate);(g=="min")&&(this.orientation=="horizontal")&&this.range.stop(1,1)[d?"animate":"css"]({width:f+"%"},e.animate);(g=="max")&&(this.orientation=="horizontal")&&this.range[d?"animate":"css"]({width:(100-f)+"%"},{queue:false,duration:e.animate});(g=="min")&&(this.orientation=="vertical")&&this.range.stop(1,1)[d?"animate":"css"]({height:f+"%"},e.animate);(g=="max")&&(this.orientation=="vertical")&&this.range[d?"animate":"css"]({height:(100-f)+"%"},{queue:false,duration:e.animate})}}});b.extend(b.ui.slider,{version:"1.8"})})(jQuery);; \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquery.js b/files_svgedit/svg-edit/jquery.js
new file mode 100644
index 000000000..198b3ff07
--- /dev/null
+++ b/files_svgedit/svg-edit/jquery.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquerybbq/.svn/all-wcprops b/files_svgedit/svg-edit/jquerybbq/.svn/all-wcprops
new file mode 100644
index 000000000..2131ba23b
--- /dev/null
+++ b/files_svgedit/svg-edit/jquerybbq/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/1982/trunk/editor/jquerybbq
+END
+jquery.bbq.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/1982/trunk/editor/jquerybbq/jquery.bbq.min.js
+END
diff --git a/files_svgedit/svg-edit/jquerybbq/.svn/entries b/files_svgedit/svg-edit/jquerybbq/.svn/entries
new file mode 100644
index 000000000..dc9220b76
--- /dev/null
+++ b/files_svgedit/svg-edit/jquerybbq/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/jquerybbq
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-02-09T06:09:56.382925Z
+1982
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jquery.bbq.min.js
+file
+
+
+
+
+2012-03-25T18:41:44.440340Z
+0700383a6aa29a970a799b4b8ea4c025
+2011-02-09T06:09:56.382925Z
+1982
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4122
+
diff --git a/files_svgedit/svg-edit/jquerybbq/.svn/prop-base/jquery.bbq.min.js.svn-base b/files_svgedit/svg-edit/jquerybbq/.svn/prop-base/jquery.bbq.min.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/jquerybbq/.svn/prop-base/jquery.bbq.min.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/jquerybbq/.svn/text-base/jquery.bbq.min.js.svn-base b/files_svgedit/svg-edit/jquerybbq/.svn/text-base/jquery.bbq.min.js.svn-base
new file mode 100644
index 000000000..edb781914
--- /dev/null
+++ b/files_svgedit/svg-edit/jquerybbq/.svn/text-base/jquery.bbq.min.js.svn-base
@@ -0,0 +1,18 @@
+/*
+ * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
+ * http://benalman.com/projects/jquery-bbq-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
+/*
+ * jQuery hashchange event - v1.2 - 2/11/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/jquerybbq/jquery.bbq.min.js b/files_svgedit/svg-edit/jquerybbq/jquery.bbq.min.js
new file mode 100644
index 000000000..edb781914
--- /dev/null
+++ b/files_svgedit/svg-edit/jquerybbq/jquery.bbq.min.js
@@ -0,0 +1,18 @@
+/*
+ * jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
+ * http://benalman.com/projects/jquery-bbq-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
+/*
+ * jQuery hashchange event - v1.2 - 2/11/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/js-hotkeys/.svn/all-wcprops b/files_svgedit/svg-edit/js-hotkeys/.svn/all-wcprops
new file mode 100644
index 000000000..93b07b48f
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 42
+/svn/!svn/ver/1983/trunk/editor/js-hotkeys
+END
+jquery.hotkeys.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/1983/trunk/editor/js-hotkeys/jquery.hotkeys.min.js
+END
+README.md
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1495/trunk/editor/js-hotkeys/README.md
+END
diff --git a/files_svgedit/svg-edit/js-hotkeys/.svn/entries b/files_svgedit/svg-edit/js-hotkeys/.svn/entries
new file mode 100644
index 000000000..474092335
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/.svn/entries
@@ -0,0 +1,96 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/js-hotkeys
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-02-09T06:10:11.313399Z
+1983
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jquery.hotkeys.min.js
+file
+
+
+
+
+2012-03-25T18:41:43.424335Z
+98961b9a630fde65fa1614fbb256fff4
+2011-02-09T06:10:11.313399Z
+1983
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1853
+
+README.md
+file
+
+
+
+
+2012-03-25T18:41:43.424335Z
+46a5f1a66e5d8ad065ffebc33c3dbac5
+2010-04-01T17:38:23.760732Z
+1495
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1785
+
diff --git a/files_svgedit/svg-edit/js-hotkeys/.svn/prop-base/jquery.hotkeys.min.js.svn-base b/files_svgedit/svg-edit/js-hotkeys/.svn/prop-base/jquery.hotkeys.min.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/.svn/prop-base/jquery.hotkeys.min.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/js-hotkeys/.svn/text-base/README.md.svn-base b/files_svgedit/svg-edit/js-hotkeys/.svn/text-base/README.md.svn-base
new file mode 100644
index 000000000..696e98942
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/.svn/text-base/README.md.svn-base
@@ -0,0 +1,45 @@
+#About
+**jQuery Hotkeys** is a plug-in that lets you easily add and remove handlers for keyboard events anywhere in your code supporting almost any key combination.
+
+This plugin is based off of the plugin by Tzury Bar Yochay: [jQuery.hotkeys](http://github.com/tzuryby/hotkeys)
+
+The syntax is as follows:
+
+ $(expression).bind(types, keys, handler);
+ $(expression).unbind(types, handler);
+
+ $(document).bind('keydown', 'ctrl+a', fn);
+
+ // e.g. replace '$' sign with 'EUR'
+ $('input.foo').bind('keyup', '$', function(){
+ this.value = this.value.replace('$', 'EUR');
+ });
+
+## Types
+Supported types are `'keydown'`, `'keyup'` and `'keypress'`
+
+## Notes
+
+If you want to use more than one modifiers (e.g. alt+ctrl+z) you should define them by an alphabetical order e.g. alt+ctrl+shift
+
+Hotkeys aren't tracked if you're inside of an input element (unless you explicitly bind the hotkey directly to the input). This helps to avoid conflict with normal user typing.
+
+## jQuery Compatibility
+
+Works with jQuery 1.4.2 and newer.
+
+It known to be working with all the major browsers on all available platforms (Win/Mac/Linux)
+
+ * IE 6/7/8
+ * FF 1.5/2/3
+ * Opera-9
+ * Safari-3
+ * Chrome-0.2
+
+### Addendum
+
+Firefox is the most liberal one in the manner of letting you capture all short-cuts even those that are built-in in the browser such as `Ctrl-t` for new tab, or `Ctrl-a` for selecting all text. You can always bubble them up to the browser by returning `true` in your handler.
+
+Others, (IE) either let you handle built-in short-cuts, but will add their functionality after your code has executed. Or (Opera/Safari) will *not* pass those events to the DOM at all.
+
+*So, if you bind `Ctrl-Q` or `Alt-F4` and your Safari/Opera window is closed don't be surprised.* \ No newline at end of file
diff --git a/files_svgedit/svg-edit/js-hotkeys/.svn/text-base/jquery.hotkeys.min.js.svn-base b/files_svgedit/svg-edit/js-hotkeys/.svn/text-base/jquery.hotkeys.min.js.svn-base
new file mode 100644
index 000000000..15e6fe30d
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/.svn/text-base/jquery.hotkeys.min.js.svn-base
@@ -0,0 +1,15 @@
+/*
+ * jQuery Hotkeys Plugin
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * http://github.com/jeresig/jquery.hotkeys
+ *
+ * Based upon the plugin by Tzury Bar Yochay:
+ * http://github.com/tzuryby/hotkeys
+ *
+ * Original idea by:
+ * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
+*/
+
+(function(b){b.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta",219:"[",221:"]"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"}};function a(d){if(typeof d.data!=="string"){return}var c=d.handler,e=d.data.toLowerCase().split(" ");d.handler=function(n){if(this!==n.target&&(/textarea|select/i.test(n.target.nodeName)||n.target.type==="text")){return}var h=n.type!=="keypress"&&b.hotkeys.specialKeys[n.which],o=String.fromCharCode(n.which).toLowerCase(),k,m="",g={};if(n.altKey&&h!=="alt"){m+="alt+"}if(n.ctrlKey&&h!=="ctrl"){m+="ctrl+"}if(n.metaKey&&!n.ctrlKey&&h!=="meta"){m+="meta+"}if(n.shiftKey&&h!=="shift"){m+="shift+"}if(h){g[m+h]=true}else{g[m+o]=true;g[m+b.hotkeys.shiftNums[o]]=true;if(m==="shift+"){g[b.hotkeys.shiftNums[o]]=true}}for(var j=0,f=e.length;j<f;j++){if(g[e[j]]){return c.apply(this,arguments)}}}}b.each(["keydown","keyup","keypress"],function(){b.event.special[this]={add:a}})})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/js-hotkeys/README.md b/files_svgedit/svg-edit/js-hotkeys/README.md
new file mode 100644
index 000000000..696e98942
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/README.md
@@ -0,0 +1,45 @@
+#About
+**jQuery Hotkeys** is a plug-in that lets you easily add and remove handlers for keyboard events anywhere in your code supporting almost any key combination.
+
+This plugin is based off of the plugin by Tzury Bar Yochay: [jQuery.hotkeys](http://github.com/tzuryby/hotkeys)
+
+The syntax is as follows:
+
+ $(expression).bind(types, keys, handler);
+ $(expression).unbind(types, handler);
+
+ $(document).bind('keydown', 'ctrl+a', fn);
+
+ // e.g. replace '$' sign with 'EUR'
+ $('input.foo').bind('keyup', '$', function(){
+ this.value = this.value.replace('$', 'EUR');
+ });
+
+## Types
+Supported types are `'keydown'`, `'keyup'` and `'keypress'`
+
+## Notes
+
+If you want to use more than one modifiers (e.g. alt+ctrl+z) you should define them by an alphabetical order e.g. alt+ctrl+shift
+
+Hotkeys aren't tracked if you're inside of an input element (unless you explicitly bind the hotkey directly to the input). This helps to avoid conflict with normal user typing.
+
+## jQuery Compatibility
+
+Works with jQuery 1.4.2 and newer.
+
+It known to be working with all the major browsers on all available platforms (Win/Mac/Linux)
+
+ * IE 6/7/8
+ * FF 1.5/2/3
+ * Opera-9
+ * Safari-3
+ * Chrome-0.2
+
+### Addendum
+
+Firefox is the most liberal one in the manner of letting you capture all short-cuts even those that are built-in in the browser such as `Ctrl-t` for new tab, or `Ctrl-a` for selecting all text. You can always bubble them up to the browser by returning `true` in your handler.
+
+Others, (IE) either let you handle built-in short-cuts, but will add their functionality after your code has executed. Or (Opera/Safari) will *not* pass those events to the DOM at all.
+
+*So, if you bind `Ctrl-Q` or `Alt-F4` and your Safari/Opera window is closed don't be surprised.* \ No newline at end of file
diff --git a/files_svgedit/svg-edit/js-hotkeys/jquery.hotkeys.min.js b/files_svgedit/svg-edit/js-hotkeys/jquery.hotkeys.min.js
new file mode 100644
index 000000000..15e6fe30d
--- /dev/null
+++ b/files_svgedit/svg-edit/js-hotkeys/jquery.hotkeys.min.js
@@ -0,0 +1,15 @@
+/*
+ * jQuery Hotkeys Plugin
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * http://github.com/jeresig/jquery.hotkeys
+ *
+ * Based upon the plugin by Tzury Bar Yochay:
+ * http://github.com/tzuryby/hotkeys
+ *
+ * Original idea by:
+ * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
+*/
+
+(function(b){b.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta",219:"[",221:"]"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"}};function a(d){if(typeof d.data!=="string"){return}var c=d.handler,e=d.data.toLowerCase().split(" ");d.handler=function(n){if(this!==n.target&&(/textarea|select/i.test(n.target.nodeName)||n.target.type==="text")){return}var h=n.type!=="keypress"&&b.hotkeys.specialKeys[n.which],o=String.fromCharCode(n.which).toLowerCase(),k,m="",g={};if(n.altKey&&h!=="alt"){m+="alt+"}if(n.ctrlKey&&h!=="ctrl"){m+="ctrl+"}if(n.metaKey&&!n.ctrlKey&&h!=="meta"){m+="meta+"}if(n.shiftKey&&h!=="shift"){m+="shift+"}if(h){g[m+h]=true}else{g[m+o]=true;g[m+b.hotkeys.shiftNums[o]]=true;if(m==="shift+"){g[b.hotkeys.shiftNums[o]]=true}}for(var j=0,f=e.length;j<f;j++){if(g[e[j]]){return c.apply(this,arguments)}}}}b.each(["keydown","keyup","keypress"],function(){b.event.special[this]={add:a}})})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/all-wcprops b/files_svgedit/svg-edit/locale/.svn/all-wcprops
new file mode 100644
index 000000000..e7a325bd1
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/all-wcprops
@@ -0,0 +1,365 @@
+K 25
+svn:wc:ra_dav:version-url
+V 38
+/svn/!svn/ver/1995/trunk/editor/locale
+END
+lang.sr.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.sr.js
+END
+lang.da.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.da.js
+END
+lang.tr.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.tr.js
+END
+lang.fa.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.fa.js
+END
+lang.be.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.be.js
+END
+lang.ga.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ga.js
+END
+lang.de.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.de.js
+END
+lang.sv.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.sv.js
+END
+lang.bg.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.bg.js
+END
+lang.ja.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ja.js
+END
+lang.he.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1985/trunk/editor/locale/lang.he.js
+END
+lang.fi.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.fi.js
+END
+lang.hi.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.hi.js
+END
+lang.cs.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.cs.js
+END
+lang.es.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.es.js
+END
+lang.mk.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.mk.js
+END
+lang.zh-TW.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1901/trunk/editor/locale/lang.zh-TW.js
+END
+lang.ko.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ko.js
+END
+lang.cy.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.cy.js
+END
+lang.is.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.is.js
+END
+lang.no.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.no.js
+END
+lang.hu.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.hu.js
+END
+lang.sk.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.sk.js
+END
+lang.fy.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1985/trunk/editor/locale/lang.fy.js
+END
+lang.vi.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.vi.js
+END
+locale.js
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/1995/trunk/editor/locale/locale.js
+END
+lang.zh-CN.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1901/trunk/editor/locale/lang.zh-CN.js
+END
+lang.uk.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.uk.js
+END
+lang.ms.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ms.js
+END
+lang.hy.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.hy.js
+END
+lang.ro.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ro.js
+END
+lang.yi.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.yi.js
+END
+lang.sq.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.sq.js
+END
+lang.pt-BR.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1985/trunk/editor/locale/lang.pt-BR.js
+END
+lang.ru.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ru.js
+END
+lang.af.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.af.js
+END
+lang.sw.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.sw.js
+END
+lang.id.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.id.js
+END
+lang.el.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.el.js
+END
+lang.ar.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ar.js
+END
+lang.en.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.en.js
+END
+lang.gl.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.gl.js
+END
+lang.pt-PT.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1901/trunk/editor/locale/lang.pt-PT.js
+END
+lang.fr.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.fr.js
+END
+lang.et.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.et.js
+END
+lang.nl.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.nl.js
+END
+lang.hr.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.hr.js
+END
+lang.az.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.az.js
+END
+lang.th.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.th.js
+END
+lang.pl.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.pl.js
+END
+lang.it.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.it.js
+END
+lang.sl.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.sl.js
+END
+lang.test.js
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1985/trunk/editor/locale/lang.test.js
+END
+lang.lt.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.lt.js
+END
+lang.tl.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.tl.js
+END
+README.txt
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1563/trunk/editor/locale/README.txt
+END
+lang.mt.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.mt.js
+END
+lang.zh-HK.js
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1901/trunk/editor/locale/lang.zh-HK.js
+END
+lang.lv.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.lv.js
+END
+lang.ca.js
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/1901/trunk/editor/locale/lang.ca.js
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/dir-prop-base b/files_svgedit/svg-edit/locale/.svn/dir-prop-base
new file mode 100644
index 000000000..d217d5167
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/dir-prop-base
@@ -0,0 +1,6 @@
+K 10
+svn:ignore
+V 17
+lang.de.js.patch
+
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/entries b/files_svgedit/svg-edit/locale/.svn/entries
new file mode 100644
index 000000000..a1f688723
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/entries
@@ -0,0 +1,2068 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/locale
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-02-11T19:21:50.128793Z
+1995
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+lang.sr.js
+file
+
+
+
+
+2012-03-25T18:41:42.068328Z
+a7c17460e2269f9094c2a344eb375d1f
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9797
+
+lang.da.js
+file
+
+
+
+
+2012-03-25T18:41:42.068328Z
+89023cc991a657a0eb65a3b8a58c68af
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8303
+
+lang.tr.js
+file
+
+
+
+
+2012-03-25T18:41:42.068328Z
+eb830f9f1be93d50dd1054f7a1fc0490
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8594
+
+lang.fa.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+67bc23962690dbe26d355f92b6bd8dd5
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10894
+
+lang.be.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+27afe048707e199c88e90ffead7551f0
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9807
+
+lang.ga.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+c1d2708700a7afa9d408969d159b324f
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8532
+
+lang.de.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+db059f6b8e4df33aef5b987b624f7d07
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9361
+
+lang.sv.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+a13596dd480051acc39610373001c915
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8274
+
+lang.bg.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+54a2b5700efdb12f3d3c82b7310a26a8
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9961
+
+lang.ja.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+d5a6b79ba781059f984f8b758f5ca81b
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8879
+
+lang.he.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+2117c0d2b8f61a2722de0cd1d7f51d89
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8829
+
+lang.fi.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+205e753e52c6ba2d4df321cbb3357444
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8361
+
+lang.hi.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+be07e753760b6b3227a75ea5254f8c9e
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+12070
+
+lang.cs.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+f3dc3b85b984f51d03c8ba7f4871cb15
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9085
+
+lang.mk.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+c7196fe4a08f680991f992e3fcc13674
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9765
+
+lang.es.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+fb512484b63070edfb708d6a1ffef09f
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9433
+
+lang.zh-TW.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+9d8e08c4e7169a72bbc50f5dc48aa8e8
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8132
+
+lang.ko.js
+file
+
+
+
+
+2012-03-25T18:41:42.072328Z
+f2334cf516d5de42f44dd7a0e067e37e
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8521
+
+lang.cy.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+e2872c35466fba52cec4f1df7623ba1d
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8327
+
+lang.is.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+67732acd102c11cc04d719bb7fe73fbe
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8327
+
+lang.no.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+93ba32601d165f0156d527f35eb23ea7
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8260
+
+lang.hu.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+9d3ec9df158a39fd343f7f1e9420d0a5
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8452
+
+lang.sk.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+6a8dce6cccfa022aa09bab51c4b44f01
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8776
+
+lang.fy.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+4110bf2038994a9a49abd58cfbe3a7b8
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8515
+
+lang.vi.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+9f6ec480d5dcce58aa8ab721b9374613
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8856
+
+locale.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+1e7b5088f1c7213d5b6a462a9e73cd3b
+2011-02-11T19:21:50.128793Z
+1995
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9282
+
+lang.zh-CN.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+ff6eaaab8f8087a81746147afe8a491b
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8116
+
+lang.uk.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+a5723c6092917ddfb481f5f46cf7a505
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9743
+
+lang.ms.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+98e6cbb71926be27c5016c3c2a19038b
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8261
+
+lang.hy.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+8697054036a010cdb8c344f0733b51e3
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8206
+
+lang.ro.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+95fe50906ba0e7fae012f6da409d0246
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9057
+
+lang.yi.js
+file
+
+
+
+
+2012-03-25T18:41:42.076328Z
+5e693b810637c5e5ce6b8c5caebd4a79
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9657
+
+lang.sq.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+e8685d1accd0a58b0db4d9eda3883e7a
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8393
+
+lang.pt-BR.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+cf11259a5eaa70a61ee447b3f24bc04a
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8254
+
+lang.ru.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+b704595577e95afe1eb7aecf2b3ddbcb
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11192
+
+lang.af.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+b75eac639e9ab1c1abee68346a56f818
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8479
+
+lang.sw.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+791734374f9aa7e6e23be727dadb687d
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8266
+
+lang.id.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+953168e26f4cc6b48b378333848a7741
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8258
+
+lang.el.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+f8733b846329c3add1dfc3cb19ddc95b
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9823
+
+lang.ar.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+4b9d852dd6afea84b72900827ce5aeaf
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9263
+
+lang.en.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+c4376d9882be16fdf730343b6200e202
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8248
+
+lang.gl.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+253d3354f602b8e559d78e3b2c028c51
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8440
+
+lang.pt-PT.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+6b616e1ee186e64c46a4794a0e8e2e18
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8505
+
+lang.fr.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+e921082d0fd7e5fc872a45bdc111b1d0
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9636
+
+lang.et.js
+file
+
+
+
+
+2012-03-25T18:41:42.080328Z
+04f3bb665853192ada0159179c7ad165
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8300
+
+lang.nl.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+140422a6471bd2d81ed2e01964f1b590
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8784
+
+lang.hr.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+9f1545f1d66a500cdf6bc692a407d5ac
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8478
+
+lang.az.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+1b7e9a770c75f46bdac3c68425384453
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8214
+
+lang.th.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+b78b7df6172e5fe7a483686be0457873
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10537
+
+lang.pl.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+4cb4777ae3c1cd203b62488f1f04e4a6
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8453
+
+lang.it.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+7e2214fcee0b0fe8be678b7a76085f8d
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8854
+
+lang.sl.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+7f84e8bc91c43f34b741852e0daef560
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8375
+
+lang.test.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+8bf467488b64901c8d1ec54ef3fa4738
+2011-02-09T06:18:05.544281Z
+1985
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8250
+
+lang.lt.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+96d2341de5a6ce9b56eae71d70e055e3
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8538
+
+lang.tl.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+15ac5416655d4a5b1166da04edcd8a3d
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8729
+
+README.txt
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+cdc4e0fab666fa7d79c9af098b623429
+2010-05-03T23:29:13.086772Z
+1563
+rusnakp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+492
+
+lang.mt.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+0a18472a007acfde5b5a7725a7a67ede
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8376
+
+lang.zh-HK.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+7cf0ef4d540832f7472bc5b886bcfb64
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8114
+
+lang.lv.js
+file
+
+
+
+
+2012-03-25T18:41:42.084328Z
+758cf6dc82912c46d17293d70cab2981
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8479
+
+lang.ca.js
+file
+
+
+
+
+2012-03-25T18:41:42.088328Z
+96031aef9d35577d74c37b692fd2d18f
+2011-01-11T21:15:08.685518Z
+1901
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8503
+
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.af.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.af.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.af.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ar.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ar.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ar.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.az.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.az.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.az.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.be.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.be.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.be.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.bg.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.bg.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.bg.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ca.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ca.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ca.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.cs.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.cs.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.cs.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.cy.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.cy.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.cy.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.da.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.da.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.da.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.de.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.de.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.de.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.el.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.el.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.el.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.en.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.en.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.en.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.es.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.es.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.es.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.et.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.et.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.et.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fa.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fa.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fa.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fi.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fi.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fr.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fr.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fy.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fy.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.fy.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ga.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ga.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ga.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.gl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.gl.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.gl.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.he.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.he.js.svn-base
new file mode 100644
index 000000000..931becff8
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.he.js.svn-base
@@ -0,0 +1,9 @@
+K 14
+svn:executable
+V 1
+*
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hi.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hi.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hr.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hr.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hu.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hu.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hu.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hy.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hy.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.hy.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.id.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.id.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.id.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.is.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.is.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.is.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.it.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.it.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.it.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ja.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ja.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ja.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ko.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ko.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ko.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.lt.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.lt.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.lt.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.lv.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.lv.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.lv.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.mk.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.mk.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.mk.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ms.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ms.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ms.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.mt.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.mt.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.mt.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.nl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.nl.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.nl.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.no.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.no.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.no.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pl.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pl.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-BR.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-BR.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-BR.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-PT.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-PT.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.pt-PT.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ro.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ro.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ro.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ru.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ru.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.ru.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sk.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sk.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sk.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sl.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sl.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sq.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sq.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sq.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sr.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sr.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sv.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sv.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sv.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sw.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sw.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.sw.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.test.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.test.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.test.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.th.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.th.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.th.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.tl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.tl.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.tl.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.tr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.tr.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.tr.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.uk.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.uk.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.uk.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.vi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.vi.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.vi.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.yi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.yi.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.yi.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-CN.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-CN.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-CN.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-HK.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-HK.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-HK.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-TW.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-TW.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/lang.zh-TW.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/prop-base/locale.js.svn-base b/files_svgedit/svg-edit/locale/.svn/prop-base/locale.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/prop-base/locale.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/README.txt.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/README.txt.svn-base
new file mode 100644
index 000000000..9d6ac5882
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/README.txt.svn-base
@@ -0,0 +1,17 @@
+This directory holds JSON files that translate the UI strings in SVG-edit.
+Initial translations were done by Narendra Sisodiya putting the English
+strings through the Google Translation API. Humans will need to take these
+automated translations and ensure they make sense.
+
+See AUTHORS for the translations credits.
+
+Languages Already Translated By Humans:
+ * lang.cs.js
+ * lang.de.js
+ * lang.en.js
+ * lang.es.js
+ * lang.fr.js
+ * lang.ja.js
+ * lang.nl.js
+ * lang.ro.js
+ * lang.sk.js
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.af.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.af.js.svn-base
new file mode 100644
index 000000000..37d8cb2db
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.af.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "af",
+ dir : "ltr",
+ common: {
+ "ok": "Spaar",
+ "cancel": "Annuleer",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik om te verander vul kleur, verskuiwing klik om &#39;n beroerte kleur verander",
+ "zoom_level": "Change zoom vlak",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Verandering vul kleur",
+ "stroke_color": "Verandering beroerte kleur",
+ "stroke_style": "Verandering beroerte dash styl",
+ "stroke_width": "Verandering beroerte breedte",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Verandering rotasie-hoek",
+ "blur": "Change gaussian blur value",
+ "opacity": "Verander geselekteerde item opaciteit",
+ "circle_cx": "Verandering sirkel se cx koördineer",
+ "circle_cy": "Verandering sirkel se cy koördineer",
+ "circle_r": "Verandering sirkel se radius",
+ "ellipse_cx": "Verandering ellips se cx koördineer",
+ "ellipse_cy": "Verander ellips se cy koördineer",
+ "ellipse_rx": "Verandering ellips se x radius",
+ "ellipse_ry": "Verander ellips se j radius",
+ "line_x1": "Verandering lyn se vertrek x koördinaat",
+ "line_x2": "Verandering lyn se eindig x koördinaat",
+ "line_y1": "Verandering lyn se vertrek y koördinaat",
+ "line_y2": "Verandering lyn se eindig y koördinaat",
+ "rect_height": "Verandering reghoek hoogte",
+ "rect_width": "Verandering reghoek breedte",
+ "corner_radius": "Verandering Rechthoek Corner Radius",
+ "image_width": "Verander prent breedte",
+ "image_height": "Verandering prent hoogte",
+ "image_url": "URL verander",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Verander teks inhoud",
+ "font_family": "Lettertipe verander Familie",
+ "font_size": "Verandering Lettertipe Grootte",
+ "bold": "Vetgedrukte teks",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Verander agtergrondkleur / opaciteit",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Pas na inhoud",
+ "fit_to_all": "Passing tot al inhoud",
+ "fit_to_canvas": "Passing tot doek",
+ "fit_to_layer_content": "Passing tot laag inhoud",
+ "fit_to_sel": "Passing tot seleksie",
+ "align_relative_to": "Align in verhouding tot ...",
+ "relativeTo": "relatief tot:",
+ "bladsy": "bladsy",
+ "largest_object": "grootste voorwerp",
+ "selected_objects": "verkose voorwerpe",
+ "smallest_object": "kleinste voorwerp",
+ "new_doc": "Nuwe Beeld",
+ "open_doc": "Open Beeld",
+ "export_png": "Export as PNG",
+ "save_doc": "Slaan Beeld",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Rig Middel",
+ "align_left": "Links Regterkant",
+ "align_middle": "Align Midde",
+ "align_right": "Lijn regs uit",
+ "align_top": "Align Top",
+ "mode_select": "Select Gereedschap",
+ "mode_fhpath": "Potlood tool",
+ "mode_line": "Lyn Gereedskap",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-hand Rectangle",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Sirkel",
+ "mode_fhellipse": "Gratis-Hand Ellips",
+ "mode_path": "Poli Gereedskap",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Gereedskap",
+ "mode_image": "Image Gereedskap",
+ "mode_zoom": "Klik op die Gereedskap",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Boontoe",
+ "redo": "Oordoen",
+ "tool_source": "Wysig Bron",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Groep Elemente",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elemente",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Skuif na Bottom",
+ "move_top": "Skuif na bo",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Spaar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Verwyder Laag",
+ "move_down": "Beweeg afbreek Down",
+ "new": "Nuwe Layer",
+ "rename": "Rename Layer",
+ "move_up": "Beweeg afbreek Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Doek Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Kies gedefinieerde:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ar.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ar.js.svn-base
new file mode 100644
index 000000000..d1076f1e0
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ar.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ar",
+ dir : "ltr",
+ common: {
+ "ok": "حفظ",
+ "cancel": "إلغاء",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "انقر لتغيير لون التعبئة ، تحولا مزدوجا فوق لتغيير لون السكتة الدماغية",
+ "zoom_level": "تغيير مستوى التكبير",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "تغير لون التعبئة",
+ "stroke_color": "تغير لون السكتة الدماغية",
+ "stroke_style": "تغيير نمط السكتة الدماغية اندفاعة",
+ "stroke_width": "تغيير عرض السكتة الدماغية",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "تغيير زاوية الدوران",
+ "blur": "Change gaussian blur value",
+ "opacity": "تغيير مختارة غموض البند",
+ "circle_cx": "دائرة التغيير لتنسيق cx",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "التغيير في دائرة نصف قطرها",
+ "ellipse_cx": "تغيير شكل البيضاوي cx تنسيق",
+ "ellipse_cy": "تغيير شكل البيضاوي قبرصي تنسيق",
+ "ellipse_rx": "تغيير شكل البيضاوي خ نصف قطرها",
+ "ellipse_ry": "تغيير القطع الناقص في دائرة نصف قطرها ذ",
+ "line_x1": "تغيير الخط لبدء تنسيق خ",
+ "line_x2": "تغيير الخط لانهاء خ تنسيق",
+ "line_y1": "تغيير الخط لبدء تنسيق ذ",
+ "line_y2": "تغيير الخط لإنهاء تنسيق ذ",
+ "rect_height": "تغيير المستطيل الارتفاع",
+ "rect_width": "تغيير عرض المستطيل",
+ "corner_radius": "تغيير مستطيل ركن الشعاع",
+ "image_width": "تغيير صورة العرض",
+ "image_height": "تغيير ارتفاع الصورة",
+ "image_url": "تغيير العنوان",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "تغيير محتويات النص",
+ "font_family": "تغيير الخط الأسرة",
+ "font_size": "تغيير حجم الخط",
+ "bold": "نص جريء",
+ "italic": "مائل نص"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "تغير لون الخلفية / غموض",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "لائقا للمحتوى",
+ "fit_to_all": "يصلح لجميع المحتويات",
+ "fit_to_canvas": "يصلح لوحة زيتية على قماش",
+ "fit_to_layer_content": "يصلح لطبقة المحتوى",
+ "fit_to_sel": "يصلح لاختيار",
+ "align_relative_to": "محاذاة النسبي ل ...",
+ "relativeTo": "بالنسبة إلى:",
+ "الصفحة": "الصفحة",
+ "largest_object": "أكبر كائن",
+ "selected_objects": "انتخب الأجسام",
+ "smallest_object": "أصغر كائن",
+ "new_doc": "صورة جديدة",
+ "open_doc": "فتح الصورة",
+ "export_png": "Export as PNG",
+ "save_doc": "حفظ صورة",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "محاذاة القاع",
+ "align_center": "مركز محاذاة",
+ "align_left": "محاذاة إلى اليسار",
+ "align_middle": "محاذاة الأوسط",
+ "align_right": "محاذاة إلى اليمين",
+ "align_top": "محاذاة الأعلى",
+ "mode_select": "اختر أداة",
+ "mode_fhpath": "أداة قلم رصاص",
+ "mode_line": "خط أداة",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "القطع الناقص",
+ "mode_circle": "دائرة",
+ "mode_fhellipse": "اليد الحرة البيضوي",
+ "mode_path": "بولي أداة",
+ "mode_shapelib": "Shape library",
+ "mode_text": "النص أداة",
+ "mode_image": "الصورة أداة",
+ "mode_zoom": "أداة تكبير",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "التراجع",
+ "redo": "إعادته",
+ "tool_source": "عدل المصدر",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "مجموعة عناصر",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "فك تجميع عناصر",
+ "docprops": "خصائص المستند",
+ "imagelib": "Image Library",
+ "move_bottom": "الانتقال إلى أسفل",
+ "move_top": "الانتقال إلى أعلى",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "حفظ",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "حذف طبقة",
+ "move_down": "تحرك لأسفل طبقة",
+ "new": "طبقة جديدة",
+ "rename": "تسمية الطبقة",
+ "move_up": "تحرك لأعلى طبقة",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "حدد سلفا:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.az.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.az.js.svn-base
new file mode 100644
index 000000000..c4350a29d
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.az.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "az",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.be.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.be.js.svn-base
new file mode 100644
index 000000000..6c201e1fc
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.be.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "be",
+ dir : "ltr",
+ common: {
+ "ok": "Захаваць",
+ "cancel": "Адмена",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Націсніце для змены колеру залівання, Shift-Click змяніць обводка",
+ "zoom_level": "Змяненне маштабу",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Змяненне колеру залівання",
+ "stroke_color": "Змяненне колеру інсульт",
+ "stroke_style": "Змяненне стылю інсульт працяжнік",
+ "stroke_width": "Змены шырыня штрых",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Змены вугла павароту",
+ "blur": "Change gaussian blur value",
+ "opacity": "Старонка абранага пункта непразрыстасці",
+ "circle_cx": "CX змене круга каардынаты",
+ "circle_cy": "Змены гуртка CY каардынаты",
+ "circle_r": "Старонка круга&#39;s радыус",
+ "ellipse_cx": "Змены эліпса CX каардынаты",
+ "ellipse_cy": "Змены эліпса CY каардынаты",
+ "ellipse_rx": "Х змяненні эліпса радыюсам",
+ "ellipse_ry": "Змены у эліпса радыюсам",
+ "line_x1": "Змены лінія пачынае каардынаты х",
+ "line_x2": "Змяненне за перыяд, скончыўся лінія каардынаты х",
+ "line_y1": "Змены лінія пачынае Y каардынаты",
+ "line_y2": "Змяненне за перыяд, скончыўся лінія Y каардынаты",
+ "rect_height": "Змены прастакутнік вышынёй",
+ "rect_width": "Змяненне шырыні прамавугольніка",
+ "corner_radius": "Змены прастакутнік Corner Radius",
+ "image_width": "Змены шырыня выявы",
+ "image_height": "Змена вышыні выявы",
+ "image_url": "Змяніць URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Змяненне зместу тэксту",
+ "font_family": "Змены Сямейства шрыфтоў",
+ "font_size": "Змяніць памер шрыфта",
+ "bold": "Тоўсты тэкст",
+ "italic": "Нахілены тэкст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Змяненне колеру фону / непразрыстасць",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Па памеры ўтрымання",
+ "fit_to_all": "Па памеру ўсе змесціва",
+ "fit_to_canvas": "Памер палатна",
+ "fit_to_layer_content": "По размеру слой ўтрымання",
+ "fit_to_sel": "Выбар памеру",
+ "align_relative_to": "Выраўнаваць па дачыненні да ...",
+ "relativeTo": "па параўнанні з:",
+ "старонка": "старонка",
+ "largest_object": "найбуйнейшы аб&#39;ект",
+ "selected_objects": "выбранымі аб&#39;ектамі",
+ "smallest_object": "маленькі аб&#39;ект",
+ "new_doc": "Новае выява",
+ "open_doc": "Адкрыць выява",
+ "export_png": "Export as PNG",
+ "save_doc": "Захаваць малюнак",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Лінаваць па ніжнім краю",
+ "align_center": "Лінаваць па цэнтру",
+ "align_left": "Па левым краю",
+ "align_middle": "Выраўнаваць Блізкага",
+ "align_right": "Па правым краю",
+ "align_top": "Лінаваць па верхнім краю",
+ "mode_select": "Выберыце інструмент",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Свабоднай рукі Прастакутнік",
+ "mode_ellipse": "Эліпс",
+ "mode_circle": "Круг",
+ "mode_fhellipse": "Свабоднай рукі Эліпс",
+ "mode_path": "Poly Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Тэкст Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Адмяніць",
+ "redo": "Паўтор",
+ "tool_source": "Змяніць зыходны",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група элементаў",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Элементы Разгруппировать",
+ "docprops": "Уласцівасці дакумента",
+ "imagelib": "Image Library",
+ "move_bottom": "Перамясціць уніз",
+ "move_top": "Перамясціць угару",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Захаваць",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Выдаліць слой",
+ "move_down": "Перамясціць слой на",
+ "new": "Новы слой",
+ "rename": "Перайменаваць Слой",
+ "move_up": "Перамяшчэнне слоя да",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Выберыце прадвызначэньні:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.bg.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.bg.js.svn-base
new file mode 100644
index 000000000..5b58f5683
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.bg.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "bg",
+ dir : "ltr",
+ common: {
+ "ok": "Спасявам",
+ "cancel": "Отказ",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Кликнете, за да промени попълнете цвят, на смени, кликнете да променят цвета си удар",
+ "zoom_level": "Промяна на ниво на мащабиране",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Промяна попълнете цвят",
+ "stroke_color": "Промяна на инсулт цвят",
+ "stroke_style": "Промяна на стила удар тире",
+ "stroke_width": "Промяна на ширината инсулт",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Промяна ъгъл на завъртане",
+ "blur": "Change gaussian blur value",
+ "opacity": "Промяна на избрания елемент непрозрачност",
+ "circle_cx": "CX Промяна кръг на координатната",
+ "circle_cy": "Промяна кръг&#39;s CY координира",
+ "circle_r": "Промяна кръг радиус",
+ "ellipse_cx": "Промяна на елипса&#39;s CX координира",
+ "ellipse_cy": "Промяна на елипса&#39;s CY координира",
+ "ellipse_rx": "Промяна на елипса&#39;s X радиус",
+ "ellipse_ry": "Промяна на елипса&#39;s Y радиус",
+ "line_x1": "Промяна на линия, започваща х координира",
+ "line_x2": "Промяна на линията приключва х координира",
+ "line_y1": "Промяна линия, започваща Y координира",
+ "line_y2": "Промяна на линията приключва Y координира",
+ "rect_height": "Промяна на правоъгълник височина",
+ "rect_width": "Промяна на правоъгълник ширина",
+ "corner_radius": "Промяна на правоъгълник Corner Radius",
+ "image_width": "Промяна на изображението ширина",
+ "image_height": "Промяна на изображението височина",
+ "image_url": "Промяна на URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Промяна на текст съдържание",
+ "font_family": "Промяна на шрифта Семейство",
+ "font_size": "Промени размера на буквите",
+ "bold": "Получер текст",
+ "italic": "Курсив текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Промяна на цвета на фона / непрозрачност",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit към съдържание",
+ "fit_to_all": "Побери цялото съдържание",
+ "fit_to_canvas": "Fit на платно",
+ "fit_to_layer_content": "Fit да слой съдържание",
+ "fit_to_sel": "Fit за подбор",
+ "align_relative_to": "Привеждане в сравнение с ...",
+ "relativeTo": "в сравнение с:",
+ "страница": "страница",
+ "largest_object": "най-големият обект",
+ "selected_objects": "избраните обекти",
+ "smallest_object": "най-малката обект",
+ "new_doc": "Ню Имидж",
+ "open_doc": "Отворете изображението",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Привеждане Отдолу",
+ "align_center": "Подравняване в средата",
+ "align_left": "Подравняване вляво",
+ "align_middle": "Привеждане в Близкия",
+ "align_right": "Подравняване надясно",
+ "align_top": "Привеждане Топ",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Свободен Употребявани правоъгълник",
+ "mode_ellipse": "Елипса",
+ "mode_circle": "Кръгът",
+ "mode_fhellipse": "Свободен Употребявани Елипса",
+ "mode_path": "Поли Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст Оръдие",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Отмени",
+ "redo": "Възстановяване",
+ "tool_source": "Редактиране Източник",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група Елементи",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Разгрупирай Елементи",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Премести надолу",
+ "move_top": "Премести в началото",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Спасявам",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Изтриване на слой",
+ "move_down": "Move слой надолу",
+ "new": "Нов слой",
+ "rename": "Преименуване Layer",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Изберете предварително:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ca.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ca.js.svn-base
new file mode 100644
index 000000000..d08a60dd7
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ca.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ca",
+ dir : "ltr",
+ common: {
+ "ok": "Salvar",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Feu clic per canviar el color de farciment, shift-clic per canviar el color del traç",
+ "zoom_level": "Canviar el nivell de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Canviar el color de farciment",
+ "stroke_color": "Canviar el color del traç",
+ "stroke_style": "Canviar estil de traç guió",
+ "stroke_width": "Canviar l&#39;amplada del traç",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Canviar l&#39;angle de rotació",
+ "blur": "Change gaussian blur value",
+ "opacity": "Canviar la opacitat tema seleccionat",
+ "circle_cx": "CX cercle Canvi de coordenades",
+ "circle_cy": "Cercle Canvi CY coordinar",
+ "circle_r": "Ràdio de cercle Canvi",
+ "ellipse_cx": "Canviar lipse CX coordinar",
+ "ellipse_cy": "Lipse Canvi CY coordinar",
+ "ellipse_rx": "Ràdio x lipse Canvi",
+ "ellipse_ry": "Ràdio i lipse Canvi",
+ "line_x1": "Canviar la línia de partida de la coordenada x",
+ "line_x2": "Canviar la línia d&#39;hores de coordenada x",
+ "line_y1": "Canviar la línia de partida i de coordinar",
+ "line_y2": "Canviar la línia d&#39;hores de coordenada",
+ "rect_height": "Rectangle d&#39;alçada Canvi",
+ "rect_width": "Ample rectangle Canvi",
+ "corner_radius": "Canviar Rectangle Corner Radius",
+ "image_width": "Amplada de la imatge Canvi",
+ "image_height": "Canviar l&#39;altura de la imatge",
+ "image_url": "Canviar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Contingut del text",
+ "font_family": "Canviar la font Família",
+ "font_size": "Change Font Size",
+ "bold": "Text en negreta",
+ "italic": "Text en cursiva"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Color de fons / opacitat",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Ajustar al contingut",
+ "fit_to_all": "Ajustar a tot el contingut",
+ "fit_to_canvas": "Ajustar a la lona",
+ "fit_to_layer_content": "Ajustar al contingut de la capa d&#39;",
+ "fit_to_sel": "Ajustar a la selecció",
+ "align_relative_to": "Alinear pel que fa a ...",
+ "relativeTo": "en relació amb:",
+ "Pàgina": "Pàgina",
+ "largest_object": "objecte més gran",
+ "selected_objects": "objectes escollits",
+ "smallest_object": "objecte més petit",
+ "new_doc": "Nova imatge",
+ "open_doc": "Obrir imatge",
+ "export_png": "Export as PNG",
+ "save_doc": "Guardar imatge",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinear baix",
+ "align_center": "Alinear al centre",
+ "align_left": "Alinear a l&#39;esquerra",
+ "align_middle": "Alinear Medi",
+ "align_right": "Alinear a la dreta",
+ "align_top": "Alinear a dalt",
+ "mode_select": "Eina de selecció",
+ "mode_fhpath": "Eina Llapis",
+ "mode_line": "L&#39;eina",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Lipse",
+ "mode_circle": "Cercle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Eina de text",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Desfés",
+ "redo": "Refer",
+ "tool_source": "Font Edita",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elements de Grup de",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Desagrupar elements",
+ "docprops": "Propietats del document",
+ "imagelib": "Image Library",
+ "move_bottom": "Mou al final",
+ "move_top": "Mou al principi",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Salvar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Eliminar capa",
+ "move_down": "Mou la capa de Down",
+ "new": "Nova capa",
+ "rename": "Canvieu el nom de la capa",
+ "move_up": "Mou la capa Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Seleccioneu predefinides:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.cs.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.cs.js.svn-base
new file mode 100644
index 000000000..e39f8627e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.cs.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "cs",
+ dir : "ltr",
+ common: {
+ "ok": "Uložit",
+ "cancel": "Storno",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "šipka dolů",
+ "key_up": "šipka nahoru",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Běží na"
+ },
+ ui: {
+ "toggle_stroke_tools": "Zobrazit/schovat více možností",
+ "palette_info": "Kliknutím změníte barvu výplně, kliknutím současně s klávesou shift změníte barvu čáry",
+ "zoom_level": "Změna přiblížení",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Změnit ID elementu",
+ "fill_color": "Změnit barvu výplně",
+ "stroke_color": "Změnit barvu čáry",
+ "stroke_style": "Změnit styl čáry",
+ "stroke_width": "Změnit šířku čáry",
+ "pos_x": "Změnit souřadnici X",
+ "pos_y": "Změnit souřadnici Y",
+ "linecap_butt": "Konec úsečky: přesný",
+ "linecap_round": "Konec úsečky: zaoblený",
+ "linecap_square": "Konec úsečky: s čtvercovým přesahem",
+ "linejoin_bevel": "Styl napojení úseček: zkosené",
+ "linejoin_miter": "Styl napojení úseček: ostré",
+ "linejoin_round": "Styl napojení úseček: oblé",
+ "angle": "Změnit úhel natočení",
+ "blur": "Změnit rozostření",
+ "opacity": "Změnit průhlednost objektů",
+ "circle_cx": "Změnit souřadnici X středu kružnice",
+ "circle_cy": "Změnit souřadnici Y středu kružnice",
+ "circle_r": "Změnit poloměr kružnice",
+ "ellipse_cx": "Změnit souřadnici X středu elipsy",
+ "ellipse_cy": "Změnit souřadnici Y středu elipsy",
+ "ellipse_rx": "Změnit poloměr X elipsy",
+ "ellipse_ry": "Změnit poloměr Y elipsy",
+ "line_x1": "Změnit počáteční souřadnici X úsečky",
+ "line_x2": "Změnit koncovou souřadnici X úsečky",
+ "line_y1": "Změnit počáteční souřadnici Y úsečky",
+ "line_y2": "Změnit koncovou souřadnici X úsečky",
+ "rect_height": "Změnit výšku obdélníku",
+ "rect_width": "Změnit šířku obdélníku",
+ "corner_radius": "Změnit zaoblení obdélníku",
+ "image_width": "Změnit šířku dokumentu",
+ "image_height": "Změnit výšku dokumentu",
+ "image_url": "Změnit adresu URL",
+ "node_x": "Změnit souřadnici X uzlu",
+ "node_y": "Změnit souřadnici Y uzlu",
+ "seg_type": "Změnit typ segmentu",
+ "straight_segments": "úsečka",
+ "curve_segments": "křivka",
+ "text_contents": "Změnit text",
+ "font_family": "Změnit font",
+ "font_size": "Změnit velikost písma",
+ "bold": "Tučně",
+ "italic": "Kurzíva"
+ },
+ tools: {
+ "main_menu": "Hlavní menu",
+ "bkgnd_color_opac": "Změnit barvu a průhlednost pozadí",
+ "connector_no_arrow": "Bez šipky",
+ "fitToContent": "přizpůsobit obsahu",
+ "fit_to_all": "Přizpůsobit veškerému obsahu",
+ "fit_to_canvas": "Přizpůsobit stránce",
+ "fit_to_layer_content": "Přizpůsobit obsahu vrstvy",
+ "fit_to_sel": "Přizpůsobit výběru",
+ "align_relative_to": "Zarovnat relativně",
+ "relativeTo": "relatativně k:",
+ "stránce": "stránce",
+ "largest_object": "největšímu objektu",
+ "selected_objects": "zvoleným objektům",
+ "smallest_object": "nejmenšímu objektu",
+ "new_doc": "Nový dokument",
+ "open_doc": "Otevřít dokument",
+ "export_png": "Exportovat jako PNG",
+ "save_doc": "Uložit dokument",
+ "import_doc": "Importovat SVG",
+ "align_to_page": "Zarovnat element na stránku",
+ "align_bottom": "Zarovnat dolů",
+ "align_center": "Zarovnat nastřed",
+ "align_left": "Zarovnat doleva",
+ "align_middle": "Zarovnat nastřed",
+ "align_right": "Zarovnat doprava",
+ "align_top": "Zarovnat nahoru",
+ "mode_select": "Výběr a transformace objektů",
+ "mode_fhpath": "Kresba od ruky",
+ "mode_line": "Úsečka",
+ "mode_connect": "Spojit dva objekty",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Obdélník volnou rukou",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Kružnice",
+ "mode_fhellipse": "Elipsa volnou rukou",
+ "mode_path": "Křivka",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text",
+ "mode_image": "Obrázek",
+ "mode_zoom": "Přiblížení",
+ "mode_eyedropper": "Kapátko",
+ "no_embed": "POZOR: Obrázek nelze uložit s dokumentem. Bude zobrazován z adresáře, kde se nyní nachází.",
+ "undo": "Zpět",
+ "redo": "Znovu",
+ "tool_source": "Upravovat SVG kód",
+ "wireframe_mode": "Zobrazit jen kostru",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Seskupit objekty",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Objekt na křivku",
+ "reorient_path": "Změna orientace křivky",
+ "ungroup": "Zrušit seskupení",
+ "docprops": "Vlastnosti dokumentu",
+ "imagelib": "Image Library",
+ "move_bottom": "Vrstvu úplně dospodu",
+ "move_top": "Vrstvu úplně nahoru",
+ "node_clone": "Vložit nový uzel",
+ "node_delete": "Ostranit uzel",
+ "node_link": "Provázat ovládací body uzlu",
+ "add_subpath": "Přidat další součást křivky",
+ "openclose_path": "Otevřít/zavřít součást křivky",
+ "source_save": "Uložit",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Vrstva",
+ "layers": "Layers",
+ "del": "Odstranit vrstvu",
+ "move_down": "Přesunout vrstvu níž",
+ "new": "Přidat vrstvu",
+ "rename": "Přejmenovat vrstvu",
+ "move_up": "Přesunout vrstvu výš",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Přesunout objekty do:",
+ "move_selected": "Přesunout objekty do jiné vrstvy"
+ },
+ config: {
+ "image_props": "Vlastnosti dokumentu",
+ "doc_title": "Název",
+ "doc_dims": "Vlastní velikost",
+ "included_images": "Vložené obrázky",
+ "image_opt_embed": "Vkládat do dokumentu",
+ "image_opt_ref": "Jen odkazem",
+ "editor_prefs": "Nastavení editoru",
+ "icon_size": "Velikost ikon",
+ "language": "Jazyk",
+ "background": "Obrázek v pozadí editoru",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Pozor: obrázek v pozadí nebude uložen jako součást dokumentu.",
+ "icon_large": "velké",
+ "icon_medium": "střední",
+ "icon_small": "malé",
+ "icon_xlarge": "největší",
+ "select_predefined": "vybrat předdefinovaný:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Nevhodná hodnota",
+ "noContentToFitTo":"Vyberte oblast pro přizpůsobení",
+ "dupeLayerName":"Taková vrstva už bohužel existuje",
+ "enterUniqueLayerName":"Zadejte prosím jedinečné jméno pro vrstvu",
+ "enterNewLayerName":"Zadejte prosím jméno pro novou vrstvu",
+ "layerHasThatName":"Vrstva už se tak jmenuje",
+ "QmoveElemsToLayer":"Opravdu chcete přesunout vybrané objekty do vrstvy '%s'?",
+ "QwantToClear":"Opravdu chcete smazat současný dokument?\nHistorie změn bude také smazána.",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Chyba v parsování zdrojového kódu SVG.\nChcete se vrátit k původnímu?",
+ "QignoreSourceChanges":"Opravdu chcete stornovat změny provedené v SVG kódu?",
+ "featNotSupported":"Tato vlastnost ještě není k dispozici",
+ "enterNewImgURL":"Vložte adresu URL, na které se nachází vkládaný obrázek",
+ "defsFailOnSave": "POZOR: Kvůli nedokonalosti Vašeho prohlížeče se mohou některé části dokumentu špatně vykreslovat (mohou chybět barevné přechody nebo některé objekty). Po uložení dokumentu by se ale vše mělo zobrazovat správně.",
+ "loadingImage":"Nahrávám obrázek ...",
+ "saveFromBrowser": "Použijte nabídku \"Uložit stránku jako ...\" ve Vašem prohlížeči pro uložení dokumentu do souboru %s.",
+ "noteTheseIssues": "Mohou se vyskytnout následující problémy: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.cy.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.cy.js.svn-base
new file mode 100644
index 000000000..4808073bc
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.cy.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "cy",
+ dir : "ltr",
+ common: {
+ "ok": "Cadw",
+ "cancel": "Canslo",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Cliciwch yma i lenwi newid lliw, sifft-cliciwch i newid lliw strôc",
+ "zoom_level": "Newid lefel chwyddo",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Newid lliw llenwi",
+ "stroke_color": "Newid lliw strôc",
+ "stroke_style": "Newid arddull strôc diferyn",
+ "stroke_width": "Lled strôc Newid",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Ongl cylchdro Newid",
+ "blur": "Change gaussian blur value",
+ "opacity": "Newid dewis Didreiddiad eitem",
+ "circle_cx": "CX Newid cylch yn cydlynu",
+ "circle_cy": "Newid cylch&#39;s cy gydgysylltu",
+ "circle_r": "Newid radiws cylch yn",
+ "ellipse_cx": "Newid Ellipse yn CX gydgysylltu",
+ "ellipse_cy": "Newid Ellipse yn cydlynu cy",
+ "ellipse_rx": "Radiws Newid Ellipse&#39;s x",
+ "ellipse_ry": "Radiws Newid Ellipse yn y",
+ "line_x1": "Newid llinell yn cychwyn x gydgysylltu",
+ "line_x2": "Newid llinell yn diweddu x gydgysylltu",
+ "line_y1": "Newid llinell ar y cychwyn yn cydlynu",
+ "line_y2": "Newid llinell yn dod i ben y gydgysylltu",
+ "rect_height": "Uchder petryal Newid",
+ "rect_width": "Lled petryal Newid",
+ "corner_radius": "Newid Hirsgwâr Corner Radiws",
+ "image_width": "Lled delwedd Newid",
+ "image_height": "Uchder delwedd Newid",
+ "image_url": "Newid URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Cynnwys testun Newid",
+ "font_family": "Newid Font Teulu",
+ "font_size": "Newid Maint Ffont",
+ "bold": "Testun Bras",
+ "italic": "Italig Testun"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Newid lliw cefndir / Didreiddiad",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Ffit i Cynnwys",
+ "fit_to_all": "Yn addas i bawb content",
+ "fit_to_canvas": "Ffit i ofyn",
+ "fit_to_layer_content": "Ffit cynnwys haen i",
+ "fit_to_sel": "Yn addas at ddewis",
+ "align_relative_to": "Alinio perthynas i ...",
+ "relativeTo": "cymharol i:",
+ "tudalen": "tudalen",
+ "largest_object": "gwrthrych mwyaf",
+ "selected_objects": "gwrthrychau etholedig",
+ "smallest_object": "lleiaf gwrthrych",
+ "new_doc": "Newydd Delwedd",
+ "open_doc": "Delwedd Agored",
+ "export_png": "Export as PNG",
+ "save_doc": "Cadw Delwedd",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinio Gwaelod",
+ "align_center": "Alinio Center",
+ "align_left": "Alinio Chwith",
+ "align_middle": "Alinio Canol",
+ "align_right": "Alinio Hawl",
+ "align_top": "Alinio Top",
+ "mode_select": "Dewiswch Offer",
+ "mode_fhpath": "Teclyn pensil",
+ "mode_line": "Llinell Offer",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Hand rhad ac am ddim Hirsgwâr",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Cylch",
+ "mode_fhellipse": "Rhad ac am ddim Hand Ellipse",
+ "mode_path": "Offer poly",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Testun Offer",
+ "mode_image": "Offer Delwedd",
+ "mode_zoom": "Offer Chwyddo",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Dadwneud",
+ "redo": "Ail-wneud",
+ "tool_source": "Golygu Ffynhonnell",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elfennau Grŵp",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elfennau Ungroup",
+ "docprops": "Document Eiddo",
+ "imagelib": "Image Library",
+ "move_bottom": "Symud i&#39;r Gwaelod",
+ "move_top": "Symud i&#39;r Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Cadw",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Dileu Haen",
+ "move_down": "Symud Haen i Lawr",
+ "new": "Haen Newydd",
+ "rename": "Ail-enwi Haen",
+ "move_up": "Symud Haen Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Rhagosodol Dewis:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.da.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.da.js.svn-base
new file mode 100644
index 000000000..ae209cdea
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.da.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "da",
+ dir : "ltr",
+ common: {
+ "ok": "Gemme",
+ "cancel": "Annuller",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik for at ændre fyldfarve, shift-klik for at ændre stregfarve",
+ "zoom_level": "Skift zoomniveau",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Skift fyldfarve",
+ "stroke_color": "Skift stregfarve",
+ "stroke_style": "Skift slagtilfælde Dash stil",
+ "stroke_width": "Skift slagtilfælde bredde",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Skift rotationsvinkel",
+ "blur": "Change gaussian blur value",
+ "opacity": "Skift valgte element opacitet",
+ "circle_cx": "Skift cirklens cx koordinere",
+ "circle_cy": "Skift cirklens cy koordinere",
+ "circle_r": "Skift cirklens radius",
+ "ellipse_cx": "Skift ellipse&#39;s cx koordinere",
+ "ellipse_cy": "Skift ellipse&#39;s cy koordinere",
+ "ellipse_rx": "Skift ellipse&#39;s x radius",
+ "ellipse_ry": "Skift ellipse&#39;s y radius",
+ "line_x1": "Skift linie&#39;s start x-koordinat",
+ "line_x2": "Skift Line&#39;s slutter x-koordinat",
+ "line_y1": "Skift linjens start y-koordinat",
+ "line_y2": "Skift Line&#39;s slutter y-koordinat",
+ "rect_height": "Skift rektangel højde",
+ "rect_width": "Skift rektanglets bredde",
+ "corner_radius": "Skift Rektangel Corner Radius",
+ "image_width": "Skift billede bredde",
+ "image_height": "Skift billede højde",
+ "image_url": "Skift webadresse",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Skift tekst indhold",
+ "font_family": "Skift Font Family",
+ "font_size": "Skift skriftstørrelse",
+ "bold": "Fed tekst",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Skift baggrundsfarve / uigennemsigtighed",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Tilpas til indhold",
+ "fit_to_all": "Passer til alt indhold",
+ "fit_to_canvas": "Tilpas til lærred",
+ "fit_to_layer_content": "Tilpas til lag indhold",
+ "fit_to_sel": "Tilpas til udvælgelse",
+ "align_relative_to": "Juster i forhold til ...",
+ "relativeTo": "i forhold til:",
+ "side": "side",
+ "largest_object": "største objekt",
+ "selected_objects": "valgte objekter",
+ "smallest_object": "mindste objekt",
+ "new_doc": "Nyt billede",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Gem billede",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Juster Bottom",
+ "align_center": "Centrer",
+ "align_left": "Venstrejusteret",
+ "align_middle": "Juster Mellemøsten",
+ "align_right": "Højrejusteret",
+ "align_top": "Juster Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rektangel",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Cirkel",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekstværktøj",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Fortryd",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Gruppe Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Opdel Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Flyt til bund",
+ "move_top": "Flyt til toppen",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Gemme",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Slet Layer",
+ "move_down": "Flyt lag ned",
+ "new": "New Layer",
+ "rename": "Omdøb Layer",
+ "move_up": "Flyt Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Vælg foruddefinerede:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.de.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.de.js.svn-base
new file mode 100644
index 000000000..d0e7ad3ec
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.de.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "de",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Abbrechen",
+ "key_backspace": "Rücktaste",
+ "key_del": "Löschen",
+ "key_down": "nach unten",
+ "key_up": "nach oben",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "angetrieben durch"
+ },
+ ui: {
+ "toggle_stroke_tools": "Zeige/Verberge weitere Linien Werkzeuge",
+ "palette_info": "Klick zum Ändern der Füllfarbe, Shift-Klick zum Ändern der Linienfarbe",
+ "zoom_level": "vergrößern",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Füllfarbe ändern",
+ "stroke_color": "Linienfarbe ändern",
+ "stroke_style": "Linienstil ändern",
+ "stroke_width": "Linienbreite ändern",
+ "pos_x": "Ändere die X Koordinate",
+ "pos_y": "Ändere die Y Koordinate",
+ "linecap_butt": "Form der Linienendung: Stumpf",
+ "linecap_round": "Form der Linienendung: Rund",
+ "linecap_square": "Form der Linienendung: Rechteckig",
+ "linejoin_bevel": "Zusammentreffen von zwei Linien: abgeschrägte Kante",
+ "linejoin_miter": "Zusammentreffen von zwei Linien: Gehrung",
+ "linejoin_round": "Zusammentreffen von zwei Linien: Rund",
+ "angle": "Drehwinkel ändern",
+ "blur": "Ändere Gaußschen Weichzeichner Wert",
+ "opacity": "Opazität des ausgewählten Objekts ändern",
+ "circle_cx": "Kreiszentrum (cx) ändern",
+ "circle_cy": "Kreiszentrum (cy) ändern",
+ "circle_r": "Kreisradius (r) ändern",
+ "ellipse_cx": "Ellipsenzentrum (cx) ändern",
+ "ellipse_cy": "Ellipsenzentrum (cy) ändern",
+ "ellipse_rx": "Ellipsenradius (x) ändern",
+ "ellipse_ry": "Ellipsenradius (y) ändern",
+ "line_x1": "X-Koordinate des Linienanfangs ändern",
+ "line_x2": "X-Koordinate des Linienendes ändern",
+ "line_y1": "Y-Koordinate des Linienanfangs ändern",
+ "line_y2": "Y-Koordinate des Linienendes ändern",
+ "rect_height": "Höhe des Rechtecks ändern",
+ "rect_width": "Breite des Rechtecks ändern",
+ "corner_radius": "Eckenradius des Rechtecks ändern",
+ "image_width": "Bildbreite ändern",
+ "image_height": "Bildhöhe ändern",
+ "image_url": "URL ändern",
+ "node_x": "Ändere die X Koordinate des Knoten",
+ "node_y": "Ändere die Y Koordinate des Knoten",
+ "seg_type": "Ändere den Typ des Segments",
+ "straight_segments": "Gerade",
+ "curve_segments": "Kurve",
+ "text_contents": "Textinhalt erstellen und bearbeiten",
+ "font_family": "Schriftart wählen",
+ "font_size": "Schriftgröße einstellen",
+ "bold": "Fetter Text",
+ "italic": "Kursiver Text"
+ },
+ tools: {
+ "main_menu": "Hauptmenü",
+ "bkgnd_color_opac": "Hintergrundfarbe ändern / Opazität",
+ "connector_no_arrow": "Kein Pfeil",
+ "fitToContent": "An den Inhalt anpassen",
+ "fit_to_all": "An gesamten Inhalt anpassen",
+ "fit_to_canvas": "An die Zeichenfläche anpassen",
+ "fit_to_layer_content": "An Inhalt der Ebene anpassen",
+ "fit_to_sel": "An die Auswahl anpassen",
+ "align_relative_to": "Relativ zu einem anderem Objekt ausrichten ...",
+ "relativeTo": "im Vergleich zu:",
+ "Seite": "Seite",
+ "largest_object": "größtes Objekt",
+ "selected_objects": "gewählte Objekte",
+ "smallest_object": "kleinstes Objekt",
+ "new_doc": "Neues Bild",
+ "open_doc": "Bild öffnen",
+ "export_png": "Als PNG exportieren",
+ "save_doc": "Bild speichern",
+ "import_doc": "Importiere SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Unten ausrichten",
+ "align_center": "Zentriert ausrichten",
+ "align_left": "Linksbündig ausrichten",
+ "align_middle": "In der Mitte ausrichten",
+ "align_right": "Rechtsbündig ausrichten",
+ "align_top": "Oben ausrichten",
+ "mode_select": "Objekte auswählen und verändern",
+ "mode_fhpath": "Freihandlinien zeichnen",
+ "mode_line": "Linien zeichnen",
+ "mode_connect": "Verbinde zwei Objekte",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Freihand Rechteck",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Kreis",
+ "mode_fhellipse": "Freihand Ellipse",
+ "mode_path": "Pfad zeichnen",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text erstellen und bearbeiten",
+ "mode_image": "Bild einfügen",
+ "mode_zoom": "Zoomfaktor vergrößern oder verringern",
+ "mode_eyedropper": "Ableger",
+ "no_embed": "Hinweis: Dieses Bild kann nicht eingebettet werden. Eine Anzeige hängt von diesem Pfad ab.",
+ "undo": "Rückgängig",
+ "redo": "Wiederherstellen",
+ "tool_source": "Quellecode bearbeiten",
+ "wireframe_mode": "Drahtmodell Modus",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Gruppieren",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Gewähltes Objekt in einen Pfad konvertieren",
+ "reorient_path": "Neuausrichtung des Pfades",
+ "ungroup": "Gruppierung aufheben",
+ "docprops": "Dokument-Eigenschaften",
+ "imagelib": "Image Library",
+ "move_bottom": "Die gewählten Objekte nach ganz unten schieben",
+ "move_top": "Die gewählten Objekte nach ganz oben anheben",
+ "node_clone": "Klone den Knoten",
+ "node_delete": "Lösche den Knoten",
+ "node_link": "Gekoppelte oder separate Kontroll Punkte für die Bearbeitung des Pfades",
+ "add_subpath": "Teilpfad hinzufügen",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Änderungen akzeptieren",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Löschen": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Ebene",
+ "layers": "Layers",
+ "del": "Ebene löschen",
+ "move_down": "Ebene nach unten verschieben",
+ "new": "Neue Ebene",
+ "rename": "Ebene umbenennen",
+ "move_up": "Ebene nach oben verschieben",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Verschiebe ausgewählte Objekte:",
+ "move_selected": "Verschiebe ausgewählte Objekte auf eine andere Ebene"
+ },
+ config: {
+ "image_props": "Bildeigenschaften",
+ "doc_title": "Titel",
+ "doc_dims": "Dimension der Zeichenfläche",
+ "included_images": "Eingefügte Bilder",
+ "image_opt_embed": "Daten einbetten (lokale Dateien)",
+ "image_opt_ref": "Benutze die Datei Referenz",
+ "editor_prefs": "Editor Einstellungen",
+ "icon_size": "Symbol Abmessungen",
+ "language": "Sprache",
+ "background": "Editor Hintergrund",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Anmerkung: Der Hintergrund wird mit der Speicherung des Bildes nicht gespeichert.",
+ "icon_large": "Groß",
+ "icon_medium": "Mittel",
+ "icon_small": "Klein",
+ "icon_xlarge": "Sehr Groß",
+ "select_predefined": "Auswahl einer vordefinierten:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Fehlerhafter Wert",
+ "noContentToFitTo":"Kein Inhalt anzupassen",
+ "dupeLayerName":"Eine Ebene hat bereits diesen Namen!",
+ "enterUniqueLayerName":"Verwenden Sie einen eindeutigen Namen für die Ebene",
+ "enterNewLayerName":"Geben Sie bitte einen neuen Namen für die Ebene ein",
+ "layerHasThatName":"Eine Ebene hat bereits diesen Namen",
+ "QmoveElemsToLayer":"Verschiebe ausgewählte Objekte in die Ebene '%s'?",
+ "QwantToClear":"Möchten Sie die Zeichnung löschen?\nDadurch wird auch die Rückgängig Funktion zurückgesetzt!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Die Syntaxanalyse Ihrer SVG Quelle enthält Fehler.\nOriginal SVG wiederherstellen?",
+ "QignoreSourceChanges":"Soll die Änderung am SVG Quelltext ignoriert werden?",
+ "featNotSupported":"Diese Eigenschaft wird nicht unterstützt",
+ "enterNewImgURL":"Geben Sie die URL für das neue Bild an",
+ "defsFailOnSave": "Hinweis: Aufgrund eines Fehlers in Ihrem Browser, kann dieses Bild falsch angezeigt werden (fehlende Gradienten oder Elemente). Es wird jedoch richtig angezeigt sobald es tatsächlich gespeichert wird.",
+ "loadingImage":"Bild wird geladen, bitte warten ...",
+ "saveFromBrowser": "Wählen Sie \"Speichern unter ...\" in Ihrem Browser, um das Bild als Datei %s zu speichern.",
+ "noteTheseIssues": "Beachten Sie außerdem die folgenden Probleme: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.el.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.el.js.svn-base
new file mode 100644
index 000000000..319ebc3b6
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.el.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "el",
+ dir : "ltr",
+ common: {
+ "ok": "Αποθηκεύω",
+ "cancel": "Άκυρο",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Κάντε κλικ για να συμπληρώσετε την αλλαγή χρώματος, στροφή κλικ για να αλλάξετε το χρώμα εγκεφαλικό",
+ "zoom_level": "Αλλαγή επίπεδο μεγέθυνσης",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Αλλαγή συμπληρώστε χρώμα",
+ "stroke_color": "Αλλαγή χρώματος εγκεφαλικό",
+ "stroke_style": "Αλλαγή στυλ παύλα εγκεφαλικό",
+ "stroke_width": "Αλλαγή πλάτος γραμμής",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Αλλαγή γωνία περιστροφής",
+ "blur": "Change gaussian blur value",
+ "opacity": "Αλλαγή αδιαφάνεια επιλεγμένο σημείο",
+ "circle_cx": "Cx Αλλαγή κύκλου συντονίζουν",
+ "circle_cy": "Αλλαγή κύκλου cy συντονίζουν",
+ "circle_r": "Αλλαγή ακτίνα κύκλου",
+ "ellipse_cx": "Αλλαγή ellipse του CX συντονίζουν",
+ "ellipse_cy": "Αλλαγή ellipse του cy συντονίζουν",
+ "ellipse_rx": "X ακτίνα Αλλαγή ellipse του",
+ "ellipse_ry": "Y ακτίνα Αλλαγή ellipse του",
+ "line_x1": "Αλλαγή γραμμής εκκίνησης x συντονίζουν",
+ "line_x2": "Αλλαγή γραμμής λήγει x συντονίζουν",
+ "line_y1": "Αλλαγή γραμμής εκκίνησης y συντονίζουν",
+ "line_y2": "Αλλαγή γραμμής λήγει y συντονίζουν",
+ "rect_height": "Αλλαγή ύψος ορθογωνίου",
+ "rect_width": "Αλλαγή πλάτους ορθογώνιο",
+ "corner_radius": "Αλλαγή ορθογώνιο Corner Radius",
+ "image_width": "Αλλαγή πλάτος εικόνας",
+ "image_height": "Αλλαγή ύψος εικόνας",
+ "image_url": "Αλλαγή URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Αλλαγή περιεχόμενο κειμένου",
+ "font_family": "Αλλαγή γραμματοσειράς Οικογένεια",
+ "font_size": "Αλλαγή μεγέθους γραμματοσειράς",
+ "bold": "Bold Text",
+ "italic": "Πλάγιους"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Αλλαγή χρώματος φόντου / αδιαφάνεια",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Ταιριάζει σε όλο το περιεχόμενο",
+ "fit_to_canvas": "Προσαρμογή στο μουσαμά",
+ "fit_to_layer_content": "Προσαρμογή στο περιεχόμενο στρώμα",
+ "fit_to_sel": "Fit to επιλογή",
+ "align_relative_to": "Στοίχιση σε σχέση με ...",
+ "relativeTo": "σε σχέση με:",
+ "σελίδα": "σελίδα",
+ "largest_object": "μεγαλύτερο αντικείμενο",
+ "selected_objects": "εκλέγεται αντικείμενα",
+ "smallest_object": "μικρότερο αντικείμενο",
+ "new_doc": "Νέα εικόνα",
+ "open_doc": "Άνοιγμα εικόνας",
+ "export_png": "Export as PNG",
+ "save_doc": "Αποθήκευση εικόνας",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Στοίχισηκάτω",
+ "align_center": "Στοίχισηστοκέντρο",
+ "align_left": "Στοίχισηαριστερά",
+ "align_middle": "Ευθυγράμμιση Μέση",
+ "align_right": "Στοίχισηδεξιά",
+ "align_top": "Στοίχισηπάνω",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Εργαλείομολυβιού",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Δωρεάν-Hand ορθογώνιο",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Κύκλος",
+ "mode_fhellipse": "Δωρεάν-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Κείμενο Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Αναίρεση",
+ "redo": "Redo",
+ "tool_source": "Επεξεργασία Πηγή",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Ομάδα Στοιχεία",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Κατάργηση ομαδοποίησης Στοιχεία",
+ "docprops": "Ιδιότητες εγγράφου",
+ "imagelib": "Image Library",
+ "move_bottom": "Μετακίνηση προς τα κάτω",
+ "move_top": "Μετακίνηση στην αρχή",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Αποθηκεύω",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Διαγραφήστρώματος",
+ "move_down": "Μετακίνηση Layer Down",
+ "new": "Νέο Layer",
+ "rename": "Μετονομασία Layer",
+ "move_up": "Μετακίνηση Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Επιλογή προκαθορισμένων:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.en.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.en.js.svn-base
new file mode 100644
index 000000000..de63d8b32
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.en.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "en",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width by 1, shift-click to change by 0.1",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Layer",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Move Layer Up",
+ "move_down": "Move Layer Down",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.es.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.es.js.svn-base
new file mode 100644
index 000000000..9b3c1aed0
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.es.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "es",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancelar",
+ "key_backspace": "retroceso",
+ "key_del": "suprimir",
+ "key_down": "abajo",
+ "key_up": "arriba",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Mostrar/ocultar herramientas de trazo adicionales",
+ "palette_info": "Haga clic para cambiar el color de relleno. Pulse Mayús y haga clic para cambiar el color del contorno.",
+ "zoom_level": "Cambiar el nivel de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Cambiar el color de relleno",
+ "stroke_color": "Cambiar el color del contorno",
+ "stroke_style": "Cambiar el estilo del trazo del contorno",
+ "stroke_width": "Cambiar el grosor del contorno",
+ "pos_x": "Cambiar la posición horizontal X",
+ "pos_y": "Cambiar la posición vertical Y",
+ "linecap_butt": "Final de la línea: en el nodo",
+ "linecap_round": "Final de la línea: redondeada",
+ "linecap_square": "Final de la línea: cuadrada",
+ "linejoin_bevel": "Unión: biselada",
+ "linejoin_miter": "Unión: recta",
+ "linejoin_round": "Unión: redondeada",
+ "angle": "Cambiar ángulo de rotación",
+ "blur": "Ajustar desenfoque gausiano",
+ "opacity": "Cambiar la opacidad del objeto seleccionado",
+ "circle_cx": "Cambiar la posición horizonral CX del círculo",
+ "circle_cy": "Cambiar la posición vertical CY del círculo",
+ "circle_r": "Cambiar el radio del círculo",
+ "ellipse_cx": "Cambiar la posición horizontal CX de la elipse",
+ "ellipse_cy": "Cambiar la posición vertical CY de la elipse",
+ "ellipse_rx": "Cambiar el radio horizontal X de la elipse",
+ "ellipse_ry": "Cambiar el radio vertical Y de la elipse",
+ "line_x1": "Cambiar la posición horizontal X del comienzo de la línea",
+ "line_x2": "Cambiar la posición horizontal X del final de la línea",
+ "line_y1": "Cambiar la posición vertical Y del comienzo de la línea",
+ "line_y2": "Cambiar la posición vertical Y del final de la línea",
+ "rect_height": "Cambiar la altura del rectángulo",
+ "rect_width": "Cambiar el ancho rectángulo",
+ "corner_radius": "Cambiar el radio de las esquinas del rectángulo",
+ "image_width": "Cambiar el ancho de la imagen",
+ "image_height": "Cambiar la altura de la imagen",
+ "image_url": "Modificar URL",
+ "node_x": "Cambiar la posición horizontal X del nodo",
+ "node_y": "Cambiar la posición vertical Y del nodo",
+ "seg_type": "Cambiar el tipo de segmento",
+ "straight_segments": "Recta",
+ "curve_segments": "Curva",
+ "text_contents": "Modificar el texto",
+ "font_family": "Tipo de fuente",
+ "font_size": "Tamaño de la fuente",
+ "bold": "Texto en negrita",
+ "italic": "Texto en cursiva"
+ },
+ tools: {
+ "main_menu": "Menú principal",
+ "bkgnd_color_opac": "Cambiar color de fondo / opacidad",
+ "connector_no_arrow": "Sin flecha",
+ "fitToContent": "Ajustar al contenido",
+ "fit_to_all": "Ajustar a todo el contenido",
+ "fit_to_canvas": "Ajustar al lienzo",
+ "fit_to_layer_content": "Ajustar al contenido de la capa",
+ "fit_to_sel": "Ajustar a la selección",
+ "align_relative_to": "Alinear con respecto a ...",
+ "relativeTo": "en relación con:",
+ "Página": "Página",
+ "largest_object": "El objeto más grande",
+ "selected_objects": "Objetos seleccionados",
+ "smallest_object": "El objeto más pequeño",
+ "new_doc": "Nueva imagen",
+ "open_doc": "Abrir imagen",
+ "export_png": "Exportar como PNG",
+ "save_doc": "Guardar imagen",
+ "import_doc": "Importar un archivo SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinear parte inferior",
+ "align_center": "Centrar verticalmente",
+ "align_left": "Alinear lado izquierdo",
+ "align_middle": "Centrar horizontalmente",
+ "align_right": "Alinear lado derecho",
+ "align_top": "Alinear parte superior",
+ "mode_select": "Herramienta de selección",
+ "mode_fhpath": "Herramienta de lápiz",
+ "mode_line": "Trazado de líneas",
+ "mode_connect": "Conectar dos objetos",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Rectángulo a mano alzada",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Círculo",
+ "mode_fhellipse": "Elipse a mano alzada",
+ "mode_path": "Herramienta de trazado",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Insertar texto",
+ "mode_image": "Insertar imagen",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Herramienta de pipeta",
+ "no_embed": "NOTA: La imagen no puede ser integrada. El contenido mostrado dependerá de la imagen ubicada en esta ruta. ",
+ "undo": "Deshacer",
+ "redo": "Rehacer",
+ "tool_source": "Editar código fuente",
+ "wireframe_mode": "Modo marco de alambre",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Agrupar objetos",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convertir a trazado",
+ "reorient_path": "Reorientar el trazado",
+ "ungroup": "Desagrupar objetos",
+ "docprops": "Propiedades del documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Mover abajo",
+ "move_top": "Mover arriba",
+ "node_clone": "Clonar nodo",
+ "node_delete": "Suprimir nodo",
+ "node_link": "Enlazar puntos de control",
+ "add_subpath": "Añadir subtrazado",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Aplicar cambios",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "suprimir": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Capa",
+ "layers": "Layers",
+ "del": "Suprimir capa",
+ "move_down": "Mover la capa hacia abajo",
+ "new": "Nueva capa",
+ "rename": "Renombrar capa",
+ "move_up": "Mover la capa hacia arriba",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Desplazar objetos a:",
+ "move_selected": "Mover los objetos seleccionados a otra capa"
+ },
+ config: {
+ "image_props": "Propiedades de la Imagen",
+ "doc_title": "Título",
+ "doc_dims": "Tamaño del lienzo",
+ "included_images": "Imágenes integradas",
+ "image_opt_embed": "Integrar imágenes en forma de datos (archivos locales)",
+ "image_opt_ref": "Usar la referencia del archivo",
+ "editor_prefs": "Preferencias del Editor",
+ "icon_size": "Tamaño de los iconos",
+ "language": "Idioma",
+ "background": "Fondo del editor",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Nota: El fondo no se guardará junto con la imagen.",
+ "icon_large": "Grande",
+ "icon_medium": "Mediano",
+ "icon_small": "Pequeño",
+ "icon_xlarge": "Muy grande",
+ "select_predefined": "Seleccionar predefinido:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valor no válido",
+ "noContentToFitTo":"No existe un contenido al que ajustarse.",
+ "dupeLayerName":"¡Ya existe una capa con este nombre!",
+ "enterUniqueLayerName":"Introduzca otro nombre distinto para la capa.",
+ "enterNewLayerName":"Introduzca el nuevo nombre de la capa.",
+ "layerHasThatName":"El nombre introducido es el nombre actual de la capa.",
+ "QmoveElemsToLayer":"¿Desplazar los elementos seleccionados a la capa '%s'?",
+ "QwantToClear":"¿Desea borrar el dibujo?\n¡El historial de acciones también se borrará!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Existen errores sintácticos en su código fuente SVG.\n¿Desea volver al código fuente SVG original?",
+ "QignoreSourceChanges":"¿Desea ignorar los cambios realizados sobre el código fuente SVG?",
+ "featNotSupported":"Función no compatible.",
+ "enterNewImgURL":"Introduzca la nueva URL de la imagen.",
+ "defsFailOnSave": "NOTA: Debido a un fallo de su navegador, es posible que la imagen aparezca de forma incorrecta (ciertas gradaciones o elementos podría perderse). La imagen aparecerá en su forma correcta una vez guardada.",
+ "loadingImage":"Cargando imagen. Espere, por favor.",
+ "saveFromBrowser": "Seleccionar \"Guardar como...\" en su navegador para guardar la imagen en forma de archivo %s.",
+ "noteTheseIssues": "Existen además los problemas siguientes:",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.et.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.et.js.svn-base
new file mode 100644
index 000000000..436c509c2
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.et.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "et",
+ dir : "ltr",
+ common: {
+ "ok": "Salvestama",
+ "cancel": "Tühista",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click muuta täitke värvi, Shift-nuppu, et muuta insult värvi",
+ "zoom_level": "Muuda suumi taset",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Muuda täitke värvi",
+ "stroke_color": "Muuda insult värvi",
+ "stroke_style": "Muuda insult kriips stiil",
+ "stroke_width": "Muuda insult laius",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Muuda Pöördenurk",
+ "blur": "Change gaussian blur value",
+ "opacity": "Muuda valitud elemendi läbipaistmatus",
+ "circle_cx": "Muuda ringi&#39;s cx kooskõlastada",
+ "circle_cy": "Muuda ringi&#39;s cy kooskõlastada",
+ "circle_r": "Muuda ring on raadiusega",
+ "ellipse_cx": "Muuda ellips&#39;s cx kooskõlastada",
+ "ellipse_cy": "Muuda ellips&#39;s cy kooskõlastada",
+ "ellipse_rx": "Muuda ellips&#39;s x raadius",
+ "ellipse_ry": "Muuda ellips&#39;s y raadius",
+ "line_x1": "Muuda rööbastee algab x-koordinaadi",
+ "line_x2": "Muuda Line lõpeb x-koordinaadi",
+ "line_y1": "Muuda rööbastee algab y-koordinaadi",
+ "line_y2": "Muuda Line lõppenud y-koordinaadi",
+ "rect_height": "Muuda ristküliku kõrgus",
+ "rect_width": "Muuda ristküliku laius",
+ "corner_radius": "Muuda ristkülik Nurgakabe Raadius",
+ "image_width": "Muuda pilt laius",
+ "image_height": "Muuda pilt kõrgus",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Muuda teksti sisu",
+ "font_family": "Muutke Kirjasinperhe",
+ "font_size": "Change font size",
+ "bold": "Rasvane kiri",
+ "italic": "Kursiiv"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Muuda tausta värvi / läbipaistmatus",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Sobita kogu sisu",
+ "fit_to_canvas": "Sobita lõuend",
+ "fit_to_layer_content": "Sobita kiht sisu",
+ "fit_to_sel": "Fit valiku",
+ "align_relative_to": "Viia võrreldes ...",
+ "relativeTo": "võrreldes:",
+ "lehekülg": "lehekülg",
+ "largest_object": "suurim objekt",
+ "selected_objects": "valitud objektide",
+ "smallest_object": "väikseim objekt",
+ "new_doc": "Uus pilt",
+ "open_doc": "Pildi avamine",
+ "export_png": "Export as PNG",
+ "save_doc": "Salvesta pilt",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Viia Bottom",
+ "align_center": "Keskele joondamine",
+ "align_left": "Vasakjoondus",
+ "align_middle": "Viia Lähis -",
+ "align_right": "Paremjoondus",
+ "align_top": "Viia Üles",
+ "mode_select": "Vali Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Online-Hand Ristkülik",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Online-Hand Ellips",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst Tool",
+ "mode_image": "Pilt Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Muuda Allikas",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Rühma elemendid",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Lõhu Elements",
+ "docprops": "Dokumendi omadused",
+ "imagelib": "Image Library",
+ "move_bottom": "Liiguta alla",
+ "move_top": "Liiguta üles",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Salvestama",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Kustuta Kiht",
+ "move_down": "Liiguta kiht alla",
+ "new": "Uus kiht",
+ "rename": "Nimeta kiht",
+ "move_up": "Liiguta kiht üles",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Valige eelmääratletud:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.fa.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fa.js.svn-base
new file mode 100644
index 000000000..2d4d6aaea
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fa.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fa",
+ dir : "ltr",
+ common: {
+ "ok": "‫تأیید‬",
+ "cancel": "‫لغو‬",
+ "key_backspace": "‫پس بر ‬",
+ "key_del": "‫حذف ‬",
+ "key_down": "‫پایین ‬",
+ "key_up": "‫بالا ‬",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "‫برای تغییر رنگ، کلیک کنید. برای تغییر رنگ لبه، کلید تبدیل (shift) را فشرده و کلیک کنید‬",
+ "zoom_level": "‫تغییر بزرگ نمایی‬",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "‫تغییر رنگ‬",
+ "stroke_color": "‫تغییر رنگ لبه‬",
+ "stroke_style": "‫تغییر نقطه چین لبه‬",
+ "stroke_width": "‫تغییر عرض لبه‬",
+ "pos_x": "‫تغییر مختصات X‬",
+ "pos_y": "‫تغییر مختصات Y‬",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "‫تغییر زاویه چرخش‬",
+ "blur": "Change gaussian blur value",
+ "opacity": "‫تغییر تاری عنصر انتخاب شده‬",
+ "circle_cx": "‫تغییر مختصات cx دایره‬",
+ "circle_cy": "‫تغییر مختصات cy دایره‬",
+ "circle_r": "‫تغییر شعاع دایره‬",
+ "ellipse_cx": "‫تغییر مختصات cx بیضی‬",
+ "ellipse_cy": "‫تغییر مختصات cy بیضی‬",
+ "ellipse_rx": "‫تغییر شعاع rx بیضی‬",
+ "ellipse_ry": "‫تغییر شعاع ry بیضی‬",
+ "line_x1": "‫تغییر مختصات x آغاز خط‬",
+ "line_x2": "‫تغییر مختصات x پایان خط‬",
+ "line_y1": "‫تغییر مختصات y آغاز خط‬",
+ "line_y2": "‫تغییر مختصات y پایان خط‬",
+ "rect_height": "‫تغییر ارتفاع مستطیل‬",
+ "rect_width": "‫تغییر عرض مستطیل‬",
+ "corner_radius": "‫شعاع گوشه:‬",
+ "image_width": "‫تغییر عرض تصویر‬",
+ "image_height": "‫تغییر ارتفاع تصویر‬",
+ "image_url": "‫تغییر نشانی وب (url)‬",
+ "node_x": "‫تغییر مختصات x نقطه‬",
+ "node_y": "‫تغییر مختصات y نقطه‬",
+ "seg_type": "‫تغییر نوع قطعه (segment)‬",
+ "straight_segments": "‫مستقیم‬",
+ "curve_segments": "‫منحنی‬",
+ "text_contents": "‫تغییر محتویات متن‬",
+ "font_family": "‫تغییر خانواده قلم‬",
+ "font_size": "‫تغییر اندازه قلم‬",
+ "bold": "‫متن توپر ‬",
+ "italic": "‫متن کج ‬"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "‫تغییر رنگ پس زمینه / تاری‬",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "‫هم اندازه شدن با محتوا‬",
+ "fit_to_all": "‫هم اندازه شدن با همه محتویات‬",
+ "fit_to_canvas": "‫هم اندازه شدن با صفحه مجازی (بوم)‬",
+ "fit_to_layer_content": "‫هم اندازه شدن با محتوای لایه‬",
+ "fit_to_sel": "‫هم اندازه شدن با اشیاء انتخاب شده‬",
+ "align_relative_to": "‫تراز نسبت به ...‬",
+ "relativeTo": "‫نسبت به:‬",
+ "‫صفحه‬": "‫صفحه‬",
+ "largest_object": "‫بزرگترین شئ‬",
+ "selected_objects": "‫اشیاء انتخاب شده‬",
+ "smallest_object": "‫کوچکترین شئ‬",
+ "new_doc": "‫تصویر جدید ‬",
+ "open_doc": "‫باز کردن تصویر ‬",
+ "export_png": "Export as PNG",
+ "save_doc": "‫ذخیره تصویر ‬",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "‫تراز پایین‬",
+ "align_center": "‫وسط چین‬",
+ "align_left": "‫چپ چین‬",
+ "align_middle": "‫تراز میانه‬",
+ "align_right": "‫راست چین‬",
+ "align_top": "‫تراز بالا‬",
+ "mode_select": "‫ابزار انتخاب ‬",
+ "mode_fhpath": "‫ابزار مداد ‬",
+ "mode_line": "‫ابزار خط ‬",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "‫مستطیل با قابلیت تغییر پویا‬",
+ "mode_ellipse": "‫بیضی‬",
+ "mode_circle": "‫دایره‬",
+ "mode_fhellipse": "‫بیضی با قابلیت تغییر پویا‬",
+ "mode_path": "‫ابزار مسیر ‬",
+ "mode_shapelib": "Shape library",
+ "mode_text": "‫ابزار متن ‬",
+ "mode_image": "‫ابزار تصویر ‬",
+ "mode_zoom": "‫ابزار بزرگ نمایی ‬",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "‫واگرد ‬",
+ "redo": "‫ازنو ‬",
+ "tool_source": "‫ویرایش منبع ‬",
+ "wireframe_mode": "‫حالت نمایش لبه ها ‬",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "‫قرار دادن عناصر در گروه ‬",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "‫تبدیل به مسیر‬",
+ "reorient_path": "‫جهت دهی مجدد مسیر‬",
+ "ungroup": "‫خارج کردن عناصر از گروه ‬",
+ "docprops": "‫مشخصات سند ‬",
+ "imagelib": "Image Library",
+ "move_bottom": "‫انتقال به پایین ترین ‬",
+ "move_top": "‫انتقال به بالاترین ‬",
+ "node_clone": "‫ایجاد کپی از نقطه‬",
+ "node_delete": "‫حذف نقطه‬",
+ "node_link": "‫پیوند دادن نقاط کنترل‬",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "‫اعمال تغییرات‬",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "‫حذف ‬": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"‫لایه‬",
+ "layers": "Layers",
+ "del": "‫حذف لایه‬",
+ "move_down": "‫انتقال لایه به پایین‬",
+ "new": "‫لایه جدید‬",
+ "rename": "‫تغییر نام لایه‬",
+ "move_up": "‫انتقال لایه به بالا‬",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "‫انتقال عناصر به:‬",
+ "move_selected": "‫انتقال عناصر انتخاب شده به یک لایه متفاوت‬"
+ },
+ config: {
+ "image_props": "‫مشخصات تصویر‬",
+ "doc_title": "‫عنوان‬",
+ "doc_dims": "‫ابعاد صفحه مجازی (بوم)‬",
+ "included_images": "‫تصاویر گنجانده شده‬",
+ "image_opt_embed": "‫داده های جای داده شده (پرونده های محلی)‬",
+ "image_opt_ref": "‫استفاده از ارجاع به پرونده‬",
+ "editor_prefs": "‫تنظیمات ویراستار‬",
+ "icon_size": "‫اندازه شمایل‬",
+ "language": "‫زبان‬",
+ "background": "‫پس زمینه ویراستار‬",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "‫توجه: پس زمینه همراه تصویر ذخیره نخواهد شد.‬",
+ "icon_large": "‫بزرگ‬",
+ "icon_medium": "‫متوسط‬",
+ "icon_small": "‫کوچک‬",
+ "icon_xlarge": "‫خیلی بزرگ‬",
+ "select_predefined": "‫از پیش تعریف شده را انتخاب کنید:‬",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"‫مقدار داده شده نامعتبر است‬",
+ "noContentToFitTo":"‫محتوایی برای هم اندازه شدن وجود ندارد‬",
+ "dupeLayerName":"‫لایه ای با آن نام وجود دارد!‬",
+ "enterUniqueLayerName":"‫لطفا یک نام لایه یکتا انتخاب کنید‬",
+ "enterNewLayerName":"‫لطفا نام لایه جدید را وارد کنید‬",
+ "layerHasThatName":"‫لایه از قبل آن نام را دارد‬",
+ "QmoveElemsToLayer":"‫عناصر انتخاب شده به لایه '%s' منتقل شوند؟‬",
+ "QwantToClear":"‫آیا مطمئن هستید که می خواهید نقاشی را پاک کنید؟\nاین عمل باعث حذف تاریخچه واگرد شما خواهد شد!‬",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"‫در منبع SVG شما خطاهای تجزیه (parse) وجود داشت.\nبه منبع SVG اصلی بازگردانده شود؟‬",
+ "QignoreSourceChanges":"‫تغییرات اعمال شده در منبع SVG نادیده گرفته شوند؟‬",
+ "featNotSupported":"‫این ویژگی پشتیبانی نشده است‬",
+ "enterNewImgURL":"‫نشانی وب (url) تصویر جدید را وارد کنید‬",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.fi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fi.js.svn-base
new file mode 100644
index 000000000..ecec14c0e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fi.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fi",
+ dir : "ltr",
+ common: {
+ "ok": "Tallentaa",
+ "cancel": "Peruuta",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klikkaa muuttaa täyttöväri, Shift-click vaihtaa aivohalvauksen väriä",
+ "zoom_level": "Muuta suurennustaso",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Muuta täyttöväri",
+ "stroke_color": "Muuta aivohalvaus väri",
+ "stroke_style": "Muuta aivohalvaus Dash tyyli",
+ "stroke_width": "Muuta aivohalvaus leveys",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Muuta kiertokulma",
+ "blur": "Change gaussian blur value",
+ "opacity": "Muuta valitun kohteen läpinäkyvyys",
+ "circle_cx": "Muuta Circlen CX koordinoida",
+ "circle_cy": "Muuta Circlen CY koordinoida",
+ "circle_r": "Muuta ympyrän säde",
+ "ellipse_cx": "Muuta ellipsi&#39;s CX koordinoida",
+ "ellipse_cy": "Muuta ellipsi&#39;s CY koordinoida",
+ "ellipse_rx": "Muuta ellipsi&#39;s x säde",
+ "ellipse_ry": "Muuta ellipsi n y säde",
+ "line_x1": "Muuta Linen alkaa x-koordinaatti",
+ "line_x2": "Muuta Linen päättyy x koordinoida",
+ "line_y1": "Muuta Linen alkaa y-koordinaatti",
+ "line_y2": "Muuta Linen päättyy y koordinoida",
+ "rect_height": "Muuta suorakaiteen korkeus",
+ "rect_width": "Muuta suorakaiteen leveys",
+ "corner_radius": "Muuta suorakaide Corner Säde",
+ "image_width": "Muuta kuvan leveys",
+ "image_height": "Muuta kuvan korkeus",
+ "image_url": "Muuta URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Muuta tekstin sisältö",
+ "font_family": "Muuta Font Family",
+ "font_size": "Muuta fontin kokoa",
+ "bold": "Lihavoitu teksti",
+ "italic": "Kursivoitu"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Vaihda taustaväri / sameuden",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Sovita Content",
+ "fit_to_all": "Sovita kaikki content",
+ "fit_to_canvas": "Sovita kangas",
+ "fit_to_layer_content": "Sovita kerros sisältöön",
+ "fit_to_sel": "Sovita valinta",
+ "align_relative_to": "Kohdista suhteessa ...",
+ "relativeTo": "suhteessa:",
+ "sivulta": "sivulta",
+ "largest_object": "Suurin kohde",
+ "selected_objects": "valittujen objektien",
+ "smallest_object": "pienin kohde",
+ "new_doc": "Uusi kuva",
+ "open_doc": "Avaa kuva",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Keskitä",
+ "align_left": "Tasaa vasemmalle",
+ "align_middle": "Kohdista Lähi",
+ "align_right": "Tasaa oikealle",
+ "align_top": "Kohdista Top",
+ "mode_select": "Valitse työkalu",
+ "mode_fhpath": "Kynätyökalu",
+ "mode_line": "Viivatyökalulla",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand suorakaide",
+ "mode_ellipse": "Soikion",
+ "mode_circle": "Ympyrään",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Työkalua",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Suurennustyökalu",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Kumoa",
+ "redo": "Tulppaamalla ilmakanavan",
+ "tool_source": "Muokkaa lähdekoodipaketti",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Tuoteryhmään Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Asiakirjan ominaisuudet",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Tallentaa",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Poista Layer",
+ "move_down": "Siirrä Layer alas",
+ "new": "New Layer",
+ "rename": "Nimeä Layer",
+ "move_up": "Siirrä Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Valitse ennalta:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.fr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fr.js.svn-base
new file mode 100644
index 000000000..445cfae39
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fr.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fr",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Annuler",
+ "key_backspace": "Suppr.",
+ "key_del": "Retour Arr.",
+ "key_down": "Bas",
+ "key_up": "Haut",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Montrer/Cacher plus d'outils de Contour",
+ "palette_info": "Cliquer pour changer la couleur de remplissage, Shift-Clic pour changer la couleur de contour",
+ "zoom_level": "Changer le niveau de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identifier l'élément",
+ "fill_color": "Changer la couleur de remplissage",
+ "stroke_color": "Changer la couleur du contour",
+ "stroke_style": "Changer le style du contour",
+ "stroke_width": "Changer la largeur du contour de 1, Shift-Click pour changer la largeur de 0.1",
+ "pos_x": "Changer la position horizontale X",
+ "pos_y": "Changer la position verticale Y",
+ "linecap_butt": "Terminaison : Sur le nœud",
+ "linecap_round": "Terminaison : Arrondie",
+ "linecap_square": "Terminaison : Carrée",
+ "linejoin_bevel": "Raccord : Biseauté",
+ "linejoin_miter": "Raccord : Droit",
+ "linejoin_round": "Raccord : Arrondi",
+ "angle": "Changer l'angle de rotation",
+ "blur": "Changer la valeur du flou gaussien",
+ "opacity": "Changer l'opacité de l'élément sélectionné",
+ "circle_cx": "Changer la position horizontale cx du cercle",
+ "circle_cy": "Changer la position verticale cy du cercle",
+ "circle_r": "Changer le rayon du cercle",
+ "ellipse_cx": "Changer la position horizontale cx de l'ellipse",
+ "ellipse_cy": "Changer la position verticale cy de l'ellipse",
+ "ellipse_rx": "Changer le rayon horizontal x de l'ellipse",
+ "ellipse_ry": "Changer le rayon vertical y de l'ellipse",
+ "line_x1": "Changer la position horizontale x de début de la ligne",
+ "line_x2": "Changer la position horizontale x de fin de la ligne",
+ "line_y1": "Changer la position verticale y de début de la ligne",
+ "line_y2": "Changer la position verticale y de fin de la ligne",
+ "rect_height": "Changer la hauteur du rectangle",
+ "rect_width": "Changer la largeur du rectangle",
+ "corner_radius": "Changer le rayon des coins du rectangle",
+ "image_width": "Changer la largeur de l'image",
+ "image_height": "Changer la hauteur de l'image",
+ "image_url": "Modifier l'URL",
+ "node_x": "Changer la positon horizontale x du nœud",
+ "node_y": "Changer la position verticale y du nœud",
+ "seg_type": "Changer le type du Segment",
+ "straight_segments": "Droit",
+ "curve_segments": "Courbe",
+ "text_contents": "Changer le contenu du texte",
+ "font_family": "Changer la famille de police",
+ "font_size": "Changer la taille de la police",
+ "bold": "Texte en gras",
+ "italic": "Texte en italique"
+ },
+ tools: {
+ "main_menu": "Menu principal",
+ "bkgnd_color_opac": "Changer la couleur d'arrière-plan / l'opacité",
+ "connector_no_arrow": "Sans flèches",
+ "fitToContent": "Ajuster au contenu",
+ "fit_to_all": "Ajuster au contenu de tous les calques",
+ "fit_to_canvas": "Ajuster au canevas",
+ "fit_to_layer_content": "Ajuster au contenu du calque",
+ "fit_to_sel": "Ajuster à la sélection",
+ "align_relative_to": "Aligner par rapport à ...",
+ "relativeTo": "Relativement à:",
+ "Page": "Page",
+ "largest_object": "Plus gros objet",
+ "selected_objects": "Objets sélectionnés",
+ "smallest_object": "Plus petit objet",
+ "new_doc": "Nouvelle image",
+ "open_doc": "Ouvrir une image",
+ "export_png": "Exporter au format PNG",
+ "save_doc": "Enregistrer l'image",
+ "import_doc": "Importer un objet SVG",
+ "align_to_page": "Aligner l'élément relativement à la Page",
+ "align_bottom": "Aligner le bas des objets",
+ "align_center": "Centrer verticalement",
+ "align_left": "Aligner les côtés gauches",
+ "align_middle": "Centrer horizontalement",
+ "align_right": "Aligner les côtés droits",
+ "align_top": "Aligner le haut des objets",
+ "mode_select": "Outil de sélection",
+ "mode_fhpath": "Crayon à main levée",
+ "mode_line": "Tracer des lignes",
+ "mode_connect": "Connecter deux objets",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Rectangle main levée",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Cercle",
+ "mode_fhellipse": "Ellipse main levée",
+ "mode_path": "Outil Chemin",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Outil Texte",
+ "mode_image": "Outil Image",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Outil Pipette",
+ "no_embed": "NOTE: Cette image ne peut être incorporée en tant que données. Le contenu affiché sera celui de l'image située à cette adresse",
+ "undo": "Annuler l'action",
+ "redo": "Refaire l'action",
+ "tool_source": "Modifier la source",
+ "wireframe_mode": "Mode Fil de Fer",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grouper les éléments",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convertir en chemin",
+ "reorient_path": "Réorienter le chemin",
+ "ungroup": "Dégrouper les éléments",
+ "docprops": "Propriétés du document",
+ "imagelib": "Image Library",
+ "move_bottom": "Déplacer vers le bas",
+ "move_top": "Déplacer vers le haut",
+ "node_clone": "Cloner le nœud",
+ "node_delete": "Supprimer le nœud",
+ "node_link": "Rendre les points de contrôle solidaires",
+ "add_subpath": "Ajouter un sous-chemin",
+ "openclose_path": "Ouvrir/Fermer sous-chemin",
+ "source_save": "Appliquer Modifications",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Retour Arr.": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Calque",
+ "layers": "Layers",
+ "del": "Supprimer le calque",
+ "move_down": "Descendre le calque",
+ "new": "Nouveau calque",
+ "rename": "Renommer le calque",
+ "move_up": "Monter le calque",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Déplacer éléments vers:",
+ "move_selected": "Déplacer les éléments sélectionnés vers un autre calque"
+ },
+ config: {
+ "image_props": "Propriétés de l'Image",
+ "doc_title": "Titre",
+ "doc_dims": "Dimensions du canevas",
+ "included_images": "Images incorporées",
+ "image_opt_embed": "Incorporer les images en tant que données (fichiers locaux)",
+ "image_opt_ref": "Utiliser la référence des images ",
+ "editor_prefs": "Préférences de l'Éditeur",
+ "icon_size": "Taille des icônes",
+ "language": "Langue",
+ "background": "Toile de fond de l'Éditeur",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: La toile de fond n'est pas sauvegardée avec l'image.",
+ "icon_large": "Grande",
+ "icon_medium": "Moyenne",
+ "icon_small": "Petite",
+ "icon_xlarge": "Super-Grande",
+ "select_predefined": "Sélectionner prédéfinis:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valeur fournie invalide",
+ "noContentToFitTo":"Il n'y a pas de contenu auquel ajuster",
+ "dupeLayerName":"Il existe déjà un calque de ce nom !",
+ "enterUniqueLayerName":"Veuillez entrer un nom (unique) pour le calque",
+ "enterNewLayerName":"Veuillez entrer le nouveau nom du calque",
+ "layerHasThatName":"Le calque porte déjà ce nom",
+ "QmoveElemsToLayer":"Déplacer les éléments sélectionnés vers le calque '%s' ?",
+ "QwantToClear":"Voulez-vous effacer le dessin ?\nL'historique de vos actions sera également effacé !",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Il y a des erreurs d'analyse syntaxique dans votre code-source SVG.\nRevenir au code-source SVG avant modifications ?",
+ "QignoreSourceChanges":"Ignorer les modifications faites à la source SVG ?",
+ "featNotSupported":"Fonction non supportée",
+ "enterNewImgURL":"Entrer la nouvelle URL de l'image",
+ "defsFailOnSave": "NOTE : À cause d'un bug de votre navigateur, cette image peut être affichée de façon incorrecte (dégradés ou éléments manquants). Cependant, une fois enregistrée, elle sera correcte.",
+ "loadingImage":"Chargement de l'image, veuillez patienter...",
+ "saveFromBrowser": "Selectionner \"Enregistrer sous...\" dans votre navigateur pour sauvegarder l'image en tant que fichier %s.",
+ "noteTheseIssues": "Notez également les problèmes suivants : ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.fy.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fy.js.svn-base
new file mode 100644
index 000000000..18655a767
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.fy.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fy",
+ dir : "ltr",
+ common: {
+ "ok": "Ok",
+ "cancel": "Ôfbrekke",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "omleech",
+ "key_up": "omheech",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik om de folkleur te feroarjen, shift-klik om de linekleur te feroarjen.",
+ "zoom_level": "Yn-/útzoome",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Folkleur oanpasse",
+ "stroke_color": "Linekleur oanpasse",
+ "stroke_style": "Linestijl oanpasse",
+ "stroke_width": "Linebreedte oanpasse",
+ "pos_x": "X-koördinaat oanpasse",
+ "pos_y": "Y-koördinaat oanpasse",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Draaie",
+ "blur": "Change gaussian blur value",
+ "opacity": "Trochsichtigens oanpasse",
+ "circle_cx": "Feroarje it X-koördinaat fan it middelpunt fan'e sirkel.",
+ "circle_cy": "Feroarje it Y-koördinaat fan it middelpunt fan'e sirkel.",
+ "circle_r": "Feroarje sirkelradius",
+ "ellipse_cx": "Feroarje it X-koördinaat fan it middelpunt fan'e ellips.",
+ "ellipse_cy": "Feroarje it Y-koördinaat fan it middelpunt fan'e ellips.",
+ "ellipse_rx": "Feroarje ellips X radius",
+ "ellipse_ry": "Feroarje ellips Y radius",
+ "line_x1": "Feroarje start X koördinaat fan'e line",
+ "line_x2": "Feroarje ein X koördinaat fan'e line",
+ "line_y1": "Feroarje start Y koördinaat fan'e line",
+ "line_y2": "Feroarje ein Y koördinaat fan'e line",
+ "rect_height": "Hichte rjochthoeke oanpasse",
+ "rect_width": "Breedte rjochthoeke oanpasse",
+ "corner_radius": "Hoekeradius oanpasse",
+ "image_width": "Breedte ôfbielding oanpasse",
+ "image_height": "Hichte ôfbielding oanpasse",
+ "image_url": "URL oanpasse",
+ "node_x": "X-koördinaat knooppunt oanpasse",
+ "node_y": "Y-koördinaat knooppunt oanpasse",
+ "seg_type": "Segmenttype oanpasse",
+ "straight_segments": "Rjocht",
+ "curve_segments": "Bûcht",
+ "text_contents": "Tekst oanpasse",
+ "font_family": "Lettertype oanpasse",
+ "font_size": "Lettergrutte oanpasse",
+ "bold": "Fet",
+ "italic": "Skean"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Eftergrûnkleur/trochsichtigens oanpasse",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Passe op ynhâld",
+ "fit_to_all": "Op alle ynhâld passe",
+ "fit_to_canvas": "Op kanvas passe",
+ "fit_to_layer_content": "Op laachynhâld passe",
+ "fit_to_sel": "Op seleksje passe",
+ "align_relative_to": "Útlijne relatyf oan...",
+ "relativeTo": "Relatief tsjinoer:",
+ "Side": "Side",
+ "largest_object": "Grutste ûnderdiel",
+ "selected_objects": "Selektearre ûnderdielen",
+ "smallest_object": "Lytste ûnderdiel",
+ "new_doc": "Nije ôfbielding",
+ "open_doc": "Ôfbielding iepenje",
+ "export_png": "Export as PNG",
+ "save_doc": "Ôfbielding bewarje",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Ûnder útlijne",
+ "align_center": "Midden útlijne",
+ "align_left": "Lofts útlijne",
+ "align_middle": "Midden útlijne",
+ "align_right": "Rjochts útlijne",
+ "align_top": "Boppe útlijne",
+ "mode_select": "Selektearje",
+ "mode_fhpath": "Potlead",
+ "mode_line": "Line",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Frije rjochthoeke",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Sirkel",
+ "mode_fhellipse": "Frije ellips",
+ "mode_path": "Paad",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst",
+ "mode_image": "Ôfbielding",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Ungedien meitjse",
+ "redo": "Op 'e nij",
+ "tool_source": "Boarne oanpasse",
+ "wireframe_mode": "Triemodel",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Ûnderdielen groepearje",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Omsette nei paad",
+ "reorient_path": "Paad opnij orientearje",
+ "ungroup": "Groepering opheffe",
+ "docprops": "Dokuminteigenskippen",
+ "imagelib": "Image Library",
+ "move_bottom": "Nei eftergrûn",
+ "move_top": "Nei foargrûn",
+ "node_clone": "Knooppunt duplisearje",
+ "node_delete": "Knooppunt fuortsmite",
+ "node_link": "Knooppunten keppelje",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Feroarings tapasse",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Laach",
+ "layers": "Layers",
+ "del": "Laach fuortsmite",
+ "move_down": "Laach omleech bringe",
+ "new": "Nije laach",
+ "rename": "Laach omneame",
+ "move_up": "Laach omheech bringe",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Ûnderdielen ferplaate nei:",
+ "move_selected": "Selektearre ûnderdielen ferplaatse nei in oare laach"
+ },
+ config: {
+ "image_props": "Ôfbieldingseigenskippen",
+ "doc_title": "Titel",
+ "doc_dims": "Kanvasgrutte",
+ "included_images": "Ynslúten ôfbieldingen",
+ "image_opt_embed": "Ynformaasje tafoege (lokale triemen)",
+ "image_opt_ref": "Triemreferensje brûke",
+ "editor_prefs": "Eigenskippen bewurker",
+ "icon_size": "Ikoangrutte",
+ "language": "Taal",
+ "background": "Eftergrûn bewurker",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Let op: de eftergrûn wurd net mei de ôfbielding bewarre.",
+ "icon_large": "Grut",
+ "icon_medium": "Middel",
+ "icon_small": "Lyts",
+ "icon_xlarge": "Ekstra grut",
+ "select_predefined": "Selektearje:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Ferkearde waarde jûn",
+ "noContentToFitTo":"Gjin ynhâld om te passen",
+ "dupeLayerName":"Der is al in laach mei dy namme!",
+ "enterUniqueLayerName":"Type in unyke laachnamme",
+ "enterNewLayerName":"Type in nije laachnamme",
+ "layerHasThatName":"Laach hat dy namme al",
+ "QmoveElemsToLayer":"Selektearre ûnderdielen ferplaatse nei '%s'?",
+ "QwantToClear":"Ôfbielding leechmeitsje? Dit sil ek de skiednis fuortsmite!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Der wiene flaters yn de SVG-boarne.\nWeromgean nei foarige SVG-boarne?",
+ "QignoreSourceChanges":"Feroarings yn SVG-boarne negeare?",
+ "featNotSupported":"Funksje wurdt net ûndersteund",
+ "enterNewImgURL":"Jou de nije URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ga.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ga.js.svn-base
new file mode 100644
index 000000000..7f0694814
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ga.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ga",
+ dir : "ltr",
+ common: {
+ "ok": "Sábháil",
+ "cancel": "Cealaigh",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Cliceáil chun athrú a líonadh dath, aistriú-cliceáil chun dath a athrú stróc",
+ "zoom_level": "Athraigh súmáil leibhéal",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Athraigh an dath a líonadh",
+ "stroke_color": "Dath stróc Athrú",
+ "stroke_style": "Athraigh an stíl Fleasc stróc",
+ "stroke_width": "Leithead stróc Athrú",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Uillinn rothlaithe Athrú",
+ "blur": "Change gaussian blur value",
+ "opacity": "Athraigh roghnaithe teimhneacht mír",
+ "circle_cx": "Athraigh an ciorcal a chomhordú CX",
+ "circle_cy": "Athraigh an ciorcal a chomhordú ga",
+ "circle_r": "Athraigh an ciorcal&#39;s ga",
+ "ellipse_cx": "Athraigh Éilips&#39;s CX a chomhordú",
+ "ellipse_cy": "Athraigh an Éilips a chomhordú ga",
+ "ellipse_rx": "Éilips Athraigh an gha x",
+ "ellipse_ry": "Éilips Athraigh an gha y",
+ "line_x1": "Athraigh an líne tosaigh a chomhordú x",
+ "line_x2": "Athraigh an líne deireadh x chomhordú",
+ "line_y1": "Athraigh an líne tosaigh a chomhordú y",
+ "line_y2": "Athrú ar líne deireadh y chomhordú",
+ "rect_height": "Airde dronuilleog Athrú",
+ "rect_width": "Leithead dronuilleog Athrú",
+ "corner_radius": "Athraigh Dronuilleog Cúinne na Ga",
+ "image_width": "Leithead íomhá Athrú",
+ "image_height": "Airde íomhá Athrú",
+ "image_url": "Athraigh an URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Inneachar Athraigh téacs",
+ "font_family": "Athraigh an Cló Teaghlaigh",
+ "font_size": "Athraigh Clómhéid",
+ "bold": "Trom Téacs",
+ "italic": "Iodálach Téacs"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Dath cúlra Athraigh / teimhneacht",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Laghdaigh do gach ábhar",
+ "fit_to_canvas": "Laghdaigh ar chanbhás",
+ "fit_to_layer_content": "Laghdaigh shraith ábhar a",
+ "fit_to_sel": "Laghdaigh a roghnú",
+ "align_relative_to": "Ailínigh i gcomparáid leis ...",
+ "relativeTo": "i gcomparáid leis:",
+ "leathanach": "leathanach",
+ "largest_object": "réad is mó",
+ "selected_objects": "réada tofa",
+ "smallest_object": "lú réad",
+ "new_doc": "Íomhá Nua",
+ "open_doc": "Íomhá Oscailte",
+ "export_png": "Export as PNG",
+ "save_doc": "Sábháil Íomhá",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Cineál Bun",
+ "align_center": "Ailínigh sa Lár",
+ "align_left": "Ailínigh ar Chlé",
+ "align_middle": "Cineál Middle",
+ "align_right": "Ailínigh ar Dheis",
+ "align_top": "Cineál Barr",
+ "mode_select": "Roghnaigh Uirlis",
+ "mode_fhpath": "Phionsail Uirlis",
+ "mode_line": "Uirlis Líne",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Saor Hand Dronuilleog",
+ "mode_ellipse": "Éilips",
+ "mode_circle": "Ciorcal",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Téacs Uirlis",
+ "mode_image": "Íomhá Uirlis",
+ "mode_zoom": "Zúmáil Uirlis",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Cealaigh",
+ "redo": "Athdhéan",
+ "tool_source": "Cuir Foinse",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Eilimintí Grúpa",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Eilimintí Díghrúpáil",
+ "docprops": "Doiciméad Airíonna",
+ "imagelib": "Image Library",
+ "move_bottom": "Téigh go Bun",
+ "move_top": "Téigh go Barr",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Sábháil",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Scrios Sraith",
+ "move_down": "Bog Sraith Síos",
+ "new": "Sraith Nua",
+ "rename": "Athainmnigh Sraith",
+ "move_up": "Bog Sraith Suas",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Roghnaigh réamhshainithe:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.gl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.gl.js.svn-base
new file mode 100644
index 000000000..c7be0c9c4
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.gl.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "gl",
+ dir : "ltr",
+ common: {
+ "ok": "Gardar",
+ "cancel": "Cancelar",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Preme aquí para cambiar a cor de recheo, Shift-clic para cambiar a cor do curso",
+ "zoom_level": "Cambiar o nivel de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Cambia-la cor de recheo",
+ "stroke_color": "Cambiar a cor do curso",
+ "stroke_style": "Modifica o estilo do trazo do curso",
+ "stroke_width": "Cambiar o ancho do curso",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Cambiar o ángulo de xiro",
+ "blur": "Change gaussian blur value",
+ "opacity": "Cambia a opacidade elemento seleccionado",
+ "circle_cx": "Cx Cambiar círculo de coordenadas",
+ "circle_cy": "Círculo Cambio cy coordinar",
+ "circle_r": "Cambiar círculo de raio",
+ "ellipse_cx": "Cambiar elipse cx coordinar",
+ "ellipse_cy": "Elipse Cambio cy coordinar",
+ "ellipse_rx": "Raios X Change elipse",
+ "ellipse_ry": "Radio y Change elipse",
+ "line_x1": "Cambie a liña de partida coordenada x",
+ "line_x2": "Cambie a liña acaba coordenada x",
+ "line_y1": "Cambio na liña do recurso coordinada y",
+ "line_y2": "Salto de liña acaba coordinada y",
+ "rect_height": "Cambiar altura do rectángulo",
+ "rect_width": "Cambiar a largo rectángulo",
+ "corner_radius": "Cambiar Corner Rectangle Radius",
+ "image_width": "Cambiar o ancho da imaxe",
+ "image_height": "Cambiar altura da imaxe",
+ "image_url": "Cambiar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Cambiar o contido de texto",
+ "font_family": "Cambiar fonte Familia",
+ "font_size": "Mudar tamaño de letra",
+ "bold": "Bold Text",
+ "italic": "Texto en cursiva"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mudar a cor de fondo / Opacidade",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Axustar ó contido",
+ "fit_to_all": "Axustar a todo o contido",
+ "fit_to_canvas": "Axustar a pantalla",
+ "fit_to_layer_content": "Axustar o contido da capa de",
+ "fit_to_sel": "Axustar a selección",
+ "align_relative_to": "Aliñar en relación a ...",
+ "relativeTo": "en relación ao:",
+ "Portada": "Portada",
+ "largest_object": "maior obxecto",
+ "selected_objects": "obxectos elixidos",
+ "smallest_object": "menor obxecto",
+ "new_doc": "Nova Imaxe",
+ "open_doc": "Abrir Imaxe",
+ "export_png": "Export as PNG",
+ "save_doc": "Gardar Imaxe",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align bottom",
+ "align_center": "Centrar",
+ "align_left": "Aliñar á Esquerda",
+ "align_middle": "Aliñar Medio",
+ "align_right": "Aliñar á Dereita",
+ "align_top": "Align Top",
+ "mode_select": "Seleccionar a ferramenta",
+ "mode_fhpath": "Ferramenta Lapis",
+ "mode_line": "Ferramenta Liña",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Ferramenta de Texto",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Desfacer",
+ "redo": "Volver",
+ "tool_source": "Fonte Editar",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementos do grupo",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elementos Desagrupadas",
+ "docprops": "Propriedades do Documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Move a Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Gardar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move capa inferior",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Seleccione por defecto:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.he.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.he.js.svn-base
new file mode 100644
index 000000000..555c9f758
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.he.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "he",
+ dir : "ltr",
+ common: {
+ "ok": "לשמור",
+ "cancel": "ביטול",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "לחץ כדי לשנות צבע מילוי, לחץ על Shift-לשנות צבע שבץ",
+ "zoom_level": "שינוי גודל תצוגה",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "שינוי צבע מילוי",
+ "stroke_color": "שינוי צבע שבץ",
+ "stroke_style": "דש שבץ שינוי סגנון",
+ "stroke_width": "שינוי רוחב שבץ",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "שינוי זווית הסיבוב",
+ "blur": "Change gaussian blur value",
+ "opacity": "שינוי הפריט הנבחר אטימות",
+ "circle_cx": "CX מעגל של שנה לתאם",
+ "circle_cy": "מעגל שנה של cy לתאם",
+ "circle_r": "מעגל שנה של רדיוס",
+ "ellipse_cx": "שינוי של אליפסה CX לתאם",
+ "ellipse_cy": "אליפסה שינוי של cy לתאם",
+ "ellipse_rx": "אליפסה שינוי של רדיוס x",
+ "ellipse_ry": "אליפסה שינוי של Y רדיוס",
+ "line_x1": "שינוי קו ההתחלה של x לתאם",
+ "line_x2": "שינוי קו הסיום של x לתאם",
+ "line_y1": "שינוי קו ההתחלה של Y לתאם",
+ "line_y2": "שינוי קו הסיום של Y לתאם",
+ "rect_height": "שינוי גובה המלבן",
+ "rect_width": "שינוי רוחב המלבן",
+ "corner_radius": "לשנות מלבן פינת רדיוס",
+ "image_width": "שינוי רוחב התמונה",
+ "image_height": "שינוי גובה התמונה",
+ "image_url": "שינוי כתובת",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "שינוי תוכן טקסט",
+ "font_family": "שינוי גופן משפחה",
+ "font_size": "שנה גודל גופן",
+ "bold": "טקסט מודגש",
+ "italic": "טקסט נטוי"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "שנה את צבע הרקע / אטימות",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "התאם תוכן",
+ "fit_to_all": "התאם התכנים",
+ "fit_to_canvas": "התאם בד",
+ "fit_to_layer_content": "מתאים לתוכן שכבת",
+ "fit_to_sel": "התאם הבחירה",
+ "align_relative_to": "יישור ביחס ...",
+ "relativeTo": "יחסית:",
+ "דף": "דף",
+ "largest_object": "האובייקט הגדול",
+ "selected_objects": "elected objects",
+ "smallest_object": "הקטן אובייקט",
+ "new_doc": "תמונה חדשה",
+ "open_doc": "פתח תמונה",
+ "export_png": "Export as PNG",
+ "save_doc": "שמור תמונה",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "יישור תחתון",
+ "align_center": "ישור לאמצע",
+ "align_left": "יישור לשמאל",
+ "align_middle": "יישור התיכון",
+ "align_right": "יישור לימין",
+ "align_top": "יישור למעלה",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "כלי העיפרון",
+ "mode_line": "כלי הקו",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand מלבן",
+ "mode_ellipse": "אליפסה",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand אליפסה",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "כלי טקסט",
+ "mode_image": "כלי תמונה",
+ "mode_zoom": "זום כלי",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "בטל",
+ "redo": "בצע שוב",
+ "tool_source": "מקור ערוך",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "אלמנטים הקבוצה",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "אלמנטים פרק קבוצה",
+ "docprops": "מאפייני מסמך",
+ "imagelib": "Image Library",
+ "move_bottom": "הזז למטה",
+ "move_top": "עבור לראש הדף",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "לשמור",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "מחיקת שכבה",
+ "move_down": "הזז למטה שכבה",
+ "new": "שכבהחדשה",
+ "rename": "שינוי שם שכבה",
+ "move_up": "העבר שכבה Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "בחר מוגדרים מראש:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.hi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hi.js.svn-base
new file mode 100644
index 000000000..c495cd02c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hi.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hi",
+ dir : "ltr",
+ common: {
+ "ok": "बचाना",
+ "cancel": "रद्द करें",
+ "key_backspace": "बैकस्पेस",
+ "key_del": "हटायें",
+ "key_down": "नीचे",
+ "key_up": "ऊपर",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "रंग बदलने पर क्लिक करें, बदलाव भरने के क्लिक करने के लिए स्ट्रोक का रंग बदलने के लिए",
+ "zoom_level": "बदलें स्तर ज़ूम",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "बदलें का रंग भरना",
+ "stroke_color": "बदलें स्ट्रोक रंग",
+ "stroke_style": "बदलें स्ट्रोक डेश शैली",
+ "stroke_width": "बदलें स्ट्रोक चौड़ाई",
+ "pos_x": "X समकक्ष बदलें ",
+ "pos_y": "Y समकक्ष बदलें",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "बदलें रोटेशन कोण",
+ "blur": "Change gaussian blur value",
+ "opacity": "पारदर्शिता बदलें",
+ "circle_cx": "बदल रहा है चक्र cx समन्वय",
+ "circle_cy": "परिवर्तन चक्र cy समन्वय है",
+ "circle_r": "बदल रहा है चक्र त्रिज्या",
+ "ellipse_cx": "बदलें दीर्घवृत्त है cx समन्वय",
+ "ellipse_cy": "बदलें दीर्घवृत्त cy समन्वय है",
+ "ellipse_rx": "बदल रहा है दीर्घवृत्त x त्रिज्या",
+ "ellipse_ry": "बदल रहा है दीर्घवृत्त y त्रिज्या",
+ "line_x1": "बदल रहा है लाइन x समन्वय शुरू",
+ "line_x2": "बदल रहा है लाइन x समन्वय समाप्त",
+ "line_y1": "बदलें रेखा y शुरू हो रहा है समन्वय",
+ "line_y2": "बदलें रेखा y अंत है समन्वय",
+ "rect_height": "बदलें आयत ऊंचाई",
+ "rect_width": "बदलें आयत चौड़ाई",
+ "corner_radius": "बदलें आयत कॉर्नर त्रिज्या",
+ "image_width": "बदलें छवि चौड़ाई",
+ "image_height": "बदलें छवि ऊँचाई",
+ "image_url": "बदलें यूआरएल",
+ "node_x": "नोड का x समकक्ष बदलें",
+ "node_y": "नोड का y समकक्ष बदलें",
+ "seg_type": "वर्ग प्रकार बदलें",
+ "straight_segments": "सीधे वर्ग",
+ "curve_segments": "घुमाव",
+ "text_contents": "बदलें पाठ सामग्री",
+ "font_family": "बदलें फ़ॉन्ट परिवार",
+ "font_size": "फ़ॉन्ट का आकार बदलें",
+ "bold": "मोटा पाठ",
+ "italic": "इटैलिक पाठ"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "पृष्ठभूमि का रंग बदल / अस्पष्टता",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "सामग्री के लिए फिट",
+ "fit_to_all": "सभी सामग्री के लिए फिट",
+ "fit_to_canvas": "फिट कैनवास को",
+ "fit_to_layer_content": "फिट परत सामग्री के लिए",
+ "fit_to_sel": "चयन के लिए फिट",
+ "align_relative_to": "संरेखित करें रिश्तेदार को ...",
+ "relativeTo": "रिश्तेदार को:",
+ "पृष्ठ": "पृष्ठ",
+ "largest_object": "सबसे बड़ी वस्तु",
+ "selected_objects": "निर्वाचित वस्तुओं",
+ "smallest_object": "छोटी से छोटी वस्तु",
+ "new_doc": "नई छवि",
+ "open_doc": "छवि खोलें",
+ "export_png": "Export as PNG",
+ "save_doc": "सहेजें छवि",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "तलमेंपंक्तिबद्धकरें",
+ "align_center": "मध्य में समंजित करें",
+ "align_left": " पंक्तिबद्ध करें",
+ "align_middle": "मध्य संरेखित करें",
+ "align_right": "दायाँपंक्तिबद्धकरें",
+ "align_top": "शीर्षमेंपंक्तिबद्धकरें",
+ "mode_select": "उपकरण चुनें",
+ "mode_fhpath": "पेंसिल उपकरण",
+ "mode_line": "लाइन उपकरण",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "नि: शुल्क हाथ आयत",
+ "mode_ellipse": "दीर्घवृत्त",
+ "mode_circle": "वृत्त",
+ "mode_fhellipse": "नि: शुल्क हाथ दीर्घवृत्त",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "पाठ उपकरण",
+ "mode_image": "छवि उपकरण",
+ "mode_zoom": "ज़ूम उपकरण",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "पूर्ववत करें",
+ "redo": "फिर से करें",
+ "tool_source": "स्रोत में बदलाव करें",
+ "wireframe_mode": "रूपरेखा मोड",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "समूह तत्वों",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "पथ में बदलें",
+ "reorient_path": "पथ को नई दिशा दें",
+ "ungroup": "अंश को समूह से अलग करें",
+ "docprops": "दस्तावेज़ गुण",
+ "imagelib": "Image Library",
+ "move_bottom": "नीचे ले जाएँ",
+ "move_top": "ऊपर ले जाएँ",
+ "node_clone": "नोड क्लोन",
+ "node_delete": "नोड हटायें",
+ "node_link": "कड़ी नियंत्रण बिंदु",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "बचाना",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "हटायें": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"परत",
+ "layers": "Layers",
+ "del": "परत हटाएँ",
+ "move_down": "परत नीचे ले जाएँ",
+ "new": "नई परत",
+ "rename": "परत का नाम बदलें",
+ "move_up": "परत ऊपर ले जाएँ",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "अंश को ले जाएँ:",
+ "move_selected": "चयनित अंश को दूसरी परत पर ले जाएँ"
+ },
+ config: {
+ "image_props": "छवि के गुण",
+ "doc_title": "शीर्षक",
+ "doc_dims": "कैनवास आयाम",
+ "included_images": "शामिल छवियाँ",
+ "image_opt_embed": "एम्बेड डेटा (स्थानीय फ़ाइलें)",
+ "image_opt_ref": "फाइल के संदर्भ का प्रयोग",
+ "editor_prefs": "संपादक वरीयताएँ",
+ "icon_size": "चिह्न का आकार",
+ "language": "भाषा",
+ "background": "संपादक पृष्ठभूमि",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "नोट: पृष्ठभूमि छवि के साथ नहीं बचायी जाएगी",
+ "icon_large": "बड़ा",
+ "icon_medium": "मध्यम",
+ "icon_small": "छोटा",
+ "icon_xlarge": "बहुत बड़ा",
+ "select_predefined": "चुनें पूर्वनिर्धारित:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"अमान्य मूल्य",
+ "noContentToFitTo":"कोई सामग्री फिट करने के लिए उपलब्ध नहीं",
+ "dupeLayerName":"इस नाम कि परत पहले से मौजूद है !",
+ "enterUniqueLayerName":"कृपया परत का एक अद्वितीय नाम डालें",
+ "enterNewLayerName":"कृपया परत का एक नया नाम डालें",
+ "layerHasThatName":"परत का पहले से ही यही नाम है",
+ "QmoveElemsToLayer":"चयनित अंश को परत '%s' पर ले जाएँ ?",
+ "QwantToClear":"क्या आप छवि साफ़ करना चाहते हैं?\nयह आपके उन्डू इतिहास को भी मिटा देगा!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"आपके एस.वी.जी. स्रोत में त्रुटियों थी.\nक्या आप मूल एस.वी.जी स्रोत पर वापिस जाना चाहते हैं?",
+ "QignoreSourceChanges":"एसवीजी स्रोत से लाये बदलावों को ध्यान न दें?",
+ "featNotSupported":"सुविधा असमर्थित है",
+ "enterNewImgURL":"नई छवि URL दर्ज करें",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.hr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hr.js.svn-base
new file mode 100644
index 000000000..629abb341
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hr.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hr",
+ dir : "ltr",
+ common: {
+ "ok": "Spremiti",
+ "cancel": "Odustani",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kliknite promijeniti boju ispune, shift-click to promijeniti boju moždanog udara",
+ "zoom_level": "Promjena razine zumiranja",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Promjena boje ispune",
+ "stroke_color": "Promjena boje moždani udar",
+ "stroke_style": "Promijeni stroke crtica stil",
+ "stroke_width": "Promjena širine moždani udar",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Promijeni rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Promjena odabrane stavke neprozirnost",
+ "circle_cx": "Promjena krug&#39;s CX koordinirati",
+ "circle_cy": "Cy Promijeni krug je koordinirati",
+ "circle_r": "Promjena krug je radijusa",
+ "ellipse_cx": "Promjena elipsa&#39;s CX koordinirati",
+ "ellipse_cy": "Cy Promijeni elipsa je koordinirati",
+ "ellipse_rx": "Promijeniti elipsa&#39;s x polumjer",
+ "ellipse_ry": "Promjena elipsa&#39;s y polumjer",
+ "line_x1": "Promijeni linija je početak x koordinatu",
+ "line_x2": "Promjena linije završetak x koordinatu",
+ "line_y1": "Promijeni linija je početak y koordinatu",
+ "line_y2": "Promjena linije završetak y koordinatu",
+ "rect_height": "Promijeni pravokutnik visine",
+ "rect_width": "Promijeni pravokutnik širine",
+ "corner_radius": "Promijeni Pravokutnik Corner Radius",
+ "image_width": "Promijeni sliku širine",
+ "image_height": "Promijeni sliku visina",
+ "image_url": "Promijeni URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Promjena sadržaja teksta",
+ "font_family": "Promjena fontova",
+ "font_size": "Change font size",
+ "bold": "Podebljani tekst",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Promijeni boju pozadine / neprozirnost",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Prilagodi na sve sadržaje",
+ "fit_to_canvas": "Prilagodi na platnu",
+ "fit_to_layer_content": "Prilagodi sloj sadržaj",
+ "fit_to_sel": "Prilagodi odabir",
+ "align_relative_to": "Poravnaj u odnosu na ...",
+ "relativeTo": "u odnosu na:",
+ "stranica": "stranica",
+ "largest_object": "najveći objekt",
+ "selected_objects": "izabrani objekti",
+ "smallest_object": "najmanji objekt",
+ "new_doc": "Nove slike",
+ "open_doc": "Otvori sliku",
+ "export_png": "Export as PNG",
+ "save_doc": "Spremanje slike",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Poravnaj dolje",
+ "align_center": "Centriraj",
+ "align_left": "Poravnaj lijevo",
+ "align_middle": "Poravnaj Srednji",
+ "align_right": "Poravnaj desno",
+ "align_top": "Poravnaj Top",
+ "mode_select": "Odaberite alat",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Pravokutnik",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst Alat",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Alat za zumiranje",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Poništi",
+ "redo": "Redo",
+ "tool_source": "Uredi Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupa Elementi",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Razgrupiranje Elementi",
+ "docprops": "Svojstva dokumenta",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Pomakni na vrh",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Spremiti",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Brisanje sloja",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Preimenuj Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefinirane:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.hu.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hu.js.svn-base
new file mode 100644
index 000000000..000068693
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hu.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hu",
+ dir : "ltr",
+ common: {
+ "ok": "Ment",
+ "cancel": "Szakítani",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kattints ide a változások töltse szín, shift-click változtatni stroke color",
+ "zoom_level": "Change nagyítási",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change töltse color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke kötőjel style",
+ "stroke_width": "Change stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Váltás forgás szög",
+ "blur": "Change gaussian blur value",
+ "opacity": "A kijelölt elem opacity",
+ "circle_cx": "Change kör CX koordináta",
+ "circle_cy": "Change kör cy koordináta",
+ "circle_r": "Change kör sugara",
+ "ellipse_cx": "Change ellipszis&#39;s CX koordináta",
+ "ellipse_cy": "Change ellipszis&#39;s cy koordináta",
+ "ellipse_rx": "Change ellipszis&#39;s x sugarú",
+ "ellipse_ry": "Change ellipszis&#39;s y sugara",
+ "line_x1": "A sor kezd x koordináta",
+ "line_x2": "A sor vége az x koordináta",
+ "line_y1": "A sor kezd y koordináta",
+ "line_y2": "A sor vége az y koordináta",
+ "rect_height": "Change téglalap magassága",
+ "rect_width": "Change téglalap szélessége",
+ "corner_radius": "Change téglalap sarok sugara",
+ "image_width": "Change kép szélessége",
+ "image_height": "Kép módosítása height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "A szöveg tartalma",
+ "font_family": "Change Betűcsalád",
+ "font_size": "Change font size",
+ "bold": "Félkövér szöveg",
+ "italic": "Dőlt szöveg"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color / homályosság",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Illeszkednek az összes tartalom",
+ "fit_to_canvas": "Igazítás a vászonra",
+ "fit_to_layer_content": "Igazítás a réteg tartalma",
+ "fit_to_sel": "Igazítás a kiválasztási",
+ "align_relative_to": "Képest Igazítás ...",
+ "relativeTo": "relatív hogy:",
+ "Page": "Page",
+ "largest_object": "legnagyobb objektum",
+ "selected_objects": "választott tárgyak",
+ "smallest_object": "legkisebb objektum",
+ "new_doc": "Új kép",
+ "open_doc": "Kép megnyitása",
+ "export_png": "Export as PNG",
+ "save_doc": "Kép mentése más",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alulra igazítás",
+ "align_center": "Középre igazítás",
+ "align_left": "Balra igazítás",
+ "align_middle": "Közép-align",
+ "align_right": "Jobbra igazítás",
+ "align_top": "Align Top",
+ "mode_select": "Válassza ki az eszközt",
+ "mode_fhpath": "Ceruza eszköz",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand téglalap",
+ "mode_ellipse": "Ellipszisszelet",
+ "mode_circle": "Körbe",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Szöveg eszköz",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Visszavon",
+ "redo": "Megismétléséhez",
+ "tool_source": "Szerkesztés Forrás",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Csoport elemei",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Szétbont elemei",
+ "docprops": "Dokumentum tulajdonságai",
+ "imagelib": "Image Library",
+ "move_bottom": "Mozgatás lefelé",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Ment",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Réteg törlése",
+ "move_down": "Mozgatása lefelé",
+ "new": "Új réteg",
+ "rename": "Réteg átnevezése",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Válassza ki előre definiált:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.hy.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hy.js.svn-base
new file mode 100644
index 000000000..54851b77e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.hy.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hy",
+ dir : "ltr",
+ common: {
+ "ok": "Save",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "elected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.id.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.id.js.svn-base
new file mode 100644
index 000000000..aedfa7565
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.id.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "id",
+ dir : "ltr",
+ common: {
+ "ok": "Simpan",
+ "cancel": "Batal",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik untuk mengubah warna mengisi, shift-klik untuk mengubah warna stroke",
+ "zoom_level": "Mengubah tingkat pembesaran",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Ubah warna mengisi",
+ "stroke_color": "Ubah warna stroke",
+ "stroke_style": "Ubah gaya dash stroke",
+ "stroke_width": "Ubah stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Ubah sudut rotasi",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mengubah item yang dipilih keburaman",
+ "circle_cx": "Mengubah koordinat lingkaran cx",
+ "circle_cy": "Mengubah koordinat cy lingkaran",
+ "circle_r": "Ubah jari-jari lingkaran",
+ "ellipse_cx": "Ubah elips&#39;s cx koordinat",
+ "ellipse_cy": "Ubah elips&#39;s cy koordinat",
+ "ellipse_rx": "Ubah elips&#39;s x jari-jari",
+ "ellipse_ry": "Ubah elips&#39;s y jari-jari",
+ "line_x1": "Ubah baris mulai x koordinat",
+ "line_x2": "Ubah baris&#39;s Berakhir x koordinat",
+ "line_y1": "Ubah baris mulai y koordinat",
+ "line_y2": "Ubah baris di tiap akhir y koordinat",
+ "rect_height": "Perubahan tinggi persegi panjang",
+ "rect_width": "Ubah persegi panjang lebar",
+ "corner_radius": "Ubah Corner Rectangle Radius",
+ "image_width": "Ubah Lebar gambar",
+ "image_height": "Tinggi gambar Perubahan",
+ "image_url": "Ubah URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Ubah isi teks",
+ "font_family": "Ubah Font Keluarga",
+ "font_size": "Ubah Ukuran Font",
+ "bold": "Bold Teks",
+ "italic": "Italic Teks"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mengubah warna latar belakang / keburaman",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Cocok untuk semua konten",
+ "fit_to_canvas": "Muat kanvas",
+ "fit_to_layer_content": "Muat konten lapisan",
+ "fit_to_sel": "Fit seleksi",
+ "align_relative_to": "Rata relatif ...",
+ "relativeTo": "relatif:",
+ "Halaman": "Halaman",
+ "largest_object": "objek terbesar",
+ "selected_objects": "objek terpilih",
+ "smallest_object": "objek terkecil",
+ "new_doc": "Gambar Baru",
+ "open_doc": "Membuka Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Rata Bottom",
+ "align_center": "Rata Tengah",
+ "align_left": "Rata Kiri",
+ "align_middle": "Rata Tengah",
+ "align_right": "Rata Kanan",
+ "align_top": "Rata Top",
+ "mode_select": "Pilih Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Persegi Panjang",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Lingkaran",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Teks Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Kelompok Elemen",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elemen",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Pindah ke Bawah",
+ "move_top": "Pindahkan ke Atas",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Simpan",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Hapus Layer",
+ "move_down": "Pindahkan Layer Bawah",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Pindahkan Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Pilih standar:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.is.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.is.js.svn-base
new file mode 100644
index 000000000..2ef73f71e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.is.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "is",
+ dir : "ltr",
+ common: {
+ "ok": "Vista",
+ "cancel": "Hætta",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Smelltu hér til að breyta fylla lit, Shift-smelltu til að breyta högg lit",
+ "zoom_level": "Breyta Stækkunarstig",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Breyta fylla color",
+ "stroke_color": "Breyta heilablķđfall color",
+ "stroke_style": "Breyta heilablķđfall þjóta stíl",
+ "stroke_width": "Breyta heilablķđfall width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Breyting snúningur horn",
+ "blur": "Change gaussian blur value",
+ "opacity": "Breyta valin atriði opacity",
+ "circle_cx": "Cx Breyta hring er að samræma",
+ "circle_cy": "Breyta hring&#39;s cy samræma",
+ "circle_r": "Radíus Breyta hringsins er",
+ "ellipse_cx": "Breyta sporbaug&#39;s cx samræma",
+ "ellipse_cy": "Breyta sporbaug&#39;s cy samræma",
+ "ellipse_rx": "X radíus Breyta sporbaug&#39;s",
+ "ellipse_ry": "Y radíus Breyta sporbaug&#39;s",
+ "line_x1": "Breyta lína í byrjun x samræma",
+ "line_x2": "Breyta lína&#39;s Ending x samræma",
+ "line_y1": "Breyta lína í byrjun y samræma",
+ "line_y2": "Breyta lína er endir y samræma",
+ "rect_height": "Breyta rétthyrningur hæð",
+ "rect_width": "Skipta rétthyrningur width",
+ "corner_radius": "Breyta rétthyrningur Corner Radíus",
+ "image_width": "Breyta mynd width",
+ "image_height": "Breyta mynd hæð",
+ "image_url": "Breyta URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Breyta texta innihald",
+ "font_family": "Change Leturfjölskylda",
+ "font_size": "Breyta leturstærð",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Breyta bakgrunnslit / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Laga til efni",
+ "fit_to_canvas": "Fit á striga",
+ "fit_to_layer_content": "Laga til lag efni",
+ "fit_to_sel": "Fit til val",
+ "align_relative_to": "Jafna miðað við ...",
+ "relativeTo": "hlutfallslegt til:",
+ "síðu": "síðu",
+ "largest_object": "stærsti hlutinn",
+ "selected_objects": "kjörinn hlutir",
+ "smallest_object": "lítill hluti",
+ "new_doc": "New Image",
+ "open_doc": "Opna mynd",
+ "export_png": "Export as PNG",
+ "save_doc": "Spara Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Jafna Bottom",
+ "align_center": "Jafna Center",
+ "align_left": "Vinstri jöfnun",
+ "align_middle": "Jafna Mið",
+ "align_right": "Hægri jöfnun",
+ "align_top": "Jöfnun Top",
+ "mode_select": "Veldu Tól",
+ "mode_fhpath": "Blýantur Tól",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand rétthyrningur",
+ "mode_ellipse": "Sporbaugur",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Sporbaugur",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Mynd Tól",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Hætta",
+ "redo": "Endurtaka",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Færa Bottom",
+ "move_top": "Fara efst á síðu",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Vista",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Eyða Lag",
+ "move_down": "Færa Layer Down",
+ "new": "Lag",
+ "rename": "Endurnefna Lag",
+ "move_up": "Færa Lag Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Veldu predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.it.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.it.js.svn-base
new file mode 100644
index 000000000..594e5128c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.it.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "it",
+ dir : "ltr",
+ common: {
+ "ok": "Salva",
+ "cancel": "Annulla",
+ "key_backspace": "backspace",
+ "key_del": "Canc",
+ "key_down": "giù",
+ "key_up": "su",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Mostra/nascondi strumenti per il tratto",
+ "palette_info": "Fare clic per cambiare il colore di riempimento, shift-click per cambiare colore del tratto",
+ "zoom_level": "Cambia il livello di zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identifica l'elemento",
+ "fill_color": "Cambia il colore di riempimento",
+ "stroke_color": "Cambia il colore del tratto",
+ "stroke_style": "Cambia lo stile del tratto",
+ "stroke_width": "Cambia la larghezza del tratto",
+ "pos_x": "Modifica la coordinata x",
+ "pos_y": "Modifica la coordinata y",
+ "linecap_butt": "Inizio linea: Punto",
+ "linecap_round": "Inizio linea: Tondo",
+ "linecap_square": "Inizio linea: Quadrato",
+ "linejoin_bevel": "Giunzione: smussata",
+ "linejoin_miter": "Giunzione: spezzata",
+ "linejoin_round": "Giunzione: arrotondata",
+ "angle": "Cambia l'angolo di rotazione",
+ "blur": "Cambia l'intensità della sfocatura",
+ "opacity": "Cambia l'opacità dell'oggetto selezionato",
+ "circle_cx": "Cambia la coordinata Cx del cerchio",
+ "circle_cy": "Cambia la coordinata Cy del cerchio",
+ "circle_r": "Cambia il raggio del cerchio",
+ "ellipse_cx": "Cambia la coordinata Cx dell'ellisse",
+ "ellipse_cy": "Cambia la coordinata Cy dell'ellisse",
+ "ellipse_rx": "Cambia l'asse x dell'ellisse",
+ "ellipse_ry": "Cambia l'asse y dell'ellisse",
+ "line_x1": "Modifica la coordinata iniziale x della linea",
+ "line_x2": "Modifica la coordinata finale x della linea",
+ "line_y1": "Modifica la coordinata iniziale y della linea",
+ "line_y2": "Modifica la coordinata finale y della linea",
+ "rect_height": "Cambia l'altezza rettangolo",
+ "rect_width": "Cambia la larghezza rettangolo",
+ "corner_radius": "Cambia il raggio dell'angolo",
+ "image_width": "Cambia la larghezza dell'immagine",
+ "image_height": "Cambia l'altezza dell'immagine",
+ "image_url": "Cambia URL",
+ "node_x": "Modifica la coordinata x del nodo",
+ "node_y": "Modifica la coordinata y del nodo",
+ "seg_type": "Cambia il tipo di segmento",
+ "straight_segments": "Linea retta",
+ "curve_segments": "Curva",
+ "text_contents": "Cambia il contenuto del testo",
+ "font_family": "Cambia il tipo di Font",
+ "font_size": "Modifica dimensione carattere",
+ "bold": "Grassetto",
+ "italic": "Corsivo"
+ },
+ tools: {
+ "main_menu": "Menù principale",
+ "bkgnd_color_opac": "Cambia colore/opacità dello sfondo",
+ "connector_no_arrow": "No freccia",
+ "fitToContent": "Adatta al contenuto",
+ "fit_to_all": "Adatta a tutti i contenuti",
+ "fit_to_canvas": "Adatta all'area di disegno",
+ "fit_to_layer_content": "Adatta al contenuto del livello",
+ "fit_to_sel": "Adatta alla selezione",
+ "align_relative_to": "Allineati a ...",
+ "relativeTo": "Rispetto a:",
+ "Pagina": "Pagina",
+ "largest_object": "Oggetto più grande",
+ "selected_objects": "Oggetti selezionati",
+ "smallest_object": "Oggetto più piccolo",
+ "new_doc": "Nuova immagine",
+ "open_doc": "Apri immagine",
+ "export_png": "Esporta come PNG",
+ "save_doc": "Salva",
+ "import_doc": "Importa SVG",
+ "align_to_page": "Allinea elementi alla pagina",
+ "align_bottom": "Allinea in basso",
+ "align_center": "Allinea al centro",
+ "align_left": "Allinea a sinistra",
+ "align_middle": "Allinea al centro",
+ "align_right": "Allinea a destra",
+ "align_top": "Allinea in alto",
+ "mode_select": "Seleziona",
+ "mode_fhpath": "Matita",
+ "mode_line": "Linea",
+ "mode_connect": "Collega due oggetti",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Rettangolo a mano libera",
+ "mode_ellipse": "Ellisse",
+ "mode_circle": "Cerchio",
+ "mode_fhellipse": "Ellisse a mano libera",
+ "mode_path": "Spezzata",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Testo",
+ "mode_image": "Immagine",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Seleziona colore",
+ "no_embed": "NOTA: L'immagine non può essere incorporata: dipenderà dal percorso assoluto per essere vista",
+ "undo": "Annulla",
+ "redo": "Rifai",
+ "tool_source": "Modifica sorgente",
+ "wireframe_mode": "Contorno",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Raggruppa elementi",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Converti in tracciato",
+ "reorient_path": "Riallinea",
+ "ungroup": "Separa gli elementi",
+ "docprops": "Proprietà del documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Sposta in fondo",
+ "move_top": "Sposta in cima",
+ "node_clone": "Clona nodo",
+ "node_delete": "Elimina nodo",
+ "node_link": "Collegamento tra punti di controllo",
+ "add_subpath": "Aggiungi sotto-percorso",
+ "openclose_path": "Apri/chiudi spezzata",
+ "source_save": "Salva",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Canc": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Livello",
+ "layers": "Layers",
+ "del": "Elimina il livello",
+ "move_down": "Sposta indietro il livello",
+ "new": "Nuovo livello",
+ "rename": "Rinomina il livello",
+ "move_up": "Sposta avanti il livello",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Sposta verso:",
+ "move_selected": "Sposta gli elementi in un diverso livello"
+ },
+ config: {
+ "image_props": "Proprietà Immagine",
+ "doc_title": "Titolo",
+ "doc_dims": "Dimensioni dell'area di disegno",
+ "included_images": "Immagini incluse",
+ "image_opt_embed": "Incorpora dati (file locali)",
+ "image_opt_ref": "Usa l'identificativo di riferimento",
+ "editor_prefs": "Preferenze",
+ "icon_size": "Dimensione Icona",
+ "language": "Lingua",
+ "background": "Sfondo dell'editor",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Nota: Lo sfondo non verrà salvato con l'immagine.",
+ "icon_large": "Grande",
+ "icon_medium": "Medio",
+ "icon_small": "Piccolo",
+ "icon_xlarge": "Molto grande",
+ "select_predefined": "Selezioni predefinite:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valore assegnato non valido",
+ "noContentToFitTo":"Non c'è contenuto cui adeguarsi",
+ "dupeLayerName":"C'è già un livello con questo nome!",
+ "enterUniqueLayerName":"Assegna un diverso nome a ciascun livello, grazie!",
+ "enterNewLayerName":"Assegna un nome al livello",
+ "layerHasThatName":"Un livello ha già questo nome",
+ "QmoveElemsToLayer":"Sposta gli elementi selezionali al livello '%s'?",
+ "QwantToClear":"Vuoi cancellare il disegno?\nVerrà eliminato anche lo storico delle modifiche!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Ci sono errori nel codice sorgente SVG.\nRitorno al codice originale?",
+ "QignoreSourceChanges":"Ignoro i cambiamenti nel sorgente SVG?",
+ "featNotSupported":"Caratteristica non supportata",
+ "enterNewImgURL":"Scrivi un nuovo URL per l'immagine",
+ "defsFailOnSave": "NOTA: A causa dlle caratteristiche del tuo browser, l'immagine potrà apparire errata (senza elementi o gradazioni) finché non sarà salvata.",
+ "loadingImage":"Sto caricando l'immagine. attendere prego...",
+ "saveFromBrowser": "Seleziona \"Salva con nome...\" nel browser per salvare l'immagine con nome %s .",
+ "noteTheseIssues": "Nota le seguenti particolarità: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ja.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ja.js.svn-base
new file mode 100644
index 000000000..27c58d41d
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ja.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ja",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "キャンセル",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "クリックで塗りの色を選択、Shift+クリックで線の色を選択",
+ "zoom_level": "ズーム倍率の変更",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "塗りの色を変更",
+ "stroke_color": "線の色を変更",
+ "stroke_style": "線種の変更",
+ "stroke_width": "線幅の変更",
+ "pos_x": "X座標を変更",
+ "pos_y": "Y座標を変更",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "回転角の変更",
+ "blur": "Change gaussian blur value",
+ "opacity": "不透明度",
+ "circle_cx": "円の中心を変更(X座標)",
+ "circle_cy": "円の中心を変更(Y座標)",
+ "circle_r": "変更円の半径",
+ "ellipse_cx": "楕円の中心を変更(X座標)",
+ "ellipse_cy": "楕円の中心を変更(Y座標)",
+ "ellipse_rx": "楕円の半径を変更(X座標)",
+ "ellipse_ry": "楕円の半径を変更(Y座標)",
+ "line_x1": "開始X座標",
+ "line_x2": "終了X座標",
+ "line_y1": "開始Y座標",
+ "line_y2": "終了Y座標",
+ "rect_height": "長方形の高さを変更",
+ "rect_width": "長方形の幅を変更",
+ "corner_radius": "長方形の角の半径を変更",
+ "image_width": "画像の幅を変更",
+ "image_height": "画像の高さを変更",
+ "image_url": "URLを変更",
+ "node_x": "ノードのX座標を変更",
+ "node_y": "ノードのY座標を変更",
+ "seg_type": "線分の種類を変更",
+ "straight_segments": "直線",
+ "curve_segments": "カーブ",
+ "text_contents": "テキストの内容の変更",
+ "font_family": "フォントファミリーの変更",
+ "font_size": "文字サイズの変更",
+ "bold": "太字",
+ "italic": "イタリック体"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "背景色/不透明度の変更",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "コンテンツに合わせる",
+ "fit_to_all": "すべてのコンテンツに合わせる",
+ "fit_to_canvas": "キャンバスに合わせる",
+ "fit_to_layer_content": "レイヤー上のコンテンツに合わせる",
+ "fit_to_sel": "選択対象に合わせる",
+ "align_relative_to": "揃える",
+ "relativeTo": "相対:",
+ "ページ": "ページ",
+ "largest_object": "最大のオブジェクト",
+ "selected_objects": "選択オブジェクト",
+ "smallest_object": "最小のオブジェクト",
+ "new_doc": "新規イメージ",
+ "open_doc": "イメージを開く",
+ "export_png": "Export as PNG",
+ "save_doc": "画像を保存",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "下揃え",
+ "align_center": "中央揃え",
+ "align_left": "左揃え",
+ "align_middle": "中央揃え",
+ "align_right": "右揃え",
+ "align_top": "上揃え",
+ "mode_select": "選択ツール",
+ "mode_fhpath": "鉛筆ツール",
+ "mode_line": "直線ツール",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "フリーハンド長方形",
+ "mode_ellipse": "楕円",
+ "mode_circle": "円",
+ "mode_fhellipse": "フリーハンド楕円",
+ "mode_path": "パスツール",
+ "mode_shapelib": "Shape library",
+ "mode_text": "テキストツール",
+ "mode_image": "イメージツール",
+ "mode_zoom": "ズームツール",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "元に戻す",
+ "redo": "やり直し",
+ "tool_source": "ソースの編集",
+ "wireframe_mode": "ワイヤーフレームで表示 [F]",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "グループ化",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "パスに変換",
+ "reorient_path": "現在の角度を0度とする",
+ "ungroup": "グループ化を解除",
+ "docprops": "文書のプロパティ",
+ "imagelib": "Image Library",
+ "move_bottom": "奥に移動",
+ "move_top": "手前に移動",
+ "node_clone": "ノードを複製",
+ "node_delete": "ノードを削除",
+ "node_link": "制御点の接続",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "適用",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"レイヤ",
+ "layers": "Layers",
+ "del": "レイヤの削除",
+ "move_down": "レイヤを下へ移動",
+ "new": "新規レイヤ",
+ "rename": "レイヤの名前を変更",
+ "move_up": "レイヤを上へ移動",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "移動先レイヤ:",
+ "move_selected": "選択対象を別のレイヤに移動"
+ },
+ config: {
+ "image_props": "イメージの設定",
+ "doc_title": "タイトル",
+ "doc_dims": "キャンバスの大きさ",
+ "included_images": "挿入された画像の扱い",
+ "image_opt_embed": "SVGファイルに埋め込む",
+ "image_opt_ref": "画像を参照する",
+ "editor_prefs": "エディタの設定",
+ "icon_size": "アイコンの大きさ",
+ "language": "言語",
+ "background": "エディタの背景色",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "※背景色はファイルに保存されません。",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "デフォルト",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"無効な値が指定されています。",
+ "noContentToFitTo":"合わせる対象のコンテンツがありません。",
+ "dupeLayerName":"同名のレイヤーが既に存在します。",
+ "enterUniqueLayerName":"新規レイヤの一意な名前を入力してください。",
+ "enterNewLayerName":"レイヤの新しい名前を入力してください。",
+ "layerHasThatName":"既に同名が付いています。",
+ "QmoveElemsToLayer":"選択した要素をレイヤー '%s' に移動しますか?",
+ "QwantToClear":"キャンバスをクリアしますか?\nアンドゥ履歴も消去されます。",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"ソースにエラーがあります。\n元のソースに戻しますか?",
+ "QignoreSourceChanges":"ソースの変更を無視しますか?",
+ "featNotSupported":"機能はサポートされていません。",
+ "enterNewImgURL":"画像のURLを入力してください。",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ko.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ko.js.svn-base
new file mode 100644
index 000000000..28cced199
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ko.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ko",
+ dir : "ltr",
+ common: {
+ "ok": "저장",
+ "cancel": "취소",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "색상을 클릭, 근무 시간 채우기 스트로크 색상을 변경하려면 변경하려면",
+ "zoom_level": "변경 수준으로 확대",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "채우기 색상 변경",
+ "stroke_color": "뇌졸중으로 색상 변경",
+ "stroke_style": "뇌졸중 변경 대시 스타일",
+ "stroke_width": "뇌졸중 너비 변경",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "회전 각도를 변경",
+ "blur": "Change gaussian blur value",
+ "opacity": "변경 항목을 선택 불투명도",
+ "circle_cx": "변경 동그라미 CX는 좌표",
+ "circle_cy": "동그라미 싸이 변경 조정할 수있어",
+ "circle_r": "변경 원의 반지름",
+ "ellipse_cx": "CX는 타원의 좌표 변경",
+ "ellipse_cy": "싸이 타원 변경 조정할 수있어",
+ "ellipse_rx": "변경 타원의 x 반지름",
+ "ellipse_ry": "변경 타원의 y를 반경",
+ "line_x1": "변경 라인의 X 좌표 시작",
+ "line_x2": "변경 라인의 X 좌표 결말",
+ "line_y1": "라인 변경 y를 시작 좌표",
+ "line_y2": "라인 변경 y를 결말의 좌표",
+ "rect_height": "사각형의 높이를 변경",
+ "rect_width": "사각형의 너비 변경",
+ "corner_radius": "변경 직사각형 코너 반경",
+ "image_width": "이미지 변경 폭",
+ "image_height": "이미지 높이 변경",
+ "image_url": "URL 변경",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "텍스트 변경 내용",
+ "font_family": "글꼴 변경 패밀리",
+ "font_size": "글꼴 크기 변경",
+ "bold": "굵은 텍스트",
+ "italic": "기울임꼴 텍스트"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "배경 색상 변경 / 투명도",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "맞춤 콘텐츠",
+ "fit_to_all": "맞춤 모든 콘텐츠에",
+ "fit_to_canvas": "맞춤 캔버스",
+ "fit_to_layer_content": "레이어에 맞게 콘텐츠",
+ "fit_to_sel": "맞춤 선택",
+ "align_relative_to": "정렬 상대적으로 ...",
+ "relativeTo": "상대:",
+ "페이지": "페이지",
+ "largest_object": "큰 개체",
+ "selected_objects": "당선 개체",
+ "smallest_object": "작은 개체",
+ "new_doc": "새 이미지",
+ "open_doc": "오픈 이미지",
+ "export_png": "Export as PNG",
+ "save_doc": "이미지 저장",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "히프 정렬",
+ "align_center": "정렬 센터",
+ "align_left": "왼쪽 정렬",
+ "align_middle": "중간 정렬",
+ "align_right": "오른쪽 맞춤",
+ "align_top": "정렬 탑",
+ "mode_select": "선택 도구",
+ "mode_fhpath": "연필 도구",
+ "mode_line": "선 도구",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "자유 핸드 직사각형",
+ "mode_ellipse": "타원",
+ "mode_circle": "동그라미",
+ "mode_fhellipse": "자유 핸드 타원",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "텍스트 도구",
+ "mode_image": "이미지 도구",
+ "mode_zoom": "줌 도구",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "취소",
+ "redo": "재실행",
+ "tool_source": "수정 소스",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "그룹 요소",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "그룹 해제 요소",
+ "docprops": "문서 속성",
+ "imagelib": "Image Library",
+ "move_bottom": "아래로 이동",
+ "move_top": "상단으로 이동",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "저장",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "레이어 삭제",
+ "move_down": "레이어 아래로 이동",
+ "new": "새 레이어",
+ "rename": "레이어 이름 바꾸기",
+ "move_up": "레이어 위로 이동",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "미리 정의된 선택:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.lt.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.lt.js.svn-base
new file mode 100644
index 000000000..9224941a8
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.lt.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "lt",
+ dir : "ltr",
+ common: {
+ "ok": "Saugoti",
+ "cancel": "Atšaukti",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Spustelėkite norėdami keisti užpildo spalvą, perėjimo spustelėkite pakeisti insultas spalva",
+ "zoom_level": "Keisti mastelį",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Keisti užpildyti spalvos",
+ "stroke_color": "Keisti insultas spalva",
+ "stroke_style": "Keisti insultas brūkšnys stilius",
+ "stroke_width": "Keisti insultas plotis",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Keisti sukimosi kampas",
+ "blur": "Change gaussian blur value",
+ "opacity": "Pakeisti pasirinkto elemento neskaidrumo",
+ "circle_cx": "Keisti ratas&#39;s CX koordinuoti",
+ "circle_cy": "Keisti ratas&#39;s CY koordinuoti",
+ "circle_r": "Keisti savo apskritimo spindulys",
+ "ellipse_cx": "Keisti elipse&#39;s CX koordinuoti",
+ "ellipse_cy": "Keisti elipse&#39;s CY koordinuoti",
+ "ellipse_rx": "Keisti elipsė &quot;X spindulys",
+ "ellipse_ry": "Keisti elipse Y spindulys",
+ "line_x1": "Keisti linijos nuo koordinačių x",
+ "line_x2": "Keisti linijos baigėsi x koordinuoti",
+ "line_y1": "Keisti linijos pradžios y koordinačių",
+ "line_y2": "Keisti linijos baigėsi y koordinačių",
+ "rect_height": "Keisti stačiakampio aukščio",
+ "rect_width": "Pakeisti stačiakampio plotis",
+ "corner_radius": "Keisti stačiakampis skyrelį Spindulys",
+ "image_width": "Keisti paveikslėlio plotis",
+ "image_height": "Keisti vaizdo aukštis",
+ "image_url": "Pakeisti URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Keisti teksto turinys",
+ "font_family": "Pakeistišriftą Šeima",
+ "font_size": "Change font size",
+ "bold": "Pusjuodis",
+ "italic": "Kursyvas"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Pakeisti fono spalvą / drumstumas",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Talpinti turinys",
+ "fit_to_all": "Talpinti All content",
+ "fit_to_canvas": "Talpinti drobė",
+ "fit_to_layer_content": "Talpinti sluoksnis turinio",
+ "fit_to_sel": "Talpinti atrankos",
+ "align_relative_to": "Derinti palyginti ...",
+ "relativeTo": "palyginti:",
+ "puslapis": "puslapis",
+ "largest_object": "didžiausias objektas",
+ "selected_objects": "išrinktas objektai",
+ "smallest_object": "mažiausias objektą",
+ "new_doc": "New Image",
+ "open_doc": "Atidaryti atvaizdą",
+ "export_png": "Export as PNG",
+ "save_doc": "Išsaugoti nuotrauką",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Lygiuoti apačioje",
+ "align_center": "Lygiuoti",
+ "align_left": "Lygiuoti kairėje",
+ "align_middle": "Suderinti Vidurio",
+ "align_right": "Lygiuoti dešinėje",
+ "align_top": "Lygiuoti viršų",
+ "mode_select": "Įrankis",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free Hand stačiakampis",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free Hand Elipsė",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekstas Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Įrankį",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Atšaukti",
+ "redo": "Atstatyti",
+ "tool_source": "Taisyti Šaltinis",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementų grupės",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Išgrupuoti elementai",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Perkelti į apačią",
+ "move_top": "Perkelti į viršų",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Saugoti",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Ištrinti Layer",
+ "move_down": "Perkelti sluoksnį Žemyn",
+ "new": "New Layer",
+ "rename": "Pervadinti sluoksnį",
+ "move_up": "Perkelti sluoksnį Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Pasirinkite iš anksto:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.lv.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.lv.js.svn-base
new file mode 100644
index 000000000..76c7dbfd6
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.lv.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "lv",
+ dir : "ltr",
+ common: {
+ "ok": "Glābt",
+ "cancel": "Atcelt",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Noklikšķiniet, lai mainītu aizpildījuma krāsu, shift-click to mainīt stroke krāsa",
+ "zoom_level": "Pārmaiņu mērogu",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change aizpildījuma krāsu",
+ "stroke_color": "Change stroke krāsa",
+ "stroke_style": "Maina stroke domuzīme stils",
+ "stroke_width": "Change stroke platums",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Mainīt griešanās leņķis",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mainīt izvēlēto objektu necaurredzamība",
+ "circle_cx": "Maina aplis&#39;s CX koordinēt",
+ "circle_cy": "Pārmaiņu loks ir cy koordinēt",
+ "circle_r": "Pārmaiņu loks ir rādiuss",
+ "ellipse_cx": "Mainīt elipses&#39;s CX koordinēt",
+ "ellipse_cy": "Mainīt elipses&#39;s cy koordinēt",
+ "ellipse_rx": "Mainīt elipses&#39;s x rādiuss",
+ "ellipse_ry": "Mainīt elipses&#39;s y rādiuss",
+ "line_x1": "Mainīt līnijas sākas x koordinēt",
+ "line_x2": "Mainīt līnijas beigu x koordinēt",
+ "line_y1": "Mainīt līnijas sākas y koordinātu",
+ "line_y2": "Mainīt līnijas beigu y koordinātu",
+ "rect_height": "Change Taisnstūra augstums",
+ "rect_width": "Change taisnstūra platums",
+ "corner_radius": "Maina Taisnstūris Corner Rādiuss",
+ "image_width": "Mainīt attēla platumu",
+ "image_height": "Mainīt attēla augstums",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Mainītu teksta saturs",
+ "font_family": "Mainīt fonta Family",
+ "font_size": "Mainīt fonta izmēru",
+ "bold": "Bold Text",
+ "italic": "Kursīvs"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color / necaurredzamība",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit uz visu saturu",
+ "fit_to_canvas": "Ievietot audekls",
+ "fit_to_layer_content": "Ievietot slānis saturs",
+ "fit_to_sel": "Fit atlases",
+ "align_relative_to": "Līdzināt, salīdzinot ar ...",
+ "relativeTo": "salīdzinājumā ar:",
+ "lapa": "lapa",
+ "largest_object": "lielākais objekts",
+ "selected_objects": "ievēlēts objekti",
+ "smallest_object": "mazākais objekts",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Līdzināt Bottom",
+ "align_center": "Līdzināt uz centru",
+ "align_left": "Līdzināt pa kreisi",
+ "align_middle": "Līdzināt Middle",
+ "align_right": "Līdzināt pa labi",
+ "align_top": "Līdzināt Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Taisnstūris",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Atpogāt",
+ "redo": "Redo",
+ "tool_source": "Rediģēt Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupa Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Atgrupēt Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Pārvietot uz leju",
+ "move_top": "Pārvietot uz augšu",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Glābt",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Dzēst Layer",
+ "move_down": "Pārvietot slāni uz leju",
+ "new": "New Layer",
+ "rename": "Pārdēvēt Layer",
+ "move_up": "Pārvietot slāni uz augšu",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Izvēlieties iepriekš:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.mk.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.mk.js.svn-base
new file mode 100644
index 000000000..2b0812eeb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.mk.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "mk",
+ dir : "ltr",
+ common: {
+ "ok": "Зачувува",
+ "cancel": "Откажи",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Кликни за да внесете промени бојата, промена клик да се промени бојата удар",
+ "zoom_level": "Промена зум ниво",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Измени пополнете боја",
+ "stroke_color": "Промена боја на мозочен удар",
+ "stroke_style": "Промена удар цртичка стил",
+ "stroke_width": "Промена удар Ширина",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change ротација агол",
+ "blur": "Change gaussian blur value",
+ "opacity": "Промена избрани ставка непроѕирноста",
+ "circle_cx": "Промена круг на cx координира",
+ "circle_cy": "Промена круг&#39;s cy координираат",
+ "circle_r": "Промена на круг со радиус",
+ "ellipse_cx": "Промена елипса&#39;s cx координираат",
+ "ellipse_cy": "Промена на елипса cy координира",
+ "ellipse_rx": "Промена на елипса x радиус",
+ "ellipse_ry": "Промена на елипса у радиус",
+ "line_x1": "Промена линија почетна x координира",
+ "line_x2": "Промена линија завршува x координира",
+ "line_y1": "Промена линија координираат почетна y",
+ "line_y2": "Промена линија завршува y координира",
+ "rect_height": "Промена правоаголник височина",
+ "rect_width": "Промена правоаголник Ширина",
+ "corner_radius": "Промена правоаголник Corner Radius",
+ "image_width": "Промена Ширина на сликата",
+ "image_height": "Промена на слика височина",
+ "image_url": "Промена URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Промена текст содржина",
+ "font_family": "Смени фонт Фамилија",
+ "font_size": "Изменифонт Големина",
+ "bold": "Задебелен текст",
+ "italic": "Italic текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Смени позадина / непроѕирноста",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Способен да Содржина",
+ "fit_to_all": "Способен да сите содржина",
+ "fit_to_canvas": "Побиране да платно",
+ "fit_to_layer_content": "Способен да слој содржина",
+ "fit_to_sel": "Способен да селекција",
+ "align_relative_to": "Порамни во поглед на ...",
+ "relativeTo": "во поглед на:",
+ "страница": "страница",
+ "largest_object": "најголемиот објект",
+ "selected_objects": "избран објекти",
+ "smallest_object": "најмалата објект",
+ "new_doc": "Нови слики",
+ "open_doc": "Отвори слика",
+ "export_png": "Export as PNG",
+ "save_doc": "Зачувај слика",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Центрирано",
+ "align_left": "Порамни лево Порамни",
+ "align_middle": "Израмни Среден",
+ "align_right": "Порамни десно",
+ "align_top": "Израмни почетокот",
+ "mode_select": "Изберете ја алатката",
+ "mode_fhpath": "Алатка за молив",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Правоаголник слободна рака",
+ "mode_ellipse": "Елипса",
+ "mode_circle": "Круг",
+ "mode_fhellipse": "Free-Hand Елипса",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Алатка за текст",
+ "mode_image": "Алатка за сликата",
+ "mode_zoom": "Алатка за зумирање",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Врати",
+ "redo": "Повтори",
+ "tool_source": "Уреди Извор",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група на елементи",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Елементи",
+ "docprops": "Својства на документот",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to bottom",
+ "move_top": "Поместување на почетокот",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Зачувува",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Избриши Слој",
+ "move_down": "Премести слој долу",
+ "new": "Нов слој",
+ "rename": "Преименувај слој",
+ "move_up": "Премести слој горе",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Изберете предефинирани:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ms.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ms.js.svn-base
new file mode 100644
index 000000000..fbdf01bbe
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ms.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ms",
+ dir : "ltr",
+ common: {
+ "ok": "Simpan",
+ "cancel": "Batal",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik untuk menukar warna mengisi, shift-klik untuk menukar warna stroke",
+ "zoom_level": "Mengubah peringkat pembesaran",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Tukar Warna mengisi",
+ "stroke_color": "Tukar Warna stroke",
+ "stroke_style": "Tukar gaya dash stroke",
+ "stroke_width": "Tukar stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Namakan sudut putaran",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mengubah item yang dipilih keburaman",
+ "circle_cx": "Mengubah koordinat bulatan cx",
+ "circle_cy": "Mengubah koordinat cy bulatan",
+ "circle_r": "Tukar jari-jari lingkaran",
+ "ellipse_cx": "Tukar elips&#39;s cx koordinat",
+ "ellipse_cy": "Tukar elips&#39;s cy koordinat",
+ "ellipse_rx": "Tukar elips&#39;s x jari-jari",
+ "ellipse_ry": "Tukar elips&#39;s y jari-jari",
+ "line_x1": "Ubah baris mulai x koordinat",
+ "line_x2": "Ubah baris&#39;s Berakhir x koordinat",
+ "line_y1": "Ubah baris mulai y koordinat",
+ "line_y2": "Ubah baris di tiap akhir y koordinat",
+ "rect_height": "Perubahan quality persegi panjang",
+ "rect_width": "Tukar persegi panjang lebar",
+ "corner_radius": "Tukar Corner Rectangle Radius",
+ "image_width": "Tukar Lebar imej",
+ "image_height": "Tinggi gambar Kaca",
+ "image_url": "Tukar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Tukar isi teks",
+ "font_family": "Tukar Font Keluarga",
+ "font_size": "Ubah Saiz Font",
+ "bold": "Bold Teks",
+ "italic": "Italic Teks"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mengubah warna latar belakang / keburaman",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Cocok untuk semua kandungan",
+ "fit_to_canvas": "Muat kanvas",
+ "fit_to_layer_content": "Muat kandungan lapisan",
+ "fit_to_sel": "Fit seleksi",
+ "align_relative_to": "Rata relatif ...",
+ "relativeTo": "relatif:",
+ "Laman": "Laman",
+ "largest_object": "objek terbesar",
+ "selected_objects": "objek terpilih",
+ "smallest_object": "objek terkecil",
+ "new_doc": "Imej Baru",
+ "open_doc": "Membuka Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Rata Bottom",
+ "align_center": "Rata Tengah",
+ "align_left": "Rata Kiri",
+ "align_middle": "Rata Tengah",
+ "align_right": "Rata Kanan",
+ "align_top": "Rata Popular",
+ "mode_select": "Pilih Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Persegi Panjang",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Lingkaran",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Teks Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Kelompok Elemen",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elemen",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Pindah ke Bawah",
+ "move_top": "Pindah ke Atas",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Simpan",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Padam Layer",
+ "move_down": "Pindah Layer Bawah",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Pindah Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Pilih standard:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.mt.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.mt.js.svn-base
new file mode 100644
index 000000000..3ba830d8c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.mt.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "mt",
+ dir : "ltr",
+ common: {
+ "ok": "Save",
+ "cancel": "Ikkanċella",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Ikklikkja biex timla l-bidla fil-kulur, ikklikkja-bidla għall-bidla color stroke",
+ "zoom_level": "Bidla zoom livell",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Bidla imla color",
+ "stroke_color": "Color stroke Bidla",
+ "stroke_style": "Bidla stroke dash stil",
+ "stroke_width": "Wisa &#39;puplesija Bidla",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Angolu ta &#39;rotazzjoni Bidla",
+ "blur": "Change gaussian blur value",
+ "opacity": "Bidla magħżula opaċità partita",
+ "circle_cx": "CX ċirku Tibdil jikkoordinaw",
+ "circle_cy": "Ċirku Tibdil cy jikkoordinaw",
+ "circle_r": "Raġġ ta &#39;ċirku tal-Bidla",
+ "ellipse_cx": "Bidla ellissi&#39;s CX jikkoordinaw",
+ "ellipse_cy": "Ellissi Tibdil cy jikkoordinaw",
+ "ellipse_rx": "Raġġ x ellissi Tibdil",
+ "ellipse_ry": "Raġġ y ellissi Tibdil",
+ "line_x1": "Bidla fil-linja tal-bidu tikkoordina x",
+ "line_x2": "Linja tal-Bidla li jispiċċa x jikkoordinaw",
+ "line_y1": "Bidla fil-linja tal-bidu y jikkoordinaw",
+ "line_y2": "Linja Tibdil jispiċċa y jikkoordinaw",
+ "rect_height": "Għoli rettangolu Bidla",
+ "rect_width": "Wisa &#39;rettangolu Bidla",
+ "corner_radius": "Bidla Rectangle Corner Radius",
+ "image_width": "Wisa image Bidla",
+ "image_height": "Għoli image Bidla",
+ "image_url": "Bidla URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Test kontenut Bidla",
+ "font_family": "Bidla Font Familja",
+ "font_size": "Change font size",
+ "bold": "Bold Test",
+ "italic": "Test korsiv"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Bidla fil-kulur fl-isfond / opaċità",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit għall-kontenut",
+ "fit_to_all": "Tajbin għall-kontenut",
+ "fit_to_canvas": "Xieraq li kanvas",
+ "fit_to_layer_content": "Fit-kontenut ta &#39;saff għal",
+ "fit_to_sel": "Fit-għażla",
+ "align_relative_to": "Jallinjaw relattiv għall - ...",
+ "relativeTo": "relattiv għall -:",
+ "paġna": "paġna",
+ "largest_object": "akbar oġġett",
+ "selected_objects": "oġġetti elett",
+ "smallest_object": "iżgħar oġġett",
+ "new_doc": "Image New",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Image Save",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Tallinja Bottom",
+ "align_center": "Tallinja Center",
+ "align_left": "Tallinja Left",
+ "align_middle": "Tallinja Nofsani",
+ "align_right": "Tallinja Dritt",
+ "align_top": "Tallinja Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Lapes Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free Hand-Rectangle",
+ "mode_ellipse": "Ellissi",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free Hand-ellissi",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Jneħħu",
+ "redo": "Jerġa &#39;jagħmel",
+ "tool_source": "Source Edit",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupp Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Dokument Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Ħassar Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Semmi mill-ġdid Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefiniti:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.nl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.nl.js.svn-base
new file mode 100644
index 000000000..358303470
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.nl.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "nl",
+ dir : "ltr",
+ common: {
+ "ok": "Ok",
+ "cancel": "Annuleren",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "omlaag",
+ "key_up": "omhoog",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Mogelijk gemaakt door"
+ },
+ ui: {
+ "toggle_stroke_tools": "Toon/verberg meer lijn gereedschap",
+ "palette_info": "Klik om de vul kleur te veranderen, shift-klik om de lijn kleur te veranderen",
+ "zoom_level": "In-/uitzoomen",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identificeer het element",
+ "fill_color": "Verander vul kleur",
+ "stroke_color": "Verander lijn kleur",
+ "stroke_style": "Verander lijn stijl",
+ "stroke_width": "Verander lijn breedte",
+ "pos_x": "Verander X coordinaat",
+ "pos_y": "Verander Y coordinaat",
+ "linecap_butt": "Lijneinde: Geen",
+ "linecap_round": "Lijneinde: Rond",
+ "linecap_square": "Lijneinde: Vierkant",
+ "linejoin_bevel": "Lijnverbinding: Afgestompt",
+ "linejoin_miter": "Lijnverbinding: Hoek",
+ "linejoin_round": "Lijnverbinding: Rond",
+ "angle": "Draai",
+ "blur": "Verander Gaussische vervaging waarde",
+ "opacity": "Verander opaciteit geselecteerde item",
+ "circle_cx": "Verander het X coordinaat van het cirkel middelpunt",
+ "circle_cy": "Verander het Y coordinaat van het cirkel middelpunt",
+ "circle_r": "Verander de cirkel radius",
+ "ellipse_cx": "Verander het X coordinaat van het ellips middelpunt",
+ "ellipse_cy": "Verander het Y coordinaat van het ellips middelpunt",
+ "ellipse_rx": "Verander ellips X radius",
+ "ellipse_ry": "Verander ellips Y radius",
+ "line_x1": "Verander start X coordinaat van de lijn",
+ "line_x2": "Verander eind X coordinaat van de lijn",
+ "line_y1": "Verander start Y coordinaat van de lijn",
+ "line_y2": "Verander eind Y coordinaat van de lijn",
+ "rect_height": "Verander hoogte rechthoek",
+ "rect_width": "Verander breedte rechthoek",
+ "corner_radius": "Verander hoekradius rechthoek",
+ "image_width": "Verander breedte afbeelding",
+ "image_height": "Verander hoogte afbeelding",
+ "image_url": "Verander URL",
+ "node_x": "Verander X coordinaat knooppunt",
+ "node_y": "Verander Y coordinaat knooppunt",
+ "seg_type": "Verander segment type",
+ "straight_segments": "Recht",
+ "curve_segments": "Gebogen",
+ "text_contents": "Wijzig tekst",
+ "font_family": "Verander lettertype",
+ "font_size": "Verander lettertype grootte",
+ "bold": "Vet",
+ "italic": "Cursief"
+ },
+ tools: {
+ "main_menu": "Hoofdmenu",
+ "bkgnd_color_opac": "Verander achtergrond kleur/doorzichtigheid",
+ "connector_no_arrow": "Geen pijl",
+ "fitToContent": "Pas om inhoud",
+ "fit_to_all": "Pas om alle inhoud",
+ "fit_to_canvas": "Pas om canvas",
+ "fit_to_layer_content": "Pas om laag inhoud",
+ "fit_to_sel": "Pas om selectie",
+ "align_relative_to": "Uitlijnen relatief ten opzichte van ...",
+ "relativeTo": "Relatief ten opzichte van:",
+ "Pagina": "Pagina",
+ "largest_object": "Grootste object",
+ "selected_objects": "Geselecteerde objecten",
+ "smallest_object": "Kleinste object",
+ "new_doc": "Nieuwe afbeelding",
+ "open_doc": "Open afbeelding",
+ "export_png": "Exporteer als PNG",
+ "save_doc": "Afbeelding opslaan",
+ "import_doc": "Importeer SVG",
+ "align_to_page": "Lijn element uit relatief ten opzichte van de pagina",
+ "align_bottom": "Onder uitlijnen",
+ "align_center": "Centreren",
+ "align_left": "Links uitlijnen",
+ "align_middle": "Midden uitlijnen",
+ "align_right": "Rechts uitlijnen",
+ "align_top": "Boven uitlijnen",
+ "mode_select": "Selecteer",
+ "mode_fhpath": "Potlood",
+ "mode_line": "Lijn",
+ "mode_connect": "Verbind twee objecten",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Vrije stijl rechthoek",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Cirkel",
+ "mode_fhellipse": "Vrije stijl ellips",
+ "mode_path": "Pad",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst",
+ "mode_image": "Afbeelding",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Kleuren kopieer gereedschap",
+ "no_embed": "Let op: Dit plaatje kan niet worden geintegreerd (embeded). Het hangt af van dit pad om te worden afgebeeld.",
+ "undo": "Ongedaan maken",
+ "redo": "Opnieuw doen",
+ "tool_source": "Bewerk bron",
+ "wireframe_mode": "Draadmodel",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Groepeer elementen",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Zet om naar pad",
+ "reorient_path": "Herorienteer pad",
+ "ungroup": "Groepering opheffen",
+ "docprops": "Documenteigenschappen",
+ "imagelib": "Image Library",
+ "move_bottom": "Naar achtergrond",
+ "move_top": "Naar voorgrond",
+ "node_clone": "Kloon knooppunt",
+ "node_delete": "Delete knooppunt",
+ "node_link": "Koppel controle punten",
+ "add_subpath": "Subpad toevoegen",
+ "openclose_path": "Open/sluit subpad",
+ "source_save": "Veranderingen toepassen",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Laag",
+ "layers": "Layers",
+ "del": "Delete laag",
+ "move_down": "Beweeg laag omlaag",
+ "new": "Nieuwe laag",
+ "rename": "Hernoem laag",
+ "move_up": "Beweeg laag omhoog",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Verplaats elementen naar:",
+ "move_selected": "Verplaats geselecteerde elementen naar andere laag"
+ },
+ config: {
+ "image_props": "Afbeeldingeigenschappen",
+ "doc_title": "Titel",
+ "doc_dims": "Canvas afmetingen",
+ "included_images": "Ingesloten afbeeldingen",
+ "image_opt_embed": "Toevoegen data (lokale bestanden)",
+ "image_opt_ref": "Gebruik bestand referentie",
+ "editor_prefs": "Editor eigenschappen",
+ "icon_size": "Icoon grootte",
+ "language": "Taal",
+ "background": "Editor achtergrond",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Let op: De achtergrond wordt niet opgeslagen met de afbeelding.",
+ "icon_large": "Groot",
+ "icon_medium": "Gemiddeld",
+ "icon_small": "Klein",
+ "icon_xlarge": "Extra groot",
+ "select_predefined": "Kies voorgedefinieerd:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Verkeerde waarde gegeven",
+ "noContentToFitTo":"Geen inhoud om omheen te passen",
+ "dupeLayerName":"Er is al een laag met die naam!",
+ "enterUniqueLayerName":"Geef een unieke laag naam",
+ "enterNewLayerName":"Geef een nieuwe laag naam",
+ "layerHasThatName":"Laag heeft al die naam",
+ "QmoveElemsToLayer":"Verplaats geselecteerde elementen naar laag '%s'?",
+ "QwantToClear":"Wil je de afbeelding leeg maken?\nDit zal ook de ongedaan maak geschiedenis wissen!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Er waren analyse fouten in je SVG bron.\nTeruggaan naar de originele SVG bron?",
+ "QignoreSourceChanges":"Veranderingen in de SVG bron negeren?",
+ "featNotSupported":"Functie wordt niet ondersteund",
+ "enterNewImgURL":"Geef de nieuwe afbeelding URL",
+ "defsFailOnSave": "Let op: Vanwege een fout in je browser, kan dit plaatje verkeerd verschijnen (missende hoeken en/of elementen). Het zal goed verschijnen zodra het plaatje echt wordt opgeslagen.",
+ "loadingImage":"Laden van het plaatje, even geduld aub...",
+ "saveFromBrowser": "Kies \"Save As...\" in je browser om dit plaatje op te slaan als een %s bestand.",
+ "noteTheseIssues": "Let op de volgende problemen: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.no.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.no.js.svn-base
new file mode 100644
index 000000000..c1f5cf049
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.no.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "no",
+ dir : "ltr",
+ common: {
+ "ok": "Lagre",
+ "cancel": "Avbryt",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click å endre fyllfarge, shift-klikke for å endre slag farge",
+ "zoom_level": "Endre zoomnivå",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Endre fyllfarge",
+ "stroke_color": "Endre stroke color",
+ "stroke_style": "Endre stroke dash stil",
+ "stroke_width": "Endre stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Endre rotasjonsvinkelen",
+ "blur": "Change gaussian blur value",
+ "opacity": "Endre valgte elementet opasitet",
+ "circle_cx": "Endre sirkelens CX koordinatsystem",
+ "circle_cy": "Endre sirkelens koordinere cy",
+ "circle_r": "Endre sirkelens radius",
+ "ellipse_cx": "Endre ellipse&#39;s CX koordinatsystem",
+ "ellipse_cy": "Endre ellipse&#39;s koordinere cy",
+ "ellipse_rx": "Endre ellipse&#39;s x radius",
+ "ellipse_ry": "Endre ellipse&#39;s y radius",
+ "line_x1": "Endre linje begynner x koordinat",
+ "line_x2": "Endre linje&#39;s ending x koordinat",
+ "line_y1": "Endre linje begynner y koordinat",
+ "line_y2": "Endre linje&#39;s ending y koordinat",
+ "rect_height": "Endre rektangel høyde",
+ "rect_width": "Endre rektangel bredde",
+ "corner_radius": "Endre rektangel Corner Radius",
+ "image_width": "Endre bilde bredde",
+ "image_height": "Endre bilde høyde",
+ "image_url": "Endre URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Endre tekst innholdet",
+ "font_family": "Change Font Family",
+ "font_size": "Endre skriftstørrelse",
+ "bold": "Fet tekst",
+ "italic": "Kursiv tekst"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Endre bakgrunnsfarge / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Passer til alt innhold",
+ "fit_to_canvas": "Tilpass til lerret",
+ "fit_to_layer_content": "Fit to lag innhold",
+ "fit_to_sel": "Tilpass til valg",
+ "align_relative_to": "Juster i forhold til ...",
+ "relativeTo": "i forhold til:",
+ "side": "side",
+ "largest_object": "største objekt",
+ "selected_objects": "velges objekter",
+ "smallest_object": "minste objekt",
+ "new_doc": "New Image",
+ "open_doc": "Åpne Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Lagre bilde",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Midtstill",
+ "align_left": "Venstrejuster",
+ "align_middle": "Rett Middle",
+ "align_right": "Høyrejuster",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Linjeverktøy",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand rektangel",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Angre",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Gruppe Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Dele opp Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Flytt til toppen",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Lagre",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Slett laget",
+ "move_down": "Flytt laget ned",
+ "new": "Nytt lag",
+ "rename": "Rename Layer",
+ "move_up": "Flytt Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Velg forhåndsdefinerte:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.pl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.pl.js.svn-base
new file mode 100644
index 000000000..00b426618
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.pl.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "pl",
+ dir : "ltr",
+ common: {
+ "ok": "Zapisać",
+ "cancel": "Anuluj",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kliknij, aby zmienić kolor wypełnienia, shift kliknij, aby zmienić kolor skok",
+ "zoom_level": "Zmiana poziomu powiększenia",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Zmiana koloru wypełnienia",
+ "stroke_color": "Zmień kolor skok",
+ "stroke_style": "Zmień styl skoku kreska",
+ "stroke_width": "Szerokość skoku Zmień",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Zmiana kąta obrotu",
+ "blur": "Change gaussian blur value",
+ "opacity": "Zmiana stron przezroczystość elementu",
+ "circle_cx": "Zmiana koła CX koordynacji",
+ "circle_cy": "Koła Zmian cy koordynacji",
+ "circle_r": "Zmiana koła promienia",
+ "ellipse_cx": "Zmiana elipsy CX koordynacji",
+ "ellipse_cy": "Elipsy Zmian cy koordynacji",
+ "ellipse_rx": "Elipsy Zmian x promieniu",
+ "ellipse_ry": "Elipsy Zmian y promieniu",
+ "line_x1": "Zmian od linii współrzędna x",
+ "line_x2": "Zgodnie Zmian kończące współrzędna x",
+ "line_y1": "Line y Zmian od współrzędnych",
+ "line_y2": "Zgodnie Zmian kończące y koordynowanie",
+ "rect_height": "Zmiana wysokości prostokąta",
+ "rect_width": "Szerokość prostokąta Zmień",
+ "corner_radius": "Zmiana prostokąt Corner Radius",
+ "image_width": "Zmiana image width",
+ "image_height": "Wysokość obrazu zmian",
+ "image_url": "Zmień adres URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Zmiana treści tekstu",
+ "font_family": "Zmiana czcionki Rodzina",
+ "font_size": "Zmień rozmiar czcionki",
+ "bold": "Bold Text",
+ "italic": "Kursywa"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Zmień kolor tła / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Dopasuj do treści",
+ "fit_to_all": "Dopasuj do wszystkich treści",
+ "fit_to_canvas": "Dopasuj do płótnie",
+ "fit_to_layer_content": "Dopasuj do zawartości warstwy",
+ "fit_to_sel": "Dopasuj do wyboru",
+ "align_relative_to": "Dostosowanie w stosunku do ...",
+ "relativeTo": "w stosunku do:",
+ "strona": "strona",
+ "largest_object": "największego obiektu",
+ "selected_objects": "wybranych obiektów",
+ "smallest_object": "Najmniejszy obiekt",
+ "new_doc": "New Image",
+ "open_doc": "Otwórz obraz",
+ "export_png": "Export as PNG",
+ "save_doc": "Zapisz obraz",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Wyrównaj do dołu",
+ "align_center": "Wyśrodkuj",
+ "align_left": "Wyrównaj do lewej",
+ "align_middle": "Align Middle",
+ "align_right": "Wyrównaj do prawej",
+ "align_top": "Wyrównaj do góry",
+ "mode_select": "Wybierz narzędzie",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Wolnej ręki prostokąt",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Koło",
+ "mode_fhellipse": "Wolny-Hand Elipsa",
+ "mode_path": "Poli Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Cofnij",
+ "redo": "Redo",
+ "tool_source": "Edycja źródła",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementy Grupa",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elementy Rozgrupuj",
+ "docprops": "Właściwości dokumentu",
+ "imagelib": "Image Library",
+ "move_bottom": "Przenieś do dołu",
+ "move_top": "Przenieś do góry",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Zapisać",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Usuwanie warstwy",
+ "move_down": "Przesuń warstwę w dół",
+ "new": "Nowa warstwa",
+ "rename": "Zmiana nazwy warstwy",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Wybierz predefiniowanych:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-BR.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-BR.js.svn-base
new file mode 100644
index 000000000..d03dff87f
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-BR.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "pt-BR",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width by 1, shift-click to change by 0.1",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-PT.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-PT.js.svn-base
new file mode 100644
index 000000000..22a21f91d
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.pt-PT.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "pt-PT",
+ dir : "ltr",
+ common: {
+ "ok": "Salvar",
+ "cancel": "Cancelar",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Clique para mudar a cor de preenchimento, shift-clique para mudar a cor do curso",
+ "zoom_level": "Alterar o nível de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Alterar a cor de preenchimento",
+ "stroke_color": "Mudar a cor do curso",
+ "stroke_style": "Alterar o estilo do traço do curso",
+ "stroke_width": "Alterar a largura do curso",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Alterar o ângulo de rotação",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mude a opacidade item selecionado",
+ "circle_cx": "Cx Mudar círculo de coordenadas",
+ "circle_cy": "Círculo Mudança cy coordenar",
+ "circle_r": "Alterar círculo de raio",
+ "ellipse_cx": "Alterar elipse cx coordenar",
+ "ellipse_cy": "Elipse Mudança cy coordenar",
+ "ellipse_rx": "Raio X Change elipse",
+ "ellipse_ry": "Raio y Change elipse",
+ "line_x1": "Altere a linha de partida coordenada x",
+ "line_x2": "Altere a linha está terminando coordenada x",
+ "line_y1": "Mudança na linha de partida coordenada y",
+ "line_y2": "Mudança de linha está terminando coordenada y",
+ "rect_height": "Alterar altura do retângulo",
+ "rect_width": "Alterar a largura retângulo",
+ "corner_radius": "Alterar Corner Rectangle Radius",
+ "image_width": "Alterar a largura da imagem",
+ "image_height": "Alterar altura da imagem",
+ "image_url": "Alterar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Alterar o conteúdo de texto",
+ "font_family": "Alterar fonte Família",
+ "font_size": "Alterar tamanho de letra",
+ "bold": "Bold Text",
+ "italic": "Texto em itálico"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mudar a cor de fundo / opacidade",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Ajustar ao conteúdo",
+ "fit_to_all": "Ajustar a todo o conteúdo",
+ "fit_to_canvas": "Ajustar à tela",
+ "fit_to_layer_content": "Ajustar o conteúdo da camada de",
+ "fit_to_sel": "Ajustar à selecção",
+ "align_relative_to": "Alinhar em relação a ...",
+ "relativeTo": "em relação ao:",
+ "Página": "Página",
+ "largest_object": "maior objeto",
+ "selected_objects": "objetos eleitos",
+ "smallest_object": "menor objeto",
+ "new_doc": "Nova Imagem",
+ "open_doc": "Abrir Imagem",
+ "export_png": "Export as PNG",
+ "save_doc": "Salvar Imagem",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Alinhar ao centro",
+ "align_left": "Alinhar à Esquerda",
+ "align_middle": "Alinhar Médio",
+ "align_right": "Alinhar à Direita",
+ "align_top": "Align Top",
+ "mode_select": "Selecione a ferramenta",
+ "mode_fhpath": "Ferramenta Lápis",
+ "mode_line": "Ferramenta Linha",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Ferramenta de Texto",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Desfazer",
+ "redo": "Refazer",
+ "tool_source": "Fonte Editar",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementos do Grupo",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elementos Desagrupar",
+ "docprops": "Propriedades do Documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Salvar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move camada para baixo",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Selecione predefinidos:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ro.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ro.js.svn-base
new file mode 100644
index 000000000..ea1e66c32
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ro.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ro",
+ dir : "ltr",
+ common: {
+ "ok": "Ok",
+ "cancel": "Anulaţi",
+ "key_backspace": "backspace",
+ "key_del": "stergere",
+ "key_down": "jos",
+ "key_up": "sus",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Aratati/ascundeti mai multe unelte de contur",
+ "palette_info": "Faceţi clic a schimba culoare de umplere, Shift-click pentru a schimba culoarea de contur",
+ "zoom_level": "Schimbarea nivelului de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Schimbarea culorii de umplere",
+ "stroke_color": "Schimbarea culorii de contur",
+ "stroke_style": "Schimbarea stilului de contur",
+ "stroke_width": "Schimbarea lăţime de contur",
+ "pos_x": "Schimba coordonata X",
+ "pos_y": "Schimba coordonata Y",
+ "linecap_butt": "Capat de linie: Butuc",
+ "linecap_round": "Capat de linie: Rotund",
+ "linecap_square": "Capat de linie: Patrat",
+ "linejoin_bevel": "Articulatia liniei: Tesita",
+ "linejoin_miter": "Articulatia liniei: Unghi ascutit",
+ "linejoin_round": "Articulatia liniei: Rotunda",
+ "angle": "Schimbarea unghiul de rotatie",
+ "blur": "Schimbarea valorii estomparii gaussiene",
+ "opacity": "Schimbarea selectat opacitate element",
+ "circle_cx": "Schimbarea coordonatei CX a cercului",
+ "circle_cy": "Schimbarea coordonatei CY a cercului",
+ "circle_r": "Schimbarea razei cercului",
+ "ellipse_cx": "Schimbarea coordonatei CX a elipsei",
+ "ellipse_cy": "Schimbarea coordonatei CY a elipsei",
+ "ellipse_rx": "Schimbarea razei elipsei X",
+ "ellipse_ry": "Schimbarea razei elipsei Y",
+ "line_x1": "Schimbare coordonatei x a punctului de start",
+ "line_x2": "Schimbare coordonatei x a punctului final",
+ "line_y1": "Schimbare coordonatei y a punctului de start",
+ "line_y2": "Schimbare coordonatei y a punctului final",
+ "rect_height": "Schimbarea înălţimii dreptunghiului",
+ "rect_width": "Schimbarea lăţimii dreptunghiului",
+ "corner_radius": "Schimbarea Razei Colţului Dreptunghiului",
+ "image_width": "Schimbarea Lăţimii imaginii",
+ "image_height": "Schimbarea Înălţimii imaginii",
+ "image_url": "Schimbaţi URL-ul",
+ "node_x": "Schimba coordonata x a punctului",
+ "node_y": "Schimba coordonata x a punctului",
+ "seg_type": "Schimba tipul de segment",
+ "straight_segments": "Drept",
+ "curve_segments": "Curv",
+ "text_contents": "Schimbarea Conţinutului textului",
+ "font_family": "Modificare familie de Fonturi",
+ "font_size": "Schimbă dimensiunea fontului",
+ "bold": "Text Îngroşat",
+ "italic": "Text Înclinat"
+ },
+ tools: {
+ "main_menu": "Menu Principal",
+ "bkgnd_color_opac": "Schimbare culoare de fundal / opacitate",
+ "connector_no_arrow": "Fără Săgeată",
+ "fitToContent": "Dimensionare la Conţinut",
+ "fit_to_all": "Potrivire la tot conţinutul",
+ "fit_to_canvas": "Potrivire la Şevalet",
+ "fit_to_layer_content": "Potrivire la conţinutul stratului",
+ "fit_to_sel": "Potrivire la selecţie",
+ "align_relative_to": "Alinierea în raport cu ...",
+ "relativeTo": "în raport cu:",
+ "de start": "de start",
+ "largest_object": "cel mai mare obiect",
+ "selected_objects": "obiectele alese",
+ "smallest_object": "cel mai mic obiect",
+ "new_doc": "Imagine nouă",
+ "open_doc": "Imagine deschisă",
+ "export_png": "Exportare ca şi PNG",
+ "save_doc": "Salvare Imagine",
+ "import_doc": "Importare SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinierea jos",
+ "align_center": "Aliniere la centru",
+ "align_left": "Aliniere la stânga",
+ "align_middle": "Aliniere la mijloc",
+ "align_right": "Aliniere la dreapta",
+ "align_top": "Alinierea sus",
+ "mode_select": "Unealta de Selectare",
+ "mode_fhpath": "Unealta de Traiectorie",
+ "mode_line": "Unealta de Linie",
+ "mode_connect": "Conectati doua obiecte",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Dreptunghi cu mana-libera",
+ "mode_ellipse": "Elipsă",
+ "mode_circle": "Cerc",
+ "mode_fhellipse": "Elipsă cu mana-libera",
+ "mode_path": "Unealta de Path",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Unealta de Text",
+ "mode_image": "Unealta de Imagine",
+ "mode_zoom": "Unealta de Zoom",
+ "mode_eyedropper": "Unealta de Eye Dropper",
+ "no_embed": "NOTE: Aceasta imagine nu poate fi inglobata. Va depinde de aceasta traiectorie pentru a fi prezentata.",
+ "undo": "Anulare",
+ "redo": "Refacere",
+ "tool_source": "Editare Cod Sursa",
+ "wireframe_mode": "Mod Schelet",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupare Elemente",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Converteste in Traiectorie",
+ "reorient_path": "Reorienteaza Traiectoria",
+ "ungroup": "Anulare Grupare Elemente",
+ "docprops": "Propertile Documentului",
+ "imagelib": "Image Library",
+ "move_bottom": "Mutare în jos",
+ "move_top": "Mutare în sus",
+ "node_clone": "Cloneaza Punct",
+ "node_delete": "Sterge Punct",
+ "node_link": "Uneste Punctele de Control",
+ "add_subpath": "Adaugati sub-traiectorie",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Folositi Schimbarile",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "stergere": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Strat",
+ "layers": "Layers",
+ "del": "Ştergeţi Strat",
+ "move_down": "Mutare Strat în Jos",
+ "new": "Strat Nou",
+ "rename": "Redenumiţi Strat",
+ "move_up": "Mutare Strat în Sus",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Muta elemente la:",
+ "move_selected": "Muta elementele selectate pe un alt strat"
+ },
+ config: {
+ "image_props": "Proprietaţile Imaginii",
+ "doc_title": "Titlul",
+ "doc_dims": "Dimensiunile Sevaletuui",
+ "included_images": "Imaginile Incluse",
+ "image_opt_embed": "Includeţi Datele (fisiere locale)",
+ "image_opt_ref": "Foloseste referinte la fisiere",
+ "editor_prefs": "Preferintele Editorului",
+ "icon_size": "Dimensiunile Butoanelor",
+ "language": "Limba",
+ "background": "Fondul Editorului",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Nota: Fondul nu va fi salvat cu imaginea.",
+ "icon_large": "Mari",
+ "icon_medium": "Medii",
+ "icon_small": "Mici",
+ "icon_xlarge": "Foarte Mari",
+ "select_predefined": "Selecţii predefinite:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valoarea data nu este valida",
+ "noContentToFitTo":"Fara continut de referinta",
+ "dupeLayerName":"Deja exista un strat numis asa!",
+ "enterUniqueLayerName":"Rog introduceti un nume unic",
+ "enterNewLayerName":"Rog introduceti un nume pentru strat",
+ "layerHasThatName":"Statul deja are acest nume",
+ "QmoveElemsToLayer":"Mutati elementele selectate pe stratul '%s'?",
+ "QwantToClear":"Doriti sa stergeti desenul?\nAceasta va sterge si posibilitatea de anulare!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Sunt erori de parsing in sursa SVG.\nRevenire la sursa SVG orginala?",
+ "QignoreSourceChanges":"Ignorati schimbarile la sursa SVG?",
+ "featNotSupported":"Functie neimplementata",
+ "enterNewImgURL":"Introduceti noul URL pentru Imagine",
+ "defsFailOnSave": "NOTE: Din cauza unei erori in browserul dv., aceasta imagine poate apare gresit (fara gradiente sau elemente). Insa va apare corect dupa salvare.",
+ "loadingImage":"Imaginea se incarca, va rugam asteptati...",
+ "saveFromBrowser": "Selecteaza \"Salvea ca si...\" in browserul dv. pt. a salva aceasta imafine ca si fisier %s.",
+ "noteTheseIssues": "De asemeni remarcati urmatoarele probleme: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.ru.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ru.js.svn-base
new file mode 100644
index 000000000..c2d7e7d9c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.ru.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ru",
+ dir : "ltr",
+ common: {
+ "ok": "Сохранить",
+ "cancel": "Отменить",
+ "key_backspace": "Backspace",
+ "key_del": "Delete",
+ "key_down": "Вниз",
+ "key_up": "Вверх",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Нажмите для изменения цвета заливки, Shift-Click изменить цвета обводки",
+ "zoom_level": "Изменить масштаб",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Изменить цвет заливки",
+ "stroke_color": "Изменить цвет обводки",
+ "stroke_style": "Изменить стиль обводки",
+ "stroke_width": "Изменить толщину обводки",
+ "pos_x": "Изменить горизонтальный координат",
+ "pos_y": "Изменить вертикальный координат",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Изменить угол поворота",
+ "blur": "Change gaussian blur value",
+ "opacity": "Изменить непрозрачность элемента",
+ "circle_cx": "Изменить горизонтальный координат (CX) окружности",
+ "circle_cy": "Изменить вертикальный координат (CY) окружности",
+ "circle_r": "Изменить радиус окружности",
+ "ellipse_cx": "Изменить горизонтальный координат (CX) эллипса",
+ "ellipse_cy": "Изменить вертикальный координат (CY) эллипса",
+ "ellipse_rx": "Изменить горизонтальный радиус эллипса",
+ "ellipse_ry": "Изменить вертикальный радиус эллипса",
+ "line_x1": "Изменить горизонтальный координат X начальной точки линии",
+ "line_x2": "Изменить горизонтальный координат X конечной точки линии",
+ "line_y1": "Изменить вертикальный координат Y начальной точки линии",
+ "line_y2": "Изменить вертикальный координат Y конечной точки линии",
+ "rect_height": "Изменениe высоту прямоугольника",
+ "rect_width": "Измененить ширину прямоугольника",
+ "corner_radius": "Радиус закругленности угла",
+ "image_width": "Изменить ширину изображения",
+ "image_height": "Изменить высоту изображения",
+ "image_url": "Изменить URL",
+ "node_x": "Изменить горизонтальную координату узла",
+ "node_y": "Изменить вертикальную координату узла",
+ "seg_type": "Изменить вид",
+ "straight_segments": "Отрезок",
+ "curve_segments": "Сплайн",
+ "text_contents": "Изменить содержание текста",
+ "font_family": "Изменить семейство шрифтов",
+ "font_size": "Изменить размер шрифта",
+ "bold": "Жирный",
+ "italic": "Курсив"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Изменить цвет фона или прозрачность",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Под размер содержимого",
+ "fit_to_all": "Под размер всех слоев",
+ "fit_to_canvas": "Под размер холста",
+ "fit_to_layer_content": "Под размер содержания слоя",
+ "fit_to_sel": "Под размер выделенного",
+ "align_relative_to": "Выровнять по отношению к ...",
+ "relativeTo": "По отношению к ",
+ "страница": "страница",
+ "largest_object": "Наибольший объект",
+ "selected_objects": "Выделенные объекты",
+ "smallest_object": "Самый маленький объект",
+ "new_doc": "Создать изображение",
+ "open_doc": "Открыть изображение",
+ "export_png": "Export as PNG",
+ "save_doc": "Сохранить изображение",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Выровнять по нижнему краю",
+ "align_center": "Центрировать по вертикальной оси",
+ "align_left": "По левому краю",
+ "align_middle": "Центрировать по горизонтальной оси",
+ "align_right": "По правому краю",
+ "align_top": "Выровнять по верхнему краю",
+ "mode_select": "Выделить",
+ "mode_fhpath": "Карандаш",
+ "mode_line": "Линия",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Прямоугольник от руки",
+ "mode_ellipse": "Эллипс",
+ "mode_circle": "Окружность",
+ "mode_fhellipse": "Эллипс от руки",
+ "mode_path": "Контуры",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст",
+ "mode_image": "Изображение",
+ "mode_zoom": "Лупа",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Отменить",
+ "redo": "Вернуть",
+ "tool_source": "Редактировать исходный код",
+ "wireframe_mode": "Каркас",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Создать группу элементов",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "В контур",
+ "reorient_path": "Изменить ориентацию контура",
+ "ungroup": "Разгруппировать элементы",
+ "docprops": "Свойства документа",
+ "imagelib": "Image Library",
+ "move_bottom": "Опустить",
+ "move_top": "Поднять",
+ "node_clone": "Создать копию узла",
+ "node_delete": "Удалить узел",
+ "node_link": "Связать узлы",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Сохранить",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Слой",
+ "layers": "Layers",
+ "del": "Удалить слой",
+ "move_down": "Опустить слой",
+ "new": "Создать слой",
+ "rename": "Переименовать Слой",
+ "move_up": "Поднять слой",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Переместить выделенные элементы:",
+ "move_selected": "Переместить выделенные элементы на другой слой"
+ },
+ config: {
+ "image_props": "Свойства изображения",
+ "doc_title": "Название",
+ "doc_dims": "Размеры холста",
+ "included_images": "Встроенные изображения",
+ "image_opt_embed": "Локальные файлы",
+ "image_opt_ref": "По ссылкам",
+ "editor_prefs": "Параметры",
+ "icon_size": "Размер значков",
+ "language": "Язык",
+ "background": "Фон",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "(Фон не сохранится вместе с изображением.)",
+ "icon_large": "Большие",
+ "icon_medium": "Средние",
+ "icon_small": "Малые",
+ "icon_xlarge": "Огромные",
+ "select_predefined": "Выбирать предопределенный размер",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Некорректное значение аргумента",
+ "noContentToFitTo":"Нет содержания, по которому выровнять.",
+ "dupeLayerName":"Слой с этим именем уже существует.",
+ "enterUniqueLayerName":"Пожалуйста, введите имя для слоя.",
+ "enterNewLayerName":"Пожалуйста, введите новое имя.",
+ "layerHasThatName":"Слой уже называется этим именем.",
+ "QmoveElemsToLayer":"Переместить выделенные элементы на слой '%s'?",
+ "QwantToClear":"Вы хотите очистить?\nИстория действий будет забыта!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Была проблема при парсинге вашего SVG исходного кода.\nЗаменить его предыдущим SVG кодом?",
+ "QignoreSourceChanges":"Забыть без сохранения?",
+ "featNotSupported":"Возможность не реализована",
+ "enterNewImgURL":"Введите новый URL изображения",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.sk.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sk.js.svn-base
new file mode 100644
index 000000000..53bc7e507
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sk.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sk",
+ dir : "ltr",
+ common: {
+ "ok": "Uložiť",
+ "cancel": "Zrušiť",
+ "key_backspace": "Backspace",
+ "key_del": "Delete",
+ "key_down": "šípka dole",
+ "key_up": "šípka hore",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Beží na"
+ },
+ ui: {
+ "toggle_stroke_tools": "Skryť/ukázať viac nástrojov pre krivku",
+ "palette_info": "Kliknutím zmeníte farbu výplne, so Shiftom zmeníte farbu obrysu",
+ "zoom_level": "Zmena priblíženia",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Zmeniť ID elementu",
+ "fill_color": "Zmeniť farbu výplne",
+ "stroke_color": "Zmena farby obrysu",
+ "stroke_style": "Zmeniť štýl obrysu",
+ "stroke_width": "Zmeniť šírku obrysu",
+ "pos_x": "Zmeniť súradnicu X",
+ "pos_y": "Zmeniť súradnicu Y",
+ "linecap_butt": "Koniec čiary: presný",
+ "linecap_round": "Koniec čiary: zaoblený",
+ "linecap_square": "Koniec čiary: so štvorcovým presahom",
+ "linejoin_bevel": "Napojenie čiar: skosené",
+ "linejoin_miter": "Napojenie čiar: ostré",
+ "linejoin_round": "Napojenie čiar: oblé",
+ "angle": "Zmeniť uhol natočenia",
+ "blur": "Zmeniť intenzitu rozmazania",
+ "opacity": "Zmeniť prehľadnosť vybraných položiek",
+ "circle_cx": "Zmeniť súradnicu X stredu kružnice",
+ "circle_cy": "Zmeniť súradnicu Y stredu kružnice",
+ "circle_r": "Zmeniť polomer kružnice",
+ "ellipse_cx": "Zmeniť súradnicu X stredu elipsy",
+ "ellipse_cy": "Zmeniť súradnicu Y stredu elipsy",
+ "ellipse_rx": "Zmeniť polomer X elipsy",
+ "ellipse_ry": "Zmeniť polomer Y elipsy",
+ "line_x1": "Zmeniť počiatočnú súradnicu X čiary",
+ "line_x2": "Zmeniť koncovú súradnicu X čiary",
+ "line_y1": "Zmeniť počiatočnú súradnicu Y čiary",
+ "line_y2": "Zmeniť koncovú súradnicu Y čiary",
+ "rect_height": "Zmena výšku obdĺžnika",
+ "rect_width": "Zmeniť šírku obdĺžnika",
+ "corner_radius": "Zmeniť zaoblenie rohov obdĺžnika",
+ "image_width": "Zmeniť šírku obrázka",
+ "image_height": "Zmeniť výšku obrázka",
+ "image_url": "Zmeniť URL",
+ "node_x": "Zmeniť uzlu súradnicu X",
+ "node_y": "Zmeniť uzlu súradnicu Y",
+ "seg_type": "Zmeniť typ segmentu",
+ "straight_segments": "Rovný",
+ "curve_segments": "Krivka",
+ "text_contents": "Změnit text",
+ "font_family": "Zmeniť font",
+ "font_size": "Zmeniť veľkosť písma",
+ "bold": "Tučne",
+ "italic": "Kurzíva"
+ },
+ tools: {
+ "main_menu": "Hlavné menu",
+ "bkgnd_color_opac": "Zmeniť farbu a priehľadnosť pozadia",
+ "connector_no_arrow": "Bez šípok",
+ "fitToContent": "Prispôsobiť obsahu",
+ "fit_to_all": "Prisposobiť celému obsahu",
+ "fit_to_canvas": "Prispôsobiť stránke",
+ "fit_to_layer_content": "Prispôsobiť obsahu vrstvy",
+ "fit_to_sel": "Prispôsobiť výberu",
+ "align_relative_to": "Zarovnať relatívne k ...",
+ "relativeTo": "vzhľadom k:",
+ "stránke": "stránke",
+ "largest_object": "najväčšiemu objektu",
+ "selected_objects": "zvoleným objektom",
+ "smallest_object": "najmenšiemu objektu",
+ "new_doc": "Nový obrázok",
+ "open_doc": "Otvoriť obrázok",
+ "export_png": "Exportovať ako PNG",
+ "save_doc": "Uložiť obrázok",
+ "import_doc": "Import SVG",
+ "align_to_page": "Zarovnať element na stránku",
+ "align_bottom": "Zarovnať dole",
+ "align_center": "Zarovnať na stred",
+ "align_left": "Zarovnať doľava",
+ "align_middle": "Zarovnať na stred",
+ "align_right": "Zarovnať doprava",
+ "align_top": "Zarovnať hore",
+ "mode_select": "Výber",
+ "mode_fhpath": "Ceruzka",
+ "mode_line": "Čiara",
+ "mode_connect": "Spojiť dva objekty",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Obdĺžnik voľnou rukou",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Kružnica",
+ "mode_fhellipse": "Elipsa voľnou rukou",
+ "mode_path": "Krivka",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text",
+ "mode_image": "Obrázok",
+ "mode_zoom": "Priblíženie",
+ "mode_eyedropper": "Pipeta",
+ "no_embed": "POZNÁMKA: Tento obrázok nemôže byť vložený. Jeho zobrazenie bude závisieť na jeho ceste",
+ "undo": "Späť",
+ "redo": "Opakovať",
+ "tool_source": "Upraviť SVG kód",
+ "wireframe_mode": "Drôtový model",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Zoskupiť elementy",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Previesť na krivku",
+ "reorient_path": "Zmeniť orientáciu krivky",
+ "ungroup": "Zrušiť skupinu",
+ "docprops": "Vlastnosti dokumentu",
+ "imagelib": "Image Library",
+ "move_bottom": "Presunúť spodok",
+ "move_top": "Presunúť na vrch",
+ "node_clone": "Klonovať uzol",
+ "node_delete": "Zmazať uzol",
+ "node_link": "Prepojiť kontrolné body",
+ "add_subpath": "Pridať daľšiu súčasť krivky",
+ "openclose_path": "Otvoriť/uzatvoriť súčasť krivky",
+ "source_save": "Uložiť",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Vrstva",
+ "layers": "Layers",
+ "del": "Odstrániť vrstvu",
+ "move_down": "Presunúť vrstvu dole",
+ "new": "Nová vrstva",
+ "rename": "Premenovať vrstvu",
+ "move_up": "Presunúť vrstvu hore",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Presunút elementy do:",
+ "move_selected": "Presunúť vybrané elementy do inej vrstvy"
+ },
+ config: {
+ "image_props": "Vlastnosti obrázka",
+ "doc_title": "Titulok",
+ "doc_dims": "Rozmery plátna",
+ "included_images": "Vložené obrázky",
+ "image_opt_embed": "Vložiť data (lokálne súbory)",
+ "image_opt_ref": "Použiť referenciu na súbor",
+ "editor_prefs": "Vlastnosti editora",
+ "icon_size": "Veľkosť ikon",
+ "language": "Jazyk",
+ "background": "Zmeniť pozadie",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Poznámka: Pozadie nebude uložené spolu s obrázkom.",
+ "icon_large": "Veľká",
+ "icon_medium": "Stredná",
+ "icon_small": "Malá",
+ "icon_xlarge": "Extra veľká",
+ "select_predefined": "Vybrať preddefinovaný:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Neplatná hodnota",
+ "noContentToFitTo":"Vyberte oblasť na prispôsobenie",
+ "dupeLayerName":"Vrstva s daným názvom už existuje!",
+ "enterUniqueLayerName":"Zadajte jedinečný názov vrstvy",
+ "enterNewLayerName":"Zadajte názov vrstvy",
+ "layerHasThatName":"Vrstva už má zadaný názov",
+ "QmoveElemsToLayer":"Presunúť elementy do vrstvy '%s'?",
+ "QwantToClear":"Naozaj chcete vymazať kresbu?\n(História bude taktiež vymazaná!)!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Chyba pri načítaní SVG dokumentu.\nVrátiť povodný SVG dokument?",
+ "QignoreSourceChanges":"Ignorovať zmeny v SVG dokumente?",
+ "featNotSupported":"Vlastnosť nie je podporovaná",
+ "enterNewImgURL":"Zadajte nové URL obrázka",
+ "defsFailOnSave": "POZNÁMKA: Kvôli chybe v prehliadači sa tento obrázok môže zobraziť nesprávne (napr. chýbajúce prechody či elementy). Po uložení sa zobrazí správne.",
+ "loadingImage":"Nahrávam obrázok, prosím čakajte ...",
+ "saveFromBrowser": "Vyberte \"Uložiť ako ...\" vo vašom prehliadači na uloženie tohoto obrázka do súboru %s.",
+ "noteTheseIssues": "Môžu sa vyskytnúť nasledujúce problémy: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.sl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sl.js.svn-base
new file mode 100644
index 000000000..e969a8bbf
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sl.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sl",
+ dir : "ltr",
+ common: {
+ "ok": "Shraniti",
+ "cancel": "Prekliči",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kliknite, če želite spremeniti barvo polnila, premik miške kliknite spremeniti barvo kap",
+ "zoom_level": "Spreminjanje povečave",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Spremeni barvo polnila",
+ "stroke_color": "Spremeni barvo kap",
+ "stroke_style": "Spremeni kap dash slog",
+ "stroke_width": "Spreminjanje širine kap",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Sprememba kota rotacije",
+ "blur": "Change gaussian blur value",
+ "opacity": "Spremeni izbran predmet motnosti",
+ "circle_cx": "Spremeni krog&#39;s CX usklajujejo",
+ "circle_cy": "Spremeni krog&#39;s cy usklajujejo",
+ "circle_r": "Spremeni krogu polmera",
+ "ellipse_cx": "Spremeni elipse&#39;s CX usklajujejo",
+ "ellipse_cy": "Spremeni elipse&#39;s cy usklajujejo",
+ "ellipse_rx": "Spremeni elipse&#39;s x polmer",
+ "ellipse_ry": "Spremeni elipse&#39;s y polmer",
+ "line_x1": "Spremeni skladu z začetkom x usklajujejo",
+ "line_x2": "Change line je končalo x usklajujejo",
+ "line_y1": "Change line&#39;s začetkom y usklajujejo",
+ "line_y2": "Change line je končalo y usklajujejo",
+ "rect_height": "Spremeni pravokotniku višine",
+ "rect_width": "Spremeni pravokotnik širine",
+ "corner_radius": "Spremeni Pravokotnik Corner Radius",
+ "image_width": "Spremeni Širina slike",
+ "image_height": "Spremeni Višina slike",
+ "image_url": "Spremeni URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Spremeni besedilo vsebino",
+ "font_family": "Change Font Family",
+ "font_size": "Spremeni velikost pisave",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Spreminjanje barve ozadja / motnosti",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit na vse vsebine",
+ "fit_to_canvas": "Fit na platno",
+ "fit_to_layer_content": "Fit na plast vsebine",
+ "fit_to_sel": "Fit za izbor",
+ "align_relative_to": "Poravnaj glede na ...",
+ "relativeTo": "glede na:",
+ "page": "page",
+ "largest_object": "Največji objekt",
+ "selected_objects": "izvoljeni predmeti",
+ "smallest_object": "najmanjša objekt",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Shrani slike",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Sredino",
+ "align_left": "Poravnaj levo",
+ "align_middle": "Poravnava Middle",
+ "align_right": "Poravnaj desno",
+ "align_top": "Poravnava Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand pravokotnik",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Elipsa",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Vir",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Skupina Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Razdruži Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Premakni v Bottom",
+ "move_top": "Premakni na vrh",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Shraniti",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Down Layer",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select vnaprej:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.sq.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sq.js.svn-base
new file mode 100644
index 000000000..afa2b56ef
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sq.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sq",
+ dir : "ltr",
+ common: {
+ "ok": "Ruaj",
+ "cancel": "Anulo",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klikoni për të ndryshuar mbushur me ngjyra, shift-klikoni për të ndryshuar ngjyrën pash",
+ "zoom_level": "Ndryshimi zoom nivel",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Ndryshimi mbush color",
+ "stroke_color": "Change color pash",
+ "stroke_style": "Ndryshimi dash goditje stil",
+ "stroke_width": "Ndryshimi goditje width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Kënd Ndryshimi rrotullim",
+ "blur": "Change gaussian blur value",
+ "opacity": "Ndryshimi zgjedhur errësirë item",
+ "circle_cx": "Cx rrethi Ndryshimi i bashkërenduar",
+ "circle_cy": "Ndryshimi i rrethit cy koordinuar",
+ "circle_r": "Rreze rreth Ndryshimi i",
+ "ellipse_cx": "Ndryshimi elips e cx koordinuar",
+ "ellipse_cy": "Elips cy Ndryshimi i bashkërenduar",
+ "ellipse_rx": "Rreze x elips Ndryshimi i",
+ "ellipse_ry": "Radiusi y elips ndërroj",
+ "line_x1": "Shkarko Ndryshimi që fillon x koordinuar",
+ "line_x2": "Linjë Ndryshimi i fund x koordinuar",
+ "line_y1": "Shkarko Ndryshimi që fillon y koordinuar",
+ "line_y2": "Shkarko Ndryshimi i dhënë fund y koordinuar",
+ "rect_height": "Height Ndryshimi drejtkëndësh",
+ "rect_width": "Width Ndryshimi drejtkëndësh",
+ "corner_radius": "Ndryshimi Rectangle Corner Radius",
+ "image_width": "Ndryshimi image width",
+ "image_height": "Height të ndryshuar imazhin",
+ "image_url": "Ndrysho URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Text contents Ndryshimi",
+ "font_family": "Ndryshimi Font Family",
+ "font_size": "Ndryshimi Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change color background / patejdukshmëri",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit për të gjithë përmbajtjen",
+ "fit_to_canvas": "Fit në kanavacë",
+ "fit_to_layer_content": "Shtresë Fit to content",
+ "fit_to_sel": "Fit to Selection",
+ "align_relative_to": "Vendose në lidhje me ...",
+ "relativeTo": "lidhje me:",
+ "faqe": "faqe",
+ "largest_object": "madh objekt",
+ "selected_objects": "objektet e zgjedhur",
+ "smallest_object": "objektit më të vogël",
+ "new_doc": "New Image",
+ "open_doc": "Image Hapur",
+ "export_png": "Export as PNG",
+ "save_doc": "Image Ruaj",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Mesme",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Zgjidhni Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Lëndë Hand Rectangle",
+ "mode_ellipse": "Elips",
+ "mode_circle": "Rrethi",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Burimi Edit",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementet e Grupit",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elemente Ungroup",
+ "docprops": "Dokumenti Prona",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Ruaj",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Down Layer",
+ "new": "Re Shtresa",
+ "rename": "Rename Layer",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Zgjidhni paracaktuara:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.sr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sr.js.svn-base
new file mode 100644
index 000000000..2866b8948
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sr.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sr",
+ dir : "ltr",
+ common: {
+ "ok": "Сачувати",
+ "cancel": "Откажи",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Кликните да бисте променили боју попуне, Схифт-кликните да промените боју удар",
+ "zoom_level": "Промените ниво зумирања",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Промена боје попуне",
+ "stroke_color": "Промена боје удар",
+ "stroke_style": "Промена ход Дасх стил",
+ "stroke_width": "Промена удара ширина",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Промени ротације Угао",
+ "blur": "Change gaussian blur value",
+ "opacity": "Промена изабране ставке непрозирност",
+ "circle_cx": "Промена круг&#39;с ЦКС координатни",
+ "circle_cy": "Промена круг&#39;с ср координатни",
+ "circle_r": "Промена круга је полупречник",
+ "ellipse_cx": "Промена елипса ЦКС&#39;с координатни",
+ "ellipse_cy": "Промена елипса&#39;с ср координатни",
+ "ellipse_rx": "Промена елипса&#39;с Кс радијуса",
+ "ellipse_ry": "Промена елипса је радијус Ы",
+ "line_x1": "Промена линија Стартни кс координата",
+ "line_x2": "Промена линија је завршетак кс координата",
+ "line_y1": "Промена линија у координатни почетак Ы",
+ "line_y2": "Промена линија је Ы координата се завршава",
+ "rect_height": "Промени правоугаоник висина",
+ "rect_width": "Промени правоугаоник ширине",
+ "corner_radius": "Промена правоугаоник Кутак радијуса",
+ "image_width": "Промени слику ширине",
+ "image_height": "Промени слику висине",
+ "image_url": "Промените УРЛ адресу",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Промена садржаја текстуалне",
+ "font_family": "Цханге фонт породицу",
+ "font_size": "Цханге фонт сизе",
+ "bold": "Подебљан текст",
+ "italic": "Италиц текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Промена боје позадине / непрозирност",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Стане на садржај",
+ "fit_to_all": "Уклопи у сав садржај",
+ "fit_to_canvas": "Стане на платну",
+ "fit_to_layer_content": "Уклопи у слоју садржај",
+ "fit_to_sel": "Уклопи у избор",
+ "align_relative_to": "Алигн у односу на ...",
+ "relativeTo": "у односу на:",
+ "страна": "страна",
+ "largest_object": "Највећи објекат",
+ "selected_objects": "изабраних објеката",
+ "smallest_object": "Најмањи објекат",
+ "new_doc": "Нова слика",
+ "open_doc": "Отвори слике",
+ "export_png": "Export as PNG",
+ "save_doc": "Сачувај слика",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Поравнај доле",
+ "align_center": "Поравнај по центру",
+ "align_left": "Поравнај лево",
+ "align_middle": "Алигн Средњи",
+ "align_right": "Поравнај десно",
+ "align_top": "Поравнајте врх",
+ "mode_select": "Изаберите алатку",
+ "mode_fhpath": "Алатка оловка",
+ "mode_line": "Линија Алат",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Фрее-Ручни правоугаоник",
+ "mode_ellipse": "Елипса",
+ "mode_circle": "Круг",
+ "mode_fhellipse": "Фрее-Ручни Елипса",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст Алат",
+ "mode_image": "Алатка за слике",
+ "mode_zoom": "Алатка за зумирање",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Поништи",
+ "redo": "Редо",
+ "tool_source": "Уреди Извор",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група Елементи",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Разгрупирање Елементи",
+ "docprops": "Особине документа",
+ "imagelib": "Image Library",
+ "move_bottom": "Премести на доле",
+ "move_top": "Премести на врх",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Сачувати",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Избриши слој",
+ "move_down": "Помери слој доле",
+ "new": "Нови слој",
+ "rename": "Преименуј слој",
+ "move_up": "Помери слој Горе",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Изаберите унапред дефинисани:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.sv.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sv.js.svn-base
new file mode 100644
index 000000000..49f6a3b86
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sv.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sv",
+ dir : "ltr",
+ common: {
+ "ok": "Spara",
+ "cancel": "Avbryt",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klicka för att ändra fyllningsfärg, shift-klicka för att ändra färgar",
+ "zoom_level": "Ändra zoomnivå",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Ändra fyllningsfärg",
+ "stroke_color": "Ändra färgar",
+ "stroke_style": "Ändra stroke Dash stil",
+ "stroke_width": "Ändra stroke bredd",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Ändra rotationsvinkel",
+ "blur": "Change gaussian blur value",
+ "opacity": "Ändra markerat objekt opacitet",
+ "circle_cx": "Ändra cirkeln cx samordna",
+ "circle_cy": "Ändra cirkeln samordna cy",
+ "circle_r": "Ändra cirkelns radie",
+ "ellipse_cx": "Ändra ellips&#39;s cx samordna",
+ "ellipse_cy": "Ändra ellips&#39;s samordna cy",
+ "ellipse_rx": "Ändra ellips&#39;s x radie",
+ "ellipse_ry": "Ändra ellips&#39;s y radie",
+ "line_x1": "Ändra Lines startar x samordna",
+ "line_x2": "Ändra Lines slutar x samordna",
+ "line_y1": "Ändra Lines startar Y-koordinat",
+ "line_y2": "Ändra Lines slutar Y-koordinat",
+ "rect_height": "Ändra rektangel höjd",
+ "rect_width": "Ändra rektangel bredd",
+ "corner_radius": "Ändra rektangel hörnradie",
+ "image_width": "Ändra bild bredd",
+ "image_height": "Ändra bildhöjd",
+ "image_url": "Ändra URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Ändra textinnehållet",
+ "font_family": "Ändra Typsnitt",
+ "font_size": "Ändra textstorlek",
+ "bold": "Fet text",
+ "italic": "Kursiv text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Ändra bakgrundsfärg / opacitet",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Passar till allt innehåll",
+ "fit_to_canvas": "Anpassa till duk",
+ "fit_to_layer_content": "Anpassa till lager innehåll",
+ "fit_to_sel": "Anpassa till val",
+ "align_relative_to": "Justera förhållande till ...",
+ "relativeTo": "jämfört:",
+ "sida": "sida",
+ "largest_object": "största objekt",
+ "selected_objects": "valda objekt",
+ "smallest_object": "minsta objektet",
+ "new_doc": "New Image",
+ "open_doc": "Öppna bild",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Centrera",
+ "align_left": "Vänsterjustera",
+ "align_middle": "Justera Middle",
+ "align_right": "Högerjustera",
+ "align_top": "Justera Top",
+ "mode_select": "Markeringsverktyget",
+ "mode_fhpath": "Pennverktyget",
+ "mode_line": "Linjeverktyg",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Fri hand rektangel",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Fri hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Textverktyg",
+ "mode_image": "Bildverktyg",
+ "mode_zoom": "Zoomverktyget",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Ångra",
+ "redo": "Redo",
+ "tool_source": "Redigera källa",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Dela Elements",
+ "docprops": "Dokumentegenskaper",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Flytta till början",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Spara",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Radera Layer",
+ "move_down": "Flytta Layer Down",
+ "new": "New Layer",
+ "rename": "Byt namn på Layer",
+ "move_up": "Flytta Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Välj fördefinierad:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.sw.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sw.js.svn-base
new file mode 100644
index 000000000..ec0275a18
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.sw.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sw",
+ dir : "ltr",
+ common: {
+ "ok": "Okoa",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click kubadili kujaza color, skiftarbete-click kubadili kiharusi color",
+ "zoom_level": "Change zoom ngazi",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change kujaza Michezo",
+ "stroke_color": "Change kiharusi Michezo",
+ "stroke_style": "Change kiharusi dash style",
+ "stroke_width": "Change kiharusi width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change mzunguko vinkel",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected opacity punkt",
+ "circle_cx": "Change mduara&#39;s CX kuratibu",
+ "circle_cy": "Change mduara&#39;s cy kuratibu",
+ "circle_r": "Change mduara&#39;s Radius",
+ "ellipse_cx": "Change ellipse s CX kuratibu",
+ "ellipse_cy": "Change ellipse s cy kuratibu",
+ "ellipse_rx": "Change ellipse s x Radius",
+ "ellipse_ry": "Change ellipse&#39;s y Radius",
+ "line_x1": "Change Mpya&#39;s mapya x kuratibu",
+ "line_x2": "Change Mpya&#39;s kuishia x kuratibu",
+ "line_y1": "Change Mpya&#39;s mapya y kuratibu",
+ "line_y2": "Change Mpya&#39;s kuishia y kuratibu",
+ "rect_height": "Change Mstatili height",
+ "rect_width": "Change Mstatili width",
+ "corner_radius": "Change Mstatili Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image urefu",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change Nakala contents",
+ "font_family": "Change font Family",
+ "font_size": "Change font Size",
+ "bold": "Bold Nakala",
+ "italic": "Italiki Nakala"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Waliopo Content",
+ "fit_to_all": "Waliopo all content",
+ "fit_to_canvas": "Wanaofaa Canvas",
+ "fit_to_layer_content": "Waliopo safu content",
+ "fit_to_sel": "Waliopo uteuzi",
+ "align_relative_to": "Align jamaa na ...",
+ "relativeTo": "relativa att:",
+ "umebadilisha": "umebadilisha",
+ "largest_object": "ukubwa object",
+ "selected_objects": "waliochaguliwa vitu",
+ "smallest_object": "minsta object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Kati align",
+ "align_right": "Align Right",
+ "align_top": "Align Juu",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Penseli Tool",
+ "mode_line": "Mpya Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Nakala Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Tengua",
+ "redo": "Redo",
+ "tool_source": "Edit Lugha",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Kikundi Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Kuhama Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "Mpya Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.test.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.test.js.svn-base
new file mode 100644
index 000000000..fe69bc1eb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.test.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "test",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width by 1, shift-click to change by 0.1",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Layer",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Move Layer Up",
+ "move_down": "Move Layer Down",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.th.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.th.js.svn-base
new file mode 100644
index 000000000..e937da748
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.th.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "th",
+ dir : "ltr",
+ common: {
+ "ok": "บันทึก",
+ "cancel": "ยกเลิก",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "คลิกเพื่อเปลี่ยนใส่สีกะคลิกเปลี่ยนสีจังหวะ",
+ "zoom_level": "เปลี่ยนระดับการซูม",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "เปลี่ยนใส่สี",
+ "stroke_color": "สีจังหวะเปลี่ยน",
+ "stroke_style": "รีบเปลี่ยนสไตล์จังหวะ",
+ "stroke_width": "ความกว้างจังหวะเปลี่ยน",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "มุมหมุนเปลี่ยน",
+ "blur": "Change gaussian blur value",
+ "opacity": "เปลี่ยนความทึบเลือกรายการ",
+ "circle_cx": "Cx วงกลมเปลี่ยนของพิกัด",
+ "circle_cy": "วงกลมเปลี่ยนเป็น cy ประสานงาน",
+ "circle_r": "รัศมีวงกลมเปลี่ยนเป็น",
+ "ellipse_cx": "เปลี่ยน ellipse ของ cx ประสานงาน",
+ "ellipse_cy": "Ellipse เปลี่ยนของ cy ประสานงาน",
+ "ellipse_rx": "Ellipse เปลี่ยนของรัศมี x",
+ "ellipse_ry": "Ellipse เปลี่ยนของรัศมี y",
+ "line_x1": "สายเปลี่ยนเป็นเริ่มต้น x พิกัด",
+ "line_x2": "สายเปลี่ยนเป็นสิ้นสุด x พิกัด",
+ "line_y1": "สายเปลี่ยนเป็นเริ่มต้น y พิกัด",
+ "line_y2": "สายเปลี่ยนเป็นสิ้นสุด y พิกัด",
+ "rect_height": "ความสูงสี่เหลี่ยมผืนผ้าเปลี่ยน",
+ "rect_width": "ความกว้างสี่เหลี่ยมผืนผ้าเปลี่ยน",
+ "corner_radius": "รัศมีเปลี่ยนสี่เหลี่ยมผืนผ้า Corner",
+ "image_width": "ความกว้างเปลี่ยนรูปภาพ",
+ "image_height": "ความสูงเปลี่ยนรูปภาพ",
+ "image_url": "URL เปลี่ยน",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "เปลี่ยนเนื้อหาข้อความ",
+ "font_family": "ครอบครัว Change Font",
+ "font_size": "เปลี่ยนขนาดตัวอักษร",
+ "bold": "ข้อความตัวหนา",
+ "italic": "ข้อความตัวเอียง"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "สีพื้นหลังเปลี่ยน / ความทึบ",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "พอดีกับเนื้อหาทั้งหมด",
+ "fit_to_canvas": "เหมาะสมในการผ้าใบ",
+ "fit_to_layer_content": "พอดีเนื้อหาชั้นที่",
+ "fit_to_sel": "เหมาะสมในการเลือก",
+ "align_relative_to": "จัดชิดเทียบกับ ...",
+ "relativeTo": "เทียบกับ:",
+ "หน้า": "หน้า",
+ "largest_object": "ที่ใหญ่ที่สุดในวัตถุ",
+ "selected_objects": "วัตถุเลือกตั้ง",
+ "smallest_object": "วัตถุที่เล็กที่สุด",
+ "new_doc": "รูปภาพใหม่",
+ "open_doc": "ภาพเปิด",
+ "export_png": "Export as PNG",
+ "save_doc": "บันทึกรูปภาพ",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "ด้านล่างชิด",
+ "align_center": "จัดแนวกึ่งกลาง",
+ "align_left": "จัดชิดซ้าย",
+ "align_middle": "กลางชิด",
+ "align_right": "จัดชิดขวา",
+ "align_top": "ด้านบนชิด",
+ "mode_select": "เครื่องมือเลือก",
+ "mode_fhpath": "เครื่องมือดินสอ",
+ "mode_line": "เครื่องมือ Line",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "สี่เหลี่ยมผืนผ้า Free-Hand",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Ellipse Free-Hand",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "เครื่องมือ Text",
+ "mode_image": "เครื่องมือ Image",
+ "mode_zoom": "เครื่องมือซูม",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "เลิก",
+ "redo": "ทำซ้ำ",
+ "tool_source": "แหล่งที่มาแก้ไข",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "องค์ประกอบของกลุ่ม",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "องค์ประกอบ Ungroup",
+ "docprops": "คุณสมบัติของเอกสาร",
+ "imagelib": "Image Library",
+ "move_bottom": "ย้ายไปด้านล่าง",
+ "move_top": "ย้ายไปด้านบน",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "บันทึก",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "ย้าย Layer ลง",
+ "new": "Layer ใหม่",
+ "rename": "Layer เปลี่ยนชื่อ",
+ "move_up": "ย้าย Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "เลือกที่กำหนดไว้ล่วงหน้า:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.tl.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.tl.js.svn-base
new file mode 100644
index 000000000..4c820a62c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.tl.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "tl",
+ dir : "ltr",
+ common: {
+ "ok": "I-save",
+ "cancel": "I-cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "I-click upang baguhin ang punan ang kulay, paglilipat-click upang baguhin ang paghampas ng kulay",
+ "zoom_level": "Baguhin ang antas ng zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Baguhin ang punuin ng kulay",
+ "stroke_color": "Baguhin ang kulay ng paghampas",
+ "stroke_style": "Baguhin ang stroke pagsugod estilo",
+ "stroke_width": "Baguhin ang stroke lapad",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Baguhin ang pag-ikot anggulo",
+ "blur": "Change gaussian blur value",
+ "opacity": "Palitan ang mga napiling bagay kalabuan",
+ "circle_cx": "Cx Baguhin ang bilog&#39;s coordinate",
+ "circle_cy": "Baguhin ang bilog&#39;s cy coordinate",
+ "circle_r": "Baguhin ang radius ng bilog",
+ "ellipse_cx": "Baguhin ang tambilugan&#39;s cx-ugma",
+ "ellipse_cy": "Baguhin ang tambilugan&#39;s cy coordinate",
+ "ellipse_rx": "X radius Baguhin ang tambilugan&#39;s",
+ "ellipse_ry": "Y radius Baguhin ang tambilugan&#39;s",
+ "line_x1": "Baguhin ang linya ng simula x coordinate",
+ "line_x2": "Baguhin ang linya ay nagtatapos x coordinate",
+ "line_y1": "Baguhin ang linya ng simula y coordinate",
+ "line_y2": "Baguhin ang linya ay nagtatapos y coordinate",
+ "rect_height": "Baguhin ang rektanggulo taas",
+ "rect_width": "Baguhin ang rektanggulo lapad",
+ "corner_radius": "Baguhin ang Parihaba Corner Radius",
+ "image_width": "Baguhin ang lapad ng imahe",
+ "image_height": "Baguhin ang taas ng imahe",
+ "image_url": "Baguhin ang URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Baguhin ang mga nilalaman ng teksto",
+ "font_family": "Baguhin ang Pamilya ng Font",
+ "font_size": "Baguhin ang Laki ng Font",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Baguhin ang kulay ng background / kalabuan",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Pagkasyahin sa Nilalaman",
+ "fit_to_all": "Pagkasyahin sa lahat ng mga nilalaman",
+ "fit_to_canvas": "Pagkasyahin sa tolda",
+ "fit_to_layer_content": "Pagkasyahin sa layer nilalaman",
+ "fit_to_sel": "Pagkasyahin sa pagpili",
+ "align_relative_to": "Pantayin sa kamag-anak sa ...",
+ "relativeTo": "kamag-anak sa:",
+ "pahina": "pahina",
+ "largest_object": "pinakamalaking bagay",
+ "selected_objects": "inihalal na mga bagay",
+ "smallest_object": "pinakamaliit na bagay",
+ "new_doc": "Bagong Imahe",
+ "open_doc": "Buksan ang Image",
+ "export_png": "Export as PNG",
+ "save_doc": "I-save ang Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Pantayin sa Ibaba",
+ "align_center": "Pantayin sa Gitna",
+ "align_left": "Pantayin ang Kaliwa",
+ "align_middle": "Pantayin sa Gitnang",
+ "align_right": "Pantayin sa Kanan",
+ "align_top": "Pantayin Top",
+ "mode_select": "Piliin ang Tool",
+ "mode_fhpath": "Kasangkapan ng lapis",
+ "mode_line": "Line Kasangkapan",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Libreng-kamay Parihaba",
+ "mode_ellipse": "Tambilugan",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Libreng-kamay tambilugan",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Kasangkapan",
+ "mode_image": "Image Kasangkapan",
+ "mode_zoom": "Mag-zoom Kasangkapan",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Bawiin",
+ "redo": "Gawin muli",
+ "tool_source": "I-edit ang Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Sangkap",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Sangkap",
+ "docprops": "Document Katangian",
+ "imagelib": "Image Library",
+ "move_bottom": "Ilipat sa Ibaba",
+ "move_top": "Ilipat sa Tuktok",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "I-save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Tanggalin Layer",
+ "move_down": "Ilipat Layer Down",
+ "new": "Bagong Layer",
+ "rename": "Palitan ang pangalan ng Layer",
+ "move_up": "Ilipat Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Piliin ang paunang-natukoy na:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.tr.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.tr.js.svn-base
new file mode 100644
index 000000000..f802615fb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.tr.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "tr",
+ dir : "ltr",
+ common: {
+ "ok": "Kaydetmek",
+ "cancel": "Iptal",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Tıklatın renk, vardiya dolgu zamanlı rengini değiştirmek için tıklayın değiştirmek için",
+ "zoom_level": "Yakınlaştırma düzeyini değiştirebilirsiniz",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Renk değiştirmek doldurmak",
+ "stroke_color": "Değiştirmek inme renk",
+ "stroke_style": "Değiştirmek inme çizgi stili",
+ "stroke_width": "Değiştirmek vuruş genişliği",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Değiştirmek dönme açısı",
+ "blur": "Change gaussian blur value",
+ "opacity": "Değiştirmek öğe opacity seçilmiş",
+ "circle_cx": "Değiştirmek daire&#39;s cx koordine",
+ "circle_cy": "Değiştirmek daire cy koordine&#39;s",
+ "circle_r": "Değiştirmek daire yarıçapı",
+ "ellipse_cx": "&#39;s Koordine cx elips Girişi",
+ "ellipse_cy": "Değiştirmek elips cy koordine&#39;s",
+ "ellipse_rx": "Değiştirmek elips&#39;s x yarıçapı",
+ "ellipse_ry": "Değiştirmek elips Y yarıçapı",
+ "line_x1": "Değiştirmek hattı&#39;s koordine x başlangıç",
+ "line_x2": "Değiştirmek hattı&#39;s koordine x biten",
+ "line_y1": "Değiştirmek hattı y başlangıç&#39;s koordine",
+ "line_y2": "Değiştirmek hattı y biten&#39;s koordine",
+ "rect_height": "Değiştirmek dikdörtgen yüksekliği",
+ "rect_width": "Değiştirmek dikdörtgen genişliği",
+ "corner_radius": "Değiştirmek Dikdörtgen Köşe Yarıçap",
+ "image_width": "Değiştirmek görüntü genişliği",
+ "image_height": "Değiştirmek görüntü yüksekliği",
+ "image_url": "Değiştirmek URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Değiştirmek metin içeriği",
+ "font_family": "Font değiştir Aile",
+ "font_size": "Change font size",
+ "bold": "Kalın Yazı",
+ "italic": "Italik yazı"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Arka plan rengini değiştirmek / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit tüm içerik için",
+ "fit_to_canvas": "Fit tuvaline",
+ "fit_to_layer_content": "Sığacak şekilde katman içerik",
+ "fit_to_sel": "Fit seçimine",
+ "align_relative_to": "Align göre ...",
+ "relativeTo": "göreli:",
+ "sayfa": "sayfa",
+ "largest_object": "en büyük nesne",
+ "selected_objects": "seçilen nesneleri",
+ "smallest_object": "küçük nesne",
+ "new_doc": "Yeni Resim",
+ "open_doc": "Aç Resim",
+ "export_png": "Export as PNG",
+ "save_doc": "Görüntüyü Kaydet",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Ortala",
+ "align_left": "Sola",
+ "align_middle": "Align Orta",
+ "align_right": "Sağa Hizala",
+ "align_top": "Align Top",
+ "mode_select": "Seçim aracı",
+ "mode_fhpath": "Kalem Aracı",
+ "mode_line": "Line Aracı",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-El Dikdörtgen",
+ "mode_ellipse": "Elips",
+ "mode_circle": "Daire",
+ "mode_fhellipse": "Free-El Elips",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Metin Aracı",
+ "mode_image": "Resim Aracı",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Geri",
+ "redo": "Redo",
+ "tool_source": "Değiştir Kaynak",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grup Elemanları",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Çöz Elemanları",
+ "docprops": "Belge Özellikleri",
+ "imagelib": "Image Library",
+ "move_bottom": "Altına gider",
+ "move_top": "Üste taşı",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Kaydetmek",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Katman Aşağı Taşı",
+ "new": "Yeni Katman",
+ "rename": "Rename Katman",
+ "move_up": "Up Katman Taşı",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Seçin önceden tanımlanmış:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.uk.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.uk.js.svn-base
new file mode 100644
index 000000000..c909fb977
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.uk.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "uk",
+ dir : "ltr",
+ common: {
+ "ok": "Зберегти",
+ "cancel": "Скасування",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Натисніть для зміни кольору заливки, Shift-Click змінити обвід",
+ "zoom_level": "Зміна масштабу",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Зміна кольору заливки",
+ "stroke_color": "Зміна кольору інсульт",
+ "stroke_style": "Зміна стилю інсульт тире",
+ "stroke_width": "Зміни ширина штриха",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Зміна кута повороту",
+ "blur": "Change gaussian blur value",
+ "opacity": "Зміна вибраного пункту непрозорості",
+ "circle_cx": "CX зміну кола координата",
+ "circle_cy": "Зміни гуртка CY координати",
+ "circle_r": "Зміна кола&#39;s радіус",
+ "ellipse_cx": "Зміни еліпса CX координати",
+ "ellipse_cy": "Зміни еліпса CY координати",
+ "ellipse_rx": "Х Зміни еліпса радіусом",
+ "ellipse_ry": "Зміни у еліпса радіусом",
+ "line_x1": "Зміни починає координати лінія х",
+ "line_x2": "Зміни за період, що закінчився лінія координати х",
+ "line_y1": "Зміни лінія починає Y координата",
+ "line_y2": "Зміна за період, що закінчився лінія Y координата",
+ "rect_height": "Зміни прямокутник висотою",
+ "rect_width": "Зміна ширини прямокутника",
+ "corner_radius": "Зміни прямокутник Corner Radius",
+ "image_width": "Зміни ширина зображення",
+ "image_height": "Зміна висоти зображення",
+ "image_url": "Змінити URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Зміна змісту тексту",
+ "font_family": "Зміни Сімейство шрифтів",
+ "font_size": "Змінити розмір шрифту",
+ "bold": "Товстий текст",
+ "italic": "Похилий текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Зміна кольору тла / непрозорість",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "За розміром змісту",
+ "fit_to_all": "За розміром весь вміст",
+ "fit_to_canvas": "Розмір полотна",
+ "fit_to_layer_content": "За розміром шар змісту",
+ "fit_to_sel": "Вибір розміру",
+ "align_relative_to": "Вирівняти по відношенню до ...",
+ "relativeTo": "в порівнянні з:",
+ "сторінка": "сторінка",
+ "largest_object": "найбільший об&#39;єкт",
+ "selected_objects": "обраними об&#39;єктами",
+ "smallest_object": "маленький об&#39;єкт",
+ "new_doc": "Нове зображення",
+ "open_doc": "Відкрити зображення",
+ "export_png": "Export as PNG",
+ "save_doc": "Зберегти малюнок",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Вирівняти по нижньому краю",
+ "align_center": "Вирівняти по центру",
+ "align_left": "По лівому краю",
+ "align_middle": "Вирівняти Близького",
+ "align_right": "По правому краю",
+ "align_top": "Вирівняти по верхньому краю",
+ "mode_select": "Виберіть інструмент",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Вільної руки Прямокутник",
+ "mode_ellipse": "Еліпс",
+ "mode_circle": "Коло",
+ "mode_fhellipse": "Вільної руки Еліпс",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Скасувати",
+ "redo": "Повтор",
+ "tool_source": "Змінити вихідний",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група елементів",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Елементи розгрупувати",
+ "docprops": "Властивості документа",
+ "imagelib": "Image Library",
+ "move_bottom": "Перемістити вниз",
+ "move_top": "Перемістити догори",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Зберегти",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Видалити шар",
+ "move_down": "Перемістити шар на",
+ "new": "Новий шар",
+ "rename": "Перейменувати Шар",
+ "move_up": "Переміщення шару до",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Виберіть зумовлений:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.vi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.vi.js.svn-base
new file mode 100644
index 000000000..8f8119d26
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.vi.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "vi",
+ dir : "ltr",
+ common: {
+ "ok": "Lưu",
+ "cancel": "Hủy",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Nhấn vào đây để thay đổi đầy màu sắc, thay đổi nhấp chuột để thay đổi màu sắc đột quỵ",
+ "zoom_level": "Thay đổi mức độ phóng",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Thay đổi đầy màu sắc",
+ "stroke_color": "Thay đổi màu sắc đột quỵ",
+ "stroke_style": "Thay đổi phong cách đột quỵ dash",
+ "stroke_width": "Thay đổi chiều rộng đột quỵ",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Thay đổi góc xoay",
+ "blur": "Change gaussian blur value",
+ "opacity": "Thay đổi lựa chọn opacity mục",
+ "circle_cx": "Thay đổi hình tròn của cx phối hợp",
+ "circle_cy": "Thay đổi hình tròn của vi phối hợp",
+ "circle_r": "Thay đổi bán kính của hình tròn",
+ "ellipse_cx": "Thay đổi hình elip của cx phối hợp",
+ "ellipse_cy": "Thay đổi hình elip của vi phối hợp",
+ "ellipse_rx": "Thay đổi hình elip của x bán kính",
+ "ellipse_ry": "Y Thay đổi bán kính của hình ellipse",
+ "line_x1": "Thay đổi dòng của bắt đầu từ x phối hợp",
+ "line_x2": "Thay đổi dòng của x kết thúc sớm nhất phối hợp",
+ "line_y1": "Thay đổi dòng của bắt đầu từ y phối hợp",
+ "line_y2": "Thay đổi dòng của kết thúc y phối hợp",
+ "rect_height": "Thay đổi hình chữ nhật chiều cao",
+ "rect_width": "Thay đổi hình chữ nhật chiều rộng",
+ "corner_radius": "Thay đổi chữ nhật Corner Radius",
+ "image_width": "Thay đổi hình ảnh rộng",
+ "image_height": "Thay đổi hình ảnh chiều cao",
+ "image_url": "Thay đổi URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Thay đổi nội dung văn bản",
+ "font_family": "Thay đổi Font Gia đình",
+ "font_size": "Thay đổi cỡ chữ",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Thay đổi màu nền / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Phù hợp với nội dung",
+ "fit_to_all": "Phù hợp với tất cả nội dung",
+ "fit_to_canvas": "Phù hợp với vải",
+ "fit_to_layer_content": "Vào lớp phù hợp với nội dung",
+ "fit_to_sel": "Phù hợp để lựa chọn",
+ "align_relative_to": "Căn liên quan đến ...",
+ "relativeTo": "liên quan đến:",
+ "Sửa": "Sửa",
+ "largest_object": "lớn nhất đối tượng",
+ "selected_objects": "bầu các đối tượng",
+ "smallest_object": "nhỏ đối tượng",
+ "new_doc": "Hình mới",
+ "open_doc": "Mở Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Căn giữa",
+ "align_left": "Căn còn lại",
+ "align_middle": "Căn Trung",
+ "align_right": "Căn phải",
+ "align_top": "Căn Top",
+ "mode_select": "Chọn Công cụ",
+ "mode_fhpath": "Bút chì Công cụ",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Việt-Hand Hình chữ nhật",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Việt-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Hình Công cụ",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Hoàn tác",
+ "redo": "Làm lại",
+ "tool_source": "Sửa Nguồn",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Nhóm Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Chuyển đến đáy",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Lưu",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Xoá Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Đổi tên Layer",
+ "move_up": "Di chuyển Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Chọn định sẵn:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.yi.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.yi.js.svn-base
new file mode 100644
index 000000000..2233da0fb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.yi.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "yi",
+ dir : "ltr",
+ common: {
+ "ok": "היט",
+ "cancel": "באָטל מאַכן",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "גיט צו ענדערן אָנעסן קאָליר, יבעררוק-גיט צו טוישן מאַך קאָליר",
+ "zoom_level": "ענדערן פארגרעסער הייך",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "ענדערן אָנעסן קאָליר",
+ "stroke_color": "טוישן מאַך קאָליר",
+ "stroke_style": "טוישן מאַך לאָך מאָדע",
+ "stroke_width": "טוישן מאַך ברייט",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "ענדערן ראָוטיישאַן ווינקל",
+ "blur": "Change gaussian blur value",
+ "opacity": "ענדערן סעלעקטעד נומער אָופּאַסאַטי",
+ "circle_cx": "ענדערן קרייז ס קקס קאָואָרדאַנאַט",
+ "circle_cy": "ענדערן קרייז ס סי קאָואָרדאַנאַט",
+ "circle_r": "ענדערן קרייז ס ראַדיוס",
+ "ellipse_cx": "ענדערן יליפּס ס קקס קאָואָרדאַנאַט",
+ "ellipse_cy": "ענדערן יליפּס ס סי קאָואָרדאַנאַט",
+ "ellipse_rx": "ענדערן יליפּס ס &#39;קס ראַדיוס",
+ "ellipse_ry": "ענדערן יליפּס ס &#39;י ראַדיוס",
+ "line_x1": "טוישן ליניע ס &#39;סטאַרטינג קס קאָואָרדאַנאַט",
+ "line_x2": "טוישן ליניע ס &#39;סאָף קס קאָואָרדאַנאַט",
+ "line_y1": "טוישן ליניע ס &#39;סטאַרטינג י קאָואָרדאַנאַט",
+ "line_y2": "טוישן ליניע ס &#39;סאָף י קאָואָרדאַנאַט",
+ "rect_height": "ענדערן גראָדעק הייך",
+ "rect_width": "ענדערן גראָדעק ברייט",
+ "corner_radius": "ענדערן רעקטאַנגלע קאָרנער ראַדיוס",
+ "image_width": "טוישן בילד ברייט",
+ "image_height": "טוישן בילד הייך",
+ "image_url": "ענדערן URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "ענדערן טעקסט אינהאַלט",
+ "font_family": "ענדערן פאָנט פאַמילי",
+ "font_size": "בייטן פאָנט גרייס",
+ "bold": "דרייסט טעקסט",
+ "italic": "יטאַליק טעקסט"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "ענדערן הינטערגרונט פאַרב / אָופּאַסאַטי",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "פּאַסיק צו אינהאַלט",
+ "fit_to_all": "פּאַסיק צו אַלע אינהאַלט",
+ "fit_to_canvas": "פּאַסיק צו לייוונט",
+ "fit_to_layer_content": "פּאַסיק צו שיכטע אינהאַלט",
+ "fit_to_sel": "פּאַסיק צו אָפּקלייב",
+ "align_relative_to": "יינרייען קאָרעוו צו ...",
+ "relativeTo": "קאָרעוו צו:",
+ "בלאַט": "בלאַט",
+ "largest_object": "לאַרדזשאַסט קעגן",
+ "selected_objects": "עלעקטעד אַבדזשעקץ",
+ "smallest_object": "סמאָלאַסט קעגן",
+ "new_doc": "ניו בילד",
+ "open_doc": "Open בילד",
+ "export_png": "Export as PNG",
+ "save_doc": "היט בילד",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "יינרייען באָטטאָם",
+ "align_center": "יינרייען צענטער",
+ "align_left": "יינרייען לעפט",
+ "align_middle": "יינרייען מיטל",
+ "align_right": "יינרייען רעכט",
+ "align_top": "יינרייען Top",
+ "mode_select": "סעלעקטירן טול",
+ "mode_fhpath": "בלייער טול",
+ "mode_line": "שורה טול",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-הענט רעקטאַנגלע",
+ "mode_ellipse": "עלליפּסע",
+ "mode_circle": "קאַראַהאָד",
+ "mode_fhellipse": "Free-הענט עלליפּסע",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "טעקסט טול",
+ "mode_image": "בילד טול",
+ "mode_zoom": "פארגרעסער טול",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "ופמאַכן",
+ "redo": "רעדאָ",
+ "tool_source": "רעדאַקטירן סאָרס",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "גרופּע עלעמענץ",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "ונגראָופּ עלעמענץ",
+ "docprops": "דאָקומענט פּראָפּערטיעס",
+ "imagelib": "Image Library",
+ "move_bottom": "מאַך צו באָטטאָם",
+ "move_top": "באַוועגן צו Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "היט",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "ויסמעקן לייַער",
+ "move_down": "קער לייַער דאָוון",
+ "new": "ניו לייַער",
+ "rename": "רענאַמע לייַער",
+ "move_up": "באַוועגן לייַער אַרויף",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "סעלעקטירן פּרעדעפינעד:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-CN.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-CN.js.svn-base
new file mode 100644
index 000000000..86ad5e659
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-CN.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "zh-CN",
+ dir : "ltr",
+ common: {
+ "ok": "保存",
+ "cancel": "取消",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "点击更改填充颜色,按住Shift键单击更改颜色中风",
+ "zoom_level": "更改缩放级别",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "更改填充颜色",
+ "stroke_color": "中风的颜色变化",
+ "stroke_style": "更改行程冲刺风格",
+ "stroke_width": "笔划宽度的变化",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "旋转角度的变化",
+ "blur": "Change gaussian blur value",
+ "opacity": "更改所选项目不透明",
+ "circle_cx": "改变循环的CX坐标",
+ "circle_cy": "改变循环的赛扬坐标",
+ "circle_r": "改变圆的半径",
+ "ellipse_cx": "改变椭圆的CX坐标",
+ "ellipse_cy": "改变椭圆的赛扬坐标",
+ "ellipse_rx": "改变椭圆的x半径",
+ "ellipse_ry": "改变椭圆的y半径",
+ "line_x1": "更改行的起点的x坐标",
+ "line_x2": "更改行的结束x坐标",
+ "line_y1": "更改行的起点的y坐标",
+ "line_y2": "更改行的结束y坐标",
+ "rect_height": "更改矩形的高度",
+ "rect_width": "更改矩形的宽度",
+ "corner_radius": "角半径:",
+ "image_width": "更改图像的宽度",
+ "image_height": "更改图像高度",
+ "image_url": "更改网址",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "更改文字内容",
+ "font_family": "更改字体家族",
+ "font_size": "更改字体大小",
+ "bold": "粗体",
+ "italic": "斜体文本"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "更改背景颜色/不透明",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "适合内容",
+ "fit_to_all": "适合于所有的内容",
+ "fit_to_canvas": "适合画布",
+ "fit_to_layer_content": "适合层内容",
+ "fit_to_sel": "适合选择",
+ "align_relative_to": "相对对齐 ...",
+ "relativeTo": "相对于:",
+ "网页": "网页",
+ "largest_object": "最大对象",
+ "selected_objects": "选对象",
+ "smallest_object": "最小的对象",
+ "new_doc": "新形象",
+ "open_doc": "打开图像",
+ "export_png": "Export as PNG",
+ "save_doc": "保存图像",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "底部对齐",
+ "align_center": "居中对齐",
+ "align_left": "左对齐",
+ "align_middle": "中间对齐",
+ "align_right": "右对齐",
+ "align_top": "顶端对齐",
+ "mode_select": "选择工具",
+ "mode_fhpath": "铅笔工具",
+ "mode_line": "线工具",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "免费手矩形",
+ "mode_ellipse": "椭圆",
+ "mode_circle": "圈",
+ "mode_fhellipse": "免费手椭圆",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "文字工具",
+ "mode_image": "图像工具",
+ "mode_zoom": "缩放工具",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "撤消",
+ "redo": "重做",
+ "tool_source": "编辑源",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "族元素",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "取消组合元素",
+ "docprops": "文档属性",
+ "imagelib": "Image Library",
+ "move_bottom": "移至底部",
+ "move_top": "移动到顶部",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "保存",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "删除层",
+ "move_down": "层向下移动",
+ "new": "新层",
+ "rename": "重命名层",
+ "move_up": "移动层最多",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "选择预定义:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-HK.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-HK.js.svn-base
new file mode 100644
index 000000000..06a55a782
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-HK.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "zh-HK",
+ dir : "ltr",
+ common: {
+ "ok": "保存",
+ "cancel": "取消",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "点击更改填充颜色,按住Shift键单击更改颜色中风",
+ "zoom_level": "更改缩放级别",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "更改填充颜色",
+ "stroke_color": "中风的颜色变化",
+ "stroke_style": "更改行程冲刺风格",
+ "stroke_width": "笔划宽度的变化",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "旋转角度的变化",
+ "blur": "Change gaussian blur value",
+ "opacity": "更改所选项目不透明",
+ "circle_cx": "改变循环的CX坐标",
+ "circle_cy": "改变循环的赛扬坐标",
+ "circle_r": "改变圆的半径",
+ "ellipse_cx": "改变椭圆的CX坐标",
+ "ellipse_cy": "改变椭圆的赛扬坐标",
+ "ellipse_rx": "改变椭圆的x半径",
+ "ellipse_ry": "改变椭圆的y半径",
+ "line_x1": "更改行的起点的x坐标",
+ "line_x2": "更改行的结束x坐标",
+ "line_y1": "更改行的起点的y坐标",
+ "line_y2": "更改行的结束y坐标",
+ "rect_height": "更改矩形的高度",
+ "rect_width": "更改矩形的宽度",
+ "corner_radius": "角半径:",
+ "image_width": "更改图像的宽度",
+ "image_height": "更改图像高度",
+ "image_url": "更改网址",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "更改文字内容",
+ "font_family": "更改字体家族",
+ "font_size": "更改字体大小",
+ "bold": "粗体",
+ "italic": "斜体文本"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "更改背景颜色/不透明",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "适合内容",
+ "fit_to_all": "适合于所有的内容",
+ "fit_to_canvas": "适合画布",
+ "fit_to_layer_content": "适合层内容",
+ "fit_to_sel": "适合选择",
+ "align_relative_to": "相对对齐 ...",
+ "relativeTo": "相对于:",
+ "网页": "网页",
+ "largest_object": "最大对象",
+ "selected_objects": "选对象",
+ "smallest_object": "最小的对象",
+ "new_doc": "新形象",
+ "open_doc": "打开图像",
+ "export_png": "Export as PNG",
+ "save_doc": "保存图像",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "底部对齐",
+ "align_center": "居中对齐",
+ "align_left": "左对齐",
+ "align_middle": "中间对齐",
+ "align_right": "右对齐",
+ "align_top": "顶端对齐",
+ "mode_select": "选择工具",
+ "mode_fhpath": "铅笔工具",
+ "mode_line": "线工具",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "免费手矩形",
+ "mode_ellipse": "椭圆",
+ "mode_circle": "圈",
+ "mode_fhellipse": "免费手椭圆",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "文字工具",
+ "mode_image": "图像工具",
+ "mode_zoom": "缩放工具",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "撤消",
+ "redo": "重做",
+ "tool_source": "编辑源",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "族元素",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "文档属性",
+ "imagelib": "Image Library",
+ "move_bottom": "移至底部",
+ "move_top": "移动到顶部",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "保存",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "删除层",
+ "move_down": "层向下移动",
+ "new": "新层",
+ "rename": "重命名层",
+ "move_up": "移动层最多",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "选择预定义:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-TW.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-TW.js.svn-base
new file mode 100644
index 000000000..5d32e0fb4
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/lang.zh-TW.js.svn-base
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "zh-TW",
+ dir : "ltr",
+ common: {
+ "ok": "保存",
+ "cancel": "取消",
+ "key_backspace": "空白",
+ "key_del": "刪除",
+ "key_down": "下",
+ "key_up": "上",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "點擊更改填充顏色,按住Shift鍵單擊更改線條顏色",
+ "zoom_level": "更改縮放級別",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "更改填充顏色",
+ "stroke_color": "線條顏色",
+ "stroke_style": "更改線條(虛線)風格",
+ "stroke_width": "線條寬度",
+ "pos_x": "調整 X 軸",
+ "pos_y": "調整 Y 軸",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "旋轉角度",
+ "blur": "Change gaussian blur value",
+ "opacity": "更改所選項目不透明度",
+ "circle_cx": "改變圓的CX坐標",
+ "circle_cy": "改變圓的CY坐標",
+ "circle_r": "改變圓的半徑",
+ "ellipse_cx": "改變橢圓的圓心x軸座標",
+ "ellipse_cy": "改變橢圓的圓心y軸座標",
+ "ellipse_rx": "改變橢圓的x軸長",
+ "ellipse_ry": "改變橢圓的y軸長",
+ "line_x1": "更改行的起點的x坐標",
+ "line_x2": "更改行的終點x坐標",
+ "line_y1": "更改行的起點的y坐標",
+ "line_y2": "更改行的終點y坐標",
+ "rect_height": "更改矩形的高度",
+ "rect_width": "更改矩形的寬度",
+ "corner_radius": "角半徑:",
+ "image_width": "更改圖像的寬度",
+ "image_height": "更改圖像高度",
+ "image_url": "更改網址",
+ "node_x": "改變節點的x軸座標",
+ "node_y": "改變節點的y軸座標",
+ "seg_type": "Change Segment type",
+ "straight_segments": "直線",
+ "curve_segments": "曲線",
+ "text_contents": "更改文字內容",
+ "font_family": "更改字體",
+ "font_size": "更改字體大小",
+ "bold": "粗體",
+ "italic": "斜體"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "更改背景顏色/不透明",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "適合內容",
+ "fit_to_all": "適合所有的內容",
+ "fit_to_canvas": "適合畫布",
+ "fit_to_layer_content": "適合圖層內容",
+ "fit_to_sel": "適合選取的物件",
+ "align_relative_to": "相對對齊 ...",
+ "relativeTo": "相對於:",
+ "網頁": "網頁",
+ "largest_object": "最大的物件",
+ "selected_objects": "選取物件",
+ "smallest_object": "最小的物件",
+ "new_doc": "清空圖像",
+ "open_doc": "打開圖像",
+ "export_png": "Export as PNG",
+ "save_doc": "保存圖像",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "底部對齊",
+ "align_center": "居中對齊",
+ "align_left": "向左對齊",
+ "align_middle": "中間對齊",
+ "align_right": "向右對齊",
+ "align_top": "頂端對齊",
+ "mode_select": "選擇工具",
+ "mode_fhpath": "鉛筆工具",
+ "mode_line": "線工具",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "徒手畫矩形",
+ "mode_ellipse": "橢圓",
+ "mode_circle": "圓",
+ "mode_fhellipse": "徒手畫橢圓",
+ "mode_path": "路徑工具",
+ "mode_shapelib": "Shape library",
+ "mode_text": "文字工具",
+ "mode_image": "圖像工具",
+ "mode_zoom": "縮放工具",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "取消復原",
+ "redo": "復原",
+ "tool_source": "編輯SVG原始碼",
+ "wireframe_mode": "框線模式(只瀏覽線條)",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "群組",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "轉換成路徑",
+ "reorient_path": "調整路徑",
+ "ungroup": "取消群組",
+ "docprops": "文件屬性",
+ "imagelib": "Image Library",
+ "move_bottom": "移至底部",
+ "move_top": "移動到頂部",
+ "node_clone": "增加節點",
+ "node_delete": "刪除節點",
+ "node_link": "將控制點連起來",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "保存",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "刪除": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"圖層",
+ "layers": "Layers",
+ "del": "刪除圖層",
+ "move_down": "向下移動圖層",
+ "new": "新增圖層",
+ "rename": "重新命名圖層",
+ "move_up": "向上移動圖層",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "移動物件到:",
+ "move_selected": "移動被點選的物件其他圖層"
+ },
+ config: {
+ "image_props": "圖片屬性",
+ "doc_title": "標題",
+ "doc_dims": "畫布大小",
+ "included_images": "包含圖像",
+ "image_opt_embed": "內嵌資料 (本地端檔案)",
+ "image_opt_ref": "使用檔案參照",
+ "editor_prefs": "編輯器屬性",
+ "icon_size": "圖示大小",
+ "language": "語言",
+ "background": "編輯器背景",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "注意: 編輯器背景不會和圖像一起儲存",
+ "icon_large": "大",
+ "icon_medium": "中",
+ "icon_small": "小",
+ "icon_xlarge": "特大",
+ "select_predefined": "使用預設值:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"數值給定錯誤",
+ "noContentToFitTo":"找不到符合的內容",
+ "dupeLayerName":"喔不!已經有另一個同樣名稱的圖層了!",
+ "enterUniqueLayerName":"請輸入一個名稱不重複的",
+ "enterNewLayerName":"請輸入新圖層的名稱",
+ "layerHasThatName":"圖層本來就是這個名稱(抱怨)",
+ "QmoveElemsToLayer":"要搬移所選取的物件到'%s'層嗎?",
+ "QwantToClear":"要清空圖像嗎?\n這會順便清空你的回復紀錄!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"SVG原始碼解析錯誤\n要回復到原本的SVG原始碼嗎?",
+ "QignoreSourceChanges":"要忽略對SVG原始碼的更動嗎?",
+ "featNotSupported":"未提供此功能",
+ "enterNewImgURL":"輸入新的圖片網址",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/.svn/text-base/locale.js.svn-base b/files_svgedit/svg-edit/locale/.svn/text-base/locale.js.svn-base
new file mode 100644
index 000000000..9538905ee
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/.svn/text-base/locale.js.svn-base
@@ -0,0 +1,320 @@
+/*
+ * Localizing script for SVG-edit UI
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Narendra Sisodya
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+// Dependencies
+// 1) jQuery
+// 2) svgcanvas.js
+// 3) svg-editor.js
+
+var svgEditor = (function($, Editor) {
+
+ var lang_param;
+
+ function setStrings(type, obj, ids) {
+ // Root element to look for element from
+ var parent = $('#svg_editor').parent();
+ for(var sel in obj) {
+ var val = obj[sel];
+ if(!val) console.log(sel);
+
+ if(ids) sel = '#' + sel;
+ var $elem = parent.find(sel);
+ if($elem.length) {
+ var elem = parent.find(sel)[0];
+
+ switch ( type ) {
+ case 'content':
+ for(var i = 0; i < elem.childNodes.length; i++) {
+ var node = elem.childNodes[i];
+ if(node.nodeType === 3 && node.textContent.replace(/\s/g,'')) {
+ node.textContent = val;
+ break;
+ }
+ }
+ break;
+
+ case 'title':
+ elem.title = val;
+ break;
+ }
+
+
+ } else {
+ console.log('Missing: ' + sel);
+ }
+ }
+ }
+
+ Editor.readLang = function(langData) {
+ var more = Editor.canvas.runExtensions("addlangData", lang_param, true);
+ $.each(more, function(i, m) {
+ if(m.data) {
+ langData = $.merge(langData, m.data);
+ }
+ });
+
+ // Old locale file, do nothing for now.
+ if(!langData.tools) return;
+
+ var tools = langData.tools,
+ misc = langData.misc,
+ properties = langData.properties,
+ config = langData.config,
+ layers = langData.layers,
+ common = langData.common,
+ ui = langData.ui;
+
+ setStrings('content', {
+ copyrightLabel: misc.powered_by,
+ curve_segments: properties.curve_segments,
+ fitToContent: tools.fitToContent,
+ fit_to_all: tools.fit_to_all,
+ fit_to_canvas: tools.fit_to_canvas,
+ fit_to_layer_content: tools.fit_to_layer_content,
+ fit_to_sel: tools.fit_to_sel,
+
+ icon_large: config.icon_large,
+ icon_medium: config.icon_medium,
+ icon_small: config.icon_small,
+ icon_xlarge: config.icon_xlarge,
+ image_opt_embed: config.image_opt_embed,
+ image_opt_ref: config.image_opt_ref,
+ includedImages: config.included_images,
+
+ largest_object: tools.largest_object,
+
+ layersLabel: layers.layers,
+ page: tools.page,
+ relativeToLabel: tools.relativeTo,
+ selLayerLabel: layers.move_elems_to,
+ selectedPredefined: config.select_predefined,
+
+ selected_objects: tools.selected_objects,
+ smallest_object: tools.smallest_object,
+ straight_segments: properties.straight_segments,
+
+ svginfo_bg_url: config.editor_img_url + ":",
+ svginfo_bg_note: config.editor_bg_note,
+ svginfo_change_background: config.background,
+ svginfo_dim: config.doc_dims,
+ svginfo_editor_prefs: config.editor_prefs,
+ svginfo_height: common.height,
+ svginfo_icons: config.icon_size,
+ svginfo_image_props: config.image_props,
+ svginfo_lang: config.language,
+ svginfo_title: config.doc_title,
+ svginfo_width: common.width,
+
+ tool_docprops_cancel: common.cancel,
+ tool_docprops_save: common.ok,
+
+ tool_source_cancel: common.cancel,
+ tool_source_save: common.ok,
+
+ tool_prefs_cancel: common.cancel,
+ tool_prefs_save: common.ok,
+
+ sidepanel_handle: layers.layers.split('').join(' '),
+
+ tool_clear: tools.new_doc,
+ tool_docprops: tools.docprops,
+ tool_export: tools.export_png,
+ tool_import: tools.import_doc,
+ tool_imagelib: tools.imagelib,
+ tool_open: tools.open_doc,
+ tool_save: tools.save_doc,
+
+ svginfo_units_rulers: config.units_and_rulers,
+ svginfo_rulers_onoff: config.show_rulers,
+ svginfo_unit: config.base_unit,
+
+ svginfo_grid_settings: config.grid,
+ svginfo_snap_onoff: config.snapping_onoff,
+ svginfo_snap_step: config.snapping_stepsize
+ }, true);
+
+ // Shape categories
+ var cats = {};
+ for (var o in langData.shape_cats) {
+ cats['#shape_cats [data-cat="' + o + '"]'] = langData.shape_cats[o];
+ }
+
+ // TODO: Find way to make this run after shapelib ext has loaded
+ setTimeout(function() {
+ setStrings('content', cats);
+ }, 2000);
+
+ // Context menus
+ var opts = {};
+ $.each(['cut','copy','paste', 'paste_in_place', 'delete', 'group', 'ungroup', 'move_front', 'move_up', 'move_down', 'move_back'], function() {
+ opts['#cmenu_canvas a[href="#' + this + '"]'] = tools[this];
+ });
+
+ $.each(['dupe','merge_down', 'merge_all'], function() {
+ opts['#cmenu_layers a[href="#' + this + '"]'] = layers[this];
+ });
+
+ opts['#cmenu_layers a[href="#delete"]'] = layers.del;
+
+ setStrings('content', opts);
+
+ setStrings('title', {
+ align_relative_to: tools.align_relative_to,
+ circle_cx: properties.circle_cx,
+ circle_cy: properties.circle_cy,
+ circle_r: properties.circle_r,
+ cornerRadiusLabel: properties.corner_radius,
+ ellipse_cx: properties.ellipse_cx,
+ ellipse_cy: properties.ellipse_cy,
+ ellipse_rx: properties.ellipse_rx,
+ ellipse_ry: properties.ellipse_ry,
+ fill_color: properties.fill_color,
+ font_family: properties.font_family,
+ idLabel: properties.id,
+ image_height: properties.image_height,
+ image_url: properties.image_url,
+ image_width: properties.image_width,
+ layer_delete: layers.del,
+ layer_down: layers.move_down,
+ layer_new: layers['new'],
+ layer_rename: layers.rename,
+ layer_moreopts: common.more_opts,
+ layer_up: layers.move_up,
+ line_x1: properties.line_x1,
+ line_x2: properties.line_x2,
+ line_y1: properties.line_y1,
+ line_y2: properties.line_y2,
+ linecap_butt: properties.linecap_butt,
+ linecap_round: properties.linecap_round,
+ linecap_square: properties.linecap_square,
+ linejoin_bevel: properties.linejoin_bevel,
+ linejoin_miter: properties.linejoin_miter,
+ linejoin_round: properties.linejoin_round,
+ main_icon: tools.main_menu,
+ mode_connect: tools.mode_connect,
+ tools_shapelib_show: tools.mode_shapelib,
+ palette: ui.palette_info,
+ zoom_panel: ui.zoom_level,
+ path_node_x: properties.node_x,
+ path_node_y: properties.node_y,
+ rect_height_tool: properties.rect_height,
+ rect_width_tool: properties.rect_width,
+ seg_type: properties.seg_type,
+ selLayerNames: layers.move_selected,
+ selected_x: properties.pos_x,
+ selected_y: properties.pos_y,
+ stroke_color: properties.stroke_color,
+ stroke_style: properties.stroke_style,
+ stroke_width: properties.stroke_width,
+ svginfo_title: config.doc_title,
+ text: properties.text_contents,
+ toggle_stroke_tools: ui.toggle_stroke_tools,
+ tool_add_subpath: tools.add_subpath,
+ tool_alignbottom: tools.align_bottom,
+ tool_aligncenter: tools.align_center,
+ tool_alignleft: tools.align_left,
+ tool_alignmiddle: tools.align_middle,
+ tool_alignright: tools.align_right,
+ tool_aligntop: tools.align_top,
+ tool_angle: properties.angle,
+ tool_blur: properties.blur,
+ tool_bold: properties.bold,
+ tool_circle: tools.mode_circle,
+ tool_clone: tools.clone,
+ tool_clone_multi: tools.clone,
+ tool_delete: tools.del,
+ tool_delete_multi: tools.del,
+ tool_ellipse: tools.mode_ellipse,
+ tool_eyedropper: tools.mode_eyedropper,
+ tool_fhellipse: tools.mode_fhellipse,
+ tool_fhpath: tools.mode_fhpath,
+ tool_fhrect: tools.mode_fhrect,
+ tool_font_size: properties.font_size,
+ tool_group: tools.group,
+ tool_make_link: tools.make_link,
+ tool_link_url: tools.set_link_url,
+ tool_image: tools.mode_image,
+ tool_italic: properties.italic,
+ tool_line: tools.mode_line,
+ tool_move_bottom: tools.move_bottom,
+ tool_move_top: tools.move_top,
+ tool_node_clone: tools.node_clone,
+ tool_node_delete: tools.node_delete,
+ tool_node_link: tools.node_link,
+ tool_opacity: properties.opacity,
+ tool_openclose_path: tools.openclose_path,
+ tool_path: tools.mode_path,
+ tool_position: tools.align_to_page,
+ tool_rect: tools.mode_rect,
+ tool_redo: tools.redo,
+ tool_reorient: tools.reorient_path,
+ tool_select: tools.mode_select,
+ tool_source: tools.source_save,
+ tool_square: tools.mode_square,
+ tool_text: tools.mode_text,
+ tool_topath: tools.to_path,
+ tool_undo: tools.undo,
+ tool_ungroup: tools.ungroup,
+ tool_wireframe: tools.wireframe_mode,
+ view_grid: tools.toggle_grid,
+ tool_zoom: tools.mode_zoom,
+ url_notice: tools.no_embed
+
+ }
+ , true);
+
+ Editor.setLang(lang_param, langData);
+ }
+
+ Editor.putLocale = function(given_param, good_langs){
+
+ if(given_param) {
+ lang_param = given_param;
+ } else {
+ lang_param = $.pref('lang');
+ if(!lang_param) {
+ if (navigator.userLanguage) // Explorer
+ lang_param = navigator.userLanguage;
+ else if (navigator.language) // FF, Opera, ...
+ lang_param = navigator.language;
+ if (lang_param == "")
+ return;
+ }
+
+ console.log('Lang: ' + lang_param);
+
+ // Set to English if language is not in list of good langs
+ if($.inArray(lang_param, good_langs) == -1 && lang_param !== 'test') {
+ lang_param = "en";
+ }
+
+ // don't bother on first run if language is English
+ if(lang_param.indexOf("en") == 0) return;
+
+ }
+
+ var conf = Editor.curConfig;
+
+ var url = conf.langPath + "lang." + lang_param + ".js";
+
+ $.getScript(url, function(d) {
+ // Fails locally in Chrome 5+
+ if(!d) {
+ var s = document.createElement('script');
+ s.src = url;
+ document.querySelector('head').appendChild(s);
+ }
+ });
+
+ };
+
+ return Editor;
+}(jQuery, svgEditor));
+
diff --git a/files_svgedit/svg-edit/locale/README.txt b/files_svgedit/svg-edit/locale/README.txt
new file mode 100644
index 000000000..9d6ac5882
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/README.txt
@@ -0,0 +1,17 @@
+This directory holds JSON files that translate the UI strings in SVG-edit.
+Initial translations were done by Narendra Sisodiya putting the English
+strings through the Google Translation API. Humans will need to take these
+automated translations and ensure they make sense.
+
+See AUTHORS for the translations credits.
+
+Languages Already Translated By Humans:
+ * lang.cs.js
+ * lang.de.js
+ * lang.en.js
+ * lang.es.js
+ * lang.fr.js
+ * lang.ja.js
+ * lang.nl.js
+ * lang.ro.js
+ * lang.sk.js
diff --git a/files_svgedit/svg-edit/locale/lang.af.js b/files_svgedit/svg-edit/locale/lang.af.js
new file mode 100644
index 000000000..37d8cb2db
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.af.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "af",
+ dir : "ltr",
+ common: {
+ "ok": "Spaar",
+ "cancel": "Annuleer",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik om te verander vul kleur, verskuiwing klik om &#39;n beroerte kleur verander",
+ "zoom_level": "Change zoom vlak",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Verandering vul kleur",
+ "stroke_color": "Verandering beroerte kleur",
+ "stroke_style": "Verandering beroerte dash styl",
+ "stroke_width": "Verandering beroerte breedte",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Verandering rotasie-hoek",
+ "blur": "Change gaussian blur value",
+ "opacity": "Verander geselekteerde item opaciteit",
+ "circle_cx": "Verandering sirkel se cx koördineer",
+ "circle_cy": "Verandering sirkel se cy koördineer",
+ "circle_r": "Verandering sirkel se radius",
+ "ellipse_cx": "Verandering ellips se cx koördineer",
+ "ellipse_cy": "Verander ellips se cy koördineer",
+ "ellipse_rx": "Verandering ellips se x radius",
+ "ellipse_ry": "Verander ellips se j radius",
+ "line_x1": "Verandering lyn se vertrek x koördinaat",
+ "line_x2": "Verandering lyn se eindig x koördinaat",
+ "line_y1": "Verandering lyn se vertrek y koördinaat",
+ "line_y2": "Verandering lyn se eindig y koördinaat",
+ "rect_height": "Verandering reghoek hoogte",
+ "rect_width": "Verandering reghoek breedte",
+ "corner_radius": "Verandering Rechthoek Corner Radius",
+ "image_width": "Verander prent breedte",
+ "image_height": "Verandering prent hoogte",
+ "image_url": "URL verander",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Verander teks inhoud",
+ "font_family": "Lettertipe verander Familie",
+ "font_size": "Verandering Lettertipe Grootte",
+ "bold": "Vetgedrukte teks",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Verander agtergrondkleur / opaciteit",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Pas na inhoud",
+ "fit_to_all": "Passing tot al inhoud",
+ "fit_to_canvas": "Passing tot doek",
+ "fit_to_layer_content": "Passing tot laag inhoud",
+ "fit_to_sel": "Passing tot seleksie",
+ "align_relative_to": "Align in verhouding tot ...",
+ "relativeTo": "relatief tot:",
+ "bladsy": "bladsy",
+ "largest_object": "grootste voorwerp",
+ "selected_objects": "verkose voorwerpe",
+ "smallest_object": "kleinste voorwerp",
+ "new_doc": "Nuwe Beeld",
+ "open_doc": "Open Beeld",
+ "export_png": "Export as PNG",
+ "save_doc": "Slaan Beeld",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Rig Middel",
+ "align_left": "Links Regterkant",
+ "align_middle": "Align Midde",
+ "align_right": "Lijn regs uit",
+ "align_top": "Align Top",
+ "mode_select": "Select Gereedschap",
+ "mode_fhpath": "Potlood tool",
+ "mode_line": "Lyn Gereedskap",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-hand Rectangle",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Sirkel",
+ "mode_fhellipse": "Gratis-Hand Ellips",
+ "mode_path": "Poli Gereedskap",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Gereedskap",
+ "mode_image": "Image Gereedskap",
+ "mode_zoom": "Klik op die Gereedskap",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Boontoe",
+ "redo": "Oordoen",
+ "tool_source": "Wysig Bron",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Groep Elemente",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elemente",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Skuif na Bottom",
+ "move_top": "Skuif na bo",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Spaar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Verwyder Laag",
+ "move_down": "Beweeg afbreek Down",
+ "new": "Nuwe Layer",
+ "rename": "Rename Layer",
+ "move_up": "Beweeg afbreek Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Doek Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Kies gedefinieerde:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ar.js b/files_svgedit/svg-edit/locale/lang.ar.js
new file mode 100644
index 000000000..d1076f1e0
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ar.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ar",
+ dir : "ltr",
+ common: {
+ "ok": "حفظ",
+ "cancel": "إلغاء",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "انقر لتغيير لون التعبئة ، تحولا مزدوجا فوق لتغيير لون السكتة الدماغية",
+ "zoom_level": "تغيير مستوى التكبير",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "تغير لون التعبئة",
+ "stroke_color": "تغير لون السكتة الدماغية",
+ "stroke_style": "تغيير نمط السكتة الدماغية اندفاعة",
+ "stroke_width": "تغيير عرض السكتة الدماغية",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "تغيير زاوية الدوران",
+ "blur": "Change gaussian blur value",
+ "opacity": "تغيير مختارة غموض البند",
+ "circle_cx": "دائرة التغيير لتنسيق cx",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "التغيير في دائرة نصف قطرها",
+ "ellipse_cx": "تغيير شكل البيضاوي cx تنسيق",
+ "ellipse_cy": "تغيير شكل البيضاوي قبرصي تنسيق",
+ "ellipse_rx": "تغيير شكل البيضاوي خ نصف قطرها",
+ "ellipse_ry": "تغيير القطع الناقص في دائرة نصف قطرها ذ",
+ "line_x1": "تغيير الخط لبدء تنسيق خ",
+ "line_x2": "تغيير الخط لانهاء خ تنسيق",
+ "line_y1": "تغيير الخط لبدء تنسيق ذ",
+ "line_y2": "تغيير الخط لإنهاء تنسيق ذ",
+ "rect_height": "تغيير المستطيل الارتفاع",
+ "rect_width": "تغيير عرض المستطيل",
+ "corner_radius": "تغيير مستطيل ركن الشعاع",
+ "image_width": "تغيير صورة العرض",
+ "image_height": "تغيير ارتفاع الصورة",
+ "image_url": "تغيير العنوان",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "تغيير محتويات النص",
+ "font_family": "تغيير الخط الأسرة",
+ "font_size": "تغيير حجم الخط",
+ "bold": "نص جريء",
+ "italic": "مائل نص"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "تغير لون الخلفية / غموض",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "لائقا للمحتوى",
+ "fit_to_all": "يصلح لجميع المحتويات",
+ "fit_to_canvas": "يصلح لوحة زيتية على قماش",
+ "fit_to_layer_content": "يصلح لطبقة المحتوى",
+ "fit_to_sel": "يصلح لاختيار",
+ "align_relative_to": "محاذاة النسبي ل ...",
+ "relativeTo": "بالنسبة إلى:",
+ "الصفحة": "الصفحة",
+ "largest_object": "أكبر كائن",
+ "selected_objects": "انتخب الأجسام",
+ "smallest_object": "أصغر كائن",
+ "new_doc": "صورة جديدة",
+ "open_doc": "فتح الصورة",
+ "export_png": "Export as PNG",
+ "save_doc": "حفظ صورة",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "محاذاة القاع",
+ "align_center": "مركز محاذاة",
+ "align_left": "محاذاة إلى اليسار",
+ "align_middle": "محاذاة الأوسط",
+ "align_right": "محاذاة إلى اليمين",
+ "align_top": "محاذاة الأعلى",
+ "mode_select": "اختر أداة",
+ "mode_fhpath": "أداة قلم رصاص",
+ "mode_line": "خط أداة",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "القطع الناقص",
+ "mode_circle": "دائرة",
+ "mode_fhellipse": "اليد الحرة البيضوي",
+ "mode_path": "بولي أداة",
+ "mode_shapelib": "Shape library",
+ "mode_text": "النص أداة",
+ "mode_image": "الصورة أداة",
+ "mode_zoom": "أداة تكبير",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "التراجع",
+ "redo": "إعادته",
+ "tool_source": "عدل المصدر",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "مجموعة عناصر",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "فك تجميع عناصر",
+ "docprops": "خصائص المستند",
+ "imagelib": "Image Library",
+ "move_bottom": "الانتقال إلى أسفل",
+ "move_top": "الانتقال إلى أعلى",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "حفظ",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "حذف طبقة",
+ "move_down": "تحرك لأسفل طبقة",
+ "new": "طبقة جديدة",
+ "rename": "تسمية الطبقة",
+ "move_up": "تحرك لأعلى طبقة",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "حدد سلفا:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.az.js b/files_svgedit/svg-edit/locale/lang.az.js
new file mode 100644
index 000000000..c4350a29d
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.az.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "az",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.be.js b/files_svgedit/svg-edit/locale/lang.be.js
new file mode 100644
index 000000000..6c201e1fc
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.be.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "be",
+ dir : "ltr",
+ common: {
+ "ok": "Захаваць",
+ "cancel": "Адмена",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Націсніце для змены колеру залівання, Shift-Click змяніць обводка",
+ "zoom_level": "Змяненне маштабу",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Змяненне колеру залівання",
+ "stroke_color": "Змяненне колеру інсульт",
+ "stroke_style": "Змяненне стылю інсульт працяжнік",
+ "stroke_width": "Змены шырыня штрых",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Змены вугла павароту",
+ "blur": "Change gaussian blur value",
+ "opacity": "Старонка абранага пункта непразрыстасці",
+ "circle_cx": "CX змене круга каардынаты",
+ "circle_cy": "Змены гуртка CY каардынаты",
+ "circle_r": "Старонка круга&#39;s радыус",
+ "ellipse_cx": "Змены эліпса CX каардынаты",
+ "ellipse_cy": "Змены эліпса CY каардынаты",
+ "ellipse_rx": "Х змяненні эліпса радыюсам",
+ "ellipse_ry": "Змены у эліпса радыюсам",
+ "line_x1": "Змены лінія пачынае каардынаты х",
+ "line_x2": "Змяненне за перыяд, скончыўся лінія каардынаты х",
+ "line_y1": "Змены лінія пачынае Y каардынаты",
+ "line_y2": "Змяненне за перыяд, скончыўся лінія Y каардынаты",
+ "rect_height": "Змены прастакутнік вышынёй",
+ "rect_width": "Змяненне шырыні прамавугольніка",
+ "corner_radius": "Змены прастакутнік Corner Radius",
+ "image_width": "Змены шырыня выявы",
+ "image_height": "Змена вышыні выявы",
+ "image_url": "Змяніць URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Змяненне зместу тэксту",
+ "font_family": "Змены Сямейства шрыфтоў",
+ "font_size": "Змяніць памер шрыфта",
+ "bold": "Тоўсты тэкст",
+ "italic": "Нахілены тэкст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Змяненне колеру фону / непразрыстасць",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Па памеры ўтрымання",
+ "fit_to_all": "Па памеру ўсе змесціва",
+ "fit_to_canvas": "Памер палатна",
+ "fit_to_layer_content": "По размеру слой ўтрымання",
+ "fit_to_sel": "Выбар памеру",
+ "align_relative_to": "Выраўнаваць па дачыненні да ...",
+ "relativeTo": "па параўнанні з:",
+ "старонка": "старонка",
+ "largest_object": "найбуйнейшы аб&#39;ект",
+ "selected_objects": "выбранымі аб&#39;ектамі",
+ "smallest_object": "маленькі аб&#39;ект",
+ "new_doc": "Новае выява",
+ "open_doc": "Адкрыць выява",
+ "export_png": "Export as PNG",
+ "save_doc": "Захаваць малюнак",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Лінаваць па ніжнім краю",
+ "align_center": "Лінаваць па цэнтру",
+ "align_left": "Па левым краю",
+ "align_middle": "Выраўнаваць Блізкага",
+ "align_right": "Па правым краю",
+ "align_top": "Лінаваць па верхнім краю",
+ "mode_select": "Выберыце інструмент",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Свабоднай рукі Прастакутнік",
+ "mode_ellipse": "Эліпс",
+ "mode_circle": "Круг",
+ "mode_fhellipse": "Свабоднай рукі Эліпс",
+ "mode_path": "Poly Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Тэкст Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Адмяніць",
+ "redo": "Паўтор",
+ "tool_source": "Змяніць зыходны",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група элементаў",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Элементы Разгруппировать",
+ "docprops": "Уласцівасці дакумента",
+ "imagelib": "Image Library",
+ "move_bottom": "Перамясціць уніз",
+ "move_top": "Перамясціць угару",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Захаваць",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Выдаліць слой",
+ "move_down": "Перамясціць слой на",
+ "new": "Новы слой",
+ "rename": "Перайменаваць Слой",
+ "move_up": "Перамяшчэнне слоя да",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Выберыце прадвызначэньні:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.bg.js b/files_svgedit/svg-edit/locale/lang.bg.js
new file mode 100644
index 000000000..5b58f5683
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.bg.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "bg",
+ dir : "ltr",
+ common: {
+ "ok": "Спасявам",
+ "cancel": "Отказ",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Кликнете, за да промени попълнете цвят, на смени, кликнете да променят цвета си удар",
+ "zoom_level": "Промяна на ниво на мащабиране",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Промяна попълнете цвят",
+ "stroke_color": "Промяна на инсулт цвят",
+ "stroke_style": "Промяна на стила удар тире",
+ "stroke_width": "Промяна на ширината инсулт",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Промяна ъгъл на завъртане",
+ "blur": "Change gaussian blur value",
+ "opacity": "Промяна на избрания елемент непрозрачност",
+ "circle_cx": "CX Промяна кръг на координатната",
+ "circle_cy": "Промяна кръг&#39;s CY координира",
+ "circle_r": "Промяна кръг радиус",
+ "ellipse_cx": "Промяна на елипса&#39;s CX координира",
+ "ellipse_cy": "Промяна на елипса&#39;s CY координира",
+ "ellipse_rx": "Промяна на елипса&#39;s X радиус",
+ "ellipse_ry": "Промяна на елипса&#39;s Y радиус",
+ "line_x1": "Промяна на линия, започваща х координира",
+ "line_x2": "Промяна на линията приключва х координира",
+ "line_y1": "Промяна линия, започваща Y координира",
+ "line_y2": "Промяна на линията приключва Y координира",
+ "rect_height": "Промяна на правоъгълник височина",
+ "rect_width": "Промяна на правоъгълник ширина",
+ "corner_radius": "Промяна на правоъгълник Corner Radius",
+ "image_width": "Промяна на изображението ширина",
+ "image_height": "Промяна на изображението височина",
+ "image_url": "Промяна на URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Промяна на текст съдържание",
+ "font_family": "Промяна на шрифта Семейство",
+ "font_size": "Промени размера на буквите",
+ "bold": "Получер текст",
+ "italic": "Курсив текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Промяна на цвета на фона / непрозрачност",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit към съдържание",
+ "fit_to_all": "Побери цялото съдържание",
+ "fit_to_canvas": "Fit на платно",
+ "fit_to_layer_content": "Fit да слой съдържание",
+ "fit_to_sel": "Fit за подбор",
+ "align_relative_to": "Привеждане в сравнение с ...",
+ "relativeTo": "в сравнение с:",
+ "страница": "страница",
+ "largest_object": "най-големият обект",
+ "selected_objects": "избраните обекти",
+ "smallest_object": "най-малката обект",
+ "new_doc": "Ню Имидж",
+ "open_doc": "Отворете изображението",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Привеждане Отдолу",
+ "align_center": "Подравняване в средата",
+ "align_left": "Подравняване вляво",
+ "align_middle": "Привеждане в Близкия",
+ "align_right": "Подравняване надясно",
+ "align_top": "Привеждане Топ",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Свободен Употребявани правоъгълник",
+ "mode_ellipse": "Елипса",
+ "mode_circle": "Кръгът",
+ "mode_fhellipse": "Свободен Употребявани Елипса",
+ "mode_path": "Поли Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст Оръдие",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Отмени",
+ "redo": "Възстановяване",
+ "tool_source": "Редактиране Източник",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група Елементи",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Разгрупирай Елементи",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Премести надолу",
+ "move_top": "Премести в началото",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Спасявам",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Изтриване на слой",
+ "move_down": "Move слой надолу",
+ "new": "Нов слой",
+ "rename": "Преименуване Layer",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Изберете предварително:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ca.js b/files_svgedit/svg-edit/locale/lang.ca.js
new file mode 100644
index 000000000..d08a60dd7
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ca.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ca",
+ dir : "ltr",
+ common: {
+ "ok": "Salvar",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Feu clic per canviar el color de farciment, shift-clic per canviar el color del traç",
+ "zoom_level": "Canviar el nivell de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Canviar el color de farciment",
+ "stroke_color": "Canviar el color del traç",
+ "stroke_style": "Canviar estil de traç guió",
+ "stroke_width": "Canviar l&#39;amplada del traç",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Canviar l&#39;angle de rotació",
+ "blur": "Change gaussian blur value",
+ "opacity": "Canviar la opacitat tema seleccionat",
+ "circle_cx": "CX cercle Canvi de coordenades",
+ "circle_cy": "Cercle Canvi CY coordinar",
+ "circle_r": "Ràdio de cercle Canvi",
+ "ellipse_cx": "Canviar lipse CX coordinar",
+ "ellipse_cy": "Lipse Canvi CY coordinar",
+ "ellipse_rx": "Ràdio x lipse Canvi",
+ "ellipse_ry": "Ràdio i lipse Canvi",
+ "line_x1": "Canviar la línia de partida de la coordenada x",
+ "line_x2": "Canviar la línia d&#39;hores de coordenada x",
+ "line_y1": "Canviar la línia de partida i de coordinar",
+ "line_y2": "Canviar la línia d&#39;hores de coordenada",
+ "rect_height": "Rectangle d&#39;alçada Canvi",
+ "rect_width": "Ample rectangle Canvi",
+ "corner_radius": "Canviar Rectangle Corner Radius",
+ "image_width": "Amplada de la imatge Canvi",
+ "image_height": "Canviar l&#39;altura de la imatge",
+ "image_url": "Canviar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Contingut del text",
+ "font_family": "Canviar la font Família",
+ "font_size": "Change Font Size",
+ "bold": "Text en negreta",
+ "italic": "Text en cursiva"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Color de fons / opacitat",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Ajustar al contingut",
+ "fit_to_all": "Ajustar a tot el contingut",
+ "fit_to_canvas": "Ajustar a la lona",
+ "fit_to_layer_content": "Ajustar al contingut de la capa d&#39;",
+ "fit_to_sel": "Ajustar a la selecció",
+ "align_relative_to": "Alinear pel que fa a ...",
+ "relativeTo": "en relació amb:",
+ "Pàgina": "Pàgina",
+ "largest_object": "objecte més gran",
+ "selected_objects": "objectes escollits",
+ "smallest_object": "objecte més petit",
+ "new_doc": "Nova imatge",
+ "open_doc": "Obrir imatge",
+ "export_png": "Export as PNG",
+ "save_doc": "Guardar imatge",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinear baix",
+ "align_center": "Alinear al centre",
+ "align_left": "Alinear a l&#39;esquerra",
+ "align_middle": "Alinear Medi",
+ "align_right": "Alinear a la dreta",
+ "align_top": "Alinear a dalt",
+ "mode_select": "Eina de selecció",
+ "mode_fhpath": "Eina Llapis",
+ "mode_line": "L&#39;eina",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Lipse",
+ "mode_circle": "Cercle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Eina de text",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Desfés",
+ "redo": "Refer",
+ "tool_source": "Font Edita",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elements de Grup de",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Desagrupar elements",
+ "docprops": "Propietats del document",
+ "imagelib": "Image Library",
+ "move_bottom": "Mou al final",
+ "move_top": "Mou al principi",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Salvar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Eliminar capa",
+ "move_down": "Mou la capa de Down",
+ "new": "Nova capa",
+ "rename": "Canvieu el nom de la capa",
+ "move_up": "Mou la capa Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Seleccioneu predefinides:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.cs.js b/files_svgedit/svg-edit/locale/lang.cs.js
new file mode 100644
index 000000000..e39f8627e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.cs.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "cs",
+ dir : "ltr",
+ common: {
+ "ok": "Uložit",
+ "cancel": "Storno",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "šipka dolů",
+ "key_up": "šipka nahoru",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Běží na"
+ },
+ ui: {
+ "toggle_stroke_tools": "Zobrazit/schovat více možností",
+ "palette_info": "Kliknutím změníte barvu výplně, kliknutím současně s klávesou shift změníte barvu čáry",
+ "zoom_level": "Změna přiblížení",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Změnit ID elementu",
+ "fill_color": "Změnit barvu výplně",
+ "stroke_color": "Změnit barvu čáry",
+ "stroke_style": "Změnit styl čáry",
+ "stroke_width": "Změnit šířku čáry",
+ "pos_x": "Změnit souřadnici X",
+ "pos_y": "Změnit souřadnici Y",
+ "linecap_butt": "Konec úsečky: přesný",
+ "linecap_round": "Konec úsečky: zaoblený",
+ "linecap_square": "Konec úsečky: s čtvercovým přesahem",
+ "linejoin_bevel": "Styl napojení úseček: zkosené",
+ "linejoin_miter": "Styl napojení úseček: ostré",
+ "linejoin_round": "Styl napojení úseček: oblé",
+ "angle": "Změnit úhel natočení",
+ "blur": "Změnit rozostření",
+ "opacity": "Změnit průhlednost objektů",
+ "circle_cx": "Změnit souřadnici X středu kružnice",
+ "circle_cy": "Změnit souřadnici Y středu kružnice",
+ "circle_r": "Změnit poloměr kružnice",
+ "ellipse_cx": "Změnit souřadnici X středu elipsy",
+ "ellipse_cy": "Změnit souřadnici Y středu elipsy",
+ "ellipse_rx": "Změnit poloměr X elipsy",
+ "ellipse_ry": "Změnit poloměr Y elipsy",
+ "line_x1": "Změnit počáteční souřadnici X úsečky",
+ "line_x2": "Změnit koncovou souřadnici X úsečky",
+ "line_y1": "Změnit počáteční souřadnici Y úsečky",
+ "line_y2": "Změnit koncovou souřadnici X úsečky",
+ "rect_height": "Změnit výšku obdélníku",
+ "rect_width": "Změnit šířku obdélníku",
+ "corner_radius": "Změnit zaoblení obdélníku",
+ "image_width": "Změnit šířku dokumentu",
+ "image_height": "Změnit výšku dokumentu",
+ "image_url": "Změnit adresu URL",
+ "node_x": "Změnit souřadnici X uzlu",
+ "node_y": "Změnit souřadnici Y uzlu",
+ "seg_type": "Změnit typ segmentu",
+ "straight_segments": "úsečka",
+ "curve_segments": "křivka",
+ "text_contents": "Změnit text",
+ "font_family": "Změnit font",
+ "font_size": "Změnit velikost písma",
+ "bold": "Tučně",
+ "italic": "Kurzíva"
+ },
+ tools: {
+ "main_menu": "Hlavní menu",
+ "bkgnd_color_opac": "Změnit barvu a průhlednost pozadí",
+ "connector_no_arrow": "Bez šipky",
+ "fitToContent": "přizpůsobit obsahu",
+ "fit_to_all": "Přizpůsobit veškerému obsahu",
+ "fit_to_canvas": "Přizpůsobit stránce",
+ "fit_to_layer_content": "Přizpůsobit obsahu vrstvy",
+ "fit_to_sel": "Přizpůsobit výběru",
+ "align_relative_to": "Zarovnat relativně",
+ "relativeTo": "relatativně k:",
+ "stránce": "stránce",
+ "largest_object": "největšímu objektu",
+ "selected_objects": "zvoleným objektům",
+ "smallest_object": "nejmenšímu objektu",
+ "new_doc": "Nový dokument",
+ "open_doc": "Otevřít dokument",
+ "export_png": "Exportovat jako PNG",
+ "save_doc": "Uložit dokument",
+ "import_doc": "Importovat SVG",
+ "align_to_page": "Zarovnat element na stránku",
+ "align_bottom": "Zarovnat dolů",
+ "align_center": "Zarovnat nastřed",
+ "align_left": "Zarovnat doleva",
+ "align_middle": "Zarovnat nastřed",
+ "align_right": "Zarovnat doprava",
+ "align_top": "Zarovnat nahoru",
+ "mode_select": "Výběr a transformace objektů",
+ "mode_fhpath": "Kresba od ruky",
+ "mode_line": "Úsečka",
+ "mode_connect": "Spojit dva objekty",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Obdélník volnou rukou",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Kružnice",
+ "mode_fhellipse": "Elipsa volnou rukou",
+ "mode_path": "Křivka",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text",
+ "mode_image": "Obrázek",
+ "mode_zoom": "Přiblížení",
+ "mode_eyedropper": "Kapátko",
+ "no_embed": "POZOR: Obrázek nelze uložit s dokumentem. Bude zobrazován z adresáře, kde se nyní nachází.",
+ "undo": "Zpět",
+ "redo": "Znovu",
+ "tool_source": "Upravovat SVG kód",
+ "wireframe_mode": "Zobrazit jen kostru",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Seskupit objekty",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Objekt na křivku",
+ "reorient_path": "Změna orientace křivky",
+ "ungroup": "Zrušit seskupení",
+ "docprops": "Vlastnosti dokumentu",
+ "imagelib": "Image Library",
+ "move_bottom": "Vrstvu úplně dospodu",
+ "move_top": "Vrstvu úplně nahoru",
+ "node_clone": "Vložit nový uzel",
+ "node_delete": "Ostranit uzel",
+ "node_link": "Provázat ovládací body uzlu",
+ "add_subpath": "Přidat další součást křivky",
+ "openclose_path": "Otevřít/zavřít součást křivky",
+ "source_save": "Uložit",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Vrstva",
+ "layers": "Layers",
+ "del": "Odstranit vrstvu",
+ "move_down": "Přesunout vrstvu níž",
+ "new": "Přidat vrstvu",
+ "rename": "Přejmenovat vrstvu",
+ "move_up": "Přesunout vrstvu výš",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Přesunout objekty do:",
+ "move_selected": "Přesunout objekty do jiné vrstvy"
+ },
+ config: {
+ "image_props": "Vlastnosti dokumentu",
+ "doc_title": "Název",
+ "doc_dims": "Vlastní velikost",
+ "included_images": "Vložené obrázky",
+ "image_opt_embed": "Vkládat do dokumentu",
+ "image_opt_ref": "Jen odkazem",
+ "editor_prefs": "Nastavení editoru",
+ "icon_size": "Velikost ikon",
+ "language": "Jazyk",
+ "background": "Obrázek v pozadí editoru",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Pozor: obrázek v pozadí nebude uložen jako součást dokumentu.",
+ "icon_large": "velké",
+ "icon_medium": "střední",
+ "icon_small": "malé",
+ "icon_xlarge": "největší",
+ "select_predefined": "vybrat předdefinovaný:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Nevhodná hodnota",
+ "noContentToFitTo":"Vyberte oblast pro přizpůsobení",
+ "dupeLayerName":"Taková vrstva už bohužel existuje",
+ "enterUniqueLayerName":"Zadejte prosím jedinečné jméno pro vrstvu",
+ "enterNewLayerName":"Zadejte prosím jméno pro novou vrstvu",
+ "layerHasThatName":"Vrstva už se tak jmenuje",
+ "QmoveElemsToLayer":"Opravdu chcete přesunout vybrané objekty do vrstvy '%s'?",
+ "QwantToClear":"Opravdu chcete smazat současný dokument?\nHistorie změn bude také smazána.",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Chyba v parsování zdrojového kódu SVG.\nChcete se vrátit k původnímu?",
+ "QignoreSourceChanges":"Opravdu chcete stornovat změny provedené v SVG kódu?",
+ "featNotSupported":"Tato vlastnost ještě není k dispozici",
+ "enterNewImgURL":"Vložte adresu URL, na které se nachází vkládaný obrázek",
+ "defsFailOnSave": "POZOR: Kvůli nedokonalosti Vašeho prohlížeče se mohou některé části dokumentu špatně vykreslovat (mohou chybět barevné přechody nebo některé objekty). Po uložení dokumentu by se ale vše mělo zobrazovat správně.",
+ "loadingImage":"Nahrávám obrázek ...",
+ "saveFromBrowser": "Použijte nabídku \"Uložit stránku jako ...\" ve Vašem prohlížeči pro uložení dokumentu do souboru %s.",
+ "noteTheseIssues": "Mohou se vyskytnout následující problémy: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.cy.js b/files_svgedit/svg-edit/locale/lang.cy.js
new file mode 100644
index 000000000..4808073bc
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.cy.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "cy",
+ dir : "ltr",
+ common: {
+ "ok": "Cadw",
+ "cancel": "Canslo",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Cliciwch yma i lenwi newid lliw, sifft-cliciwch i newid lliw strôc",
+ "zoom_level": "Newid lefel chwyddo",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Newid lliw llenwi",
+ "stroke_color": "Newid lliw strôc",
+ "stroke_style": "Newid arddull strôc diferyn",
+ "stroke_width": "Lled strôc Newid",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Ongl cylchdro Newid",
+ "blur": "Change gaussian blur value",
+ "opacity": "Newid dewis Didreiddiad eitem",
+ "circle_cx": "CX Newid cylch yn cydlynu",
+ "circle_cy": "Newid cylch&#39;s cy gydgysylltu",
+ "circle_r": "Newid radiws cylch yn",
+ "ellipse_cx": "Newid Ellipse yn CX gydgysylltu",
+ "ellipse_cy": "Newid Ellipse yn cydlynu cy",
+ "ellipse_rx": "Radiws Newid Ellipse&#39;s x",
+ "ellipse_ry": "Radiws Newid Ellipse yn y",
+ "line_x1": "Newid llinell yn cychwyn x gydgysylltu",
+ "line_x2": "Newid llinell yn diweddu x gydgysylltu",
+ "line_y1": "Newid llinell ar y cychwyn yn cydlynu",
+ "line_y2": "Newid llinell yn dod i ben y gydgysylltu",
+ "rect_height": "Uchder petryal Newid",
+ "rect_width": "Lled petryal Newid",
+ "corner_radius": "Newid Hirsgwâr Corner Radiws",
+ "image_width": "Lled delwedd Newid",
+ "image_height": "Uchder delwedd Newid",
+ "image_url": "Newid URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Cynnwys testun Newid",
+ "font_family": "Newid Font Teulu",
+ "font_size": "Newid Maint Ffont",
+ "bold": "Testun Bras",
+ "italic": "Italig Testun"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Newid lliw cefndir / Didreiddiad",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Ffit i Cynnwys",
+ "fit_to_all": "Yn addas i bawb content",
+ "fit_to_canvas": "Ffit i ofyn",
+ "fit_to_layer_content": "Ffit cynnwys haen i",
+ "fit_to_sel": "Yn addas at ddewis",
+ "align_relative_to": "Alinio perthynas i ...",
+ "relativeTo": "cymharol i:",
+ "tudalen": "tudalen",
+ "largest_object": "gwrthrych mwyaf",
+ "selected_objects": "gwrthrychau etholedig",
+ "smallest_object": "lleiaf gwrthrych",
+ "new_doc": "Newydd Delwedd",
+ "open_doc": "Delwedd Agored",
+ "export_png": "Export as PNG",
+ "save_doc": "Cadw Delwedd",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinio Gwaelod",
+ "align_center": "Alinio Center",
+ "align_left": "Alinio Chwith",
+ "align_middle": "Alinio Canol",
+ "align_right": "Alinio Hawl",
+ "align_top": "Alinio Top",
+ "mode_select": "Dewiswch Offer",
+ "mode_fhpath": "Teclyn pensil",
+ "mode_line": "Llinell Offer",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Hand rhad ac am ddim Hirsgwâr",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Cylch",
+ "mode_fhellipse": "Rhad ac am ddim Hand Ellipse",
+ "mode_path": "Offer poly",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Testun Offer",
+ "mode_image": "Offer Delwedd",
+ "mode_zoom": "Offer Chwyddo",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Dadwneud",
+ "redo": "Ail-wneud",
+ "tool_source": "Golygu Ffynhonnell",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elfennau Grŵp",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elfennau Ungroup",
+ "docprops": "Document Eiddo",
+ "imagelib": "Image Library",
+ "move_bottom": "Symud i&#39;r Gwaelod",
+ "move_top": "Symud i&#39;r Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Cadw",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Dileu Haen",
+ "move_down": "Symud Haen i Lawr",
+ "new": "Haen Newydd",
+ "rename": "Ail-enwi Haen",
+ "move_up": "Symud Haen Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Rhagosodol Dewis:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.da.js b/files_svgedit/svg-edit/locale/lang.da.js
new file mode 100644
index 000000000..ae209cdea
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.da.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "da",
+ dir : "ltr",
+ common: {
+ "ok": "Gemme",
+ "cancel": "Annuller",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik for at ændre fyldfarve, shift-klik for at ændre stregfarve",
+ "zoom_level": "Skift zoomniveau",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Skift fyldfarve",
+ "stroke_color": "Skift stregfarve",
+ "stroke_style": "Skift slagtilfælde Dash stil",
+ "stroke_width": "Skift slagtilfælde bredde",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Skift rotationsvinkel",
+ "blur": "Change gaussian blur value",
+ "opacity": "Skift valgte element opacitet",
+ "circle_cx": "Skift cirklens cx koordinere",
+ "circle_cy": "Skift cirklens cy koordinere",
+ "circle_r": "Skift cirklens radius",
+ "ellipse_cx": "Skift ellipse&#39;s cx koordinere",
+ "ellipse_cy": "Skift ellipse&#39;s cy koordinere",
+ "ellipse_rx": "Skift ellipse&#39;s x radius",
+ "ellipse_ry": "Skift ellipse&#39;s y radius",
+ "line_x1": "Skift linie&#39;s start x-koordinat",
+ "line_x2": "Skift Line&#39;s slutter x-koordinat",
+ "line_y1": "Skift linjens start y-koordinat",
+ "line_y2": "Skift Line&#39;s slutter y-koordinat",
+ "rect_height": "Skift rektangel højde",
+ "rect_width": "Skift rektanglets bredde",
+ "corner_radius": "Skift Rektangel Corner Radius",
+ "image_width": "Skift billede bredde",
+ "image_height": "Skift billede højde",
+ "image_url": "Skift webadresse",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Skift tekst indhold",
+ "font_family": "Skift Font Family",
+ "font_size": "Skift skriftstørrelse",
+ "bold": "Fed tekst",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Skift baggrundsfarve / uigennemsigtighed",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Tilpas til indhold",
+ "fit_to_all": "Passer til alt indhold",
+ "fit_to_canvas": "Tilpas til lærred",
+ "fit_to_layer_content": "Tilpas til lag indhold",
+ "fit_to_sel": "Tilpas til udvælgelse",
+ "align_relative_to": "Juster i forhold til ...",
+ "relativeTo": "i forhold til:",
+ "side": "side",
+ "largest_object": "største objekt",
+ "selected_objects": "valgte objekter",
+ "smallest_object": "mindste objekt",
+ "new_doc": "Nyt billede",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Gem billede",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Juster Bottom",
+ "align_center": "Centrer",
+ "align_left": "Venstrejusteret",
+ "align_middle": "Juster Mellemøsten",
+ "align_right": "Højrejusteret",
+ "align_top": "Juster Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rektangel",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Cirkel",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekstværktøj",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Fortryd",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Gruppe Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Opdel Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Flyt til bund",
+ "move_top": "Flyt til toppen",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Gemme",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Slet Layer",
+ "move_down": "Flyt lag ned",
+ "new": "New Layer",
+ "rename": "Omdøb Layer",
+ "move_up": "Flyt Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Vælg foruddefinerede:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.de.js b/files_svgedit/svg-edit/locale/lang.de.js
new file mode 100644
index 000000000..d0e7ad3ec
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.de.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "de",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Abbrechen",
+ "key_backspace": "Rücktaste",
+ "key_del": "Löschen",
+ "key_down": "nach unten",
+ "key_up": "nach oben",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "angetrieben durch"
+ },
+ ui: {
+ "toggle_stroke_tools": "Zeige/Verberge weitere Linien Werkzeuge",
+ "palette_info": "Klick zum Ändern der Füllfarbe, Shift-Klick zum Ändern der Linienfarbe",
+ "zoom_level": "vergrößern",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Füllfarbe ändern",
+ "stroke_color": "Linienfarbe ändern",
+ "stroke_style": "Linienstil ändern",
+ "stroke_width": "Linienbreite ändern",
+ "pos_x": "Ändere die X Koordinate",
+ "pos_y": "Ändere die Y Koordinate",
+ "linecap_butt": "Form der Linienendung: Stumpf",
+ "linecap_round": "Form der Linienendung: Rund",
+ "linecap_square": "Form der Linienendung: Rechteckig",
+ "linejoin_bevel": "Zusammentreffen von zwei Linien: abgeschrägte Kante",
+ "linejoin_miter": "Zusammentreffen von zwei Linien: Gehrung",
+ "linejoin_round": "Zusammentreffen von zwei Linien: Rund",
+ "angle": "Drehwinkel ändern",
+ "blur": "Ändere Gaußschen Weichzeichner Wert",
+ "opacity": "Opazität des ausgewählten Objekts ändern",
+ "circle_cx": "Kreiszentrum (cx) ändern",
+ "circle_cy": "Kreiszentrum (cy) ändern",
+ "circle_r": "Kreisradius (r) ändern",
+ "ellipse_cx": "Ellipsenzentrum (cx) ändern",
+ "ellipse_cy": "Ellipsenzentrum (cy) ändern",
+ "ellipse_rx": "Ellipsenradius (x) ändern",
+ "ellipse_ry": "Ellipsenradius (y) ändern",
+ "line_x1": "X-Koordinate des Linienanfangs ändern",
+ "line_x2": "X-Koordinate des Linienendes ändern",
+ "line_y1": "Y-Koordinate des Linienanfangs ändern",
+ "line_y2": "Y-Koordinate des Linienendes ändern",
+ "rect_height": "Höhe des Rechtecks ändern",
+ "rect_width": "Breite des Rechtecks ändern",
+ "corner_radius": "Eckenradius des Rechtecks ändern",
+ "image_width": "Bildbreite ändern",
+ "image_height": "Bildhöhe ändern",
+ "image_url": "URL ändern",
+ "node_x": "Ändere die X Koordinate des Knoten",
+ "node_y": "Ändere die Y Koordinate des Knoten",
+ "seg_type": "Ändere den Typ des Segments",
+ "straight_segments": "Gerade",
+ "curve_segments": "Kurve",
+ "text_contents": "Textinhalt erstellen und bearbeiten",
+ "font_family": "Schriftart wählen",
+ "font_size": "Schriftgröße einstellen",
+ "bold": "Fetter Text",
+ "italic": "Kursiver Text"
+ },
+ tools: {
+ "main_menu": "Hauptmenü",
+ "bkgnd_color_opac": "Hintergrundfarbe ändern / Opazität",
+ "connector_no_arrow": "Kein Pfeil",
+ "fitToContent": "An den Inhalt anpassen",
+ "fit_to_all": "An gesamten Inhalt anpassen",
+ "fit_to_canvas": "An die Zeichenfläche anpassen",
+ "fit_to_layer_content": "An Inhalt der Ebene anpassen",
+ "fit_to_sel": "An die Auswahl anpassen",
+ "align_relative_to": "Relativ zu einem anderem Objekt ausrichten ...",
+ "relativeTo": "im Vergleich zu:",
+ "Seite": "Seite",
+ "largest_object": "größtes Objekt",
+ "selected_objects": "gewählte Objekte",
+ "smallest_object": "kleinstes Objekt",
+ "new_doc": "Neues Bild",
+ "open_doc": "Bild öffnen",
+ "export_png": "Als PNG exportieren",
+ "save_doc": "Bild speichern",
+ "import_doc": "Importiere SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Unten ausrichten",
+ "align_center": "Zentriert ausrichten",
+ "align_left": "Linksbündig ausrichten",
+ "align_middle": "In der Mitte ausrichten",
+ "align_right": "Rechtsbündig ausrichten",
+ "align_top": "Oben ausrichten",
+ "mode_select": "Objekte auswählen und verändern",
+ "mode_fhpath": "Freihandlinien zeichnen",
+ "mode_line": "Linien zeichnen",
+ "mode_connect": "Verbinde zwei Objekte",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Freihand Rechteck",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Kreis",
+ "mode_fhellipse": "Freihand Ellipse",
+ "mode_path": "Pfad zeichnen",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text erstellen und bearbeiten",
+ "mode_image": "Bild einfügen",
+ "mode_zoom": "Zoomfaktor vergrößern oder verringern",
+ "mode_eyedropper": "Ableger",
+ "no_embed": "Hinweis: Dieses Bild kann nicht eingebettet werden. Eine Anzeige hängt von diesem Pfad ab.",
+ "undo": "Rückgängig",
+ "redo": "Wiederherstellen",
+ "tool_source": "Quellecode bearbeiten",
+ "wireframe_mode": "Drahtmodell Modus",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Gruppieren",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Gewähltes Objekt in einen Pfad konvertieren",
+ "reorient_path": "Neuausrichtung des Pfades",
+ "ungroup": "Gruppierung aufheben",
+ "docprops": "Dokument-Eigenschaften",
+ "imagelib": "Image Library",
+ "move_bottom": "Die gewählten Objekte nach ganz unten schieben",
+ "move_top": "Die gewählten Objekte nach ganz oben anheben",
+ "node_clone": "Klone den Knoten",
+ "node_delete": "Lösche den Knoten",
+ "node_link": "Gekoppelte oder separate Kontroll Punkte für die Bearbeitung des Pfades",
+ "add_subpath": "Teilpfad hinzufügen",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Änderungen akzeptieren",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Löschen": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Ebene",
+ "layers": "Layers",
+ "del": "Ebene löschen",
+ "move_down": "Ebene nach unten verschieben",
+ "new": "Neue Ebene",
+ "rename": "Ebene umbenennen",
+ "move_up": "Ebene nach oben verschieben",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Verschiebe ausgewählte Objekte:",
+ "move_selected": "Verschiebe ausgewählte Objekte auf eine andere Ebene"
+ },
+ config: {
+ "image_props": "Bildeigenschaften",
+ "doc_title": "Titel",
+ "doc_dims": "Dimension der Zeichenfläche",
+ "included_images": "Eingefügte Bilder",
+ "image_opt_embed": "Daten einbetten (lokale Dateien)",
+ "image_opt_ref": "Benutze die Datei Referenz",
+ "editor_prefs": "Editor Einstellungen",
+ "icon_size": "Symbol Abmessungen",
+ "language": "Sprache",
+ "background": "Editor Hintergrund",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Anmerkung: Der Hintergrund wird mit der Speicherung des Bildes nicht gespeichert.",
+ "icon_large": "Groß",
+ "icon_medium": "Mittel",
+ "icon_small": "Klein",
+ "icon_xlarge": "Sehr Groß",
+ "select_predefined": "Auswahl einer vordefinierten:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Fehlerhafter Wert",
+ "noContentToFitTo":"Kein Inhalt anzupassen",
+ "dupeLayerName":"Eine Ebene hat bereits diesen Namen!",
+ "enterUniqueLayerName":"Verwenden Sie einen eindeutigen Namen für die Ebene",
+ "enterNewLayerName":"Geben Sie bitte einen neuen Namen für die Ebene ein",
+ "layerHasThatName":"Eine Ebene hat bereits diesen Namen",
+ "QmoveElemsToLayer":"Verschiebe ausgewählte Objekte in die Ebene '%s'?",
+ "QwantToClear":"Möchten Sie die Zeichnung löschen?\nDadurch wird auch die Rückgängig Funktion zurückgesetzt!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Die Syntaxanalyse Ihrer SVG Quelle enthält Fehler.\nOriginal SVG wiederherstellen?",
+ "QignoreSourceChanges":"Soll die Änderung am SVG Quelltext ignoriert werden?",
+ "featNotSupported":"Diese Eigenschaft wird nicht unterstützt",
+ "enterNewImgURL":"Geben Sie die URL für das neue Bild an",
+ "defsFailOnSave": "Hinweis: Aufgrund eines Fehlers in Ihrem Browser, kann dieses Bild falsch angezeigt werden (fehlende Gradienten oder Elemente). Es wird jedoch richtig angezeigt sobald es tatsächlich gespeichert wird.",
+ "loadingImage":"Bild wird geladen, bitte warten ...",
+ "saveFromBrowser": "Wählen Sie \"Speichern unter ...\" in Ihrem Browser, um das Bild als Datei %s zu speichern.",
+ "noteTheseIssues": "Beachten Sie außerdem die folgenden Probleme: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.el.js b/files_svgedit/svg-edit/locale/lang.el.js
new file mode 100644
index 000000000..319ebc3b6
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.el.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "el",
+ dir : "ltr",
+ common: {
+ "ok": "Αποθηκεύω",
+ "cancel": "Άκυρο",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Κάντε κλικ για να συμπληρώσετε την αλλαγή χρώματος, στροφή κλικ για να αλλάξετε το χρώμα εγκεφαλικό",
+ "zoom_level": "Αλλαγή επίπεδο μεγέθυνσης",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Αλλαγή συμπληρώστε χρώμα",
+ "stroke_color": "Αλλαγή χρώματος εγκεφαλικό",
+ "stroke_style": "Αλλαγή στυλ παύλα εγκεφαλικό",
+ "stroke_width": "Αλλαγή πλάτος γραμμής",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Αλλαγή γωνία περιστροφής",
+ "blur": "Change gaussian blur value",
+ "opacity": "Αλλαγή αδιαφάνεια επιλεγμένο σημείο",
+ "circle_cx": "Cx Αλλαγή κύκλου συντονίζουν",
+ "circle_cy": "Αλλαγή κύκλου cy συντονίζουν",
+ "circle_r": "Αλλαγή ακτίνα κύκλου",
+ "ellipse_cx": "Αλλαγή ellipse του CX συντονίζουν",
+ "ellipse_cy": "Αλλαγή ellipse του cy συντονίζουν",
+ "ellipse_rx": "X ακτίνα Αλλαγή ellipse του",
+ "ellipse_ry": "Y ακτίνα Αλλαγή ellipse του",
+ "line_x1": "Αλλαγή γραμμής εκκίνησης x συντονίζουν",
+ "line_x2": "Αλλαγή γραμμής λήγει x συντονίζουν",
+ "line_y1": "Αλλαγή γραμμής εκκίνησης y συντονίζουν",
+ "line_y2": "Αλλαγή γραμμής λήγει y συντονίζουν",
+ "rect_height": "Αλλαγή ύψος ορθογωνίου",
+ "rect_width": "Αλλαγή πλάτους ορθογώνιο",
+ "corner_radius": "Αλλαγή ορθογώνιο Corner Radius",
+ "image_width": "Αλλαγή πλάτος εικόνας",
+ "image_height": "Αλλαγή ύψος εικόνας",
+ "image_url": "Αλλαγή URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Αλλαγή περιεχόμενο κειμένου",
+ "font_family": "Αλλαγή γραμματοσειράς Οικογένεια",
+ "font_size": "Αλλαγή μεγέθους γραμματοσειράς",
+ "bold": "Bold Text",
+ "italic": "Πλάγιους"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Αλλαγή χρώματος φόντου / αδιαφάνεια",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Ταιριάζει σε όλο το περιεχόμενο",
+ "fit_to_canvas": "Προσαρμογή στο μουσαμά",
+ "fit_to_layer_content": "Προσαρμογή στο περιεχόμενο στρώμα",
+ "fit_to_sel": "Fit to επιλογή",
+ "align_relative_to": "Στοίχιση σε σχέση με ...",
+ "relativeTo": "σε σχέση με:",
+ "σελίδα": "σελίδα",
+ "largest_object": "μεγαλύτερο αντικείμενο",
+ "selected_objects": "εκλέγεται αντικείμενα",
+ "smallest_object": "μικρότερο αντικείμενο",
+ "new_doc": "Νέα εικόνα",
+ "open_doc": "Άνοιγμα εικόνας",
+ "export_png": "Export as PNG",
+ "save_doc": "Αποθήκευση εικόνας",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Στοίχισηκάτω",
+ "align_center": "Στοίχισηστοκέντρο",
+ "align_left": "Στοίχισηαριστερά",
+ "align_middle": "Ευθυγράμμιση Μέση",
+ "align_right": "Στοίχισηδεξιά",
+ "align_top": "Στοίχισηπάνω",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Εργαλείομολυβιού",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Δωρεάν-Hand ορθογώνιο",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Κύκλος",
+ "mode_fhellipse": "Δωρεάν-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Κείμενο Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Αναίρεση",
+ "redo": "Redo",
+ "tool_source": "Επεξεργασία Πηγή",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Ομάδα Στοιχεία",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Κατάργηση ομαδοποίησης Στοιχεία",
+ "docprops": "Ιδιότητες εγγράφου",
+ "imagelib": "Image Library",
+ "move_bottom": "Μετακίνηση προς τα κάτω",
+ "move_top": "Μετακίνηση στην αρχή",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Αποθηκεύω",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Διαγραφήστρώματος",
+ "move_down": "Μετακίνηση Layer Down",
+ "new": "Νέο Layer",
+ "rename": "Μετονομασία Layer",
+ "move_up": "Μετακίνηση Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Επιλογή προκαθορισμένων:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.en.js b/files_svgedit/svg-edit/locale/lang.en.js
new file mode 100644
index 000000000..de63d8b32
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.en.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "en",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width by 1, shift-click to change by 0.1",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Layer",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Move Layer Up",
+ "move_down": "Move Layer Down",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.es.js b/files_svgedit/svg-edit/locale/lang.es.js
new file mode 100644
index 000000000..9b3c1aed0
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.es.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "es",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancelar",
+ "key_backspace": "retroceso",
+ "key_del": "suprimir",
+ "key_down": "abajo",
+ "key_up": "arriba",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Mostrar/ocultar herramientas de trazo adicionales",
+ "palette_info": "Haga clic para cambiar el color de relleno. Pulse Mayús y haga clic para cambiar el color del contorno.",
+ "zoom_level": "Cambiar el nivel de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Cambiar el color de relleno",
+ "stroke_color": "Cambiar el color del contorno",
+ "stroke_style": "Cambiar el estilo del trazo del contorno",
+ "stroke_width": "Cambiar el grosor del contorno",
+ "pos_x": "Cambiar la posición horizontal X",
+ "pos_y": "Cambiar la posición vertical Y",
+ "linecap_butt": "Final de la línea: en el nodo",
+ "linecap_round": "Final de la línea: redondeada",
+ "linecap_square": "Final de la línea: cuadrada",
+ "linejoin_bevel": "Unión: biselada",
+ "linejoin_miter": "Unión: recta",
+ "linejoin_round": "Unión: redondeada",
+ "angle": "Cambiar ángulo de rotación",
+ "blur": "Ajustar desenfoque gausiano",
+ "opacity": "Cambiar la opacidad del objeto seleccionado",
+ "circle_cx": "Cambiar la posición horizonral CX del círculo",
+ "circle_cy": "Cambiar la posición vertical CY del círculo",
+ "circle_r": "Cambiar el radio del círculo",
+ "ellipse_cx": "Cambiar la posición horizontal CX de la elipse",
+ "ellipse_cy": "Cambiar la posición vertical CY de la elipse",
+ "ellipse_rx": "Cambiar el radio horizontal X de la elipse",
+ "ellipse_ry": "Cambiar el radio vertical Y de la elipse",
+ "line_x1": "Cambiar la posición horizontal X del comienzo de la línea",
+ "line_x2": "Cambiar la posición horizontal X del final de la línea",
+ "line_y1": "Cambiar la posición vertical Y del comienzo de la línea",
+ "line_y2": "Cambiar la posición vertical Y del final de la línea",
+ "rect_height": "Cambiar la altura del rectángulo",
+ "rect_width": "Cambiar el ancho rectángulo",
+ "corner_radius": "Cambiar el radio de las esquinas del rectángulo",
+ "image_width": "Cambiar el ancho de la imagen",
+ "image_height": "Cambiar la altura de la imagen",
+ "image_url": "Modificar URL",
+ "node_x": "Cambiar la posición horizontal X del nodo",
+ "node_y": "Cambiar la posición vertical Y del nodo",
+ "seg_type": "Cambiar el tipo de segmento",
+ "straight_segments": "Recta",
+ "curve_segments": "Curva",
+ "text_contents": "Modificar el texto",
+ "font_family": "Tipo de fuente",
+ "font_size": "Tamaño de la fuente",
+ "bold": "Texto en negrita",
+ "italic": "Texto en cursiva"
+ },
+ tools: {
+ "main_menu": "Menú principal",
+ "bkgnd_color_opac": "Cambiar color de fondo / opacidad",
+ "connector_no_arrow": "Sin flecha",
+ "fitToContent": "Ajustar al contenido",
+ "fit_to_all": "Ajustar a todo el contenido",
+ "fit_to_canvas": "Ajustar al lienzo",
+ "fit_to_layer_content": "Ajustar al contenido de la capa",
+ "fit_to_sel": "Ajustar a la selección",
+ "align_relative_to": "Alinear con respecto a ...",
+ "relativeTo": "en relación con:",
+ "Página": "Página",
+ "largest_object": "El objeto más grande",
+ "selected_objects": "Objetos seleccionados",
+ "smallest_object": "El objeto más pequeño",
+ "new_doc": "Nueva imagen",
+ "open_doc": "Abrir imagen",
+ "export_png": "Exportar como PNG",
+ "save_doc": "Guardar imagen",
+ "import_doc": "Importar un archivo SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinear parte inferior",
+ "align_center": "Centrar verticalmente",
+ "align_left": "Alinear lado izquierdo",
+ "align_middle": "Centrar horizontalmente",
+ "align_right": "Alinear lado derecho",
+ "align_top": "Alinear parte superior",
+ "mode_select": "Herramienta de selección",
+ "mode_fhpath": "Herramienta de lápiz",
+ "mode_line": "Trazado de líneas",
+ "mode_connect": "Conectar dos objetos",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Rectángulo a mano alzada",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Círculo",
+ "mode_fhellipse": "Elipse a mano alzada",
+ "mode_path": "Herramienta de trazado",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Insertar texto",
+ "mode_image": "Insertar imagen",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Herramienta de pipeta",
+ "no_embed": "NOTA: La imagen no puede ser integrada. El contenido mostrado dependerá de la imagen ubicada en esta ruta. ",
+ "undo": "Deshacer",
+ "redo": "Rehacer",
+ "tool_source": "Editar código fuente",
+ "wireframe_mode": "Modo marco de alambre",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Agrupar objetos",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convertir a trazado",
+ "reorient_path": "Reorientar el trazado",
+ "ungroup": "Desagrupar objetos",
+ "docprops": "Propiedades del documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Mover abajo",
+ "move_top": "Mover arriba",
+ "node_clone": "Clonar nodo",
+ "node_delete": "Suprimir nodo",
+ "node_link": "Enlazar puntos de control",
+ "add_subpath": "Añadir subtrazado",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Aplicar cambios",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "suprimir": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Capa",
+ "layers": "Layers",
+ "del": "Suprimir capa",
+ "move_down": "Mover la capa hacia abajo",
+ "new": "Nueva capa",
+ "rename": "Renombrar capa",
+ "move_up": "Mover la capa hacia arriba",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Desplazar objetos a:",
+ "move_selected": "Mover los objetos seleccionados a otra capa"
+ },
+ config: {
+ "image_props": "Propiedades de la Imagen",
+ "doc_title": "Título",
+ "doc_dims": "Tamaño del lienzo",
+ "included_images": "Imágenes integradas",
+ "image_opt_embed": "Integrar imágenes en forma de datos (archivos locales)",
+ "image_opt_ref": "Usar la referencia del archivo",
+ "editor_prefs": "Preferencias del Editor",
+ "icon_size": "Tamaño de los iconos",
+ "language": "Idioma",
+ "background": "Fondo del editor",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Nota: El fondo no se guardará junto con la imagen.",
+ "icon_large": "Grande",
+ "icon_medium": "Mediano",
+ "icon_small": "Pequeño",
+ "icon_xlarge": "Muy grande",
+ "select_predefined": "Seleccionar predefinido:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valor no válido",
+ "noContentToFitTo":"No existe un contenido al que ajustarse.",
+ "dupeLayerName":"¡Ya existe una capa con este nombre!",
+ "enterUniqueLayerName":"Introduzca otro nombre distinto para la capa.",
+ "enterNewLayerName":"Introduzca el nuevo nombre de la capa.",
+ "layerHasThatName":"El nombre introducido es el nombre actual de la capa.",
+ "QmoveElemsToLayer":"¿Desplazar los elementos seleccionados a la capa '%s'?",
+ "QwantToClear":"¿Desea borrar el dibujo?\n¡El historial de acciones también se borrará!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Existen errores sintácticos en su código fuente SVG.\n¿Desea volver al código fuente SVG original?",
+ "QignoreSourceChanges":"¿Desea ignorar los cambios realizados sobre el código fuente SVG?",
+ "featNotSupported":"Función no compatible.",
+ "enterNewImgURL":"Introduzca la nueva URL de la imagen.",
+ "defsFailOnSave": "NOTA: Debido a un fallo de su navegador, es posible que la imagen aparezca de forma incorrecta (ciertas gradaciones o elementos podría perderse). La imagen aparecerá en su forma correcta una vez guardada.",
+ "loadingImage":"Cargando imagen. Espere, por favor.",
+ "saveFromBrowser": "Seleccionar \"Guardar como...\" en su navegador para guardar la imagen en forma de archivo %s.",
+ "noteTheseIssues": "Existen además los problemas siguientes:",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.et.js b/files_svgedit/svg-edit/locale/lang.et.js
new file mode 100644
index 000000000..436c509c2
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.et.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "et",
+ dir : "ltr",
+ common: {
+ "ok": "Salvestama",
+ "cancel": "Tühista",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click muuta täitke värvi, Shift-nuppu, et muuta insult värvi",
+ "zoom_level": "Muuda suumi taset",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Muuda täitke värvi",
+ "stroke_color": "Muuda insult värvi",
+ "stroke_style": "Muuda insult kriips stiil",
+ "stroke_width": "Muuda insult laius",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Muuda Pöördenurk",
+ "blur": "Change gaussian blur value",
+ "opacity": "Muuda valitud elemendi läbipaistmatus",
+ "circle_cx": "Muuda ringi&#39;s cx kooskõlastada",
+ "circle_cy": "Muuda ringi&#39;s cy kooskõlastada",
+ "circle_r": "Muuda ring on raadiusega",
+ "ellipse_cx": "Muuda ellips&#39;s cx kooskõlastada",
+ "ellipse_cy": "Muuda ellips&#39;s cy kooskõlastada",
+ "ellipse_rx": "Muuda ellips&#39;s x raadius",
+ "ellipse_ry": "Muuda ellips&#39;s y raadius",
+ "line_x1": "Muuda rööbastee algab x-koordinaadi",
+ "line_x2": "Muuda Line lõpeb x-koordinaadi",
+ "line_y1": "Muuda rööbastee algab y-koordinaadi",
+ "line_y2": "Muuda Line lõppenud y-koordinaadi",
+ "rect_height": "Muuda ristküliku kõrgus",
+ "rect_width": "Muuda ristküliku laius",
+ "corner_radius": "Muuda ristkülik Nurgakabe Raadius",
+ "image_width": "Muuda pilt laius",
+ "image_height": "Muuda pilt kõrgus",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Muuda teksti sisu",
+ "font_family": "Muutke Kirjasinperhe",
+ "font_size": "Change font size",
+ "bold": "Rasvane kiri",
+ "italic": "Kursiiv"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Muuda tausta värvi / läbipaistmatus",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Sobita kogu sisu",
+ "fit_to_canvas": "Sobita lõuend",
+ "fit_to_layer_content": "Sobita kiht sisu",
+ "fit_to_sel": "Fit valiku",
+ "align_relative_to": "Viia võrreldes ...",
+ "relativeTo": "võrreldes:",
+ "lehekülg": "lehekülg",
+ "largest_object": "suurim objekt",
+ "selected_objects": "valitud objektide",
+ "smallest_object": "väikseim objekt",
+ "new_doc": "Uus pilt",
+ "open_doc": "Pildi avamine",
+ "export_png": "Export as PNG",
+ "save_doc": "Salvesta pilt",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Viia Bottom",
+ "align_center": "Keskele joondamine",
+ "align_left": "Vasakjoondus",
+ "align_middle": "Viia Lähis -",
+ "align_right": "Paremjoondus",
+ "align_top": "Viia Üles",
+ "mode_select": "Vali Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Online-Hand Ristkülik",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Online-Hand Ellips",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst Tool",
+ "mode_image": "Pilt Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Muuda Allikas",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Rühma elemendid",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Lõhu Elements",
+ "docprops": "Dokumendi omadused",
+ "imagelib": "Image Library",
+ "move_bottom": "Liiguta alla",
+ "move_top": "Liiguta üles",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Salvestama",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Kustuta Kiht",
+ "move_down": "Liiguta kiht alla",
+ "new": "Uus kiht",
+ "rename": "Nimeta kiht",
+ "move_up": "Liiguta kiht üles",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Valige eelmääratletud:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.fa.js b/files_svgedit/svg-edit/locale/lang.fa.js
new file mode 100644
index 000000000..2d4d6aaea
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.fa.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fa",
+ dir : "ltr",
+ common: {
+ "ok": "‫تأیید‬",
+ "cancel": "‫لغو‬",
+ "key_backspace": "‫پس بر ‬",
+ "key_del": "‫حذف ‬",
+ "key_down": "‫پایین ‬",
+ "key_up": "‫بالا ‬",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "‫برای تغییر رنگ، کلیک کنید. برای تغییر رنگ لبه، کلید تبدیل (shift) را فشرده و کلیک کنید‬",
+ "zoom_level": "‫تغییر بزرگ نمایی‬",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "‫تغییر رنگ‬",
+ "stroke_color": "‫تغییر رنگ لبه‬",
+ "stroke_style": "‫تغییر نقطه چین لبه‬",
+ "stroke_width": "‫تغییر عرض لبه‬",
+ "pos_x": "‫تغییر مختصات X‬",
+ "pos_y": "‫تغییر مختصات Y‬",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "‫تغییر زاویه چرخش‬",
+ "blur": "Change gaussian blur value",
+ "opacity": "‫تغییر تاری عنصر انتخاب شده‬",
+ "circle_cx": "‫تغییر مختصات cx دایره‬",
+ "circle_cy": "‫تغییر مختصات cy دایره‬",
+ "circle_r": "‫تغییر شعاع دایره‬",
+ "ellipse_cx": "‫تغییر مختصات cx بیضی‬",
+ "ellipse_cy": "‫تغییر مختصات cy بیضی‬",
+ "ellipse_rx": "‫تغییر شعاع rx بیضی‬",
+ "ellipse_ry": "‫تغییر شعاع ry بیضی‬",
+ "line_x1": "‫تغییر مختصات x آغاز خط‬",
+ "line_x2": "‫تغییر مختصات x پایان خط‬",
+ "line_y1": "‫تغییر مختصات y آغاز خط‬",
+ "line_y2": "‫تغییر مختصات y پایان خط‬",
+ "rect_height": "‫تغییر ارتفاع مستطیل‬",
+ "rect_width": "‫تغییر عرض مستطیل‬",
+ "corner_radius": "‫شعاع گوشه:‬",
+ "image_width": "‫تغییر عرض تصویر‬",
+ "image_height": "‫تغییر ارتفاع تصویر‬",
+ "image_url": "‫تغییر نشانی وب (url)‬",
+ "node_x": "‫تغییر مختصات x نقطه‬",
+ "node_y": "‫تغییر مختصات y نقطه‬",
+ "seg_type": "‫تغییر نوع قطعه (segment)‬",
+ "straight_segments": "‫مستقیم‬",
+ "curve_segments": "‫منحنی‬",
+ "text_contents": "‫تغییر محتویات متن‬",
+ "font_family": "‫تغییر خانواده قلم‬",
+ "font_size": "‫تغییر اندازه قلم‬",
+ "bold": "‫متن توپر ‬",
+ "italic": "‫متن کج ‬"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "‫تغییر رنگ پس زمینه / تاری‬",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "‫هم اندازه شدن با محتوا‬",
+ "fit_to_all": "‫هم اندازه شدن با همه محتویات‬",
+ "fit_to_canvas": "‫هم اندازه شدن با صفحه مجازی (بوم)‬",
+ "fit_to_layer_content": "‫هم اندازه شدن با محتوای لایه‬",
+ "fit_to_sel": "‫هم اندازه شدن با اشیاء انتخاب شده‬",
+ "align_relative_to": "‫تراز نسبت به ...‬",
+ "relativeTo": "‫نسبت به:‬",
+ "‫صفحه‬": "‫صفحه‬",
+ "largest_object": "‫بزرگترین شئ‬",
+ "selected_objects": "‫اشیاء انتخاب شده‬",
+ "smallest_object": "‫کوچکترین شئ‬",
+ "new_doc": "‫تصویر جدید ‬",
+ "open_doc": "‫باز کردن تصویر ‬",
+ "export_png": "Export as PNG",
+ "save_doc": "‫ذخیره تصویر ‬",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "‫تراز پایین‬",
+ "align_center": "‫وسط چین‬",
+ "align_left": "‫چپ چین‬",
+ "align_middle": "‫تراز میانه‬",
+ "align_right": "‫راست چین‬",
+ "align_top": "‫تراز بالا‬",
+ "mode_select": "‫ابزار انتخاب ‬",
+ "mode_fhpath": "‫ابزار مداد ‬",
+ "mode_line": "‫ابزار خط ‬",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "‫مستطیل با قابلیت تغییر پویا‬",
+ "mode_ellipse": "‫بیضی‬",
+ "mode_circle": "‫دایره‬",
+ "mode_fhellipse": "‫بیضی با قابلیت تغییر پویا‬",
+ "mode_path": "‫ابزار مسیر ‬",
+ "mode_shapelib": "Shape library",
+ "mode_text": "‫ابزار متن ‬",
+ "mode_image": "‫ابزار تصویر ‬",
+ "mode_zoom": "‫ابزار بزرگ نمایی ‬",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "‫واگرد ‬",
+ "redo": "‫ازنو ‬",
+ "tool_source": "‫ویرایش منبع ‬",
+ "wireframe_mode": "‫حالت نمایش لبه ها ‬",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "‫قرار دادن عناصر در گروه ‬",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "‫تبدیل به مسیر‬",
+ "reorient_path": "‫جهت دهی مجدد مسیر‬",
+ "ungroup": "‫خارج کردن عناصر از گروه ‬",
+ "docprops": "‫مشخصات سند ‬",
+ "imagelib": "Image Library",
+ "move_bottom": "‫انتقال به پایین ترین ‬",
+ "move_top": "‫انتقال به بالاترین ‬",
+ "node_clone": "‫ایجاد کپی از نقطه‬",
+ "node_delete": "‫حذف نقطه‬",
+ "node_link": "‫پیوند دادن نقاط کنترل‬",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "‫اعمال تغییرات‬",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "‫حذف ‬": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"‫لایه‬",
+ "layers": "Layers",
+ "del": "‫حذف لایه‬",
+ "move_down": "‫انتقال لایه به پایین‬",
+ "new": "‫لایه جدید‬",
+ "rename": "‫تغییر نام لایه‬",
+ "move_up": "‫انتقال لایه به بالا‬",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "‫انتقال عناصر به:‬",
+ "move_selected": "‫انتقال عناصر انتخاب شده به یک لایه متفاوت‬"
+ },
+ config: {
+ "image_props": "‫مشخصات تصویر‬",
+ "doc_title": "‫عنوان‬",
+ "doc_dims": "‫ابعاد صفحه مجازی (بوم)‬",
+ "included_images": "‫تصاویر گنجانده شده‬",
+ "image_opt_embed": "‫داده های جای داده شده (پرونده های محلی)‬",
+ "image_opt_ref": "‫استفاده از ارجاع به پرونده‬",
+ "editor_prefs": "‫تنظیمات ویراستار‬",
+ "icon_size": "‫اندازه شمایل‬",
+ "language": "‫زبان‬",
+ "background": "‫پس زمینه ویراستار‬",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "‫توجه: پس زمینه همراه تصویر ذخیره نخواهد شد.‬",
+ "icon_large": "‫بزرگ‬",
+ "icon_medium": "‫متوسط‬",
+ "icon_small": "‫کوچک‬",
+ "icon_xlarge": "‫خیلی بزرگ‬",
+ "select_predefined": "‫از پیش تعریف شده را انتخاب کنید:‬",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"‫مقدار داده شده نامعتبر است‬",
+ "noContentToFitTo":"‫محتوایی برای هم اندازه شدن وجود ندارد‬",
+ "dupeLayerName":"‫لایه ای با آن نام وجود دارد!‬",
+ "enterUniqueLayerName":"‫لطفا یک نام لایه یکتا انتخاب کنید‬",
+ "enterNewLayerName":"‫لطفا نام لایه جدید را وارد کنید‬",
+ "layerHasThatName":"‫لایه از قبل آن نام را دارد‬",
+ "QmoveElemsToLayer":"‫عناصر انتخاب شده به لایه '%s' منتقل شوند؟‬",
+ "QwantToClear":"‫آیا مطمئن هستید که می خواهید نقاشی را پاک کنید؟\nاین عمل باعث حذف تاریخچه واگرد شما خواهد شد!‬",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"‫در منبع SVG شما خطاهای تجزیه (parse) وجود داشت.\nبه منبع SVG اصلی بازگردانده شود؟‬",
+ "QignoreSourceChanges":"‫تغییرات اعمال شده در منبع SVG نادیده گرفته شوند؟‬",
+ "featNotSupported":"‫این ویژگی پشتیبانی نشده است‬",
+ "enterNewImgURL":"‫نشانی وب (url) تصویر جدید را وارد کنید‬",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.fi.js b/files_svgedit/svg-edit/locale/lang.fi.js
new file mode 100644
index 000000000..ecec14c0e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.fi.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fi",
+ dir : "ltr",
+ common: {
+ "ok": "Tallentaa",
+ "cancel": "Peruuta",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klikkaa muuttaa täyttöväri, Shift-click vaihtaa aivohalvauksen väriä",
+ "zoom_level": "Muuta suurennustaso",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Muuta täyttöväri",
+ "stroke_color": "Muuta aivohalvaus väri",
+ "stroke_style": "Muuta aivohalvaus Dash tyyli",
+ "stroke_width": "Muuta aivohalvaus leveys",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Muuta kiertokulma",
+ "blur": "Change gaussian blur value",
+ "opacity": "Muuta valitun kohteen läpinäkyvyys",
+ "circle_cx": "Muuta Circlen CX koordinoida",
+ "circle_cy": "Muuta Circlen CY koordinoida",
+ "circle_r": "Muuta ympyrän säde",
+ "ellipse_cx": "Muuta ellipsi&#39;s CX koordinoida",
+ "ellipse_cy": "Muuta ellipsi&#39;s CY koordinoida",
+ "ellipse_rx": "Muuta ellipsi&#39;s x säde",
+ "ellipse_ry": "Muuta ellipsi n y säde",
+ "line_x1": "Muuta Linen alkaa x-koordinaatti",
+ "line_x2": "Muuta Linen päättyy x koordinoida",
+ "line_y1": "Muuta Linen alkaa y-koordinaatti",
+ "line_y2": "Muuta Linen päättyy y koordinoida",
+ "rect_height": "Muuta suorakaiteen korkeus",
+ "rect_width": "Muuta suorakaiteen leveys",
+ "corner_radius": "Muuta suorakaide Corner Säde",
+ "image_width": "Muuta kuvan leveys",
+ "image_height": "Muuta kuvan korkeus",
+ "image_url": "Muuta URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Muuta tekstin sisältö",
+ "font_family": "Muuta Font Family",
+ "font_size": "Muuta fontin kokoa",
+ "bold": "Lihavoitu teksti",
+ "italic": "Kursivoitu"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Vaihda taustaväri / sameuden",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Sovita Content",
+ "fit_to_all": "Sovita kaikki content",
+ "fit_to_canvas": "Sovita kangas",
+ "fit_to_layer_content": "Sovita kerros sisältöön",
+ "fit_to_sel": "Sovita valinta",
+ "align_relative_to": "Kohdista suhteessa ...",
+ "relativeTo": "suhteessa:",
+ "sivulta": "sivulta",
+ "largest_object": "Suurin kohde",
+ "selected_objects": "valittujen objektien",
+ "smallest_object": "pienin kohde",
+ "new_doc": "Uusi kuva",
+ "open_doc": "Avaa kuva",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Keskitä",
+ "align_left": "Tasaa vasemmalle",
+ "align_middle": "Kohdista Lähi",
+ "align_right": "Tasaa oikealle",
+ "align_top": "Kohdista Top",
+ "mode_select": "Valitse työkalu",
+ "mode_fhpath": "Kynätyökalu",
+ "mode_line": "Viivatyökalulla",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand suorakaide",
+ "mode_ellipse": "Soikion",
+ "mode_circle": "Ympyrään",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Työkalua",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Suurennustyökalu",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Kumoa",
+ "redo": "Tulppaamalla ilmakanavan",
+ "tool_source": "Muokkaa lähdekoodipaketti",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Tuoteryhmään Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Asiakirjan ominaisuudet",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Tallentaa",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Poista Layer",
+ "move_down": "Siirrä Layer alas",
+ "new": "New Layer",
+ "rename": "Nimeä Layer",
+ "move_up": "Siirrä Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Valitse ennalta:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.fr.js b/files_svgedit/svg-edit/locale/lang.fr.js
new file mode 100644
index 000000000..445cfae39
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.fr.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fr",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Annuler",
+ "key_backspace": "Suppr.",
+ "key_del": "Retour Arr.",
+ "key_down": "Bas",
+ "key_up": "Haut",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Montrer/Cacher plus d'outils de Contour",
+ "palette_info": "Cliquer pour changer la couleur de remplissage, Shift-Clic pour changer la couleur de contour",
+ "zoom_level": "Changer le niveau de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identifier l'élément",
+ "fill_color": "Changer la couleur de remplissage",
+ "stroke_color": "Changer la couleur du contour",
+ "stroke_style": "Changer le style du contour",
+ "stroke_width": "Changer la largeur du contour de 1, Shift-Click pour changer la largeur de 0.1",
+ "pos_x": "Changer la position horizontale X",
+ "pos_y": "Changer la position verticale Y",
+ "linecap_butt": "Terminaison : Sur le nœud",
+ "linecap_round": "Terminaison : Arrondie",
+ "linecap_square": "Terminaison : Carrée",
+ "linejoin_bevel": "Raccord : Biseauté",
+ "linejoin_miter": "Raccord : Droit",
+ "linejoin_round": "Raccord : Arrondi",
+ "angle": "Changer l'angle de rotation",
+ "blur": "Changer la valeur du flou gaussien",
+ "opacity": "Changer l'opacité de l'élément sélectionné",
+ "circle_cx": "Changer la position horizontale cx du cercle",
+ "circle_cy": "Changer la position verticale cy du cercle",
+ "circle_r": "Changer le rayon du cercle",
+ "ellipse_cx": "Changer la position horizontale cx de l'ellipse",
+ "ellipse_cy": "Changer la position verticale cy de l'ellipse",
+ "ellipse_rx": "Changer le rayon horizontal x de l'ellipse",
+ "ellipse_ry": "Changer le rayon vertical y de l'ellipse",
+ "line_x1": "Changer la position horizontale x de début de la ligne",
+ "line_x2": "Changer la position horizontale x de fin de la ligne",
+ "line_y1": "Changer la position verticale y de début de la ligne",
+ "line_y2": "Changer la position verticale y de fin de la ligne",
+ "rect_height": "Changer la hauteur du rectangle",
+ "rect_width": "Changer la largeur du rectangle",
+ "corner_radius": "Changer le rayon des coins du rectangle",
+ "image_width": "Changer la largeur de l'image",
+ "image_height": "Changer la hauteur de l'image",
+ "image_url": "Modifier l'URL",
+ "node_x": "Changer la positon horizontale x du nœud",
+ "node_y": "Changer la position verticale y du nœud",
+ "seg_type": "Changer le type du Segment",
+ "straight_segments": "Droit",
+ "curve_segments": "Courbe",
+ "text_contents": "Changer le contenu du texte",
+ "font_family": "Changer la famille de police",
+ "font_size": "Changer la taille de la police",
+ "bold": "Texte en gras",
+ "italic": "Texte en italique"
+ },
+ tools: {
+ "main_menu": "Menu principal",
+ "bkgnd_color_opac": "Changer la couleur d'arrière-plan / l'opacité",
+ "connector_no_arrow": "Sans flèches",
+ "fitToContent": "Ajuster au contenu",
+ "fit_to_all": "Ajuster au contenu de tous les calques",
+ "fit_to_canvas": "Ajuster au canevas",
+ "fit_to_layer_content": "Ajuster au contenu du calque",
+ "fit_to_sel": "Ajuster à la sélection",
+ "align_relative_to": "Aligner par rapport à ...",
+ "relativeTo": "Relativement à:",
+ "Page": "Page",
+ "largest_object": "Plus gros objet",
+ "selected_objects": "Objets sélectionnés",
+ "smallest_object": "Plus petit objet",
+ "new_doc": "Nouvelle image",
+ "open_doc": "Ouvrir une image",
+ "export_png": "Exporter au format PNG",
+ "save_doc": "Enregistrer l'image",
+ "import_doc": "Importer un objet SVG",
+ "align_to_page": "Aligner l'élément relativement à la Page",
+ "align_bottom": "Aligner le bas des objets",
+ "align_center": "Centrer verticalement",
+ "align_left": "Aligner les côtés gauches",
+ "align_middle": "Centrer horizontalement",
+ "align_right": "Aligner les côtés droits",
+ "align_top": "Aligner le haut des objets",
+ "mode_select": "Outil de sélection",
+ "mode_fhpath": "Crayon à main levée",
+ "mode_line": "Tracer des lignes",
+ "mode_connect": "Connecter deux objets",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Rectangle main levée",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Cercle",
+ "mode_fhellipse": "Ellipse main levée",
+ "mode_path": "Outil Chemin",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Outil Texte",
+ "mode_image": "Outil Image",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Outil Pipette",
+ "no_embed": "NOTE: Cette image ne peut être incorporée en tant que données. Le contenu affiché sera celui de l'image située à cette adresse",
+ "undo": "Annuler l'action",
+ "redo": "Refaire l'action",
+ "tool_source": "Modifier la source",
+ "wireframe_mode": "Mode Fil de Fer",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grouper les éléments",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convertir en chemin",
+ "reorient_path": "Réorienter le chemin",
+ "ungroup": "Dégrouper les éléments",
+ "docprops": "Propriétés du document",
+ "imagelib": "Image Library",
+ "move_bottom": "Déplacer vers le bas",
+ "move_top": "Déplacer vers le haut",
+ "node_clone": "Cloner le nœud",
+ "node_delete": "Supprimer le nœud",
+ "node_link": "Rendre les points de contrôle solidaires",
+ "add_subpath": "Ajouter un sous-chemin",
+ "openclose_path": "Ouvrir/Fermer sous-chemin",
+ "source_save": "Appliquer Modifications",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Retour Arr.": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Calque",
+ "layers": "Layers",
+ "del": "Supprimer le calque",
+ "move_down": "Descendre le calque",
+ "new": "Nouveau calque",
+ "rename": "Renommer le calque",
+ "move_up": "Monter le calque",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Déplacer éléments vers:",
+ "move_selected": "Déplacer les éléments sélectionnés vers un autre calque"
+ },
+ config: {
+ "image_props": "Propriétés de l'Image",
+ "doc_title": "Titre",
+ "doc_dims": "Dimensions du canevas",
+ "included_images": "Images incorporées",
+ "image_opt_embed": "Incorporer les images en tant que données (fichiers locaux)",
+ "image_opt_ref": "Utiliser la référence des images ",
+ "editor_prefs": "Préférences de l'Éditeur",
+ "icon_size": "Taille des icônes",
+ "language": "Langue",
+ "background": "Toile de fond de l'Éditeur",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: La toile de fond n'est pas sauvegardée avec l'image.",
+ "icon_large": "Grande",
+ "icon_medium": "Moyenne",
+ "icon_small": "Petite",
+ "icon_xlarge": "Super-Grande",
+ "select_predefined": "Sélectionner prédéfinis:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valeur fournie invalide",
+ "noContentToFitTo":"Il n'y a pas de contenu auquel ajuster",
+ "dupeLayerName":"Il existe déjà un calque de ce nom !",
+ "enterUniqueLayerName":"Veuillez entrer un nom (unique) pour le calque",
+ "enterNewLayerName":"Veuillez entrer le nouveau nom du calque",
+ "layerHasThatName":"Le calque porte déjà ce nom",
+ "QmoveElemsToLayer":"Déplacer les éléments sélectionnés vers le calque '%s' ?",
+ "QwantToClear":"Voulez-vous effacer le dessin ?\nL'historique de vos actions sera également effacé !",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Il y a des erreurs d'analyse syntaxique dans votre code-source SVG.\nRevenir au code-source SVG avant modifications ?",
+ "QignoreSourceChanges":"Ignorer les modifications faites à la source SVG ?",
+ "featNotSupported":"Fonction non supportée",
+ "enterNewImgURL":"Entrer la nouvelle URL de l'image",
+ "defsFailOnSave": "NOTE : À cause d'un bug de votre navigateur, cette image peut être affichée de façon incorrecte (dégradés ou éléments manquants). Cependant, une fois enregistrée, elle sera correcte.",
+ "loadingImage":"Chargement de l'image, veuillez patienter...",
+ "saveFromBrowser": "Selectionner \"Enregistrer sous...\" dans votre navigateur pour sauvegarder l'image en tant que fichier %s.",
+ "noteTheseIssues": "Notez également les problèmes suivants : ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.fy.js b/files_svgedit/svg-edit/locale/lang.fy.js
new file mode 100644
index 000000000..18655a767
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.fy.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "fy",
+ dir : "ltr",
+ common: {
+ "ok": "Ok",
+ "cancel": "Ôfbrekke",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "omleech",
+ "key_up": "omheech",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik om de folkleur te feroarjen, shift-klik om de linekleur te feroarjen.",
+ "zoom_level": "Yn-/útzoome",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Folkleur oanpasse",
+ "stroke_color": "Linekleur oanpasse",
+ "stroke_style": "Linestijl oanpasse",
+ "stroke_width": "Linebreedte oanpasse",
+ "pos_x": "X-koördinaat oanpasse",
+ "pos_y": "Y-koördinaat oanpasse",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Draaie",
+ "blur": "Change gaussian blur value",
+ "opacity": "Trochsichtigens oanpasse",
+ "circle_cx": "Feroarje it X-koördinaat fan it middelpunt fan'e sirkel.",
+ "circle_cy": "Feroarje it Y-koördinaat fan it middelpunt fan'e sirkel.",
+ "circle_r": "Feroarje sirkelradius",
+ "ellipse_cx": "Feroarje it X-koördinaat fan it middelpunt fan'e ellips.",
+ "ellipse_cy": "Feroarje it Y-koördinaat fan it middelpunt fan'e ellips.",
+ "ellipse_rx": "Feroarje ellips X radius",
+ "ellipse_ry": "Feroarje ellips Y radius",
+ "line_x1": "Feroarje start X koördinaat fan'e line",
+ "line_x2": "Feroarje ein X koördinaat fan'e line",
+ "line_y1": "Feroarje start Y koördinaat fan'e line",
+ "line_y2": "Feroarje ein Y koördinaat fan'e line",
+ "rect_height": "Hichte rjochthoeke oanpasse",
+ "rect_width": "Breedte rjochthoeke oanpasse",
+ "corner_radius": "Hoekeradius oanpasse",
+ "image_width": "Breedte ôfbielding oanpasse",
+ "image_height": "Hichte ôfbielding oanpasse",
+ "image_url": "URL oanpasse",
+ "node_x": "X-koördinaat knooppunt oanpasse",
+ "node_y": "Y-koördinaat knooppunt oanpasse",
+ "seg_type": "Segmenttype oanpasse",
+ "straight_segments": "Rjocht",
+ "curve_segments": "Bûcht",
+ "text_contents": "Tekst oanpasse",
+ "font_family": "Lettertype oanpasse",
+ "font_size": "Lettergrutte oanpasse",
+ "bold": "Fet",
+ "italic": "Skean"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Eftergrûnkleur/trochsichtigens oanpasse",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Passe op ynhâld",
+ "fit_to_all": "Op alle ynhâld passe",
+ "fit_to_canvas": "Op kanvas passe",
+ "fit_to_layer_content": "Op laachynhâld passe",
+ "fit_to_sel": "Op seleksje passe",
+ "align_relative_to": "Útlijne relatyf oan...",
+ "relativeTo": "Relatief tsjinoer:",
+ "Side": "Side",
+ "largest_object": "Grutste ûnderdiel",
+ "selected_objects": "Selektearre ûnderdielen",
+ "smallest_object": "Lytste ûnderdiel",
+ "new_doc": "Nije ôfbielding",
+ "open_doc": "Ôfbielding iepenje",
+ "export_png": "Export as PNG",
+ "save_doc": "Ôfbielding bewarje",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Ûnder útlijne",
+ "align_center": "Midden útlijne",
+ "align_left": "Lofts útlijne",
+ "align_middle": "Midden útlijne",
+ "align_right": "Rjochts útlijne",
+ "align_top": "Boppe útlijne",
+ "mode_select": "Selektearje",
+ "mode_fhpath": "Potlead",
+ "mode_line": "Line",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Frije rjochthoeke",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Sirkel",
+ "mode_fhellipse": "Frije ellips",
+ "mode_path": "Paad",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst",
+ "mode_image": "Ôfbielding",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Ungedien meitjse",
+ "redo": "Op 'e nij",
+ "tool_source": "Boarne oanpasse",
+ "wireframe_mode": "Triemodel",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Ûnderdielen groepearje",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Omsette nei paad",
+ "reorient_path": "Paad opnij orientearje",
+ "ungroup": "Groepering opheffe",
+ "docprops": "Dokuminteigenskippen",
+ "imagelib": "Image Library",
+ "move_bottom": "Nei eftergrûn",
+ "move_top": "Nei foargrûn",
+ "node_clone": "Knooppunt duplisearje",
+ "node_delete": "Knooppunt fuortsmite",
+ "node_link": "Knooppunten keppelje",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Feroarings tapasse",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Laach",
+ "layers": "Layers",
+ "del": "Laach fuortsmite",
+ "move_down": "Laach omleech bringe",
+ "new": "Nije laach",
+ "rename": "Laach omneame",
+ "move_up": "Laach omheech bringe",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Ûnderdielen ferplaate nei:",
+ "move_selected": "Selektearre ûnderdielen ferplaatse nei in oare laach"
+ },
+ config: {
+ "image_props": "Ôfbieldingseigenskippen",
+ "doc_title": "Titel",
+ "doc_dims": "Kanvasgrutte",
+ "included_images": "Ynslúten ôfbieldingen",
+ "image_opt_embed": "Ynformaasje tafoege (lokale triemen)",
+ "image_opt_ref": "Triemreferensje brûke",
+ "editor_prefs": "Eigenskippen bewurker",
+ "icon_size": "Ikoangrutte",
+ "language": "Taal",
+ "background": "Eftergrûn bewurker",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Let op: de eftergrûn wurd net mei de ôfbielding bewarre.",
+ "icon_large": "Grut",
+ "icon_medium": "Middel",
+ "icon_small": "Lyts",
+ "icon_xlarge": "Ekstra grut",
+ "select_predefined": "Selektearje:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Ferkearde waarde jûn",
+ "noContentToFitTo":"Gjin ynhâld om te passen",
+ "dupeLayerName":"Der is al in laach mei dy namme!",
+ "enterUniqueLayerName":"Type in unyke laachnamme",
+ "enterNewLayerName":"Type in nije laachnamme",
+ "layerHasThatName":"Laach hat dy namme al",
+ "QmoveElemsToLayer":"Selektearre ûnderdielen ferplaatse nei '%s'?",
+ "QwantToClear":"Ôfbielding leechmeitsje? Dit sil ek de skiednis fuortsmite!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Der wiene flaters yn de SVG-boarne.\nWeromgean nei foarige SVG-boarne?",
+ "QignoreSourceChanges":"Feroarings yn SVG-boarne negeare?",
+ "featNotSupported":"Funksje wurdt net ûndersteund",
+ "enterNewImgURL":"Jou de nije URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ga.js b/files_svgedit/svg-edit/locale/lang.ga.js
new file mode 100644
index 000000000..7f0694814
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ga.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ga",
+ dir : "ltr",
+ common: {
+ "ok": "Sábháil",
+ "cancel": "Cealaigh",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Cliceáil chun athrú a líonadh dath, aistriú-cliceáil chun dath a athrú stróc",
+ "zoom_level": "Athraigh súmáil leibhéal",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Athraigh an dath a líonadh",
+ "stroke_color": "Dath stróc Athrú",
+ "stroke_style": "Athraigh an stíl Fleasc stróc",
+ "stroke_width": "Leithead stróc Athrú",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Uillinn rothlaithe Athrú",
+ "blur": "Change gaussian blur value",
+ "opacity": "Athraigh roghnaithe teimhneacht mír",
+ "circle_cx": "Athraigh an ciorcal a chomhordú CX",
+ "circle_cy": "Athraigh an ciorcal a chomhordú ga",
+ "circle_r": "Athraigh an ciorcal&#39;s ga",
+ "ellipse_cx": "Athraigh Éilips&#39;s CX a chomhordú",
+ "ellipse_cy": "Athraigh an Éilips a chomhordú ga",
+ "ellipse_rx": "Éilips Athraigh an gha x",
+ "ellipse_ry": "Éilips Athraigh an gha y",
+ "line_x1": "Athraigh an líne tosaigh a chomhordú x",
+ "line_x2": "Athraigh an líne deireadh x chomhordú",
+ "line_y1": "Athraigh an líne tosaigh a chomhordú y",
+ "line_y2": "Athrú ar líne deireadh y chomhordú",
+ "rect_height": "Airde dronuilleog Athrú",
+ "rect_width": "Leithead dronuilleog Athrú",
+ "corner_radius": "Athraigh Dronuilleog Cúinne na Ga",
+ "image_width": "Leithead íomhá Athrú",
+ "image_height": "Airde íomhá Athrú",
+ "image_url": "Athraigh an URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Inneachar Athraigh téacs",
+ "font_family": "Athraigh an Cló Teaghlaigh",
+ "font_size": "Athraigh Clómhéid",
+ "bold": "Trom Téacs",
+ "italic": "Iodálach Téacs"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Dath cúlra Athraigh / teimhneacht",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Laghdaigh do gach ábhar",
+ "fit_to_canvas": "Laghdaigh ar chanbhás",
+ "fit_to_layer_content": "Laghdaigh shraith ábhar a",
+ "fit_to_sel": "Laghdaigh a roghnú",
+ "align_relative_to": "Ailínigh i gcomparáid leis ...",
+ "relativeTo": "i gcomparáid leis:",
+ "leathanach": "leathanach",
+ "largest_object": "réad is mó",
+ "selected_objects": "réada tofa",
+ "smallest_object": "lú réad",
+ "new_doc": "Íomhá Nua",
+ "open_doc": "Íomhá Oscailte",
+ "export_png": "Export as PNG",
+ "save_doc": "Sábháil Íomhá",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Cineál Bun",
+ "align_center": "Ailínigh sa Lár",
+ "align_left": "Ailínigh ar Chlé",
+ "align_middle": "Cineál Middle",
+ "align_right": "Ailínigh ar Dheis",
+ "align_top": "Cineál Barr",
+ "mode_select": "Roghnaigh Uirlis",
+ "mode_fhpath": "Phionsail Uirlis",
+ "mode_line": "Uirlis Líne",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Saor Hand Dronuilleog",
+ "mode_ellipse": "Éilips",
+ "mode_circle": "Ciorcal",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Téacs Uirlis",
+ "mode_image": "Íomhá Uirlis",
+ "mode_zoom": "Zúmáil Uirlis",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Cealaigh",
+ "redo": "Athdhéan",
+ "tool_source": "Cuir Foinse",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Eilimintí Grúpa",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Eilimintí Díghrúpáil",
+ "docprops": "Doiciméad Airíonna",
+ "imagelib": "Image Library",
+ "move_bottom": "Téigh go Bun",
+ "move_top": "Téigh go Barr",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Sábháil",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Scrios Sraith",
+ "move_down": "Bog Sraith Síos",
+ "new": "Sraith Nua",
+ "rename": "Athainmnigh Sraith",
+ "move_up": "Bog Sraith Suas",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Roghnaigh réamhshainithe:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.gl.js b/files_svgedit/svg-edit/locale/lang.gl.js
new file mode 100644
index 000000000..c7be0c9c4
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.gl.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "gl",
+ dir : "ltr",
+ common: {
+ "ok": "Gardar",
+ "cancel": "Cancelar",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Preme aquí para cambiar a cor de recheo, Shift-clic para cambiar a cor do curso",
+ "zoom_level": "Cambiar o nivel de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Cambia-la cor de recheo",
+ "stroke_color": "Cambiar a cor do curso",
+ "stroke_style": "Modifica o estilo do trazo do curso",
+ "stroke_width": "Cambiar o ancho do curso",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Cambiar o ángulo de xiro",
+ "blur": "Change gaussian blur value",
+ "opacity": "Cambia a opacidade elemento seleccionado",
+ "circle_cx": "Cx Cambiar círculo de coordenadas",
+ "circle_cy": "Círculo Cambio cy coordinar",
+ "circle_r": "Cambiar círculo de raio",
+ "ellipse_cx": "Cambiar elipse cx coordinar",
+ "ellipse_cy": "Elipse Cambio cy coordinar",
+ "ellipse_rx": "Raios X Change elipse",
+ "ellipse_ry": "Radio y Change elipse",
+ "line_x1": "Cambie a liña de partida coordenada x",
+ "line_x2": "Cambie a liña acaba coordenada x",
+ "line_y1": "Cambio na liña do recurso coordinada y",
+ "line_y2": "Salto de liña acaba coordinada y",
+ "rect_height": "Cambiar altura do rectángulo",
+ "rect_width": "Cambiar a largo rectángulo",
+ "corner_radius": "Cambiar Corner Rectangle Radius",
+ "image_width": "Cambiar o ancho da imaxe",
+ "image_height": "Cambiar altura da imaxe",
+ "image_url": "Cambiar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Cambiar o contido de texto",
+ "font_family": "Cambiar fonte Familia",
+ "font_size": "Mudar tamaño de letra",
+ "bold": "Bold Text",
+ "italic": "Texto en cursiva"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mudar a cor de fondo / Opacidade",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Axustar ó contido",
+ "fit_to_all": "Axustar a todo o contido",
+ "fit_to_canvas": "Axustar a pantalla",
+ "fit_to_layer_content": "Axustar o contido da capa de",
+ "fit_to_sel": "Axustar a selección",
+ "align_relative_to": "Aliñar en relación a ...",
+ "relativeTo": "en relación ao:",
+ "Portada": "Portada",
+ "largest_object": "maior obxecto",
+ "selected_objects": "obxectos elixidos",
+ "smallest_object": "menor obxecto",
+ "new_doc": "Nova Imaxe",
+ "open_doc": "Abrir Imaxe",
+ "export_png": "Export as PNG",
+ "save_doc": "Gardar Imaxe",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align bottom",
+ "align_center": "Centrar",
+ "align_left": "Aliñar á Esquerda",
+ "align_middle": "Aliñar Medio",
+ "align_right": "Aliñar á Dereita",
+ "align_top": "Align Top",
+ "mode_select": "Seleccionar a ferramenta",
+ "mode_fhpath": "Ferramenta Lapis",
+ "mode_line": "Ferramenta Liña",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Ferramenta de Texto",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Desfacer",
+ "redo": "Volver",
+ "tool_source": "Fonte Editar",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementos do grupo",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elementos Desagrupadas",
+ "docprops": "Propriedades do Documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Move a Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Gardar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move capa inferior",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Seleccione por defecto:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.he.js b/files_svgedit/svg-edit/locale/lang.he.js
new file mode 100755
index 000000000..555c9f758
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.he.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "he",
+ dir : "ltr",
+ common: {
+ "ok": "לשמור",
+ "cancel": "ביטול",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "לחץ כדי לשנות צבע מילוי, לחץ על Shift-לשנות צבע שבץ",
+ "zoom_level": "שינוי גודל תצוגה",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "שינוי צבע מילוי",
+ "stroke_color": "שינוי צבע שבץ",
+ "stroke_style": "דש שבץ שינוי סגנון",
+ "stroke_width": "שינוי רוחב שבץ",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "שינוי זווית הסיבוב",
+ "blur": "Change gaussian blur value",
+ "opacity": "שינוי הפריט הנבחר אטימות",
+ "circle_cx": "CX מעגל של שנה לתאם",
+ "circle_cy": "מעגל שנה של cy לתאם",
+ "circle_r": "מעגל שנה של רדיוס",
+ "ellipse_cx": "שינוי של אליפסה CX לתאם",
+ "ellipse_cy": "אליפסה שינוי של cy לתאם",
+ "ellipse_rx": "אליפסה שינוי של רדיוס x",
+ "ellipse_ry": "אליפסה שינוי של Y רדיוס",
+ "line_x1": "שינוי קו ההתחלה של x לתאם",
+ "line_x2": "שינוי קו הסיום של x לתאם",
+ "line_y1": "שינוי קו ההתחלה של Y לתאם",
+ "line_y2": "שינוי קו הסיום של Y לתאם",
+ "rect_height": "שינוי גובה המלבן",
+ "rect_width": "שינוי רוחב המלבן",
+ "corner_radius": "לשנות מלבן פינת רדיוס",
+ "image_width": "שינוי רוחב התמונה",
+ "image_height": "שינוי גובה התמונה",
+ "image_url": "שינוי כתובת",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "שינוי תוכן טקסט",
+ "font_family": "שינוי גופן משפחה",
+ "font_size": "שנה גודל גופן",
+ "bold": "טקסט מודגש",
+ "italic": "טקסט נטוי"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "שנה את צבע הרקע / אטימות",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "התאם תוכן",
+ "fit_to_all": "התאם התכנים",
+ "fit_to_canvas": "התאם בד",
+ "fit_to_layer_content": "מתאים לתוכן שכבת",
+ "fit_to_sel": "התאם הבחירה",
+ "align_relative_to": "יישור ביחס ...",
+ "relativeTo": "יחסית:",
+ "דף": "דף",
+ "largest_object": "האובייקט הגדול",
+ "selected_objects": "elected objects",
+ "smallest_object": "הקטן אובייקט",
+ "new_doc": "תמונה חדשה",
+ "open_doc": "פתח תמונה",
+ "export_png": "Export as PNG",
+ "save_doc": "שמור תמונה",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "יישור תחתון",
+ "align_center": "ישור לאמצע",
+ "align_left": "יישור לשמאל",
+ "align_middle": "יישור התיכון",
+ "align_right": "יישור לימין",
+ "align_top": "יישור למעלה",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "כלי העיפרון",
+ "mode_line": "כלי הקו",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand מלבן",
+ "mode_ellipse": "אליפסה",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand אליפסה",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "כלי טקסט",
+ "mode_image": "כלי תמונה",
+ "mode_zoom": "זום כלי",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "בטל",
+ "redo": "בצע שוב",
+ "tool_source": "מקור ערוך",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "אלמנטים הקבוצה",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "אלמנטים פרק קבוצה",
+ "docprops": "מאפייני מסמך",
+ "imagelib": "Image Library",
+ "move_bottom": "הזז למטה",
+ "move_top": "עבור לראש הדף",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "לשמור",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "מחיקת שכבה",
+ "move_down": "הזז למטה שכבה",
+ "new": "שכבהחדשה",
+ "rename": "שינוי שם שכבה",
+ "move_up": "העבר שכבה Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "בחר מוגדרים מראש:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.hi.js b/files_svgedit/svg-edit/locale/lang.hi.js
new file mode 100644
index 000000000..c495cd02c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.hi.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hi",
+ dir : "ltr",
+ common: {
+ "ok": "बचाना",
+ "cancel": "रद्द करें",
+ "key_backspace": "बैकस्पेस",
+ "key_del": "हटायें",
+ "key_down": "नीचे",
+ "key_up": "ऊपर",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "रंग बदलने पर क्लिक करें, बदलाव भरने के क्लिक करने के लिए स्ट्रोक का रंग बदलने के लिए",
+ "zoom_level": "बदलें स्तर ज़ूम",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "बदलें का रंग भरना",
+ "stroke_color": "बदलें स्ट्रोक रंग",
+ "stroke_style": "बदलें स्ट्रोक डेश शैली",
+ "stroke_width": "बदलें स्ट्रोक चौड़ाई",
+ "pos_x": "X समकक्ष बदलें ",
+ "pos_y": "Y समकक्ष बदलें",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "बदलें रोटेशन कोण",
+ "blur": "Change gaussian blur value",
+ "opacity": "पारदर्शिता बदलें",
+ "circle_cx": "बदल रहा है चक्र cx समन्वय",
+ "circle_cy": "परिवर्तन चक्र cy समन्वय है",
+ "circle_r": "बदल रहा है चक्र त्रिज्या",
+ "ellipse_cx": "बदलें दीर्घवृत्त है cx समन्वय",
+ "ellipse_cy": "बदलें दीर्घवृत्त cy समन्वय है",
+ "ellipse_rx": "बदल रहा है दीर्घवृत्त x त्रिज्या",
+ "ellipse_ry": "बदल रहा है दीर्घवृत्त y त्रिज्या",
+ "line_x1": "बदल रहा है लाइन x समन्वय शुरू",
+ "line_x2": "बदल रहा है लाइन x समन्वय समाप्त",
+ "line_y1": "बदलें रेखा y शुरू हो रहा है समन्वय",
+ "line_y2": "बदलें रेखा y अंत है समन्वय",
+ "rect_height": "बदलें आयत ऊंचाई",
+ "rect_width": "बदलें आयत चौड़ाई",
+ "corner_radius": "बदलें आयत कॉर्नर त्रिज्या",
+ "image_width": "बदलें छवि चौड़ाई",
+ "image_height": "बदलें छवि ऊँचाई",
+ "image_url": "बदलें यूआरएल",
+ "node_x": "नोड का x समकक्ष बदलें",
+ "node_y": "नोड का y समकक्ष बदलें",
+ "seg_type": "वर्ग प्रकार बदलें",
+ "straight_segments": "सीधे वर्ग",
+ "curve_segments": "घुमाव",
+ "text_contents": "बदलें पाठ सामग्री",
+ "font_family": "बदलें फ़ॉन्ट परिवार",
+ "font_size": "फ़ॉन्ट का आकार बदलें",
+ "bold": "मोटा पाठ",
+ "italic": "इटैलिक पाठ"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "पृष्ठभूमि का रंग बदल / अस्पष्टता",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "सामग्री के लिए फिट",
+ "fit_to_all": "सभी सामग्री के लिए फिट",
+ "fit_to_canvas": "फिट कैनवास को",
+ "fit_to_layer_content": "फिट परत सामग्री के लिए",
+ "fit_to_sel": "चयन के लिए फिट",
+ "align_relative_to": "संरेखित करें रिश्तेदार को ...",
+ "relativeTo": "रिश्तेदार को:",
+ "पृष्ठ": "पृष्ठ",
+ "largest_object": "सबसे बड़ी वस्तु",
+ "selected_objects": "निर्वाचित वस्तुओं",
+ "smallest_object": "छोटी से छोटी वस्तु",
+ "new_doc": "नई छवि",
+ "open_doc": "छवि खोलें",
+ "export_png": "Export as PNG",
+ "save_doc": "सहेजें छवि",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "तलमेंपंक्तिबद्धकरें",
+ "align_center": "मध्य में समंजित करें",
+ "align_left": " पंक्तिबद्ध करें",
+ "align_middle": "मध्य संरेखित करें",
+ "align_right": "दायाँपंक्तिबद्धकरें",
+ "align_top": "शीर्षमेंपंक्तिबद्धकरें",
+ "mode_select": "उपकरण चुनें",
+ "mode_fhpath": "पेंसिल उपकरण",
+ "mode_line": "लाइन उपकरण",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "नि: शुल्क हाथ आयत",
+ "mode_ellipse": "दीर्घवृत्त",
+ "mode_circle": "वृत्त",
+ "mode_fhellipse": "नि: शुल्क हाथ दीर्घवृत्त",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "पाठ उपकरण",
+ "mode_image": "छवि उपकरण",
+ "mode_zoom": "ज़ूम उपकरण",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "पूर्ववत करें",
+ "redo": "फिर से करें",
+ "tool_source": "स्रोत में बदलाव करें",
+ "wireframe_mode": "रूपरेखा मोड",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "समूह तत्वों",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "पथ में बदलें",
+ "reorient_path": "पथ को नई दिशा दें",
+ "ungroup": "अंश को समूह से अलग करें",
+ "docprops": "दस्तावेज़ गुण",
+ "imagelib": "Image Library",
+ "move_bottom": "नीचे ले जाएँ",
+ "move_top": "ऊपर ले जाएँ",
+ "node_clone": "नोड क्लोन",
+ "node_delete": "नोड हटायें",
+ "node_link": "कड़ी नियंत्रण बिंदु",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "बचाना",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "हटायें": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"परत",
+ "layers": "Layers",
+ "del": "परत हटाएँ",
+ "move_down": "परत नीचे ले जाएँ",
+ "new": "नई परत",
+ "rename": "परत का नाम बदलें",
+ "move_up": "परत ऊपर ले जाएँ",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "अंश को ले जाएँ:",
+ "move_selected": "चयनित अंश को दूसरी परत पर ले जाएँ"
+ },
+ config: {
+ "image_props": "छवि के गुण",
+ "doc_title": "शीर्षक",
+ "doc_dims": "कैनवास आयाम",
+ "included_images": "शामिल छवियाँ",
+ "image_opt_embed": "एम्बेड डेटा (स्थानीय फ़ाइलें)",
+ "image_opt_ref": "फाइल के संदर्भ का प्रयोग",
+ "editor_prefs": "संपादक वरीयताएँ",
+ "icon_size": "चिह्न का आकार",
+ "language": "भाषा",
+ "background": "संपादक पृष्ठभूमि",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "नोट: पृष्ठभूमि छवि के साथ नहीं बचायी जाएगी",
+ "icon_large": "बड़ा",
+ "icon_medium": "मध्यम",
+ "icon_small": "छोटा",
+ "icon_xlarge": "बहुत बड़ा",
+ "select_predefined": "चुनें पूर्वनिर्धारित:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"अमान्य मूल्य",
+ "noContentToFitTo":"कोई सामग्री फिट करने के लिए उपलब्ध नहीं",
+ "dupeLayerName":"इस नाम कि परत पहले से मौजूद है !",
+ "enterUniqueLayerName":"कृपया परत का एक अद्वितीय नाम डालें",
+ "enterNewLayerName":"कृपया परत का एक नया नाम डालें",
+ "layerHasThatName":"परत का पहले से ही यही नाम है",
+ "QmoveElemsToLayer":"चयनित अंश को परत '%s' पर ले जाएँ ?",
+ "QwantToClear":"क्या आप छवि साफ़ करना चाहते हैं?\nयह आपके उन्डू इतिहास को भी मिटा देगा!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"आपके एस.वी.जी. स्रोत में त्रुटियों थी.\nक्या आप मूल एस.वी.जी स्रोत पर वापिस जाना चाहते हैं?",
+ "QignoreSourceChanges":"एसवीजी स्रोत से लाये बदलावों को ध्यान न दें?",
+ "featNotSupported":"सुविधा असमर्थित है",
+ "enterNewImgURL":"नई छवि URL दर्ज करें",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.hr.js b/files_svgedit/svg-edit/locale/lang.hr.js
new file mode 100644
index 000000000..629abb341
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.hr.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hr",
+ dir : "ltr",
+ common: {
+ "ok": "Spremiti",
+ "cancel": "Odustani",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kliknite promijeniti boju ispune, shift-click to promijeniti boju moždanog udara",
+ "zoom_level": "Promjena razine zumiranja",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Promjena boje ispune",
+ "stroke_color": "Promjena boje moždani udar",
+ "stroke_style": "Promijeni stroke crtica stil",
+ "stroke_width": "Promjena širine moždani udar",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Promijeni rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Promjena odabrane stavke neprozirnost",
+ "circle_cx": "Promjena krug&#39;s CX koordinirati",
+ "circle_cy": "Cy Promijeni krug je koordinirati",
+ "circle_r": "Promjena krug je radijusa",
+ "ellipse_cx": "Promjena elipsa&#39;s CX koordinirati",
+ "ellipse_cy": "Cy Promijeni elipsa je koordinirati",
+ "ellipse_rx": "Promijeniti elipsa&#39;s x polumjer",
+ "ellipse_ry": "Promjena elipsa&#39;s y polumjer",
+ "line_x1": "Promijeni linija je početak x koordinatu",
+ "line_x2": "Promjena linije završetak x koordinatu",
+ "line_y1": "Promijeni linija je početak y koordinatu",
+ "line_y2": "Promjena linije završetak y koordinatu",
+ "rect_height": "Promijeni pravokutnik visine",
+ "rect_width": "Promijeni pravokutnik širine",
+ "corner_radius": "Promijeni Pravokutnik Corner Radius",
+ "image_width": "Promijeni sliku širine",
+ "image_height": "Promijeni sliku visina",
+ "image_url": "Promijeni URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Promjena sadržaja teksta",
+ "font_family": "Promjena fontova",
+ "font_size": "Change font size",
+ "bold": "Podebljani tekst",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Promijeni boju pozadine / neprozirnost",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Prilagodi na sve sadržaje",
+ "fit_to_canvas": "Prilagodi na platnu",
+ "fit_to_layer_content": "Prilagodi sloj sadržaj",
+ "fit_to_sel": "Prilagodi odabir",
+ "align_relative_to": "Poravnaj u odnosu na ...",
+ "relativeTo": "u odnosu na:",
+ "stranica": "stranica",
+ "largest_object": "najveći objekt",
+ "selected_objects": "izabrani objekti",
+ "smallest_object": "najmanji objekt",
+ "new_doc": "Nove slike",
+ "open_doc": "Otvori sliku",
+ "export_png": "Export as PNG",
+ "save_doc": "Spremanje slike",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Poravnaj dolje",
+ "align_center": "Centriraj",
+ "align_left": "Poravnaj lijevo",
+ "align_middle": "Poravnaj Srednji",
+ "align_right": "Poravnaj desno",
+ "align_top": "Poravnaj Top",
+ "mode_select": "Odaberite alat",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Pravokutnik",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst Alat",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Alat za zumiranje",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Poništi",
+ "redo": "Redo",
+ "tool_source": "Uredi Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupa Elementi",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Razgrupiranje Elementi",
+ "docprops": "Svojstva dokumenta",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Pomakni na vrh",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Spremiti",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Brisanje sloja",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Preimenuj Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefinirane:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.hu.js b/files_svgedit/svg-edit/locale/lang.hu.js
new file mode 100644
index 000000000..000068693
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.hu.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hu",
+ dir : "ltr",
+ common: {
+ "ok": "Ment",
+ "cancel": "Szakítani",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kattints ide a változások töltse szín, shift-click változtatni stroke color",
+ "zoom_level": "Change nagyítási",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change töltse color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke kötőjel style",
+ "stroke_width": "Change stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Váltás forgás szög",
+ "blur": "Change gaussian blur value",
+ "opacity": "A kijelölt elem opacity",
+ "circle_cx": "Change kör CX koordináta",
+ "circle_cy": "Change kör cy koordináta",
+ "circle_r": "Change kör sugara",
+ "ellipse_cx": "Change ellipszis&#39;s CX koordináta",
+ "ellipse_cy": "Change ellipszis&#39;s cy koordináta",
+ "ellipse_rx": "Change ellipszis&#39;s x sugarú",
+ "ellipse_ry": "Change ellipszis&#39;s y sugara",
+ "line_x1": "A sor kezd x koordináta",
+ "line_x2": "A sor vége az x koordináta",
+ "line_y1": "A sor kezd y koordináta",
+ "line_y2": "A sor vége az y koordináta",
+ "rect_height": "Change téglalap magassága",
+ "rect_width": "Change téglalap szélessége",
+ "corner_radius": "Change téglalap sarok sugara",
+ "image_width": "Change kép szélessége",
+ "image_height": "Kép módosítása height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "A szöveg tartalma",
+ "font_family": "Change Betűcsalád",
+ "font_size": "Change font size",
+ "bold": "Félkövér szöveg",
+ "italic": "Dőlt szöveg"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color / homályosság",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Illeszkednek az összes tartalom",
+ "fit_to_canvas": "Igazítás a vászonra",
+ "fit_to_layer_content": "Igazítás a réteg tartalma",
+ "fit_to_sel": "Igazítás a kiválasztási",
+ "align_relative_to": "Képest Igazítás ...",
+ "relativeTo": "relatív hogy:",
+ "Page": "Page",
+ "largest_object": "legnagyobb objektum",
+ "selected_objects": "választott tárgyak",
+ "smallest_object": "legkisebb objektum",
+ "new_doc": "Új kép",
+ "open_doc": "Kép megnyitása",
+ "export_png": "Export as PNG",
+ "save_doc": "Kép mentése más",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alulra igazítás",
+ "align_center": "Középre igazítás",
+ "align_left": "Balra igazítás",
+ "align_middle": "Közép-align",
+ "align_right": "Jobbra igazítás",
+ "align_top": "Align Top",
+ "mode_select": "Válassza ki az eszközt",
+ "mode_fhpath": "Ceruza eszköz",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand téglalap",
+ "mode_ellipse": "Ellipszisszelet",
+ "mode_circle": "Körbe",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Szöveg eszköz",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Visszavon",
+ "redo": "Megismétléséhez",
+ "tool_source": "Szerkesztés Forrás",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Csoport elemei",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Szétbont elemei",
+ "docprops": "Dokumentum tulajdonságai",
+ "imagelib": "Image Library",
+ "move_bottom": "Mozgatás lefelé",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Ment",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Réteg törlése",
+ "move_down": "Mozgatása lefelé",
+ "new": "Új réteg",
+ "rename": "Réteg átnevezése",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Válassza ki előre definiált:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.hy.js b/files_svgedit/svg-edit/locale/lang.hy.js
new file mode 100644
index 000000000..54851b77e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.hy.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "hy",
+ dir : "ltr",
+ common: {
+ "ok": "Save",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "elected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.id.js b/files_svgedit/svg-edit/locale/lang.id.js
new file mode 100644
index 000000000..aedfa7565
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.id.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "id",
+ dir : "ltr",
+ common: {
+ "ok": "Simpan",
+ "cancel": "Batal",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik untuk mengubah warna mengisi, shift-klik untuk mengubah warna stroke",
+ "zoom_level": "Mengubah tingkat pembesaran",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Ubah warna mengisi",
+ "stroke_color": "Ubah warna stroke",
+ "stroke_style": "Ubah gaya dash stroke",
+ "stroke_width": "Ubah stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Ubah sudut rotasi",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mengubah item yang dipilih keburaman",
+ "circle_cx": "Mengubah koordinat lingkaran cx",
+ "circle_cy": "Mengubah koordinat cy lingkaran",
+ "circle_r": "Ubah jari-jari lingkaran",
+ "ellipse_cx": "Ubah elips&#39;s cx koordinat",
+ "ellipse_cy": "Ubah elips&#39;s cy koordinat",
+ "ellipse_rx": "Ubah elips&#39;s x jari-jari",
+ "ellipse_ry": "Ubah elips&#39;s y jari-jari",
+ "line_x1": "Ubah baris mulai x koordinat",
+ "line_x2": "Ubah baris&#39;s Berakhir x koordinat",
+ "line_y1": "Ubah baris mulai y koordinat",
+ "line_y2": "Ubah baris di tiap akhir y koordinat",
+ "rect_height": "Perubahan tinggi persegi panjang",
+ "rect_width": "Ubah persegi panjang lebar",
+ "corner_radius": "Ubah Corner Rectangle Radius",
+ "image_width": "Ubah Lebar gambar",
+ "image_height": "Tinggi gambar Perubahan",
+ "image_url": "Ubah URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Ubah isi teks",
+ "font_family": "Ubah Font Keluarga",
+ "font_size": "Ubah Ukuran Font",
+ "bold": "Bold Teks",
+ "italic": "Italic Teks"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mengubah warna latar belakang / keburaman",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Cocok untuk semua konten",
+ "fit_to_canvas": "Muat kanvas",
+ "fit_to_layer_content": "Muat konten lapisan",
+ "fit_to_sel": "Fit seleksi",
+ "align_relative_to": "Rata relatif ...",
+ "relativeTo": "relatif:",
+ "Halaman": "Halaman",
+ "largest_object": "objek terbesar",
+ "selected_objects": "objek terpilih",
+ "smallest_object": "objek terkecil",
+ "new_doc": "Gambar Baru",
+ "open_doc": "Membuka Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Rata Bottom",
+ "align_center": "Rata Tengah",
+ "align_left": "Rata Kiri",
+ "align_middle": "Rata Tengah",
+ "align_right": "Rata Kanan",
+ "align_top": "Rata Top",
+ "mode_select": "Pilih Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Persegi Panjang",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Lingkaran",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Teks Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Kelompok Elemen",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elemen",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Pindah ke Bawah",
+ "move_top": "Pindahkan ke Atas",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Simpan",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Hapus Layer",
+ "move_down": "Pindahkan Layer Bawah",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Pindahkan Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Pilih standar:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.is.js b/files_svgedit/svg-edit/locale/lang.is.js
new file mode 100644
index 000000000..2ef73f71e
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.is.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "is",
+ dir : "ltr",
+ common: {
+ "ok": "Vista",
+ "cancel": "Hætta",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Smelltu hér til að breyta fylla lit, Shift-smelltu til að breyta högg lit",
+ "zoom_level": "Breyta Stækkunarstig",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Breyta fylla color",
+ "stroke_color": "Breyta heilablķđfall color",
+ "stroke_style": "Breyta heilablķđfall þjóta stíl",
+ "stroke_width": "Breyta heilablķđfall width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Breyting snúningur horn",
+ "blur": "Change gaussian blur value",
+ "opacity": "Breyta valin atriði opacity",
+ "circle_cx": "Cx Breyta hring er að samræma",
+ "circle_cy": "Breyta hring&#39;s cy samræma",
+ "circle_r": "Radíus Breyta hringsins er",
+ "ellipse_cx": "Breyta sporbaug&#39;s cx samræma",
+ "ellipse_cy": "Breyta sporbaug&#39;s cy samræma",
+ "ellipse_rx": "X radíus Breyta sporbaug&#39;s",
+ "ellipse_ry": "Y radíus Breyta sporbaug&#39;s",
+ "line_x1": "Breyta lína í byrjun x samræma",
+ "line_x2": "Breyta lína&#39;s Ending x samræma",
+ "line_y1": "Breyta lína í byrjun y samræma",
+ "line_y2": "Breyta lína er endir y samræma",
+ "rect_height": "Breyta rétthyrningur hæð",
+ "rect_width": "Skipta rétthyrningur width",
+ "corner_radius": "Breyta rétthyrningur Corner Radíus",
+ "image_width": "Breyta mynd width",
+ "image_height": "Breyta mynd hæð",
+ "image_url": "Breyta URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Breyta texta innihald",
+ "font_family": "Change Leturfjölskylda",
+ "font_size": "Breyta leturstærð",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Breyta bakgrunnslit / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Laga til efni",
+ "fit_to_canvas": "Fit á striga",
+ "fit_to_layer_content": "Laga til lag efni",
+ "fit_to_sel": "Fit til val",
+ "align_relative_to": "Jafna miðað við ...",
+ "relativeTo": "hlutfallslegt til:",
+ "síðu": "síðu",
+ "largest_object": "stærsti hlutinn",
+ "selected_objects": "kjörinn hlutir",
+ "smallest_object": "lítill hluti",
+ "new_doc": "New Image",
+ "open_doc": "Opna mynd",
+ "export_png": "Export as PNG",
+ "save_doc": "Spara Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Jafna Bottom",
+ "align_center": "Jafna Center",
+ "align_left": "Vinstri jöfnun",
+ "align_middle": "Jafna Mið",
+ "align_right": "Hægri jöfnun",
+ "align_top": "Jöfnun Top",
+ "mode_select": "Veldu Tól",
+ "mode_fhpath": "Blýantur Tól",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand rétthyrningur",
+ "mode_ellipse": "Sporbaugur",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Sporbaugur",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Mynd Tól",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Hætta",
+ "redo": "Endurtaka",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Færa Bottom",
+ "move_top": "Fara efst á síðu",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Vista",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Eyða Lag",
+ "move_down": "Færa Layer Down",
+ "new": "Lag",
+ "rename": "Endurnefna Lag",
+ "move_up": "Færa Lag Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Veldu predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.it.js b/files_svgedit/svg-edit/locale/lang.it.js
new file mode 100644
index 000000000..594e5128c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.it.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "it",
+ dir : "ltr",
+ common: {
+ "ok": "Salva",
+ "cancel": "Annulla",
+ "key_backspace": "backspace",
+ "key_del": "Canc",
+ "key_down": "giù",
+ "key_up": "su",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Mostra/nascondi strumenti per il tratto",
+ "palette_info": "Fare clic per cambiare il colore di riempimento, shift-click per cambiare colore del tratto",
+ "zoom_level": "Cambia il livello di zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identifica l'elemento",
+ "fill_color": "Cambia il colore di riempimento",
+ "stroke_color": "Cambia il colore del tratto",
+ "stroke_style": "Cambia lo stile del tratto",
+ "stroke_width": "Cambia la larghezza del tratto",
+ "pos_x": "Modifica la coordinata x",
+ "pos_y": "Modifica la coordinata y",
+ "linecap_butt": "Inizio linea: Punto",
+ "linecap_round": "Inizio linea: Tondo",
+ "linecap_square": "Inizio linea: Quadrato",
+ "linejoin_bevel": "Giunzione: smussata",
+ "linejoin_miter": "Giunzione: spezzata",
+ "linejoin_round": "Giunzione: arrotondata",
+ "angle": "Cambia l'angolo di rotazione",
+ "blur": "Cambia l'intensità della sfocatura",
+ "opacity": "Cambia l'opacità dell'oggetto selezionato",
+ "circle_cx": "Cambia la coordinata Cx del cerchio",
+ "circle_cy": "Cambia la coordinata Cy del cerchio",
+ "circle_r": "Cambia il raggio del cerchio",
+ "ellipse_cx": "Cambia la coordinata Cx dell'ellisse",
+ "ellipse_cy": "Cambia la coordinata Cy dell'ellisse",
+ "ellipse_rx": "Cambia l'asse x dell'ellisse",
+ "ellipse_ry": "Cambia l'asse y dell'ellisse",
+ "line_x1": "Modifica la coordinata iniziale x della linea",
+ "line_x2": "Modifica la coordinata finale x della linea",
+ "line_y1": "Modifica la coordinata iniziale y della linea",
+ "line_y2": "Modifica la coordinata finale y della linea",
+ "rect_height": "Cambia l'altezza rettangolo",
+ "rect_width": "Cambia la larghezza rettangolo",
+ "corner_radius": "Cambia il raggio dell'angolo",
+ "image_width": "Cambia la larghezza dell'immagine",
+ "image_height": "Cambia l'altezza dell'immagine",
+ "image_url": "Cambia URL",
+ "node_x": "Modifica la coordinata x del nodo",
+ "node_y": "Modifica la coordinata y del nodo",
+ "seg_type": "Cambia il tipo di segmento",
+ "straight_segments": "Linea retta",
+ "curve_segments": "Curva",
+ "text_contents": "Cambia il contenuto del testo",
+ "font_family": "Cambia il tipo di Font",
+ "font_size": "Modifica dimensione carattere",
+ "bold": "Grassetto",
+ "italic": "Corsivo"
+ },
+ tools: {
+ "main_menu": "Menù principale",
+ "bkgnd_color_opac": "Cambia colore/opacità dello sfondo",
+ "connector_no_arrow": "No freccia",
+ "fitToContent": "Adatta al contenuto",
+ "fit_to_all": "Adatta a tutti i contenuti",
+ "fit_to_canvas": "Adatta all'area di disegno",
+ "fit_to_layer_content": "Adatta al contenuto del livello",
+ "fit_to_sel": "Adatta alla selezione",
+ "align_relative_to": "Allineati a ...",
+ "relativeTo": "Rispetto a:",
+ "Pagina": "Pagina",
+ "largest_object": "Oggetto più grande",
+ "selected_objects": "Oggetti selezionati",
+ "smallest_object": "Oggetto più piccolo",
+ "new_doc": "Nuova immagine",
+ "open_doc": "Apri immagine",
+ "export_png": "Esporta come PNG",
+ "save_doc": "Salva",
+ "import_doc": "Importa SVG",
+ "align_to_page": "Allinea elementi alla pagina",
+ "align_bottom": "Allinea in basso",
+ "align_center": "Allinea al centro",
+ "align_left": "Allinea a sinistra",
+ "align_middle": "Allinea al centro",
+ "align_right": "Allinea a destra",
+ "align_top": "Allinea in alto",
+ "mode_select": "Seleziona",
+ "mode_fhpath": "Matita",
+ "mode_line": "Linea",
+ "mode_connect": "Collega due oggetti",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Rettangolo a mano libera",
+ "mode_ellipse": "Ellisse",
+ "mode_circle": "Cerchio",
+ "mode_fhellipse": "Ellisse a mano libera",
+ "mode_path": "Spezzata",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Testo",
+ "mode_image": "Immagine",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Seleziona colore",
+ "no_embed": "NOTA: L'immagine non può essere incorporata: dipenderà dal percorso assoluto per essere vista",
+ "undo": "Annulla",
+ "redo": "Rifai",
+ "tool_source": "Modifica sorgente",
+ "wireframe_mode": "Contorno",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Raggruppa elementi",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Converti in tracciato",
+ "reorient_path": "Riallinea",
+ "ungroup": "Separa gli elementi",
+ "docprops": "Proprietà del documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Sposta in fondo",
+ "move_top": "Sposta in cima",
+ "node_clone": "Clona nodo",
+ "node_delete": "Elimina nodo",
+ "node_link": "Collegamento tra punti di controllo",
+ "add_subpath": "Aggiungi sotto-percorso",
+ "openclose_path": "Apri/chiudi spezzata",
+ "source_save": "Salva",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Canc": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Livello",
+ "layers": "Layers",
+ "del": "Elimina il livello",
+ "move_down": "Sposta indietro il livello",
+ "new": "Nuovo livello",
+ "rename": "Rinomina il livello",
+ "move_up": "Sposta avanti il livello",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Sposta verso:",
+ "move_selected": "Sposta gli elementi in un diverso livello"
+ },
+ config: {
+ "image_props": "Proprietà Immagine",
+ "doc_title": "Titolo",
+ "doc_dims": "Dimensioni dell'area di disegno",
+ "included_images": "Immagini incluse",
+ "image_opt_embed": "Incorpora dati (file locali)",
+ "image_opt_ref": "Usa l'identificativo di riferimento",
+ "editor_prefs": "Preferenze",
+ "icon_size": "Dimensione Icona",
+ "language": "Lingua",
+ "background": "Sfondo dell'editor",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Nota: Lo sfondo non verrà salvato con l'immagine.",
+ "icon_large": "Grande",
+ "icon_medium": "Medio",
+ "icon_small": "Piccolo",
+ "icon_xlarge": "Molto grande",
+ "select_predefined": "Selezioni predefinite:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valore assegnato non valido",
+ "noContentToFitTo":"Non c'è contenuto cui adeguarsi",
+ "dupeLayerName":"C'è già un livello con questo nome!",
+ "enterUniqueLayerName":"Assegna un diverso nome a ciascun livello, grazie!",
+ "enterNewLayerName":"Assegna un nome al livello",
+ "layerHasThatName":"Un livello ha già questo nome",
+ "QmoveElemsToLayer":"Sposta gli elementi selezionali al livello '%s'?",
+ "QwantToClear":"Vuoi cancellare il disegno?\nVerrà eliminato anche lo storico delle modifiche!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Ci sono errori nel codice sorgente SVG.\nRitorno al codice originale?",
+ "QignoreSourceChanges":"Ignoro i cambiamenti nel sorgente SVG?",
+ "featNotSupported":"Caratteristica non supportata",
+ "enterNewImgURL":"Scrivi un nuovo URL per l'immagine",
+ "defsFailOnSave": "NOTA: A causa dlle caratteristiche del tuo browser, l'immagine potrà apparire errata (senza elementi o gradazioni) finché non sarà salvata.",
+ "loadingImage":"Sto caricando l'immagine. attendere prego...",
+ "saveFromBrowser": "Seleziona \"Salva con nome...\" nel browser per salvare l'immagine con nome %s .",
+ "noteTheseIssues": "Nota le seguenti particolarità: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ja.js b/files_svgedit/svg-edit/locale/lang.ja.js
new file mode 100644
index 000000000..27c58d41d
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ja.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ja",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "キャンセル",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "クリックで塗りの色を選択、Shift+クリックで線の色を選択",
+ "zoom_level": "ズーム倍率の変更",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "塗りの色を変更",
+ "stroke_color": "線の色を変更",
+ "stroke_style": "線種の変更",
+ "stroke_width": "線幅の変更",
+ "pos_x": "X座標を変更",
+ "pos_y": "Y座標を変更",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "回転角の変更",
+ "blur": "Change gaussian blur value",
+ "opacity": "不透明度",
+ "circle_cx": "円の中心を変更(X座標)",
+ "circle_cy": "円の中心を変更(Y座標)",
+ "circle_r": "変更円の半径",
+ "ellipse_cx": "楕円の中心を変更(X座標)",
+ "ellipse_cy": "楕円の中心を変更(Y座標)",
+ "ellipse_rx": "楕円の半径を変更(X座標)",
+ "ellipse_ry": "楕円の半径を変更(Y座標)",
+ "line_x1": "開始X座標",
+ "line_x2": "終了X座標",
+ "line_y1": "開始Y座標",
+ "line_y2": "終了Y座標",
+ "rect_height": "長方形の高さを変更",
+ "rect_width": "長方形の幅を変更",
+ "corner_radius": "長方形の角の半径を変更",
+ "image_width": "画像の幅を変更",
+ "image_height": "画像の高さを変更",
+ "image_url": "URLを変更",
+ "node_x": "ノードのX座標を変更",
+ "node_y": "ノードのY座標を変更",
+ "seg_type": "線分の種類を変更",
+ "straight_segments": "直線",
+ "curve_segments": "カーブ",
+ "text_contents": "テキストの内容の変更",
+ "font_family": "フォントファミリーの変更",
+ "font_size": "文字サイズの変更",
+ "bold": "太字",
+ "italic": "イタリック体"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "背景色/不透明度の変更",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "コンテンツに合わせる",
+ "fit_to_all": "すべてのコンテンツに合わせる",
+ "fit_to_canvas": "キャンバスに合わせる",
+ "fit_to_layer_content": "レイヤー上のコンテンツに合わせる",
+ "fit_to_sel": "選択対象に合わせる",
+ "align_relative_to": "揃える",
+ "relativeTo": "相対:",
+ "ページ": "ページ",
+ "largest_object": "最大のオブジェクト",
+ "selected_objects": "選択オブジェクト",
+ "smallest_object": "最小のオブジェクト",
+ "new_doc": "新規イメージ",
+ "open_doc": "イメージを開く",
+ "export_png": "Export as PNG",
+ "save_doc": "画像を保存",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "下揃え",
+ "align_center": "中央揃え",
+ "align_left": "左揃え",
+ "align_middle": "中央揃え",
+ "align_right": "右揃え",
+ "align_top": "上揃え",
+ "mode_select": "選択ツール",
+ "mode_fhpath": "鉛筆ツール",
+ "mode_line": "直線ツール",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "フリーハンド長方形",
+ "mode_ellipse": "楕円",
+ "mode_circle": "円",
+ "mode_fhellipse": "フリーハンド楕円",
+ "mode_path": "パスツール",
+ "mode_shapelib": "Shape library",
+ "mode_text": "テキストツール",
+ "mode_image": "イメージツール",
+ "mode_zoom": "ズームツール",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "元に戻す",
+ "redo": "やり直し",
+ "tool_source": "ソースの編集",
+ "wireframe_mode": "ワイヤーフレームで表示 [F]",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "グループ化",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "パスに変換",
+ "reorient_path": "現在の角度を0度とする",
+ "ungroup": "グループ化を解除",
+ "docprops": "文書のプロパティ",
+ "imagelib": "Image Library",
+ "move_bottom": "奥に移動",
+ "move_top": "手前に移動",
+ "node_clone": "ノードを複製",
+ "node_delete": "ノードを削除",
+ "node_link": "制御点の接続",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "適用",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"レイヤ",
+ "layers": "Layers",
+ "del": "レイヤの削除",
+ "move_down": "レイヤを下へ移動",
+ "new": "新規レイヤ",
+ "rename": "レイヤの名前を変更",
+ "move_up": "レイヤを上へ移動",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "移動先レイヤ:",
+ "move_selected": "選択対象を別のレイヤに移動"
+ },
+ config: {
+ "image_props": "イメージの設定",
+ "doc_title": "タイトル",
+ "doc_dims": "キャンバスの大きさ",
+ "included_images": "挿入された画像の扱い",
+ "image_opt_embed": "SVGファイルに埋め込む",
+ "image_opt_ref": "画像を参照する",
+ "editor_prefs": "エディタの設定",
+ "icon_size": "アイコンの大きさ",
+ "language": "言語",
+ "background": "エディタの背景色",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "※背景色はファイルに保存されません。",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "デフォルト",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"無効な値が指定されています。",
+ "noContentToFitTo":"合わせる対象のコンテンツがありません。",
+ "dupeLayerName":"同名のレイヤーが既に存在します。",
+ "enterUniqueLayerName":"新規レイヤの一意な名前を入力してください。",
+ "enterNewLayerName":"レイヤの新しい名前を入力してください。",
+ "layerHasThatName":"既に同名が付いています。",
+ "QmoveElemsToLayer":"選択した要素をレイヤー '%s' に移動しますか?",
+ "QwantToClear":"キャンバスをクリアしますか?\nアンドゥ履歴も消去されます。",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"ソースにエラーがあります。\n元のソースに戻しますか?",
+ "QignoreSourceChanges":"ソースの変更を無視しますか?",
+ "featNotSupported":"機能はサポートされていません。",
+ "enterNewImgURL":"画像のURLを入力してください。",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ko.js b/files_svgedit/svg-edit/locale/lang.ko.js
new file mode 100644
index 000000000..28cced199
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ko.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ko",
+ dir : "ltr",
+ common: {
+ "ok": "저장",
+ "cancel": "취소",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "색상을 클릭, 근무 시간 채우기 스트로크 색상을 변경하려면 변경하려면",
+ "zoom_level": "변경 수준으로 확대",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "채우기 색상 변경",
+ "stroke_color": "뇌졸중으로 색상 변경",
+ "stroke_style": "뇌졸중 변경 대시 스타일",
+ "stroke_width": "뇌졸중 너비 변경",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "회전 각도를 변경",
+ "blur": "Change gaussian blur value",
+ "opacity": "변경 항목을 선택 불투명도",
+ "circle_cx": "변경 동그라미 CX는 좌표",
+ "circle_cy": "동그라미 싸이 변경 조정할 수있어",
+ "circle_r": "변경 원의 반지름",
+ "ellipse_cx": "CX는 타원의 좌표 변경",
+ "ellipse_cy": "싸이 타원 변경 조정할 수있어",
+ "ellipse_rx": "변경 타원의 x 반지름",
+ "ellipse_ry": "변경 타원의 y를 반경",
+ "line_x1": "변경 라인의 X 좌표 시작",
+ "line_x2": "변경 라인의 X 좌표 결말",
+ "line_y1": "라인 변경 y를 시작 좌표",
+ "line_y2": "라인 변경 y를 결말의 좌표",
+ "rect_height": "사각형의 높이를 변경",
+ "rect_width": "사각형의 너비 변경",
+ "corner_radius": "변경 직사각형 코너 반경",
+ "image_width": "이미지 변경 폭",
+ "image_height": "이미지 높이 변경",
+ "image_url": "URL 변경",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "텍스트 변경 내용",
+ "font_family": "글꼴 변경 패밀리",
+ "font_size": "글꼴 크기 변경",
+ "bold": "굵은 텍스트",
+ "italic": "기울임꼴 텍스트"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "배경 색상 변경 / 투명도",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "맞춤 콘텐츠",
+ "fit_to_all": "맞춤 모든 콘텐츠에",
+ "fit_to_canvas": "맞춤 캔버스",
+ "fit_to_layer_content": "레이어에 맞게 콘텐츠",
+ "fit_to_sel": "맞춤 선택",
+ "align_relative_to": "정렬 상대적으로 ...",
+ "relativeTo": "상대:",
+ "페이지": "페이지",
+ "largest_object": "큰 개체",
+ "selected_objects": "당선 개체",
+ "smallest_object": "작은 개체",
+ "new_doc": "새 이미지",
+ "open_doc": "오픈 이미지",
+ "export_png": "Export as PNG",
+ "save_doc": "이미지 저장",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "히프 정렬",
+ "align_center": "정렬 센터",
+ "align_left": "왼쪽 정렬",
+ "align_middle": "중간 정렬",
+ "align_right": "오른쪽 맞춤",
+ "align_top": "정렬 탑",
+ "mode_select": "선택 도구",
+ "mode_fhpath": "연필 도구",
+ "mode_line": "선 도구",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "자유 핸드 직사각형",
+ "mode_ellipse": "타원",
+ "mode_circle": "동그라미",
+ "mode_fhellipse": "자유 핸드 타원",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "텍스트 도구",
+ "mode_image": "이미지 도구",
+ "mode_zoom": "줌 도구",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "취소",
+ "redo": "재실행",
+ "tool_source": "수정 소스",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "그룹 요소",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "그룹 해제 요소",
+ "docprops": "문서 속성",
+ "imagelib": "Image Library",
+ "move_bottom": "아래로 이동",
+ "move_top": "상단으로 이동",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "저장",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "레이어 삭제",
+ "move_down": "레이어 아래로 이동",
+ "new": "새 레이어",
+ "rename": "레이어 이름 바꾸기",
+ "move_up": "레이어 위로 이동",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "미리 정의된 선택:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.lt.js b/files_svgedit/svg-edit/locale/lang.lt.js
new file mode 100644
index 000000000..9224941a8
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.lt.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "lt",
+ dir : "ltr",
+ common: {
+ "ok": "Saugoti",
+ "cancel": "Atšaukti",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Spustelėkite norėdami keisti užpildo spalvą, perėjimo spustelėkite pakeisti insultas spalva",
+ "zoom_level": "Keisti mastelį",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Keisti užpildyti spalvos",
+ "stroke_color": "Keisti insultas spalva",
+ "stroke_style": "Keisti insultas brūkšnys stilius",
+ "stroke_width": "Keisti insultas plotis",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Keisti sukimosi kampas",
+ "blur": "Change gaussian blur value",
+ "opacity": "Pakeisti pasirinkto elemento neskaidrumo",
+ "circle_cx": "Keisti ratas&#39;s CX koordinuoti",
+ "circle_cy": "Keisti ratas&#39;s CY koordinuoti",
+ "circle_r": "Keisti savo apskritimo spindulys",
+ "ellipse_cx": "Keisti elipse&#39;s CX koordinuoti",
+ "ellipse_cy": "Keisti elipse&#39;s CY koordinuoti",
+ "ellipse_rx": "Keisti elipsė &quot;X spindulys",
+ "ellipse_ry": "Keisti elipse Y spindulys",
+ "line_x1": "Keisti linijos nuo koordinačių x",
+ "line_x2": "Keisti linijos baigėsi x koordinuoti",
+ "line_y1": "Keisti linijos pradžios y koordinačių",
+ "line_y2": "Keisti linijos baigėsi y koordinačių",
+ "rect_height": "Keisti stačiakampio aukščio",
+ "rect_width": "Pakeisti stačiakampio plotis",
+ "corner_radius": "Keisti stačiakampis skyrelį Spindulys",
+ "image_width": "Keisti paveikslėlio plotis",
+ "image_height": "Keisti vaizdo aukštis",
+ "image_url": "Pakeisti URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Keisti teksto turinys",
+ "font_family": "Pakeistišriftą Šeima",
+ "font_size": "Change font size",
+ "bold": "Pusjuodis",
+ "italic": "Kursyvas"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Pakeisti fono spalvą / drumstumas",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Talpinti turinys",
+ "fit_to_all": "Talpinti All content",
+ "fit_to_canvas": "Talpinti drobė",
+ "fit_to_layer_content": "Talpinti sluoksnis turinio",
+ "fit_to_sel": "Talpinti atrankos",
+ "align_relative_to": "Derinti palyginti ...",
+ "relativeTo": "palyginti:",
+ "puslapis": "puslapis",
+ "largest_object": "didžiausias objektas",
+ "selected_objects": "išrinktas objektai",
+ "smallest_object": "mažiausias objektą",
+ "new_doc": "New Image",
+ "open_doc": "Atidaryti atvaizdą",
+ "export_png": "Export as PNG",
+ "save_doc": "Išsaugoti nuotrauką",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Lygiuoti apačioje",
+ "align_center": "Lygiuoti",
+ "align_left": "Lygiuoti kairėje",
+ "align_middle": "Suderinti Vidurio",
+ "align_right": "Lygiuoti dešinėje",
+ "align_top": "Lygiuoti viršų",
+ "mode_select": "Įrankis",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free Hand stačiakampis",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free Hand Elipsė",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekstas Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Įrankį",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Atšaukti",
+ "redo": "Atstatyti",
+ "tool_source": "Taisyti Šaltinis",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementų grupės",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Išgrupuoti elementai",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Perkelti į apačią",
+ "move_top": "Perkelti į viršų",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Saugoti",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Ištrinti Layer",
+ "move_down": "Perkelti sluoksnį Žemyn",
+ "new": "New Layer",
+ "rename": "Pervadinti sluoksnį",
+ "move_up": "Perkelti sluoksnį Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Pasirinkite iš anksto:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.lv.js b/files_svgedit/svg-edit/locale/lang.lv.js
new file mode 100644
index 000000000..76c7dbfd6
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.lv.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "lv",
+ dir : "ltr",
+ common: {
+ "ok": "Glābt",
+ "cancel": "Atcelt",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Noklikšķiniet, lai mainītu aizpildījuma krāsu, shift-click to mainīt stroke krāsa",
+ "zoom_level": "Pārmaiņu mērogu",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change aizpildījuma krāsu",
+ "stroke_color": "Change stroke krāsa",
+ "stroke_style": "Maina stroke domuzīme stils",
+ "stroke_width": "Change stroke platums",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Mainīt griešanās leņķis",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mainīt izvēlēto objektu necaurredzamība",
+ "circle_cx": "Maina aplis&#39;s CX koordinēt",
+ "circle_cy": "Pārmaiņu loks ir cy koordinēt",
+ "circle_r": "Pārmaiņu loks ir rādiuss",
+ "ellipse_cx": "Mainīt elipses&#39;s CX koordinēt",
+ "ellipse_cy": "Mainīt elipses&#39;s cy koordinēt",
+ "ellipse_rx": "Mainīt elipses&#39;s x rādiuss",
+ "ellipse_ry": "Mainīt elipses&#39;s y rādiuss",
+ "line_x1": "Mainīt līnijas sākas x koordinēt",
+ "line_x2": "Mainīt līnijas beigu x koordinēt",
+ "line_y1": "Mainīt līnijas sākas y koordinātu",
+ "line_y2": "Mainīt līnijas beigu y koordinātu",
+ "rect_height": "Change Taisnstūra augstums",
+ "rect_width": "Change taisnstūra platums",
+ "corner_radius": "Maina Taisnstūris Corner Rādiuss",
+ "image_width": "Mainīt attēla platumu",
+ "image_height": "Mainīt attēla augstums",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Mainītu teksta saturs",
+ "font_family": "Mainīt fonta Family",
+ "font_size": "Mainīt fonta izmēru",
+ "bold": "Bold Text",
+ "italic": "Kursīvs"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color / necaurredzamība",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit uz visu saturu",
+ "fit_to_canvas": "Ievietot audekls",
+ "fit_to_layer_content": "Ievietot slānis saturs",
+ "fit_to_sel": "Fit atlases",
+ "align_relative_to": "Līdzināt, salīdzinot ar ...",
+ "relativeTo": "salīdzinājumā ar:",
+ "lapa": "lapa",
+ "largest_object": "lielākais objekts",
+ "selected_objects": "ievēlēts objekti",
+ "smallest_object": "mazākais objekts",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Līdzināt Bottom",
+ "align_center": "Līdzināt uz centru",
+ "align_left": "Līdzināt pa kreisi",
+ "align_middle": "Līdzināt Middle",
+ "align_right": "Līdzināt pa labi",
+ "align_top": "Līdzināt Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Taisnstūris",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Atpogāt",
+ "redo": "Redo",
+ "tool_source": "Rediģēt Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupa Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Atgrupēt Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Pārvietot uz leju",
+ "move_top": "Pārvietot uz augšu",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Glābt",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Dzēst Layer",
+ "move_down": "Pārvietot slāni uz leju",
+ "new": "New Layer",
+ "rename": "Pārdēvēt Layer",
+ "move_up": "Pārvietot slāni uz augšu",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Izvēlieties iepriekš:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.mk.js b/files_svgedit/svg-edit/locale/lang.mk.js
new file mode 100644
index 000000000..2b0812eeb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.mk.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "mk",
+ dir : "ltr",
+ common: {
+ "ok": "Зачувува",
+ "cancel": "Откажи",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Кликни за да внесете промени бојата, промена клик да се промени бојата удар",
+ "zoom_level": "Промена зум ниво",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Измени пополнете боја",
+ "stroke_color": "Промена боја на мозочен удар",
+ "stroke_style": "Промена удар цртичка стил",
+ "stroke_width": "Промена удар Ширина",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change ротација агол",
+ "blur": "Change gaussian blur value",
+ "opacity": "Промена избрани ставка непроѕирноста",
+ "circle_cx": "Промена круг на cx координира",
+ "circle_cy": "Промена круг&#39;s cy координираат",
+ "circle_r": "Промена на круг со радиус",
+ "ellipse_cx": "Промена елипса&#39;s cx координираат",
+ "ellipse_cy": "Промена на елипса cy координира",
+ "ellipse_rx": "Промена на елипса x радиус",
+ "ellipse_ry": "Промена на елипса у радиус",
+ "line_x1": "Промена линија почетна x координира",
+ "line_x2": "Промена линија завршува x координира",
+ "line_y1": "Промена линија координираат почетна y",
+ "line_y2": "Промена линија завршува y координира",
+ "rect_height": "Промена правоаголник височина",
+ "rect_width": "Промена правоаголник Ширина",
+ "corner_radius": "Промена правоаголник Corner Radius",
+ "image_width": "Промена Ширина на сликата",
+ "image_height": "Промена на слика височина",
+ "image_url": "Промена URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Промена текст содржина",
+ "font_family": "Смени фонт Фамилија",
+ "font_size": "Изменифонт Големина",
+ "bold": "Задебелен текст",
+ "italic": "Italic текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Смени позадина / непроѕирноста",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Способен да Содржина",
+ "fit_to_all": "Способен да сите содржина",
+ "fit_to_canvas": "Побиране да платно",
+ "fit_to_layer_content": "Способен да слој содржина",
+ "fit_to_sel": "Способен да селекција",
+ "align_relative_to": "Порамни во поглед на ...",
+ "relativeTo": "во поглед на:",
+ "страница": "страница",
+ "largest_object": "најголемиот објект",
+ "selected_objects": "избран објекти",
+ "smallest_object": "најмалата објект",
+ "new_doc": "Нови слики",
+ "open_doc": "Отвори слика",
+ "export_png": "Export as PNG",
+ "save_doc": "Зачувај слика",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Центрирано",
+ "align_left": "Порамни лево Порамни",
+ "align_middle": "Израмни Среден",
+ "align_right": "Порамни десно",
+ "align_top": "Израмни почетокот",
+ "mode_select": "Изберете ја алатката",
+ "mode_fhpath": "Алатка за молив",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Правоаголник слободна рака",
+ "mode_ellipse": "Елипса",
+ "mode_circle": "Круг",
+ "mode_fhellipse": "Free-Hand Елипса",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Алатка за текст",
+ "mode_image": "Алатка за сликата",
+ "mode_zoom": "Алатка за зумирање",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Врати",
+ "redo": "Повтори",
+ "tool_source": "Уреди Извор",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група на елементи",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Елементи",
+ "docprops": "Својства на документот",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to bottom",
+ "move_top": "Поместување на почетокот",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Зачувува",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Избриши Слој",
+ "move_down": "Премести слој долу",
+ "new": "Нов слој",
+ "rename": "Преименувај слој",
+ "move_up": "Премести слој горе",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Изберете предефинирани:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ms.js b/files_svgedit/svg-edit/locale/lang.ms.js
new file mode 100644
index 000000000..fbdf01bbe
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ms.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ms",
+ dir : "ltr",
+ common: {
+ "ok": "Simpan",
+ "cancel": "Batal",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klik untuk menukar warna mengisi, shift-klik untuk menukar warna stroke",
+ "zoom_level": "Mengubah peringkat pembesaran",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Tukar Warna mengisi",
+ "stroke_color": "Tukar Warna stroke",
+ "stroke_style": "Tukar gaya dash stroke",
+ "stroke_width": "Tukar stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Namakan sudut putaran",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mengubah item yang dipilih keburaman",
+ "circle_cx": "Mengubah koordinat bulatan cx",
+ "circle_cy": "Mengubah koordinat cy bulatan",
+ "circle_r": "Tukar jari-jari lingkaran",
+ "ellipse_cx": "Tukar elips&#39;s cx koordinat",
+ "ellipse_cy": "Tukar elips&#39;s cy koordinat",
+ "ellipse_rx": "Tukar elips&#39;s x jari-jari",
+ "ellipse_ry": "Tukar elips&#39;s y jari-jari",
+ "line_x1": "Ubah baris mulai x koordinat",
+ "line_x2": "Ubah baris&#39;s Berakhir x koordinat",
+ "line_y1": "Ubah baris mulai y koordinat",
+ "line_y2": "Ubah baris di tiap akhir y koordinat",
+ "rect_height": "Perubahan quality persegi panjang",
+ "rect_width": "Tukar persegi panjang lebar",
+ "corner_radius": "Tukar Corner Rectangle Radius",
+ "image_width": "Tukar Lebar imej",
+ "image_height": "Tinggi gambar Kaca",
+ "image_url": "Tukar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Tukar isi teks",
+ "font_family": "Tukar Font Keluarga",
+ "font_size": "Ubah Saiz Font",
+ "bold": "Bold Teks",
+ "italic": "Italic Teks"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mengubah warna latar belakang / keburaman",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Cocok untuk semua kandungan",
+ "fit_to_canvas": "Muat kanvas",
+ "fit_to_layer_content": "Muat kandungan lapisan",
+ "fit_to_sel": "Fit seleksi",
+ "align_relative_to": "Rata relatif ...",
+ "relativeTo": "relatif:",
+ "Laman": "Laman",
+ "largest_object": "objek terbesar",
+ "selected_objects": "objek terpilih",
+ "smallest_object": "objek terkecil",
+ "new_doc": "Imej Baru",
+ "open_doc": "Membuka Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Rata Bottom",
+ "align_center": "Rata Tengah",
+ "align_left": "Rata Kiri",
+ "align_middle": "Rata Tengah",
+ "align_right": "Rata Kanan",
+ "align_top": "Rata Popular",
+ "mode_select": "Pilih Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Persegi Panjang",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Lingkaran",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Teks Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Kelompok Elemen",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elemen",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Pindah ke Bawah",
+ "move_top": "Pindah ke Atas",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Simpan",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Padam Layer",
+ "move_down": "Pindah Layer Bawah",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Pindah Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Pilih standard:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.mt.js b/files_svgedit/svg-edit/locale/lang.mt.js
new file mode 100644
index 000000000..3ba830d8c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.mt.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "mt",
+ dir : "ltr",
+ common: {
+ "ok": "Save",
+ "cancel": "Ikkanċella",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Ikklikkja biex timla l-bidla fil-kulur, ikklikkja-bidla għall-bidla color stroke",
+ "zoom_level": "Bidla zoom livell",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Bidla imla color",
+ "stroke_color": "Color stroke Bidla",
+ "stroke_style": "Bidla stroke dash stil",
+ "stroke_width": "Wisa &#39;puplesija Bidla",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Angolu ta &#39;rotazzjoni Bidla",
+ "blur": "Change gaussian blur value",
+ "opacity": "Bidla magħżula opaċità partita",
+ "circle_cx": "CX ċirku Tibdil jikkoordinaw",
+ "circle_cy": "Ċirku Tibdil cy jikkoordinaw",
+ "circle_r": "Raġġ ta &#39;ċirku tal-Bidla",
+ "ellipse_cx": "Bidla ellissi&#39;s CX jikkoordinaw",
+ "ellipse_cy": "Ellissi Tibdil cy jikkoordinaw",
+ "ellipse_rx": "Raġġ x ellissi Tibdil",
+ "ellipse_ry": "Raġġ y ellissi Tibdil",
+ "line_x1": "Bidla fil-linja tal-bidu tikkoordina x",
+ "line_x2": "Linja tal-Bidla li jispiċċa x jikkoordinaw",
+ "line_y1": "Bidla fil-linja tal-bidu y jikkoordinaw",
+ "line_y2": "Linja Tibdil jispiċċa y jikkoordinaw",
+ "rect_height": "Għoli rettangolu Bidla",
+ "rect_width": "Wisa &#39;rettangolu Bidla",
+ "corner_radius": "Bidla Rectangle Corner Radius",
+ "image_width": "Wisa image Bidla",
+ "image_height": "Għoli image Bidla",
+ "image_url": "Bidla URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Test kontenut Bidla",
+ "font_family": "Bidla Font Familja",
+ "font_size": "Change font size",
+ "bold": "Bold Test",
+ "italic": "Test korsiv"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Bidla fil-kulur fl-isfond / opaċità",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit għall-kontenut",
+ "fit_to_all": "Tajbin għall-kontenut",
+ "fit_to_canvas": "Xieraq li kanvas",
+ "fit_to_layer_content": "Fit-kontenut ta &#39;saff għal",
+ "fit_to_sel": "Fit-għażla",
+ "align_relative_to": "Jallinjaw relattiv għall - ...",
+ "relativeTo": "relattiv għall -:",
+ "paġna": "paġna",
+ "largest_object": "akbar oġġett",
+ "selected_objects": "oġġetti elett",
+ "smallest_object": "iżgħar oġġett",
+ "new_doc": "Image New",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Image Save",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Tallinja Bottom",
+ "align_center": "Tallinja Center",
+ "align_left": "Tallinja Left",
+ "align_middle": "Tallinja Nofsani",
+ "align_right": "Tallinja Dritt",
+ "align_top": "Tallinja Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Lapes Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free Hand-Rectangle",
+ "mode_ellipse": "Ellissi",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free Hand-ellissi",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Jneħħu",
+ "redo": "Jerġa &#39;jagħmel",
+ "tool_source": "Source Edit",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupp Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Dokument Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Ħassar Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Semmi mill-ġdid Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefiniti:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.nl.js b/files_svgedit/svg-edit/locale/lang.nl.js
new file mode 100644
index 000000000..358303470
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.nl.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "nl",
+ dir : "ltr",
+ common: {
+ "ok": "Ok",
+ "cancel": "Annuleren",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "omlaag",
+ "key_up": "omhoog",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Mogelijk gemaakt door"
+ },
+ ui: {
+ "toggle_stroke_tools": "Toon/verberg meer lijn gereedschap",
+ "palette_info": "Klik om de vul kleur te veranderen, shift-klik om de lijn kleur te veranderen",
+ "zoom_level": "In-/uitzoomen",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identificeer het element",
+ "fill_color": "Verander vul kleur",
+ "stroke_color": "Verander lijn kleur",
+ "stroke_style": "Verander lijn stijl",
+ "stroke_width": "Verander lijn breedte",
+ "pos_x": "Verander X coordinaat",
+ "pos_y": "Verander Y coordinaat",
+ "linecap_butt": "Lijneinde: Geen",
+ "linecap_round": "Lijneinde: Rond",
+ "linecap_square": "Lijneinde: Vierkant",
+ "linejoin_bevel": "Lijnverbinding: Afgestompt",
+ "linejoin_miter": "Lijnverbinding: Hoek",
+ "linejoin_round": "Lijnverbinding: Rond",
+ "angle": "Draai",
+ "blur": "Verander Gaussische vervaging waarde",
+ "opacity": "Verander opaciteit geselecteerde item",
+ "circle_cx": "Verander het X coordinaat van het cirkel middelpunt",
+ "circle_cy": "Verander het Y coordinaat van het cirkel middelpunt",
+ "circle_r": "Verander de cirkel radius",
+ "ellipse_cx": "Verander het X coordinaat van het ellips middelpunt",
+ "ellipse_cy": "Verander het Y coordinaat van het ellips middelpunt",
+ "ellipse_rx": "Verander ellips X radius",
+ "ellipse_ry": "Verander ellips Y radius",
+ "line_x1": "Verander start X coordinaat van de lijn",
+ "line_x2": "Verander eind X coordinaat van de lijn",
+ "line_y1": "Verander start Y coordinaat van de lijn",
+ "line_y2": "Verander eind Y coordinaat van de lijn",
+ "rect_height": "Verander hoogte rechthoek",
+ "rect_width": "Verander breedte rechthoek",
+ "corner_radius": "Verander hoekradius rechthoek",
+ "image_width": "Verander breedte afbeelding",
+ "image_height": "Verander hoogte afbeelding",
+ "image_url": "Verander URL",
+ "node_x": "Verander X coordinaat knooppunt",
+ "node_y": "Verander Y coordinaat knooppunt",
+ "seg_type": "Verander segment type",
+ "straight_segments": "Recht",
+ "curve_segments": "Gebogen",
+ "text_contents": "Wijzig tekst",
+ "font_family": "Verander lettertype",
+ "font_size": "Verander lettertype grootte",
+ "bold": "Vet",
+ "italic": "Cursief"
+ },
+ tools: {
+ "main_menu": "Hoofdmenu",
+ "bkgnd_color_opac": "Verander achtergrond kleur/doorzichtigheid",
+ "connector_no_arrow": "Geen pijl",
+ "fitToContent": "Pas om inhoud",
+ "fit_to_all": "Pas om alle inhoud",
+ "fit_to_canvas": "Pas om canvas",
+ "fit_to_layer_content": "Pas om laag inhoud",
+ "fit_to_sel": "Pas om selectie",
+ "align_relative_to": "Uitlijnen relatief ten opzichte van ...",
+ "relativeTo": "Relatief ten opzichte van:",
+ "Pagina": "Pagina",
+ "largest_object": "Grootste object",
+ "selected_objects": "Geselecteerde objecten",
+ "smallest_object": "Kleinste object",
+ "new_doc": "Nieuwe afbeelding",
+ "open_doc": "Open afbeelding",
+ "export_png": "Exporteer als PNG",
+ "save_doc": "Afbeelding opslaan",
+ "import_doc": "Importeer SVG",
+ "align_to_page": "Lijn element uit relatief ten opzichte van de pagina",
+ "align_bottom": "Onder uitlijnen",
+ "align_center": "Centreren",
+ "align_left": "Links uitlijnen",
+ "align_middle": "Midden uitlijnen",
+ "align_right": "Rechts uitlijnen",
+ "align_top": "Boven uitlijnen",
+ "mode_select": "Selecteer",
+ "mode_fhpath": "Potlood",
+ "mode_line": "Lijn",
+ "mode_connect": "Verbind twee objecten",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Vrije stijl rechthoek",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Cirkel",
+ "mode_fhellipse": "Vrije stijl ellips",
+ "mode_path": "Pad",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst",
+ "mode_image": "Afbeelding",
+ "mode_zoom": "Zoom",
+ "mode_eyedropper": "Kleuren kopieer gereedschap",
+ "no_embed": "Let op: Dit plaatje kan niet worden geintegreerd (embeded). Het hangt af van dit pad om te worden afgebeeld.",
+ "undo": "Ongedaan maken",
+ "redo": "Opnieuw doen",
+ "tool_source": "Bewerk bron",
+ "wireframe_mode": "Draadmodel",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Groepeer elementen",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Zet om naar pad",
+ "reorient_path": "Herorienteer pad",
+ "ungroup": "Groepering opheffen",
+ "docprops": "Documenteigenschappen",
+ "imagelib": "Image Library",
+ "move_bottom": "Naar achtergrond",
+ "move_top": "Naar voorgrond",
+ "node_clone": "Kloon knooppunt",
+ "node_delete": "Delete knooppunt",
+ "node_link": "Koppel controle punten",
+ "add_subpath": "Subpad toevoegen",
+ "openclose_path": "Open/sluit subpad",
+ "source_save": "Veranderingen toepassen",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Laag",
+ "layers": "Layers",
+ "del": "Delete laag",
+ "move_down": "Beweeg laag omlaag",
+ "new": "Nieuwe laag",
+ "rename": "Hernoem laag",
+ "move_up": "Beweeg laag omhoog",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Verplaats elementen naar:",
+ "move_selected": "Verplaats geselecteerde elementen naar andere laag"
+ },
+ config: {
+ "image_props": "Afbeeldingeigenschappen",
+ "doc_title": "Titel",
+ "doc_dims": "Canvas afmetingen",
+ "included_images": "Ingesloten afbeeldingen",
+ "image_opt_embed": "Toevoegen data (lokale bestanden)",
+ "image_opt_ref": "Gebruik bestand referentie",
+ "editor_prefs": "Editor eigenschappen",
+ "icon_size": "Icoon grootte",
+ "language": "Taal",
+ "background": "Editor achtergrond",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Let op: De achtergrond wordt niet opgeslagen met de afbeelding.",
+ "icon_large": "Groot",
+ "icon_medium": "Gemiddeld",
+ "icon_small": "Klein",
+ "icon_xlarge": "Extra groot",
+ "select_predefined": "Kies voorgedefinieerd:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Verkeerde waarde gegeven",
+ "noContentToFitTo":"Geen inhoud om omheen te passen",
+ "dupeLayerName":"Er is al een laag met die naam!",
+ "enterUniqueLayerName":"Geef een unieke laag naam",
+ "enterNewLayerName":"Geef een nieuwe laag naam",
+ "layerHasThatName":"Laag heeft al die naam",
+ "QmoveElemsToLayer":"Verplaats geselecteerde elementen naar laag '%s'?",
+ "QwantToClear":"Wil je de afbeelding leeg maken?\nDit zal ook de ongedaan maak geschiedenis wissen!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Er waren analyse fouten in je SVG bron.\nTeruggaan naar de originele SVG bron?",
+ "QignoreSourceChanges":"Veranderingen in de SVG bron negeren?",
+ "featNotSupported":"Functie wordt niet ondersteund",
+ "enterNewImgURL":"Geef de nieuwe afbeelding URL",
+ "defsFailOnSave": "Let op: Vanwege een fout in je browser, kan dit plaatje verkeerd verschijnen (missende hoeken en/of elementen). Het zal goed verschijnen zodra het plaatje echt wordt opgeslagen.",
+ "loadingImage":"Laden van het plaatje, even geduld aub...",
+ "saveFromBrowser": "Kies \"Save As...\" in je browser om dit plaatje op te slaan als een %s bestand.",
+ "noteTheseIssues": "Let op de volgende problemen: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.no.js b/files_svgedit/svg-edit/locale/lang.no.js
new file mode 100644
index 000000000..c1f5cf049
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.no.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "no",
+ dir : "ltr",
+ common: {
+ "ok": "Lagre",
+ "cancel": "Avbryt",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click å endre fyllfarge, shift-klikke for å endre slag farge",
+ "zoom_level": "Endre zoomnivå",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Endre fyllfarge",
+ "stroke_color": "Endre stroke color",
+ "stroke_style": "Endre stroke dash stil",
+ "stroke_width": "Endre stroke width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Endre rotasjonsvinkelen",
+ "blur": "Change gaussian blur value",
+ "opacity": "Endre valgte elementet opasitet",
+ "circle_cx": "Endre sirkelens CX koordinatsystem",
+ "circle_cy": "Endre sirkelens koordinere cy",
+ "circle_r": "Endre sirkelens radius",
+ "ellipse_cx": "Endre ellipse&#39;s CX koordinatsystem",
+ "ellipse_cy": "Endre ellipse&#39;s koordinere cy",
+ "ellipse_rx": "Endre ellipse&#39;s x radius",
+ "ellipse_ry": "Endre ellipse&#39;s y radius",
+ "line_x1": "Endre linje begynner x koordinat",
+ "line_x2": "Endre linje&#39;s ending x koordinat",
+ "line_y1": "Endre linje begynner y koordinat",
+ "line_y2": "Endre linje&#39;s ending y koordinat",
+ "rect_height": "Endre rektangel høyde",
+ "rect_width": "Endre rektangel bredde",
+ "corner_radius": "Endre rektangel Corner Radius",
+ "image_width": "Endre bilde bredde",
+ "image_height": "Endre bilde høyde",
+ "image_url": "Endre URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Endre tekst innholdet",
+ "font_family": "Change Font Family",
+ "font_size": "Endre skriftstørrelse",
+ "bold": "Fet tekst",
+ "italic": "Kursiv tekst"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Endre bakgrunnsfarge / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Passer til alt innhold",
+ "fit_to_canvas": "Tilpass til lerret",
+ "fit_to_layer_content": "Fit to lag innhold",
+ "fit_to_sel": "Tilpass til valg",
+ "align_relative_to": "Juster i forhold til ...",
+ "relativeTo": "i forhold til:",
+ "side": "side",
+ "largest_object": "største objekt",
+ "selected_objects": "velges objekter",
+ "smallest_object": "minste objekt",
+ "new_doc": "New Image",
+ "open_doc": "Åpne Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Lagre bilde",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Midtstill",
+ "align_left": "Venstrejuster",
+ "align_middle": "Rett Middle",
+ "align_right": "Høyrejuster",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Linjeverktøy",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand rektangel",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Angre",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Gruppe Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Dele opp Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Flytt til toppen",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Lagre",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Slett laget",
+ "move_down": "Flytt laget ned",
+ "new": "Nytt lag",
+ "rename": "Rename Layer",
+ "move_up": "Flytt Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Velg forhåndsdefinerte:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.pl.js b/files_svgedit/svg-edit/locale/lang.pl.js
new file mode 100644
index 000000000..00b426618
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.pl.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "pl",
+ dir : "ltr",
+ common: {
+ "ok": "Zapisać",
+ "cancel": "Anuluj",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kliknij, aby zmienić kolor wypełnienia, shift kliknij, aby zmienić kolor skok",
+ "zoom_level": "Zmiana poziomu powiększenia",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Zmiana koloru wypełnienia",
+ "stroke_color": "Zmień kolor skok",
+ "stroke_style": "Zmień styl skoku kreska",
+ "stroke_width": "Szerokość skoku Zmień",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Zmiana kąta obrotu",
+ "blur": "Change gaussian blur value",
+ "opacity": "Zmiana stron przezroczystość elementu",
+ "circle_cx": "Zmiana koła CX koordynacji",
+ "circle_cy": "Koła Zmian cy koordynacji",
+ "circle_r": "Zmiana koła promienia",
+ "ellipse_cx": "Zmiana elipsy CX koordynacji",
+ "ellipse_cy": "Elipsy Zmian cy koordynacji",
+ "ellipse_rx": "Elipsy Zmian x promieniu",
+ "ellipse_ry": "Elipsy Zmian y promieniu",
+ "line_x1": "Zmian od linii współrzędna x",
+ "line_x2": "Zgodnie Zmian kończące współrzędna x",
+ "line_y1": "Line y Zmian od współrzędnych",
+ "line_y2": "Zgodnie Zmian kończące y koordynowanie",
+ "rect_height": "Zmiana wysokości prostokąta",
+ "rect_width": "Szerokość prostokąta Zmień",
+ "corner_radius": "Zmiana prostokąt Corner Radius",
+ "image_width": "Zmiana image width",
+ "image_height": "Wysokość obrazu zmian",
+ "image_url": "Zmień adres URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Zmiana treści tekstu",
+ "font_family": "Zmiana czcionki Rodzina",
+ "font_size": "Zmień rozmiar czcionki",
+ "bold": "Bold Text",
+ "italic": "Kursywa"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Zmień kolor tła / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Dopasuj do treści",
+ "fit_to_all": "Dopasuj do wszystkich treści",
+ "fit_to_canvas": "Dopasuj do płótnie",
+ "fit_to_layer_content": "Dopasuj do zawartości warstwy",
+ "fit_to_sel": "Dopasuj do wyboru",
+ "align_relative_to": "Dostosowanie w stosunku do ...",
+ "relativeTo": "w stosunku do:",
+ "strona": "strona",
+ "largest_object": "największego obiektu",
+ "selected_objects": "wybranych obiektów",
+ "smallest_object": "Najmniejszy obiekt",
+ "new_doc": "New Image",
+ "open_doc": "Otwórz obraz",
+ "export_png": "Export as PNG",
+ "save_doc": "Zapisz obraz",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Wyrównaj do dołu",
+ "align_center": "Wyśrodkuj",
+ "align_left": "Wyrównaj do lewej",
+ "align_middle": "Align Middle",
+ "align_right": "Wyrównaj do prawej",
+ "align_top": "Wyrównaj do góry",
+ "mode_select": "Wybierz narzędzie",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Wolnej ręki prostokąt",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Koło",
+ "mode_fhellipse": "Wolny-Hand Elipsa",
+ "mode_path": "Poli Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Tekst Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Cofnij",
+ "redo": "Redo",
+ "tool_source": "Edycja źródła",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementy Grupa",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elementy Rozgrupuj",
+ "docprops": "Właściwości dokumentu",
+ "imagelib": "Image Library",
+ "move_bottom": "Przenieś do dołu",
+ "move_top": "Przenieś do góry",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Zapisać",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Usuwanie warstwy",
+ "move_down": "Przesuń warstwę w dół",
+ "new": "Nowa warstwa",
+ "rename": "Zmiana nazwy warstwy",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Wybierz predefiniowanych:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.pt-BR.js b/files_svgedit/svg-edit/locale/lang.pt-BR.js
new file mode 100644
index 000000000..d03dff87f
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.pt-BR.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "pt-BR",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width by 1, shift-click to change by 0.1",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.pt-PT.js b/files_svgedit/svg-edit/locale/lang.pt-PT.js
new file mode 100644
index 000000000..22a21f91d
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.pt-PT.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "pt-PT",
+ dir : "ltr",
+ common: {
+ "ok": "Salvar",
+ "cancel": "Cancelar",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Clique para mudar a cor de preenchimento, shift-clique para mudar a cor do curso",
+ "zoom_level": "Alterar o nível de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Alterar a cor de preenchimento",
+ "stroke_color": "Mudar a cor do curso",
+ "stroke_style": "Alterar o estilo do traço do curso",
+ "stroke_width": "Alterar a largura do curso",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Alterar o ângulo de rotação",
+ "blur": "Change gaussian blur value",
+ "opacity": "Mude a opacidade item selecionado",
+ "circle_cx": "Cx Mudar círculo de coordenadas",
+ "circle_cy": "Círculo Mudança cy coordenar",
+ "circle_r": "Alterar círculo de raio",
+ "ellipse_cx": "Alterar elipse cx coordenar",
+ "ellipse_cy": "Elipse Mudança cy coordenar",
+ "ellipse_rx": "Raio X Change elipse",
+ "ellipse_ry": "Raio y Change elipse",
+ "line_x1": "Altere a linha de partida coordenada x",
+ "line_x2": "Altere a linha está terminando coordenada x",
+ "line_y1": "Mudança na linha de partida coordenada y",
+ "line_y2": "Mudança de linha está terminando coordenada y",
+ "rect_height": "Alterar altura do retângulo",
+ "rect_width": "Alterar a largura retângulo",
+ "corner_radius": "Alterar Corner Rectangle Radius",
+ "image_width": "Alterar a largura da imagem",
+ "image_height": "Alterar altura da imagem",
+ "image_url": "Alterar URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Alterar o conteúdo de texto",
+ "font_family": "Alterar fonte Família",
+ "font_size": "Alterar tamanho de letra",
+ "bold": "Bold Text",
+ "italic": "Texto em itálico"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Mudar a cor de fundo / opacidade",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Ajustar ao conteúdo",
+ "fit_to_all": "Ajustar a todo o conteúdo",
+ "fit_to_canvas": "Ajustar à tela",
+ "fit_to_layer_content": "Ajustar o conteúdo da camada de",
+ "fit_to_sel": "Ajustar à selecção",
+ "align_relative_to": "Alinhar em relação a ...",
+ "relativeTo": "em relação ao:",
+ "Página": "Página",
+ "largest_object": "maior objeto",
+ "selected_objects": "objetos eleitos",
+ "smallest_object": "menor objeto",
+ "new_doc": "Nova Imagem",
+ "open_doc": "Abrir Imagem",
+ "export_png": "Export as PNG",
+ "save_doc": "Salvar Imagem",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Alinhar ao centro",
+ "align_left": "Alinhar à Esquerda",
+ "align_middle": "Alinhar Médio",
+ "align_right": "Alinhar à Direita",
+ "align_top": "Align Top",
+ "mode_select": "Selecione a ferramenta",
+ "mode_fhpath": "Ferramenta Lápis",
+ "mode_line": "Ferramenta Linha",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Elipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Ferramenta de Texto",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Desfazer",
+ "redo": "Refazer",
+ "tool_source": "Fonte Editar",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementos do Grupo",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elementos Desagrupar",
+ "docprops": "Propriedades do Documento",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Salvar",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move camada para baixo",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Selecione predefinidos:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ro.js b/files_svgedit/svg-edit/locale/lang.ro.js
new file mode 100644
index 000000000..ea1e66c32
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ro.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ro",
+ dir : "ltr",
+ common: {
+ "ok": "Ok",
+ "cancel": "Anulaţi",
+ "key_backspace": "backspace",
+ "key_del": "stergere",
+ "key_down": "jos",
+ "key_up": "sus",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Aratati/ascundeti mai multe unelte de contur",
+ "palette_info": "Faceţi clic a schimba culoare de umplere, Shift-click pentru a schimba culoarea de contur",
+ "zoom_level": "Schimbarea nivelului de zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Schimbarea culorii de umplere",
+ "stroke_color": "Schimbarea culorii de contur",
+ "stroke_style": "Schimbarea stilului de contur",
+ "stroke_width": "Schimbarea lăţime de contur",
+ "pos_x": "Schimba coordonata X",
+ "pos_y": "Schimba coordonata Y",
+ "linecap_butt": "Capat de linie: Butuc",
+ "linecap_round": "Capat de linie: Rotund",
+ "linecap_square": "Capat de linie: Patrat",
+ "linejoin_bevel": "Articulatia liniei: Tesita",
+ "linejoin_miter": "Articulatia liniei: Unghi ascutit",
+ "linejoin_round": "Articulatia liniei: Rotunda",
+ "angle": "Schimbarea unghiul de rotatie",
+ "blur": "Schimbarea valorii estomparii gaussiene",
+ "opacity": "Schimbarea selectat opacitate element",
+ "circle_cx": "Schimbarea coordonatei CX a cercului",
+ "circle_cy": "Schimbarea coordonatei CY a cercului",
+ "circle_r": "Schimbarea razei cercului",
+ "ellipse_cx": "Schimbarea coordonatei CX a elipsei",
+ "ellipse_cy": "Schimbarea coordonatei CY a elipsei",
+ "ellipse_rx": "Schimbarea razei elipsei X",
+ "ellipse_ry": "Schimbarea razei elipsei Y",
+ "line_x1": "Schimbare coordonatei x a punctului de start",
+ "line_x2": "Schimbare coordonatei x a punctului final",
+ "line_y1": "Schimbare coordonatei y a punctului de start",
+ "line_y2": "Schimbare coordonatei y a punctului final",
+ "rect_height": "Schimbarea înălţimii dreptunghiului",
+ "rect_width": "Schimbarea lăţimii dreptunghiului",
+ "corner_radius": "Schimbarea Razei Colţului Dreptunghiului",
+ "image_width": "Schimbarea Lăţimii imaginii",
+ "image_height": "Schimbarea Înălţimii imaginii",
+ "image_url": "Schimbaţi URL-ul",
+ "node_x": "Schimba coordonata x a punctului",
+ "node_y": "Schimba coordonata x a punctului",
+ "seg_type": "Schimba tipul de segment",
+ "straight_segments": "Drept",
+ "curve_segments": "Curv",
+ "text_contents": "Schimbarea Conţinutului textului",
+ "font_family": "Modificare familie de Fonturi",
+ "font_size": "Schimbă dimensiunea fontului",
+ "bold": "Text Îngroşat",
+ "italic": "Text Înclinat"
+ },
+ tools: {
+ "main_menu": "Menu Principal",
+ "bkgnd_color_opac": "Schimbare culoare de fundal / opacitate",
+ "connector_no_arrow": "Fără Săgeată",
+ "fitToContent": "Dimensionare la Conţinut",
+ "fit_to_all": "Potrivire la tot conţinutul",
+ "fit_to_canvas": "Potrivire la Şevalet",
+ "fit_to_layer_content": "Potrivire la conţinutul stratului",
+ "fit_to_sel": "Potrivire la selecţie",
+ "align_relative_to": "Alinierea în raport cu ...",
+ "relativeTo": "în raport cu:",
+ "de start": "de start",
+ "largest_object": "cel mai mare obiect",
+ "selected_objects": "obiectele alese",
+ "smallest_object": "cel mai mic obiect",
+ "new_doc": "Imagine nouă",
+ "open_doc": "Imagine deschisă",
+ "export_png": "Exportare ca şi PNG",
+ "save_doc": "Salvare Imagine",
+ "import_doc": "Importare SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Alinierea jos",
+ "align_center": "Aliniere la centru",
+ "align_left": "Aliniere la stânga",
+ "align_middle": "Aliniere la mijloc",
+ "align_right": "Aliniere la dreapta",
+ "align_top": "Alinierea sus",
+ "mode_select": "Unealta de Selectare",
+ "mode_fhpath": "Unealta de Traiectorie",
+ "mode_line": "Unealta de Linie",
+ "mode_connect": "Conectati doua obiecte",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Dreptunghi cu mana-libera",
+ "mode_ellipse": "Elipsă",
+ "mode_circle": "Cerc",
+ "mode_fhellipse": "Elipsă cu mana-libera",
+ "mode_path": "Unealta de Path",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Unealta de Text",
+ "mode_image": "Unealta de Imagine",
+ "mode_zoom": "Unealta de Zoom",
+ "mode_eyedropper": "Unealta de Eye Dropper",
+ "no_embed": "NOTE: Aceasta imagine nu poate fi inglobata. Va depinde de aceasta traiectorie pentru a fi prezentata.",
+ "undo": "Anulare",
+ "redo": "Refacere",
+ "tool_source": "Editare Cod Sursa",
+ "wireframe_mode": "Mod Schelet",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grupare Elemente",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Converteste in Traiectorie",
+ "reorient_path": "Reorienteaza Traiectoria",
+ "ungroup": "Anulare Grupare Elemente",
+ "docprops": "Propertile Documentului",
+ "imagelib": "Image Library",
+ "move_bottom": "Mutare în jos",
+ "move_top": "Mutare în sus",
+ "node_clone": "Cloneaza Punct",
+ "node_delete": "Sterge Punct",
+ "node_link": "Uneste Punctele de Control",
+ "add_subpath": "Adaugati sub-traiectorie",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Folositi Schimbarile",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "stergere": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Strat",
+ "layers": "Layers",
+ "del": "Ştergeţi Strat",
+ "move_down": "Mutare Strat în Jos",
+ "new": "Strat Nou",
+ "rename": "Redenumiţi Strat",
+ "move_up": "Mutare Strat în Sus",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Muta elemente la:",
+ "move_selected": "Muta elementele selectate pe un alt strat"
+ },
+ config: {
+ "image_props": "Proprietaţile Imaginii",
+ "doc_title": "Titlul",
+ "doc_dims": "Dimensiunile Sevaletuui",
+ "included_images": "Imaginile Incluse",
+ "image_opt_embed": "Includeţi Datele (fisiere locale)",
+ "image_opt_ref": "Foloseste referinte la fisiere",
+ "editor_prefs": "Preferintele Editorului",
+ "icon_size": "Dimensiunile Butoanelor",
+ "language": "Limba",
+ "background": "Fondul Editorului",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Nota: Fondul nu va fi salvat cu imaginea.",
+ "icon_large": "Mari",
+ "icon_medium": "Medii",
+ "icon_small": "Mici",
+ "icon_xlarge": "Foarte Mari",
+ "select_predefined": "Selecţii predefinite:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Valoarea data nu este valida",
+ "noContentToFitTo":"Fara continut de referinta",
+ "dupeLayerName":"Deja exista un strat numis asa!",
+ "enterUniqueLayerName":"Rog introduceti un nume unic",
+ "enterNewLayerName":"Rog introduceti un nume pentru strat",
+ "layerHasThatName":"Statul deja are acest nume",
+ "QmoveElemsToLayer":"Mutati elementele selectate pe stratul '%s'?",
+ "QwantToClear":"Doriti sa stergeti desenul?\nAceasta va sterge si posibilitatea de anulare!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Sunt erori de parsing in sursa SVG.\nRevenire la sursa SVG orginala?",
+ "QignoreSourceChanges":"Ignorati schimbarile la sursa SVG?",
+ "featNotSupported":"Functie neimplementata",
+ "enterNewImgURL":"Introduceti noul URL pentru Imagine",
+ "defsFailOnSave": "NOTE: Din cauza unei erori in browserul dv., aceasta imagine poate apare gresit (fara gradiente sau elemente). Insa va apare corect dupa salvare.",
+ "loadingImage":"Imaginea se incarca, va rugam asteptati...",
+ "saveFromBrowser": "Selecteaza \"Salvea ca si...\" in browserul dv. pt. a salva aceasta imafine ca si fisier %s.",
+ "noteTheseIssues": "De asemeni remarcati urmatoarele probleme: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.ru.js b/files_svgedit/svg-edit/locale/lang.ru.js
new file mode 100644
index 000000000..c2d7e7d9c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.ru.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "ru",
+ dir : "ltr",
+ common: {
+ "ok": "Сохранить",
+ "cancel": "Отменить",
+ "key_backspace": "Backspace",
+ "key_del": "Delete",
+ "key_down": "Вниз",
+ "key_up": "Вверх",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Нажмите для изменения цвета заливки, Shift-Click изменить цвета обводки",
+ "zoom_level": "Изменить масштаб",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Изменить цвет заливки",
+ "stroke_color": "Изменить цвет обводки",
+ "stroke_style": "Изменить стиль обводки",
+ "stroke_width": "Изменить толщину обводки",
+ "pos_x": "Изменить горизонтальный координат",
+ "pos_y": "Изменить вертикальный координат",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Изменить угол поворота",
+ "blur": "Change gaussian blur value",
+ "opacity": "Изменить непрозрачность элемента",
+ "circle_cx": "Изменить горизонтальный координат (CX) окружности",
+ "circle_cy": "Изменить вертикальный координат (CY) окружности",
+ "circle_r": "Изменить радиус окружности",
+ "ellipse_cx": "Изменить горизонтальный координат (CX) эллипса",
+ "ellipse_cy": "Изменить вертикальный координат (CY) эллипса",
+ "ellipse_rx": "Изменить горизонтальный радиус эллипса",
+ "ellipse_ry": "Изменить вертикальный радиус эллипса",
+ "line_x1": "Изменить горизонтальный координат X начальной точки линии",
+ "line_x2": "Изменить горизонтальный координат X конечной точки линии",
+ "line_y1": "Изменить вертикальный координат Y начальной точки линии",
+ "line_y2": "Изменить вертикальный координат Y конечной точки линии",
+ "rect_height": "Изменениe высоту прямоугольника",
+ "rect_width": "Измененить ширину прямоугольника",
+ "corner_radius": "Радиус закругленности угла",
+ "image_width": "Изменить ширину изображения",
+ "image_height": "Изменить высоту изображения",
+ "image_url": "Изменить URL",
+ "node_x": "Изменить горизонтальную координату узла",
+ "node_y": "Изменить вертикальную координату узла",
+ "seg_type": "Изменить вид",
+ "straight_segments": "Отрезок",
+ "curve_segments": "Сплайн",
+ "text_contents": "Изменить содержание текста",
+ "font_family": "Изменить семейство шрифтов",
+ "font_size": "Изменить размер шрифта",
+ "bold": "Жирный",
+ "italic": "Курсив"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Изменить цвет фона или прозрачность",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Под размер содержимого",
+ "fit_to_all": "Под размер всех слоев",
+ "fit_to_canvas": "Под размер холста",
+ "fit_to_layer_content": "Под размер содержания слоя",
+ "fit_to_sel": "Под размер выделенного",
+ "align_relative_to": "Выровнять по отношению к ...",
+ "relativeTo": "По отношению к ",
+ "страница": "страница",
+ "largest_object": "Наибольший объект",
+ "selected_objects": "Выделенные объекты",
+ "smallest_object": "Самый маленький объект",
+ "new_doc": "Создать изображение",
+ "open_doc": "Открыть изображение",
+ "export_png": "Export as PNG",
+ "save_doc": "Сохранить изображение",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Выровнять по нижнему краю",
+ "align_center": "Центрировать по вертикальной оси",
+ "align_left": "По левому краю",
+ "align_middle": "Центрировать по горизонтальной оси",
+ "align_right": "По правому краю",
+ "align_top": "Выровнять по верхнему краю",
+ "mode_select": "Выделить",
+ "mode_fhpath": "Карандаш",
+ "mode_line": "Линия",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Прямоугольник от руки",
+ "mode_ellipse": "Эллипс",
+ "mode_circle": "Окружность",
+ "mode_fhellipse": "Эллипс от руки",
+ "mode_path": "Контуры",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст",
+ "mode_image": "Изображение",
+ "mode_zoom": "Лупа",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Отменить",
+ "redo": "Вернуть",
+ "tool_source": "Редактировать исходный код",
+ "wireframe_mode": "Каркас",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Создать группу элементов",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "В контур",
+ "reorient_path": "Изменить ориентацию контура",
+ "ungroup": "Разгруппировать элементы",
+ "docprops": "Свойства документа",
+ "imagelib": "Image Library",
+ "move_bottom": "Опустить",
+ "move_top": "Поднять",
+ "node_clone": "Создать копию узла",
+ "node_delete": "Удалить узел",
+ "node_link": "Связать узлы",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Сохранить",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Слой",
+ "layers": "Layers",
+ "del": "Удалить слой",
+ "move_down": "Опустить слой",
+ "new": "Создать слой",
+ "rename": "Переименовать Слой",
+ "move_up": "Поднять слой",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Переместить выделенные элементы:",
+ "move_selected": "Переместить выделенные элементы на другой слой"
+ },
+ config: {
+ "image_props": "Свойства изображения",
+ "doc_title": "Название",
+ "doc_dims": "Размеры холста",
+ "included_images": "Встроенные изображения",
+ "image_opt_embed": "Локальные файлы",
+ "image_opt_ref": "По ссылкам",
+ "editor_prefs": "Параметры",
+ "icon_size": "Размер значков",
+ "language": "Язык",
+ "background": "Фон",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "(Фон не сохранится вместе с изображением.)",
+ "icon_large": "Большие",
+ "icon_medium": "Средние",
+ "icon_small": "Малые",
+ "icon_xlarge": "Огромные",
+ "select_predefined": "Выбирать предопределенный размер",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Некорректное значение аргумента",
+ "noContentToFitTo":"Нет содержания, по которому выровнять.",
+ "dupeLayerName":"Слой с этим именем уже существует.",
+ "enterUniqueLayerName":"Пожалуйста, введите имя для слоя.",
+ "enterNewLayerName":"Пожалуйста, введите новое имя.",
+ "layerHasThatName":"Слой уже называется этим именем.",
+ "QmoveElemsToLayer":"Переместить выделенные элементы на слой '%s'?",
+ "QwantToClear":"Вы хотите очистить?\nИстория действий будет забыта!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Была проблема при парсинге вашего SVG исходного кода.\nЗаменить его предыдущим SVG кодом?",
+ "QignoreSourceChanges":"Забыть без сохранения?",
+ "featNotSupported":"Возможность не реализована",
+ "enterNewImgURL":"Введите новый URL изображения",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.sk.js b/files_svgedit/svg-edit/locale/lang.sk.js
new file mode 100644
index 000000000..53bc7e507
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.sk.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sk",
+ dir : "ltr",
+ common: {
+ "ok": "Uložiť",
+ "cancel": "Zrušiť",
+ "key_backspace": "Backspace",
+ "key_del": "Delete",
+ "key_down": "šípka dole",
+ "key_up": "šípka hore",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Beží na"
+ },
+ ui: {
+ "toggle_stroke_tools": "Skryť/ukázať viac nástrojov pre krivku",
+ "palette_info": "Kliknutím zmeníte farbu výplne, so Shiftom zmeníte farbu obrysu",
+ "zoom_level": "Zmena priblíženia",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Zmeniť ID elementu",
+ "fill_color": "Zmeniť farbu výplne",
+ "stroke_color": "Zmena farby obrysu",
+ "stroke_style": "Zmeniť štýl obrysu",
+ "stroke_width": "Zmeniť šírku obrysu",
+ "pos_x": "Zmeniť súradnicu X",
+ "pos_y": "Zmeniť súradnicu Y",
+ "linecap_butt": "Koniec čiary: presný",
+ "linecap_round": "Koniec čiary: zaoblený",
+ "linecap_square": "Koniec čiary: so štvorcovým presahom",
+ "linejoin_bevel": "Napojenie čiar: skosené",
+ "linejoin_miter": "Napojenie čiar: ostré",
+ "linejoin_round": "Napojenie čiar: oblé",
+ "angle": "Zmeniť uhol natočenia",
+ "blur": "Zmeniť intenzitu rozmazania",
+ "opacity": "Zmeniť prehľadnosť vybraných položiek",
+ "circle_cx": "Zmeniť súradnicu X stredu kružnice",
+ "circle_cy": "Zmeniť súradnicu Y stredu kružnice",
+ "circle_r": "Zmeniť polomer kružnice",
+ "ellipse_cx": "Zmeniť súradnicu X stredu elipsy",
+ "ellipse_cy": "Zmeniť súradnicu Y stredu elipsy",
+ "ellipse_rx": "Zmeniť polomer X elipsy",
+ "ellipse_ry": "Zmeniť polomer Y elipsy",
+ "line_x1": "Zmeniť počiatočnú súradnicu X čiary",
+ "line_x2": "Zmeniť koncovú súradnicu X čiary",
+ "line_y1": "Zmeniť počiatočnú súradnicu Y čiary",
+ "line_y2": "Zmeniť koncovú súradnicu Y čiary",
+ "rect_height": "Zmena výšku obdĺžnika",
+ "rect_width": "Zmeniť šírku obdĺžnika",
+ "corner_radius": "Zmeniť zaoblenie rohov obdĺžnika",
+ "image_width": "Zmeniť šírku obrázka",
+ "image_height": "Zmeniť výšku obrázka",
+ "image_url": "Zmeniť URL",
+ "node_x": "Zmeniť uzlu súradnicu X",
+ "node_y": "Zmeniť uzlu súradnicu Y",
+ "seg_type": "Zmeniť typ segmentu",
+ "straight_segments": "Rovný",
+ "curve_segments": "Krivka",
+ "text_contents": "Změnit text",
+ "font_family": "Zmeniť font",
+ "font_size": "Zmeniť veľkosť písma",
+ "bold": "Tučne",
+ "italic": "Kurzíva"
+ },
+ tools: {
+ "main_menu": "Hlavné menu",
+ "bkgnd_color_opac": "Zmeniť farbu a priehľadnosť pozadia",
+ "connector_no_arrow": "Bez šípok",
+ "fitToContent": "Prispôsobiť obsahu",
+ "fit_to_all": "Prisposobiť celému obsahu",
+ "fit_to_canvas": "Prispôsobiť stránke",
+ "fit_to_layer_content": "Prispôsobiť obsahu vrstvy",
+ "fit_to_sel": "Prispôsobiť výberu",
+ "align_relative_to": "Zarovnať relatívne k ...",
+ "relativeTo": "vzhľadom k:",
+ "stránke": "stránke",
+ "largest_object": "najväčšiemu objektu",
+ "selected_objects": "zvoleným objektom",
+ "smallest_object": "najmenšiemu objektu",
+ "new_doc": "Nový obrázok",
+ "open_doc": "Otvoriť obrázok",
+ "export_png": "Exportovať ako PNG",
+ "save_doc": "Uložiť obrázok",
+ "import_doc": "Import SVG",
+ "align_to_page": "Zarovnať element na stránku",
+ "align_bottom": "Zarovnať dole",
+ "align_center": "Zarovnať na stred",
+ "align_left": "Zarovnať doľava",
+ "align_middle": "Zarovnať na stred",
+ "align_right": "Zarovnať doprava",
+ "align_top": "Zarovnať hore",
+ "mode_select": "Výber",
+ "mode_fhpath": "Ceruzka",
+ "mode_line": "Čiara",
+ "mode_connect": "Spojiť dva objekty",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Obdĺžnik voľnou rukou",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Kružnica",
+ "mode_fhellipse": "Elipsa voľnou rukou",
+ "mode_path": "Krivka",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text",
+ "mode_image": "Obrázok",
+ "mode_zoom": "Priblíženie",
+ "mode_eyedropper": "Pipeta",
+ "no_embed": "POZNÁMKA: Tento obrázok nemôže byť vložený. Jeho zobrazenie bude závisieť na jeho ceste",
+ "undo": "Späť",
+ "redo": "Opakovať",
+ "tool_source": "Upraviť SVG kód",
+ "wireframe_mode": "Drôtový model",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Zoskupiť elementy",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Previesť na krivku",
+ "reorient_path": "Zmeniť orientáciu krivky",
+ "ungroup": "Zrušiť skupinu",
+ "docprops": "Vlastnosti dokumentu",
+ "imagelib": "Image Library",
+ "move_bottom": "Presunúť spodok",
+ "move_top": "Presunúť na vrch",
+ "node_clone": "Klonovať uzol",
+ "node_delete": "Zmazať uzol",
+ "node_link": "Prepojiť kontrolné body",
+ "add_subpath": "Pridať daľšiu súčasť krivky",
+ "openclose_path": "Otvoriť/uzatvoriť súčasť krivky",
+ "source_save": "Uložiť",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "Delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Vrstva",
+ "layers": "Layers",
+ "del": "Odstrániť vrstvu",
+ "move_down": "Presunúť vrstvu dole",
+ "new": "Nová vrstva",
+ "rename": "Premenovať vrstvu",
+ "move_up": "Presunúť vrstvu hore",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Presunút elementy do:",
+ "move_selected": "Presunúť vybrané elementy do inej vrstvy"
+ },
+ config: {
+ "image_props": "Vlastnosti obrázka",
+ "doc_title": "Titulok",
+ "doc_dims": "Rozmery plátna",
+ "included_images": "Vložené obrázky",
+ "image_opt_embed": "Vložiť data (lokálne súbory)",
+ "image_opt_ref": "Použiť referenciu na súbor",
+ "editor_prefs": "Vlastnosti editora",
+ "icon_size": "Veľkosť ikon",
+ "language": "Jazyk",
+ "background": "Zmeniť pozadie",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Poznámka: Pozadie nebude uložené spolu s obrázkom.",
+ "icon_large": "Veľká",
+ "icon_medium": "Stredná",
+ "icon_small": "Malá",
+ "icon_xlarge": "Extra veľká",
+ "select_predefined": "Vybrať preddefinovaný:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Neplatná hodnota",
+ "noContentToFitTo":"Vyberte oblasť na prispôsobenie",
+ "dupeLayerName":"Vrstva s daným názvom už existuje!",
+ "enterUniqueLayerName":"Zadajte jedinečný názov vrstvy",
+ "enterNewLayerName":"Zadajte názov vrstvy",
+ "layerHasThatName":"Vrstva už má zadaný názov",
+ "QmoveElemsToLayer":"Presunúť elementy do vrstvy '%s'?",
+ "QwantToClear":"Naozaj chcete vymazať kresbu?\n(História bude taktiež vymazaná!)!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"Chyba pri načítaní SVG dokumentu.\nVrátiť povodný SVG dokument?",
+ "QignoreSourceChanges":"Ignorovať zmeny v SVG dokumente?",
+ "featNotSupported":"Vlastnosť nie je podporovaná",
+ "enterNewImgURL":"Zadajte nové URL obrázka",
+ "defsFailOnSave": "POZNÁMKA: Kvôli chybe v prehliadači sa tento obrázok môže zobraziť nesprávne (napr. chýbajúce prechody či elementy). Po uložení sa zobrazí správne.",
+ "loadingImage":"Nahrávam obrázok, prosím čakajte ...",
+ "saveFromBrowser": "Vyberte \"Uložiť ako ...\" vo vašom prehliadači na uloženie tohoto obrázka do súboru %s.",
+ "noteTheseIssues": "Môžu sa vyskytnúť nasledujúce problémy: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.sl.js b/files_svgedit/svg-edit/locale/lang.sl.js
new file mode 100644
index 000000000..e969a8bbf
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.sl.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sl",
+ dir : "ltr",
+ common: {
+ "ok": "Shraniti",
+ "cancel": "Prekliči",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Kliknite, če želite spremeniti barvo polnila, premik miške kliknite spremeniti barvo kap",
+ "zoom_level": "Spreminjanje povečave",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Spremeni barvo polnila",
+ "stroke_color": "Spremeni barvo kap",
+ "stroke_style": "Spremeni kap dash slog",
+ "stroke_width": "Spreminjanje širine kap",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Sprememba kota rotacije",
+ "blur": "Change gaussian blur value",
+ "opacity": "Spremeni izbran predmet motnosti",
+ "circle_cx": "Spremeni krog&#39;s CX usklajujejo",
+ "circle_cy": "Spremeni krog&#39;s cy usklajujejo",
+ "circle_r": "Spremeni krogu polmera",
+ "ellipse_cx": "Spremeni elipse&#39;s CX usklajujejo",
+ "ellipse_cy": "Spremeni elipse&#39;s cy usklajujejo",
+ "ellipse_rx": "Spremeni elipse&#39;s x polmer",
+ "ellipse_ry": "Spremeni elipse&#39;s y polmer",
+ "line_x1": "Spremeni skladu z začetkom x usklajujejo",
+ "line_x2": "Change line je končalo x usklajujejo",
+ "line_y1": "Change line&#39;s začetkom y usklajujejo",
+ "line_y2": "Change line je končalo y usklajujejo",
+ "rect_height": "Spremeni pravokotniku višine",
+ "rect_width": "Spremeni pravokotnik širine",
+ "corner_radius": "Spremeni Pravokotnik Corner Radius",
+ "image_width": "Spremeni Širina slike",
+ "image_height": "Spremeni Višina slike",
+ "image_url": "Spremeni URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Spremeni besedilo vsebino",
+ "font_family": "Change Font Family",
+ "font_size": "Spremeni velikost pisave",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Spreminjanje barve ozadja / motnosti",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit na vse vsebine",
+ "fit_to_canvas": "Fit na platno",
+ "fit_to_layer_content": "Fit na plast vsebine",
+ "fit_to_sel": "Fit za izbor",
+ "align_relative_to": "Poravnaj glede na ...",
+ "relativeTo": "glede na:",
+ "page": "page",
+ "largest_object": "Največji objekt",
+ "selected_objects": "izvoljeni predmeti",
+ "smallest_object": "najmanjša objekt",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Shrani slike",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Sredino",
+ "align_left": "Poravnaj levo",
+ "align_middle": "Poravnava Middle",
+ "align_right": "Poravnaj desno",
+ "align_top": "Poravnava Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand pravokotnik",
+ "mode_ellipse": "Elipsa",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Elipsa",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Vir",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Skupina Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Razdruži Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Premakni v Bottom",
+ "move_top": "Premakni na vrh",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Shraniti",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Down Layer",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select vnaprej:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.sq.js b/files_svgedit/svg-edit/locale/lang.sq.js
new file mode 100644
index 000000000..afa2b56ef
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.sq.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sq",
+ dir : "ltr",
+ common: {
+ "ok": "Ruaj",
+ "cancel": "Anulo",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klikoni për të ndryshuar mbushur me ngjyra, shift-klikoni për të ndryshuar ngjyrën pash",
+ "zoom_level": "Ndryshimi zoom nivel",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Ndryshimi mbush color",
+ "stroke_color": "Change color pash",
+ "stroke_style": "Ndryshimi dash goditje stil",
+ "stroke_width": "Ndryshimi goditje width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Kënd Ndryshimi rrotullim",
+ "blur": "Change gaussian blur value",
+ "opacity": "Ndryshimi zgjedhur errësirë item",
+ "circle_cx": "Cx rrethi Ndryshimi i bashkërenduar",
+ "circle_cy": "Ndryshimi i rrethit cy koordinuar",
+ "circle_r": "Rreze rreth Ndryshimi i",
+ "ellipse_cx": "Ndryshimi elips e cx koordinuar",
+ "ellipse_cy": "Elips cy Ndryshimi i bashkërenduar",
+ "ellipse_rx": "Rreze x elips Ndryshimi i",
+ "ellipse_ry": "Radiusi y elips ndërroj",
+ "line_x1": "Shkarko Ndryshimi që fillon x koordinuar",
+ "line_x2": "Linjë Ndryshimi i fund x koordinuar",
+ "line_y1": "Shkarko Ndryshimi që fillon y koordinuar",
+ "line_y2": "Shkarko Ndryshimi i dhënë fund y koordinuar",
+ "rect_height": "Height Ndryshimi drejtkëndësh",
+ "rect_width": "Width Ndryshimi drejtkëndësh",
+ "corner_radius": "Ndryshimi Rectangle Corner Radius",
+ "image_width": "Ndryshimi image width",
+ "image_height": "Height të ndryshuar imazhin",
+ "image_url": "Ndrysho URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Text contents Ndryshimi",
+ "font_family": "Ndryshimi Font Family",
+ "font_size": "Ndryshimi Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change color background / patejdukshmëri",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit për të gjithë përmbajtjen",
+ "fit_to_canvas": "Fit në kanavacë",
+ "fit_to_layer_content": "Shtresë Fit to content",
+ "fit_to_sel": "Fit to Selection",
+ "align_relative_to": "Vendose në lidhje me ...",
+ "relativeTo": "lidhje me:",
+ "faqe": "faqe",
+ "largest_object": "madh objekt",
+ "selected_objects": "objektet e zgjedhur",
+ "smallest_object": "objektit më të vogël",
+ "new_doc": "New Image",
+ "open_doc": "Image Hapur",
+ "export_png": "Export as PNG",
+ "save_doc": "Image Ruaj",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Mesme",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Zgjidhni Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Lëndë Hand Rectangle",
+ "mode_ellipse": "Elips",
+ "mode_circle": "Rrethi",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Burimi Edit",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Elementet e Grupit",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Elemente Ungroup",
+ "docprops": "Dokumenti Prona",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Ruaj",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Down Layer",
+ "new": "Re Shtresa",
+ "rename": "Rename Layer",
+ "move_up": "Move Up Layer",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Zgjidhni paracaktuara:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.sr.js b/files_svgedit/svg-edit/locale/lang.sr.js
new file mode 100644
index 000000000..2866b8948
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.sr.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sr",
+ dir : "ltr",
+ common: {
+ "ok": "Сачувати",
+ "cancel": "Откажи",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Кликните да бисте променили боју попуне, Схифт-кликните да промените боју удар",
+ "zoom_level": "Промените ниво зумирања",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Промена боје попуне",
+ "stroke_color": "Промена боје удар",
+ "stroke_style": "Промена ход Дасх стил",
+ "stroke_width": "Промена удара ширина",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Промени ротације Угао",
+ "blur": "Change gaussian blur value",
+ "opacity": "Промена изабране ставке непрозирност",
+ "circle_cx": "Промена круг&#39;с ЦКС координатни",
+ "circle_cy": "Промена круг&#39;с ср координатни",
+ "circle_r": "Промена круга је полупречник",
+ "ellipse_cx": "Промена елипса ЦКС&#39;с координатни",
+ "ellipse_cy": "Промена елипса&#39;с ср координатни",
+ "ellipse_rx": "Промена елипса&#39;с Кс радијуса",
+ "ellipse_ry": "Промена елипса је радијус Ы",
+ "line_x1": "Промена линија Стартни кс координата",
+ "line_x2": "Промена линија је завршетак кс координата",
+ "line_y1": "Промена линија у координатни почетак Ы",
+ "line_y2": "Промена линија је Ы координата се завршава",
+ "rect_height": "Промени правоугаоник висина",
+ "rect_width": "Промени правоугаоник ширине",
+ "corner_radius": "Промена правоугаоник Кутак радијуса",
+ "image_width": "Промени слику ширине",
+ "image_height": "Промени слику висине",
+ "image_url": "Промените УРЛ адресу",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Промена садржаја текстуалне",
+ "font_family": "Цханге фонт породицу",
+ "font_size": "Цханге фонт сизе",
+ "bold": "Подебљан текст",
+ "italic": "Италиц текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Промена боје позадине / непрозирност",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Стане на садржај",
+ "fit_to_all": "Уклопи у сав садржај",
+ "fit_to_canvas": "Стане на платну",
+ "fit_to_layer_content": "Уклопи у слоју садржај",
+ "fit_to_sel": "Уклопи у избор",
+ "align_relative_to": "Алигн у односу на ...",
+ "relativeTo": "у односу на:",
+ "страна": "страна",
+ "largest_object": "Највећи објекат",
+ "selected_objects": "изабраних објеката",
+ "smallest_object": "Најмањи објекат",
+ "new_doc": "Нова слика",
+ "open_doc": "Отвори слике",
+ "export_png": "Export as PNG",
+ "save_doc": "Сачувај слика",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Поравнај доле",
+ "align_center": "Поравнај по центру",
+ "align_left": "Поравнај лево",
+ "align_middle": "Алигн Средњи",
+ "align_right": "Поравнај десно",
+ "align_top": "Поравнајте врх",
+ "mode_select": "Изаберите алатку",
+ "mode_fhpath": "Алатка оловка",
+ "mode_line": "Линија Алат",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Фрее-Ручни правоугаоник",
+ "mode_ellipse": "Елипса",
+ "mode_circle": "Круг",
+ "mode_fhellipse": "Фрее-Ручни Елипса",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст Алат",
+ "mode_image": "Алатка за слике",
+ "mode_zoom": "Алатка за зумирање",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Поништи",
+ "redo": "Редо",
+ "tool_source": "Уреди Извор",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група Елементи",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Разгрупирање Елементи",
+ "docprops": "Особине документа",
+ "imagelib": "Image Library",
+ "move_bottom": "Премести на доле",
+ "move_top": "Премести на врх",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Сачувати",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Избриши слој",
+ "move_down": "Помери слој доле",
+ "new": "Нови слој",
+ "rename": "Преименуј слој",
+ "move_up": "Помери слој Горе",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Изаберите унапред дефинисани:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.sv.js b/files_svgedit/svg-edit/locale/lang.sv.js
new file mode 100644
index 000000000..49f6a3b86
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.sv.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sv",
+ dir : "ltr",
+ common: {
+ "ok": "Spara",
+ "cancel": "Avbryt",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Klicka för att ändra fyllningsfärg, shift-klicka för att ändra färgar",
+ "zoom_level": "Ändra zoomnivå",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Ändra fyllningsfärg",
+ "stroke_color": "Ändra färgar",
+ "stroke_style": "Ändra stroke Dash stil",
+ "stroke_width": "Ändra stroke bredd",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Ändra rotationsvinkel",
+ "blur": "Change gaussian blur value",
+ "opacity": "Ändra markerat objekt opacitet",
+ "circle_cx": "Ändra cirkeln cx samordna",
+ "circle_cy": "Ändra cirkeln samordna cy",
+ "circle_r": "Ändra cirkelns radie",
+ "ellipse_cx": "Ändra ellips&#39;s cx samordna",
+ "ellipse_cy": "Ändra ellips&#39;s samordna cy",
+ "ellipse_rx": "Ändra ellips&#39;s x radie",
+ "ellipse_ry": "Ändra ellips&#39;s y radie",
+ "line_x1": "Ändra Lines startar x samordna",
+ "line_x2": "Ändra Lines slutar x samordna",
+ "line_y1": "Ändra Lines startar Y-koordinat",
+ "line_y2": "Ändra Lines slutar Y-koordinat",
+ "rect_height": "Ändra rektangel höjd",
+ "rect_width": "Ändra rektangel bredd",
+ "corner_radius": "Ändra rektangel hörnradie",
+ "image_width": "Ändra bild bredd",
+ "image_height": "Ändra bildhöjd",
+ "image_url": "Ändra URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Ändra textinnehållet",
+ "font_family": "Ändra Typsnitt",
+ "font_size": "Ändra textstorlek",
+ "bold": "Fet text",
+ "italic": "Kursiv text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Ändra bakgrundsfärg / opacitet",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Passar till allt innehåll",
+ "fit_to_canvas": "Anpassa till duk",
+ "fit_to_layer_content": "Anpassa till lager innehåll",
+ "fit_to_sel": "Anpassa till val",
+ "align_relative_to": "Justera förhållande till ...",
+ "relativeTo": "jämfört:",
+ "sida": "sida",
+ "largest_object": "största objekt",
+ "selected_objects": "valda objekt",
+ "smallest_object": "minsta objektet",
+ "new_doc": "New Image",
+ "open_doc": "Öppna bild",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Centrera",
+ "align_left": "Vänsterjustera",
+ "align_middle": "Justera Middle",
+ "align_right": "Högerjustera",
+ "align_top": "Justera Top",
+ "mode_select": "Markeringsverktyget",
+ "mode_fhpath": "Pennverktyget",
+ "mode_line": "Linjeverktyg",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Fri hand rektangel",
+ "mode_ellipse": "Ellips",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Fri hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Textverktyg",
+ "mode_image": "Bildverktyg",
+ "mode_zoom": "Zoomverktyget",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Ångra",
+ "redo": "Redo",
+ "tool_source": "Redigera källa",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Dela Elements",
+ "docprops": "Dokumentegenskaper",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Flytta till början",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Spara",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Radera Layer",
+ "move_down": "Flytta Layer Down",
+ "new": "New Layer",
+ "rename": "Byt namn på Layer",
+ "move_up": "Flytta Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Välj fördefinierad:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.sw.js b/files_svgedit/svg-edit/locale/lang.sw.js
new file mode 100644
index 000000000..ec0275a18
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.sw.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "sw",
+ dir : "ltr",
+ common: {
+ "ok": "Okoa",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click kubadili kujaza color, skiftarbete-click kubadili kiharusi color",
+ "zoom_level": "Change zoom ngazi",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change kujaza Michezo",
+ "stroke_color": "Change kiharusi Michezo",
+ "stroke_style": "Change kiharusi dash style",
+ "stroke_width": "Change kiharusi width",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change mzunguko vinkel",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected opacity punkt",
+ "circle_cx": "Change mduara&#39;s CX kuratibu",
+ "circle_cy": "Change mduara&#39;s cy kuratibu",
+ "circle_r": "Change mduara&#39;s Radius",
+ "ellipse_cx": "Change ellipse s CX kuratibu",
+ "ellipse_cy": "Change ellipse s cy kuratibu",
+ "ellipse_rx": "Change ellipse s x Radius",
+ "ellipse_ry": "Change ellipse&#39;s y Radius",
+ "line_x1": "Change Mpya&#39;s mapya x kuratibu",
+ "line_x2": "Change Mpya&#39;s kuishia x kuratibu",
+ "line_y1": "Change Mpya&#39;s mapya y kuratibu",
+ "line_y2": "Change Mpya&#39;s kuishia y kuratibu",
+ "rect_height": "Change Mstatili height",
+ "rect_width": "Change Mstatili width",
+ "corner_radius": "Change Mstatili Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image urefu",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change Nakala contents",
+ "font_family": "Change font Family",
+ "font_size": "Change font Size",
+ "bold": "Bold Nakala",
+ "italic": "Italiki Nakala"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Waliopo Content",
+ "fit_to_all": "Waliopo all content",
+ "fit_to_canvas": "Wanaofaa Canvas",
+ "fit_to_layer_content": "Waliopo safu content",
+ "fit_to_sel": "Waliopo uteuzi",
+ "align_relative_to": "Align jamaa na ...",
+ "relativeTo": "relativa att:",
+ "umebadilisha": "umebadilisha",
+ "largest_object": "ukubwa object",
+ "selected_objects": "waliochaguliwa vitu",
+ "smallest_object": "minsta object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Kati align",
+ "align_right": "Align Right",
+ "align_top": "Align Juu",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Penseli Tool",
+ "mode_line": "Mpya Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Nakala Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Tengua",
+ "redo": "Redo",
+ "tool_source": "Edit Lugha",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Kikundi Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Kuhama Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "Mpya Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.test.js b/files_svgedit/svg-edit/locale/lang.test.js
new file mode 100644
index 000000000..fe69bc1eb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.test.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "test",
+ dir : "ltr",
+ common: {
+ "ok": "OK",
+ "cancel": "Cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Click to change fill color, shift-click to change stroke color",
+ "zoom_level": "Change zoom level",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Change fill color",
+ "stroke_color": "Change stroke color",
+ "stroke_style": "Change stroke dash style",
+ "stroke_width": "Change stroke width by 1, shift-click to change by 0.1",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Change rotation angle",
+ "blur": "Change gaussian blur value",
+ "opacity": "Change selected item opacity",
+ "circle_cx": "Change circle's cx coordinate",
+ "circle_cy": "Change circle's cy coordinate",
+ "circle_r": "Change circle's radius",
+ "ellipse_cx": "Change ellipse's cx coordinate",
+ "ellipse_cy": "Change ellipse's cy coordinate",
+ "ellipse_rx": "Change ellipse's x radius",
+ "ellipse_ry": "Change ellipse's y radius",
+ "line_x1": "Change line's starting x coordinate",
+ "line_x2": "Change line's ending x coordinate",
+ "line_y1": "Change line's starting y coordinate",
+ "line_y2": "Change line's ending y coordinate",
+ "rect_height": "Change rectangle height",
+ "rect_width": "Change rectangle width",
+ "corner_radius": "Change Rectangle Corner Radius",
+ "image_width": "Change image width",
+ "image_height": "Change image height",
+ "image_url": "Change URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Change text contents",
+ "font_family": "Change Font Family",
+ "font_size": "Change Font Size",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Change background color/opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit to all content",
+ "fit_to_canvas": "Fit to canvas",
+ "fit_to_layer_content": "Fit to layer content",
+ "fit_to_sel": "Fit to selection",
+ "align_relative_to": "Align relative to ...",
+ "relativeTo": "relative to:",
+ "page": "page",
+ "largest_object": "largest object",
+ "selected_objects": "selected objects",
+ "smallest_object": "smallest object",
+ "new_doc": "New Image",
+ "open_doc": "Open Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Align Center",
+ "align_left": "Align Left",
+ "align_middle": "Align Middle",
+ "align_right": "Align Right",
+ "align_top": "Align Top",
+ "mode_select": "Select Tool",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-Hand Rectangle",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Free-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Undo",
+ "redo": "Redo",
+ "tool_source": "Edit Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Layer",
+ "group": "Group Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Move to Bottom",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Apply Changes",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Move Layer Up",
+ "move_down": "Move Layer Down",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Rename Layer",
+ "move_up": "Move Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Select predefined:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.th.js b/files_svgedit/svg-edit/locale/lang.th.js
new file mode 100644
index 000000000..e937da748
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.th.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "th",
+ dir : "ltr",
+ common: {
+ "ok": "บันทึก",
+ "cancel": "ยกเลิก",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "คลิกเพื่อเปลี่ยนใส่สีกะคลิกเปลี่ยนสีจังหวะ",
+ "zoom_level": "เปลี่ยนระดับการซูม",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "เปลี่ยนใส่สี",
+ "stroke_color": "สีจังหวะเปลี่ยน",
+ "stroke_style": "รีบเปลี่ยนสไตล์จังหวะ",
+ "stroke_width": "ความกว้างจังหวะเปลี่ยน",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "มุมหมุนเปลี่ยน",
+ "blur": "Change gaussian blur value",
+ "opacity": "เปลี่ยนความทึบเลือกรายการ",
+ "circle_cx": "Cx วงกลมเปลี่ยนของพิกัด",
+ "circle_cy": "วงกลมเปลี่ยนเป็น cy ประสานงาน",
+ "circle_r": "รัศมีวงกลมเปลี่ยนเป็น",
+ "ellipse_cx": "เปลี่ยน ellipse ของ cx ประสานงาน",
+ "ellipse_cy": "Ellipse เปลี่ยนของ cy ประสานงาน",
+ "ellipse_rx": "Ellipse เปลี่ยนของรัศมี x",
+ "ellipse_ry": "Ellipse เปลี่ยนของรัศมี y",
+ "line_x1": "สายเปลี่ยนเป็นเริ่มต้น x พิกัด",
+ "line_x2": "สายเปลี่ยนเป็นสิ้นสุด x พิกัด",
+ "line_y1": "สายเปลี่ยนเป็นเริ่มต้น y พิกัด",
+ "line_y2": "สายเปลี่ยนเป็นสิ้นสุด y พิกัด",
+ "rect_height": "ความสูงสี่เหลี่ยมผืนผ้าเปลี่ยน",
+ "rect_width": "ความกว้างสี่เหลี่ยมผืนผ้าเปลี่ยน",
+ "corner_radius": "รัศมีเปลี่ยนสี่เหลี่ยมผืนผ้า Corner",
+ "image_width": "ความกว้างเปลี่ยนรูปภาพ",
+ "image_height": "ความสูงเปลี่ยนรูปภาพ",
+ "image_url": "URL เปลี่ยน",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "เปลี่ยนเนื้อหาข้อความ",
+ "font_family": "ครอบครัว Change Font",
+ "font_size": "เปลี่ยนขนาดตัวอักษร",
+ "bold": "ข้อความตัวหนา",
+ "italic": "ข้อความตัวเอียง"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "สีพื้นหลังเปลี่ยน / ความทึบ",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "พอดีกับเนื้อหาทั้งหมด",
+ "fit_to_canvas": "เหมาะสมในการผ้าใบ",
+ "fit_to_layer_content": "พอดีเนื้อหาชั้นที่",
+ "fit_to_sel": "เหมาะสมในการเลือก",
+ "align_relative_to": "จัดชิดเทียบกับ ...",
+ "relativeTo": "เทียบกับ:",
+ "หน้า": "หน้า",
+ "largest_object": "ที่ใหญ่ที่สุดในวัตถุ",
+ "selected_objects": "วัตถุเลือกตั้ง",
+ "smallest_object": "วัตถุที่เล็กที่สุด",
+ "new_doc": "รูปภาพใหม่",
+ "open_doc": "ภาพเปิด",
+ "export_png": "Export as PNG",
+ "save_doc": "บันทึกรูปภาพ",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "ด้านล่างชิด",
+ "align_center": "จัดแนวกึ่งกลาง",
+ "align_left": "จัดชิดซ้าย",
+ "align_middle": "กลางชิด",
+ "align_right": "จัดชิดขวา",
+ "align_top": "ด้านบนชิด",
+ "mode_select": "เครื่องมือเลือก",
+ "mode_fhpath": "เครื่องมือดินสอ",
+ "mode_line": "เครื่องมือ Line",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "สี่เหลี่ยมผืนผ้า Free-Hand",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Ellipse Free-Hand",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "เครื่องมือ Text",
+ "mode_image": "เครื่องมือ Image",
+ "mode_zoom": "เครื่องมือซูม",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "เลิก",
+ "redo": "ทำซ้ำ",
+ "tool_source": "แหล่งที่มาแก้ไข",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "องค์ประกอบของกลุ่ม",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "องค์ประกอบ Ungroup",
+ "docprops": "คุณสมบัติของเอกสาร",
+ "imagelib": "Image Library",
+ "move_bottom": "ย้ายไปด้านล่าง",
+ "move_top": "ย้ายไปด้านบน",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "บันทึก",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "ย้าย Layer ลง",
+ "new": "Layer ใหม่",
+ "rename": "Layer เปลี่ยนชื่อ",
+ "move_up": "ย้าย Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "เลือกที่กำหนดไว้ล่วงหน้า:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.tl.js b/files_svgedit/svg-edit/locale/lang.tl.js
new file mode 100644
index 000000000..4c820a62c
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.tl.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "tl",
+ dir : "ltr",
+ common: {
+ "ok": "I-save",
+ "cancel": "I-cancel",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "I-click upang baguhin ang punan ang kulay, paglilipat-click upang baguhin ang paghampas ng kulay",
+ "zoom_level": "Baguhin ang antas ng zoom",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Baguhin ang punuin ng kulay",
+ "stroke_color": "Baguhin ang kulay ng paghampas",
+ "stroke_style": "Baguhin ang stroke pagsugod estilo",
+ "stroke_width": "Baguhin ang stroke lapad",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Baguhin ang pag-ikot anggulo",
+ "blur": "Change gaussian blur value",
+ "opacity": "Palitan ang mga napiling bagay kalabuan",
+ "circle_cx": "Cx Baguhin ang bilog&#39;s coordinate",
+ "circle_cy": "Baguhin ang bilog&#39;s cy coordinate",
+ "circle_r": "Baguhin ang radius ng bilog",
+ "ellipse_cx": "Baguhin ang tambilugan&#39;s cx-ugma",
+ "ellipse_cy": "Baguhin ang tambilugan&#39;s cy coordinate",
+ "ellipse_rx": "X radius Baguhin ang tambilugan&#39;s",
+ "ellipse_ry": "Y radius Baguhin ang tambilugan&#39;s",
+ "line_x1": "Baguhin ang linya ng simula x coordinate",
+ "line_x2": "Baguhin ang linya ay nagtatapos x coordinate",
+ "line_y1": "Baguhin ang linya ng simula y coordinate",
+ "line_y2": "Baguhin ang linya ay nagtatapos y coordinate",
+ "rect_height": "Baguhin ang rektanggulo taas",
+ "rect_width": "Baguhin ang rektanggulo lapad",
+ "corner_radius": "Baguhin ang Parihaba Corner Radius",
+ "image_width": "Baguhin ang lapad ng imahe",
+ "image_height": "Baguhin ang taas ng imahe",
+ "image_url": "Baguhin ang URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Baguhin ang mga nilalaman ng teksto",
+ "font_family": "Baguhin ang Pamilya ng Font",
+ "font_size": "Baguhin ang Laki ng Font",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Baguhin ang kulay ng background / kalabuan",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Pagkasyahin sa Nilalaman",
+ "fit_to_all": "Pagkasyahin sa lahat ng mga nilalaman",
+ "fit_to_canvas": "Pagkasyahin sa tolda",
+ "fit_to_layer_content": "Pagkasyahin sa layer nilalaman",
+ "fit_to_sel": "Pagkasyahin sa pagpili",
+ "align_relative_to": "Pantayin sa kamag-anak sa ...",
+ "relativeTo": "kamag-anak sa:",
+ "pahina": "pahina",
+ "largest_object": "pinakamalaking bagay",
+ "selected_objects": "inihalal na mga bagay",
+ "smallest_object": "pinakamaliit na bagay",
+ "new_doc": "Bagong Imahe",
+ "open_doc": "Buksan ang Image",
+ "export_png": "Export as PNG",
+ "save_doc": "I-save ang Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Pantayin sa Ibaba",
+ "align_center": "Pantayin sa Gitna",
+ "align_left": "Pantayin ang Kaliwa",
+ "align_middle": "Pantayin sa Gitnang",
+ "align_right": "Pantayin sa Kanan",
+ "align_top": "Pantayin Top",
+ "mode_select": "Piliin ang Tool",
+ "mode_fhpath": "Kasangkapan ng lapis",
+ "mode_line": "Line Kasangkapan",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Libreng-kamay Parihaba",
+ "mode_ellipse": "Tambilugan",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Libreng-kamay tambilugan",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Kasangkapan",
+ "mode_image": "Image Kasangkapan",
+ "mode_zoom": "Mag-zoom Kasangkapan",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Bawiin",
+ "redo": "Gawin muli",
+ "tool_source": "I-edit ang Source",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Group Sangkap",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Sangkap",
+ "docprops": "Document Katangian",
+ "imagelib": "Image Library",
+ "move_bottom": "Ilipat sa Ibaba",
+ "move_top": "Ilipat sa Tuktok",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "I-save",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Tanggalin Layer",
+ "move_down": "Ilipat Layer Down",
+ "new": "Bagong Layer",
+ "rename": "Palitan ang pangalan ng Layer",
+ "move_up": "Ilipat Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Piliin ang paunang-natukoy na:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.tr.js b/files_svgedit/svg-edit/locale/lang.tr.js
new file mode 100644
index 000000000..f802615fb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.tr.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "tr",
+ dir : "ltr",
+ common: {
+ "ok": "Kaydetmek",
+ "cancel": "Iptal",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Tıklatın renk, vardiya dolgu zamanlı rengini değiştirmek için tıklayın değiştirmek için",
+ "zoom_level": "Yakınlaştırma düzeyini değiştirebilirsiniz",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Renk değiştirmek doldurmak",
+ "stroke_color": "Değiştirmek inme renk",
+ "stroke_style": "Değiştirmek inme çizgi stili",
+ "stroke_width": "Değiştirmek vuruş genişliği",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Değiştirmek dönme açısı",
+ "blur": "Change gaussian blur value",
+ "opacity": "Değiştirmek öğe opacity seçilmiş",
+ "circle_cx": "Değiştirmek daire&#39;s cx koordine",
+ "circle_cy": "Değiştirmek daire cy koordine&#39;s",
+ "circle_r": "Değiştirmek daire yarıçapı",
+ "ellipse_cx": "&#39;s Koordine cx elips Girişi",
+ "ellipse_cy": "Değiştirmek elips cy koordine&#39;s",
+ "ellipse_rx": "Değiştirmek elips&#39;s x yarıçapı",
+ "ellipse_ry": "Değiştirmek elips Y yarıçapı",
+ "line_x1": "Değiştirmek hattı&#39;s koordine x başlangıç",
+ "line_x2": "Değiştirmek hattı&#39;s koordine x biten",
+ "line_y1": "Değiştirmek hattı y başlangıç&#39;s koordine",
+ "line_y2": "Değiştirmek hattı y biten&#39;s koordine",
+ "rect_height": "Değiştirmek dikdörtgen yüksekliği",
+ "rect_width": "Değiştirmek dikdörtgen genişliği",
+ "corner_radius": "Değiştirmek Dikdörtgen Köşe Yarıçap",
+ "image_width": "Değiştirmek görüntü genişliği",
+ "image_height": "Değiştirmek görüntü yüksekliği",
+ "image_url": "Değiştirmek URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Değiştirmek metin içeriği",
+ "font_family": "Font değiştir Aile",
+ "font_size": "Change font size",
+ "bold": "Kalın Yazı",
+ "italic": "Italik yazı"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Arka plan rengini değiştirmek / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Fit to Content",
+ "fit_to_all": "Fit tüm içerik için",
+ "fit_to_canvas": "Fit tuvaline",
+ "fit_to_layer_content": "Sığacak şekilde katman içerik",
+ "fit_to_sel": "Fit seçimine",
+ "align_relative_to": "Align göre ...",
+ "relativeTo": "göreli:",
+ "sayfa": "sayfa",
+ "largest_object": "en büyük nesne",
+ "selected_objects": "seçilen nesneleri",
+ "smallest_object": "küçük nesne",
+ "new_doc": "Yeni Resim",
+ "open_doc": "Aç Resim",
+ "export_png": "Export as PNG",
+ "save_doc": "Görüntüyü Kaydet",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Ortala",
+ "align_left": "Sola",
+ "align_middle": "Align Orta",
+ "align_right": "Sağa Hizala",
+ "align_top": "Align Top",
+ "mode_select": "Seçim aracı",
+ "mode_fhpath": "Kalem Aracı",
+ "mode_line": "Line Aracı",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-El Dikdörtgen",
+ "mode_ellipse": "Elips",
+ "mode_circle": "Daire",
+ "mode_fhellipse": "Free-El Elips",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Metin Aracı",
+ "mode_image": "Resim Aracı",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Geri",
+ "redo": "Redo",
+ "tool_source": "Değiştir Kaynak",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Grup Elemanları",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Çöz Elemanları",
+ "docprops": "Belge Özellikleri",
+ "imagelib": "Image Library",
+ "move_bottom": "Altına gider",
+ "move_top": "Üste taşı",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Kaydetmek",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Delete Layer",
+ "move_down": "Katman Aşağı Taşı",
+ "new": "Yeni Katman",
+ "rename": "Rename Katman",
+ "move_up": "Up Katman Taşı",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Seçin önceden tanımlanmış:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.uk.js b/files_svgedit/svg-edit/locale/lang.uk.js
new file mode 100644
index 000000000..c909fb977
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.uk.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "uk",
+ dir : "ltr",
+ common: {
+ "ok": "Зберегти",
+ "cancel": "Скасування",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Натисніть для зміни кольору заливки, Shift-Click змінити обвід",
+ "zoom_level": "Зміна масштабу",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Зміна кольору заливки",
+ "stroke_color": "Зміна кольору інсульт",
+ "stroke_style": "Зміна стилю інсульт тире",
+ "stroke_width": "Зміни ширина штриха",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Зміна кута повороту",
+ "blur": "Change gaussian blur value",
+ "opacity": "Зміна вибраного пункту непрозорості",
+ "circle_cx": "CX зміну кола координата",
+ "circle_cy": "Зміни гуртка CY координати",
+ "circle_r": "Зміна кола&#39;s радіус",
+ "ellipse_cx": "Зміни еліпса CX координати",
+ "ellipse_cy": "Зміни еліпса CY координати",
+ "ellipse_rx": "Х Зміни еліпса радіусом",
+ "ellipse_ry": "Зміни у еліпса радіусом",
+ "line_x1": "Зміни починає координати лінія х",
+ "line_x2": "Зміни за період, що закінчився лінія координати х",
+ "line_y1": "Зміни лінія починає Y координата",
+ "line_y2": "Зміна за період, що закінчився лінія Y координата",
+ "rect_height": "Зміни прямокутник висотою",
+ "rect_width": "Зміна ширини прямокутника",
+ "corner_radius": "Зміни прямокутник Corner Radius",
+ "image_width": "Зміни ширина зображення",
+ "image_height": "Зміна висоти зображення",
+ "image_url": "Змінити URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Зміна змісту тексту",
+ "font_family": "Зміни Сімейство шрифтів",
+ "font_size": "Змінити розмір шрифту",
+ "bold": "Товстий текст",
+ "italic": "Похилий текст"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Зміна кольору тла / непрозорість",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "За розміром змісту",
+ "fit_to_all": "За розміром весь вміст",
+ "fit_to_canvas": "Розмір полотна",
+ "fit_to_layer_content": "За розміром шар змісту",
+ "fit_to_sel": "Вибір розміру",
+ "align_relative_to": "Вирівняти по відношенню до ...",
+ "relativeTo": "в порівнянні з:",
+ "сторінка": "сторінка",
+ "largest_object": "найбільший об&#39;єкт",
+ "selected_objects": "обраними об&#39;єктами",
+ "smallest_object": "маленький об&#39;єкт",
+ "new_doc": "Нове зображення",
+ "open_doc": "Відкрити зображення",
+ "export_png": "Export as PNG",
+ "save_doc": "Зберегти малюнок",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Вирівняти по нижньому краю",
+ "align_center": "Вирівняти по центру",
+ "align_left": "По лівому краю",
+ "align_middle": "Вирівняти Близького",
+ "align_right": "По правому краю",
+ "align_top": "Вирівняти по верхньому краю",
+ "mode_select": "Виберіть інструмент",
+ "mode_fhpath": "Pencil Tool",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Вільної руки Прямокутник",
+ "mode_ellipse": "Еліпс",
+ "mode_circle": "Коло",
+ "mode_fhellipse": "Вільної руки Еліпс",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Текст Tool",
+ "mode_image": "Image Tool",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Скасувати",
+ "redo": "Повтор",
+ "tool_source": "Змінити вихідний",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Група елементів",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Елементи розгрупувати",
+ "docprops": "Властивості документа",
+ "imagelib": "Image Library",
+ "move_bottom": "Перемістити вниз",
+ "move_top": "Перемістити догори",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Зберегти",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Видалити шар",
+ "move_down": "Перемістити шар на",
+ "new": "Новий шар",
+ "rename": "Перейменувати Шар",
+ "move_up": "Переміщення шару до",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Виберіть зумовлений:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.vi.js b/files_svgedit/svg-edit/locale/lang.vi.js
new file mode 100644
index 000000000..8f8119d26
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.vi.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "vi",
+ dir : "ltr",
+ common: {
+ "ok": "Lưu",
+ "cancel": "Hủy",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "Nhấn vào đây để thay đổi đầy màu sắc, thay đổi nhấp chuột để thay đổi màu sắc đột quỵ",
+ "zoom_level": "Thay đổi mức độ phóng",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "Thay đổi đầy màu sắc",
+ "stroke_color": "Thay đổi màu sắc đột quỵ",
+ "stroke_style": "Thay đổi phong cách đột quỵ dash",
+ "stroke_width": "Thay đổi chiều rộng đột quỵ",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "Thay đổi góc xoay",
+ "blur": "Change gaussian blur value",
+ "opacity": "Thay đổi lựa chọn opacity mục",
+ "circle_cx": "Thay đổi hình tròn của cx phối hợp",
+ "circle_cy": "Thay đổi hình tròn của vi phối hợp",
+ "circle_r": "Thay đổi bán kính của hình tròn",
+ "ellipse_cx": "Thay đổi hình elip của cx phối hợp",
+ "ellipse_cy": "Thay đổi hình elip của vi phối hợp",
+ "ellipse_rx": "Thay đổi hình elip của x bán kính",
+ "ellipse_ry": "Y Thay đổi bán kính của hình ellipse",
+ "line_x1": "Thay đổi dòng của bắt đầu từ x phối hợp",
+ "line_x2": "Thay đổi dòng của x kết thúc sớm nhất phối hợp",
+ "line_y1": "Thay đổi dòng của bắt đầu từ y phối hợp",
+ "line_y2": "Thay đổi dòng của kết thúc y phối hợp",
+ "rect_height": "Thay đổi hình chữ nhật chiều cao",
+ "rect_width": "Thay đổi hình chữ nhật chiều rộng",
+ "corner_radius": "Thay đổi chữ nhật Corner Radius",
+ "image_width": "Thay đổi hình ảnh rộng",
+ "image_height": "Thay đổi hình ảnh chiều cao",
+ "image_url": "Thay đổi URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "Thay đổi nội dung văn bản",
+ "font_family": "Thay đổi Font Gia đình",
+ "font_size": "Thay đổi cỡ chữ",
+ "bold": "Bold Text",
+ "italic": "Italic Text"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "Thay đổi màu nền / opacity",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "Phù hợp với nội dung",
+ "fit_to_all": "Phù hợp với tất cả nội dung",
+ "fit_to_canvas": "Phù hợp với vải",
+ "fit_to_layer_content": "Vào lớp phù hợp với nội dung",
+ "fit_to_sel": "Phù hợp để lựa chọn",
+ "align_relative_to": "Căn liên quan đến ...",
+ "relativeTo": "liên quan đến:",
+ "Sửa": "Sửa",
+ "largest_object": "lớn nhất đối tượng",
+ "selected_objects": "bầu các đối tượng",
+ "smallest_object": "nhỏ đối tượng",
+ "new_doc": "Hình mới",
+ "open_doc": "Mở Image",
+ "export_png": "Export as PNG",
+ "save_doc": "Save Image",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "Align Bottom",
+ "align_center": "Căn giữa",
+ "align_left": "Căn còn lại",
+ "align_middle": "Căn Trung",
+ "align_right": "Căn phải",
+ "align_top": "Căn Top",
+ "mode_select": "Chọn Công cụ",
+ "mode_fhpath": "Bút chì Công cụ",
+ "mode_line": "Line Tool",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Việt-Hand Hình chữ nhật",
+ "mode_ellipse": "Ellipse",
+ "mode_circle": "Circle",
+ "mode_fhellipse": "Việt-Hand Ellipse",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "Text Tool",
+ "mode_image": "Hình Công cụ",
+ "mode_zoom": "Zoom Tool",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "Hoàn tác",
+ "redo": "Làm lại",
+ "tool_source": "Sửa Nguồn",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "Nhóm Elements",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "Document Properties",
+ "imagelib": "Image Library",
+ "move_bottom": "Chuyển đến đáy",
+ "move_top": "Move to Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "Lưu",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "Xoá Layer",
+ "move_down": "Move Layer Down",
+ "new": "New Layer",
+ "rename": "Đổi tên Layer",
+ "move_up": "Di chuyển Layer Up",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "Chọn định sẵn:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.yi.js b/files_svgedit/svg-edit/locale/lang.yi.js
new file mode 100644
index 000000000..2233da0fb
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.yi.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "yi",
+ dir : "ltr",
+ common: {
+ "ok": "היט",
+ "cancel": "באָטל מאַכן",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "גיט צו ענדערן אָנעסן קאָליר, יבעררוק-גיט צו טוישן מאַך קאָליר",
+ "zoom_level": "ענדערן פארגרעסער הייך",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "ענדערן אָנעסן קאָליר",
+ "stroke_color": "טוישן מאַך קאָליר",
+ "stroke_style": "טוישן מאַך לאָך מאָדע",
+ "stroke_width": "טוישן מאַך ברייט",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "ענדערן ראָוטיישאַן ווינקל",
+ "blur": "Change gaussian blur value",
+ "opacity": "ענדערן סעלעקטעד נומער אָופּאַסאַטי",
+ "circle_cx": "ענדערן קרייז ס קקס קאָואָרדאַנאַט",
+ "circle_cy": "ענדערן קרייז ס סי קאָואָרדאַנאַט",
+ "circle_r": "ענדערן קרייז ס ראַדיוס",
+ "ellipse_cx": "ענדערן יליפּס ס קקס קאָואָרדאַנאַט",
+ "ellipse_cy": "ענדערן יליפּס ס סי קאָואָרדאַנאַט",
+ "ellipse_rx": "ענדערן יליפּס ס &#39;קס ראַדיוס",
+ "ellipse_ry": "ענדערן יליפּס ס &#39;י ראַדיוס",
+ "line_x1": "טוישן ליניע ס &#39;סטאַרטינג קס קאָואָרדאַנאַט",
+ "line_x2": "טוישן ליניע ס &#39;סאָף קס קאָואָרדאַנאַט",
+ "line_y1": "טוישן ליניע ס &#39;סטאַרטינג י קאָואָרדאַנאַט",
+ "line_y2": "טוישן ליניע ס &#39;סאָף י קאָואָרדאַנאַט",
+ "rect_height": "ענדערן גראָדעק הייך",
+ "rect_width": "ענדערן גראָדעק ברייט",
+ "corner_radius": "ענדערן רעקטאַנגלע קאָרנער ראַדיוס",
+ "image_width": "טוישן בילד ברייט",
+ "image_height": "טוישן בילד הייך",
+ "image_url": "ענדערן URL",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "ענדערן טעקסט אינהאַלט",
+ "font_family": "ענדערן פאָנט פאַמילי",
+ "font_size": "בייטן פאָנט גרייס",
+ "bold": "דרייסט טעקסט",
+ "italic": "יטאַליק טעקסט"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "ענדערן הינטערגרונט פאַרב / אָופּאַסאַטי",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "פּאַסיק צו אינהאַלט",
+ "fit_to_all": "פּאַסיק צו אַלע אינהאַלט",
+ "fit_to_canvas": "פּאַסיק צו לייוונט",
+ "fit_to_layer_content": "פּאַסיק צו שיכטע אינהאַלט",
+ "fit_to_sel": "פּאַסיק צו אָפּקלייב",
+ "align_relative_to": "יינרייען קאָרעוו צו ...",
+ "relativeTo": "קאָרעוו צו:",
+ "בלאַט": "בלאַט",
+ "largest_object": "לאַרדזשאַסט קעגן",
+ "selected_objects": "עלעקטעד אַבדזשעקץ",
+ "smallest_object": "סמאָלאַסט קעגן",
+ "new_doc": "ניו בילד",
+ "open_doc": "Open בילד",
+ "export_png": "Export as PNG",
+ "save_doc": "היט בילד",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "יינרייען באָטטאָם",
+ "align_center": "יינרייען צענטער",
+ "align_left": "יינרייען לעפט",
+ "align_middle": "יינרייען מיטל",
+ "align_right": "יינרייען רעכט",
+ "align_top": "יינרייען Top",
+ "mode_select": "סעלעקטירן טול",
+ "mode_fhpath": "בלייער טול",
+ "mode_line": "שורה טול",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "Free-הענט רעקטאַנגלע",
+ "mode_ellipse": "עלליפּסע",
+ "mode_circle": "קאַראַהאָד",
+ "mode_fhellipse": "Free-הענט עלליפּסע",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "טעקסט טול",
+ "mode_image": "בילד טול",
+ "mode_zoom": "פארגרעסער טול",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "ופמאַכן",
+ "redo": "רעדאָ",
+ "tool_source": "רעדאַקטירן סאָרס",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "גרופּע עלעמענץ",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "ונגראָופּ עלעמענץ",
+ "docprops": "דאָקומענט פּראָפּערטיעס",
+ "imagelib": "Image Library",
+ "move_bottom": "מאַך צו באָטטאָם",
+ "move_top": "באַוועגן צו Top",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "היט",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "ויסמעקן לייַער",
+ "move_down": "קער לייַער דאָוון",
+ "new": "ניו לייַער",
+ "rename": "רענאַמע לייַער",
+ "move_up": "באַוועגן לייַער אַרויף",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "סעלעקטירן פּרעדעפינעד:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.zh-CN.js b/files_svgedit/svg-edit/locale/lang.zh-CN.js
new file mode 100644
index 000000000..86ad5e659
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.zh-CN.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "zh-CN",
+ dir : "ltr",
+ common: {
+ "ok": "保存",
+ "cancel": "取消",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "点击更改填充颜色,按住Shift键单击更改颜色中风",
+ "zoom_level": "更改缩放级别",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "更改填充颜色",
+ "stroke_color": "中风的颜色变化",
+ "stroke_style": "更改行程冲刺风格",
+ "stroke_width": "笔划宽度的变化",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "旋转角度的变化",
+ "blur": "Change gaussian blur value",
+ "opacity": "更改所选项目不透明",
+ "circle_cx": "改变循环的CX坐标",
+ "circle_cy": "改变循环的赛扬坐标",
+ "circle_r": "改变圆的半径",
+ "ellipse_cx": "改变椭圆的CX坐标",
+ "ellipse_cy": "改变椭圆的赛扬坐标",
+ "ellipse_rx": "改变椭圆的x半径",
+ "ellipse_ry": "改变椭圆的y半径",
+ "line_x1": "更改行的起点的x坐标",
+ "line_x2": "更改行的结束x坐标",
+ "line_y1": "更改行的起点的y坐标",
+ "line_y2": "更改行的结束y坐标",
+ "rect_height": "更改矩形的高度",
+ "rect_width": "更改矩形的宽度",
+ "corner_radius": "角半径:",
+ "image_width": "更改图像的宽度",
+ "image_height": "更改图像高度",
+ "image_url": "更改网址",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "更改文字内容",
+ "font_family": "更改字体家族",
+ "font_size": "更改字体大小",
+ "bold": "粗体",
+ "italic": "斜体文本"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "更改背景颜色/不透明",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "适合内容",
+ "fit_to_all": "适合于所有的内容",
+ "fit_to_canvas": "适合画布",
+ "fit_to_layer_content": "适合层内容",
+ "fit_to_sel": "适合选择",
+ "align_relative_to": "相对对齐 ...",
+ "relativeTo": "相对于:",
+ "网页": "网页",
+ "largest_object": "最大对象",
+ "selected_objects": "选对象",
+ "smallest_object": "最小的对象",
+ "new_doc": "新形象",
+ "open_doc": "打开图像",
+ "export_png": "Export as PNG",
+ "save_doc": "保存图像",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "底部对齐",
+ "align_center": "居中对齐",
+ "align_left": "左对齐",
+ "align_middle": "中间对齐",
+ "align_right": "右对齐",
+ "align_top": "顶端对齐",
+ "mode_select": "选择工具",
+ "mode_fhpath": "铅笔工具",
+ "mode_line": "线工具",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "免费手矩形",
+ "mode_ellipse": "椭圆",
+ "mode_circle": "圈",
+ "mode_fhellipse": "免费手椭圆",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "文字工具",
+ "mode_image": "图像工具",
+ "mode_zoom": "缩放工具",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "撤消",
+ "redo": "重做",
+ "tool_source": "编辑源",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "族元素",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "取消组合元素",
+ "docprops": "文档属性",
+ "imagelib": "Image Library",
+ "move_bottom": "移至底部",
+ "move_top": "移动到顶部",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "保存",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "删除层",
+ "move_down": "层向下移动",
+ "new": "新层",
+ "rename": "重命名层",
+ "move_up": "移动层最多",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "选择预定义:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.zh-HK.js b/files_svgedit/svg-edit/locale/lang.zh-HK.js
new file mode 100644
index 000000000..06a55a782
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.zh-HK.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "zh-HK",
+ dir : "ltr",
+ common: {
+ "ok": "保存",
+ "cancel": "取消",
+ "key_backspace": "backspace",
+ "key_del": "delete",
+ "key_down": "down",
+ "key_up": "up",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "点击更改填充颜色,按住Shift键单击更改颜色中风",
+ "zoom_level": "更改缩放级别",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "更改填充颜色",
+ "stroke_color": "中风的颜色变化",
+ "stroke_style": "更改行程冲刺风格",
+ "stroke_width": "笔划宽度的变化",
+ "pos_x": "Change X coordinate",
+ "pos_y": "Change Y coordinate",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "旋转角度的变化",
+ "blur": "Change gaussian blur value",
+ "opacity": "更改所选项目不透明",
+ "circle_cx": "改变循环的CX坐标",
+ "circle_cy": "改变循环的赛扬坐标",
+ "circle_r": "改变圆的半径",
+ "ellipse_cx": "改变椭圆的CX坐标",
+ "ellipse_cy": "改变椭圆的赛扬坐标",
+ "ellipse_rx": "改变椭圆的x半径",
+ "ellipse_ry": "改变椭圆的y半径",
+ "line_x1": "更改行的起点的x坐标",
+ "line_x2": "更改行的结束x坐标",
+ "line_y1": "更改行的起点的y坐标",
+ "line_y2": "更改行的结束y坐标",
+ "rect_height": "更改矩形的高度",
+ "rect_width": "更改矩形的宽度",
+ "corner_radius": "角半径:",
+ "image_width": "更改图像的宽度",
+ "image_height": "更改图像高度",
+ "image_url": "更改网址",
+ "node_x": "Change node's x coordinate",
+ "node_y": "Change node's y coordinate",
+ "seg_type": "Change Segment type",
+ "straight_segments": "Straight",
+ "curve_segments": "Curve",
+ "text_contents": "更改文字内容",
+ "font_family": "更改字体家族",
+ "font_size": "更改字体大小",
+ "bold": "粗体",
+ "italic": "斜体文本"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "更改背景颜色/不透明",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "适合内容",
+ "fit_to_all": "适合于所有的内容",
+ "fit_to_canvas": "适合画布",
+ "fit_to_layer_content": "适合层内容",
+ "fit_to_sel": "适合选择",
+ "align_relative_to": "相对对齐 ...",
+ "relativeTo": "相对于:",
+ "网页": "网页",
+ "largest_object": "最大对象",
+ "selected_objects": "选对象",
+ "smallest_object": "最小的对象",
+ "new_doc": "新形象",
+ "open_doc": "打开图像",
+ "export_png": "Export as PNG",
+ "save_doc": "保存图像",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "底部对齐",
+ "align_center": "居中对齐",
+ "align_left": "左对齐",
+ "align_middle": "中间对齐",
+ "align_right": "右对齐",
+ "align_top": "顶端对齐",
+ "mode_select": "选择工具",
+ "mode_fhpath": "铅笔工具",
+ "mode_line": "线工具",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "免费手矩形",
+ "mode_ellipse": "椭圆",
+ "mode_circle": "圈",
+ "mode_fhellipse": "免费手椭圆",
+ "mode_path": "Path Tool",
+ "mode_shapelib": "Shape library",
+ "mode_text": "文字工具",
+ "mode_image": "图像工具",
+ "mode_zoom": "缩放工具",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "撤消",
+ "redo": "重做",
+ "tool_source": "编辑源",
+ "wireframe_mode": "Wireframe Mode",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "族元素",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "Convert to Path",
+ "reorient_path": "Reorient path",
+ "ungroup": "Ungroup Elements",
+ "docprops": "文档属性",
+ "imagelib": "Image Library",
+ "move_bottom": "移至底部",
+ "move_top": "移动到顶部",
+ "node_clone": "Clone Node",
+ "node_delete": "Delete Node",
+ "node_link": "Link Control Points",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "保存",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "delete": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"Layer",
+ "layers": "Layers",
+ "del": "删除层",
+ "move_down": "层向下移动",
+ "new": "新层",
+ "rename": "重命名层",
+ "move_up": "移动层最多",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "Move elements to:",
+ "move_selected": "Move selected elements to a different layer"
+ },
+ config: {
+ "image_props": "Image Properties",
+ "doc_title": "Title",
+ "doc_dims": "Canvas Dimensions",
+ "included_images": "Included Images",
+ "image_opt_embed": "Embed data (local files)",
+ "image_opt_ref": "Use file reference",
+ "editor_prefs": "Editor Preferences",
+ "icon_size": "Icon size",
+ "language": "Language",
+ "background": "Editor Background",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "Note: Background will not be saved with image.",
+ "icon_large": "Large",
+ "icon_medium": "Medium",
+ "icon_small": "Small",
+ "icon_xlarge": "Extra Large",
+ "select_predefined": "选择预定义:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer '%s'?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/lang.zh-TW.js b/files_svgedit/svg-edit/locale/lang.zh-TW.js
new file mode 100644
index 000000000..5d32e0fb4
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/lang.zh-TW.js
@@ -0,0 +1,234 @@
+svgEditor.readLang({
+ lang: "zh-TW",
+ dir : "ltr",
+ common: {
+ "ok": "保存",
+ "cancel": "取消",
+ "key_backspace": "空白",
+ "key_del": "刪除",
+ "key_down": "下",
+ "key_up": "上",
+ "more_opts": "More Options",
+ "url": "URL",
+ "width": "Width",
+ "height": "Height"
+ },
+ misc: {
+ "powered_by": "Powered by"
+ },
+ ui: {
+ "toggle_stroke_tools": "Show/hide more stroke tools",
+ "palette_info": "點擊更改填充顏色,按住Shift鍵單擊更改線條顏色",
+ "zoom_level": "更改縮放級別",
+ "panel_drag": "Drag left/right to resize side panel"
+ },
+ properties: {
+ "id": "Identify the element",
+ "fill_color": "更改填充顏色",
+ "stroke_color": "線條顏色",
+ "stroke_style": "更改線條(虛線)風格",
+ "stroke_width": "線條寬度",
+ "pos_x": "調整 X 軸",
+ "pos_y": "調整 Y 軸",
+ "linecap_butt": "Linecap: Butt",
+ "linecap_round": "Linecap: Round",
+ "linecap_square": "Linecap: Square",
+ "linejoin_bevel": "Linejoin: Bevel",
+ "linejoin_miter": "Linejoin: Miter",
+ "linejoin_round": "Linejoin: Round",
+ "angle": "旋轉角度",
+ "blur": "Change gaussian blur value",
+ "opacity": "更改所選項目不透明度",
+ "circle_cx": "改變圓的CX坐標",
+ "circle_cy": "改變圓的CY坐標",
+ "circle_r": "改變圓的半徑",
+ "ellipse_cx": "改變橢圓的圓心x軸座標",
+ "ellipse_cy": "改變橢圓的圓心y軸座標",
+ "ellipse_rx": "改變橢圓的x軸長",
+ "ellipse_ry": "改變橢圓的y軸長",
+ "line_x1": "更改行的起點的x坐標",
+ "line_x2": "更改行的終點x坐標",
+ "line_y1": "更改行的起點的y坐標",
+ "line_y2": "更改行的終點y坐標",
+ "rect_height": "更改矩形的高度",
+ "rect_width": "更改矩形的寬度",
+ "corner_radius": "角半徑:",
+ "image_width": "更改圖像的寬度",
+ "image_height": "更改圖像高度",
+ "image_url": "更改網址",
+ "node_x": "改變節點的x軸座標",
+ "node_y": "改變節點的y軸座標",
+ "seg_type": "Change Segment type",
+ "straight_segments": "直線",
+ "curve_segments": "曲線",
+ "text_contents": "更改文字內容",
+ "font_family": "更改字體",
+ "font_size": "更改字體大小",
+ "bold": "粗體",
+ "italic": "斜體"
+ },
+ tools: {
+ "main_menu": "Main Menu",
+ "bkgnd_color_opac": "更改背景顏色/不透明",
+ "connector_no_arrow": "No arrow",
+ "fitToContent": "適合內容",
+ "fit_to_all": "適合所有的內容",
+ "fit_to_canvas": "適合畫布",
+ "fit_to_layer_content": "適合圖層內容",
+ "fit_to_sel": "適合選取的物件",
+ "align_relative_to": "相對對齊 ...",
+ "relativeTo": "相對於:",
+ "網頁": "網頁",
+ "largest_object": "最大的物件",
+ "selected_objects": "選取物件",
+ "smallest_object": "最小的物件",
+ "new_doc": "清空圖像",
+ "open_doc": "打開圖像",
+ "export_png": "Export as PNG",
+ "save_doc": "保存圖像",
+ "import_doc": "Import SVG",
+ "align_to_page": "Align Element to Page",
+ "align_bottom": "底部對齊",
+ "align_center": "居中對齊",
+ "align_left": "向左對齊",
+ "align_middle": "中間對齊",
+ "align_right": "向右對齊",
+ "align_top": "頂端對齊",
+ "mode_select": "選擇工具",
+ "mode_fhpath": "鉛筆工具",
+ "mode_line": "線工具",
+ "mode_connect": "Connect two objects",
+ "mode_rect": "Rectangle Tool",
+ "mode_square": "Square Tool",
+ "mode_fhrect": "徒手畫矩形",
+ "mode_ellipse": "橢圓",
+ "mode_circle": "圓",
+ "mode_fhellipse": "徒手畫橢圓",
+ "mode_path": "路徑工具",
+ "mode_shapelib": "Shape library",
+ "mode_text": "文字工具",
+ "mode_image": "圖像工具",
+ "mode_zoom": "縮放工具",
+ "mode_eyedropper": "Eye Dropper Tool",
+ "no_embed": "NOTE: This image cannot be embedded. It will depend on this path to be displayed",
+ "undo": "取消復原",
+ "redo": "復原",
+ "tool_source": "編輯SVG原始碼",
+ "wireframe_mode": "框線模式(只瀏覽線條)",
+ "toggle_grid": "Show/Hide Grid",
+ "clone": "Clone Element(s)",
+ "del": "Delete Element(s)",
+ "group": "群組",
+ "make_link": "Make (hyper)link",
+ "set_link_url": "Set link URL (leave empty to remove)",
+ "to_path": "轉換成路徑",
+ "reorient_path": "調整路徑",
+ "ungroup": "取消群組",
+ "docprops": "文件屬性",
+ "imagelib": "Image Library",
+ "move_bottom": "移至底部",
+ "move_top": "移動到頂部",
+ "node_clone": "增加節點",
+ "node_delete": "刪除節點",
+ "node_link": "將控制點連起來",
+ "add_subpath": "Add sub-path",
+ "openclose_path": "Open/close sub-path",
+ "source_save": "保存",
+ "cut": "Cut",
+ "copy": "Copy",
+ "paste": "Paste",
+ "paste_in_place": "Paste in Place",
+ "刪除": "Delete",
+ "group": "Group",
+ "move_front": "Bring to Front",
+ "move_up": "Bring Forward",
+ "move_down": "Send Backward",
+ "move_back": "Send to Back"
+ },
+ layers: {
+ "layer":"圖層",
+ "layers": "Layers",
+ "del": "刪除圖層",
+ "move_down": "向下移動圖層",
+ "new": "新增圖層",
+ "rename": "重新命名圖層",
+ "move_up": "向上移動圖層",
+ "dupe": "Duplicate Layer",
+ "merge_down": "Merge Down",
+ "merge_all": "Merge All",
+ "move_elems_to": "移動物件到:",
+ "move_selected": "移動被點選的物件其他圖層"
+ },
+ config: {
+ "image_props": "圖片屬性",
+ "doc_title": "標題",
+ "doc_dims": "畫布大小",
+ "included_images": "包含圖像",
+ "image_opt_embed": "內嵌資料 (本地端檔案)",
+ "image_opt_ref": "使用檔案參照",
+ "editor_prefs": "編輯器屬性",
+ "icon_size": "圖示大小",
+ "language": "語言",
+ "background": "編輯器背景",
+ "editor_img_url": "Image URL",
+ "editor_bg_note": "注意: 編輯器背景不會和圖像一起儲存",
+ "icon_large": "大",
+ "icon_medium": "中",
+ "icon_small": "小",
+ "icon_xlarge": "特大",
+ "select_predefined": "使用預設值:",
+ "units_and_rulers": "Units & Rulers",
+ "show_rulers": "Show rulers",
+ "base_unit": "Base Unit:",
+ "grid": "Grid",
+ "snapping_onoff": "Snapping on/off",
+ "snapping_stepsize": "Snapping Step-Size:"
+ },
+ shape_cats: {
+ "basic": "Basic",
+ "object": "Objects",
+ "symbol": "Symbols",
+ "arrow": "Arrows",
+ "flowchart": "Flowchart",
+ "animal": "Animals",
+ "game": "Cards & Chess",
+ "dialog_balloon": "Dialog balloons",
+ "electronics": "Electronics",
+ "math": "Mathematical",
+ "music": "Music",
+ "misc": "Miscellaneous",
+ "raphael_1": "raphaeljs.com set 1",
+ "raphael_2": "raphaeljs.com set 2"
+ },
+ imagelib: {
+ "select_lib": "Select an image library",
+ "show_list": "Show library list",
+ "import_single": "Import single",
+ "import_multi": "Import multiple",
+ "open": "Open as new document"
+ },
+ notification: {
+ "invalidAttrValGiven":"數值給定錯誤",
+ "noContentToFitTo":"找不到符合的內容",
+ "dupeLayerName":"喔不!已經有另一個同樣名稱的圖層了!",
+ "enterUniqueLayerName":"請輸入一個名稱不重複的",
+ "enterNewLayerName":"請輸入新圖層的名稱",
+ "layerHasThatName":"圖層本來就是這個名稱(抱怨)",
+ "QmoveElemsToLayer":"要搬移所選取的物件到'%s'層嗎?",
+ "QwantToClear":"要清空圖像嗎?\n這會順便清空你的回復紀錄!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"SVG原始碼解析錯誤\n要回復到原本的SVG原始碼嗎?",
+ "QignoreSourceChanges":"要忽略對SVG原始碼的更動嗎?",
+ "featNotSupported":"未提供此功能",
+ "enterNewImgURL":"輸入新的圖片網址",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": "Retrieving \"%s\"..."
+ }
+}); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/locale/locale.js b/files_svgedit/svg-edit/locale/locale.js
new file mode 100644
index 000000000..9538905ee
--- /dev/null
+++ b/files_svgedit/svg-edit/locale/locale.js
@@ -0,0 +1,320 @@
+/*
+ * Localizing script for SVG-edit UI
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Narendra Sisodya
+ * Copyright(c) 2010 Alexis Deveria
+ *
+ */
+
+// Dependencies
+// 1) jQuery
+// 2) svgcanvas.js
+// 3) svg-editor.js
+
+var svgEditor = (function($, Editor) {
+
+ var lang_param;
+
+ function setStrings(type, obj, ids) {
+ // Root element to look for element from
+ var parent = $('#svg_editor').parent();
+ for(var sel in obj) {
+ var val = obj[sel];
+ if(!val) console.log(sel);
+
+ if(ids) sel = '#' + sel;
+ var $elem = parent.find(sel);
+ if($elem.length) {
+ var elem = parent.find(sel)[0];
+
+ switch ( type ) {
+ case 'content':
+ for(var i = 0; i < elem.childNodes.length; i++) {
+ var node = elem.childNodes[i];
+ if(node.nodeType === 3 && node.textContent.replace(/\s/g,'')) {
+ node.textContent = val;
+ break;
+ }
+ }
+ break;
+
+ case 'title':
+ elem.title = val;
+ break;
+ }
+
+
+ } else {
+ console.log('Missing: ' + sel);
+ }
+ }
+ }
+
+ Editor.readLang = function(langData) {
+ var more = Editor.canvas.runExtensions("addlangData", lang_param, true);
+ $.each(more, function(i, m) {
+ if(m.data) {
+ langData = $.merge(langData, m.data);
+ }
+ });
+
+ // Old locale file, do nothing for now.
+ if(!langData.tools) return;
+
+ var tools = langData.tools,
+ misc = langData.misc,
+ properties = langData.properties,
+ config = langData.config,
+ layers = langData.layers,
+ common = langData.common,
+ ui = langData.ui;
+
+ setStrings('content', {
+ copyrightLabel: misc.powered_by,
+ curve_segments: properties.curve_segments,
+ fitToContent: tools.fitToContent,
+ fit_to_all: tools.fit_to_all,
+ fit_to_canvas: tools.fit_to_canvas,
+ fit_to_layer_content: tools.fit_to_layer_content,
+ fit_to_sel: tools.fit_to_sel,
+
+ icon_large: config.icon_large,
+ icon_medium: config.icon_medium,
+ icon_small: config.icon_small,
+ icon_xlarge: config.icon_xlarge,
+ image_opt_embed: config.image_opt_embed,
+ image_opt_ref: config.image_opt_ref,
+ includedImages: config.included_images,
+
+ largest_object: tools.largest_object,
+
+ layersLabel: layers.layers,
+ page: tools.page,
+ relativeToLabel: tools.relativeTo,
+ selLayerLabel: layers.move_elems_to,
+ selectedPredefined: config.select_predefined,
+
+ selected_objects: tools.selected_objects,
+ smallest_object: tools.smallest_object,
+ straight_segments: properties.straight_segments,
+
+ svginfo_bg_url: config.editor_img_url + ":",
+ svginfo_bg_note: config.editor_bg_note,
+ svginfo_change_background: config.background,
+ svginfo_dim: config.doc_dims,
+ svginfo_editor_prefs: config.editor_prefs,
+ svginfo_height: common.height,
+ svginfo_icons: config.icon_size,
+ svginfo_image_props: config.image_props,
+ svginfo_lang: config.language,
+ svginfo_title: config.doc_title,
+ svginfo_width: common.width,
+
+ tool_docprops_cancel: common.cancel,
+ tool_docprops_save: common.ok,
+
+ tool_source_cancel: common.cancel,
+ tool_source_save: common.ok,
+
+ tool_prefs_cancel: common.cancel,
+ tool_prefs_save: common.ok,
+
+ sidepanel_handle: layers.layers.split('').join(' '),
+
+ tool_clear: tools.new_doc,
+ tool_docprops: tools.docprops,
+ tool_export: tools.export_png,
+ tool_import: tools.import_doc,
+ tool_imagelib: tools.imagelib,
+ tool_open: tools.open_doc,
+ tool_save: tools.save_doc,
+
+ svginfo_units_rulers: config.units_and_rulers,
+ svginfo_rulers_onoff: config.show_rulers,
+ svginfo_unit: config.base_unit,
+
+ svginfo_grid_settings: config.grid,
+ svginfo_snap_onoff: config.snapping_onoff,
+ svginfo_snap_step: config.snapping_stepsize
+ }, true);
+
+ // Shape categories
+ var cats = {};
+ for (var o in langData.shape_cats) {
+ cats['#shape_cats [data-cat="' + o + '"]'] = langData.shape_cats[o];
+ }
+
+ // TODO: Find way to make this run after shapelib ext has loaded
+ setTimeout(function() {
+ setStrings('content', cats);
+ }, 2000);
+
+ // Context menus
+ var opts = {};
+ $.each(['cut','copy','paste', 'paste_in_place', 'delete', 'group', 'ungroup', 'move_front', 'move_up', 'move_down', 'move_back'], function() {
+ opts['#cmenu_canvas a[href="#' + this + '"]'] = tools[this];
+ });
+
+ $.each(['dupe','merge_down', 'merge_all'], function() {
+ opts['#cmenu_layers a[href="#' + this + '"]'] = layers[this];
+ });
+
+ opts['#cmenu_layers a[href="#delete"]'] = layers.del;
+
+ setStrings('content', opts);
+
+ setStrings('title', {
+ align_relative_to: tools.align_relative_to,
+ circle_cx: properties.circle_cx,
+ circle_cy: properties.circle_cy,
+ circle_r: properties.circle_r,
+ cornerRadiusLabel: properties.corner_radius,
+ ellipse_cx: properties.ellipse_cx,
+ ellipse_cy: properties.ellipse_cy,
+ ellipse_rx: properties.ellipse_rx,
+ ellipse_ry: properties.ellipse_ry,
+ fill_color: properties.fill_color,
+ font_family: properties.font_family,
+ idLabel: properties.id,
+ image_height: properties.image_height,
+ image_url: properties.image_url,
+ image_width: properties.image_width,
+ layer_delete: layers.del,
+ layer_down: layers.move_down,
+ layer_new: layers['new'],
+ layer_rename: layers.rename,
+ layer_moreopts: common.more_opts,
+ layer_up: layers.move_up,
+ line_x1: properties.line_x1,
+ line_x2: properties.line_x2,
+ line_y1: properties.line_y1,
+ line_y2: properties.line_y2,
+ linecap_butt: properties.linecap_butt,
+ linecap_round: properties.linecap_round,
+ linecap_square: properties.linecap_square,
+ linejoin_bevel: properties.linejoin_bevel,
+ linejoin_miter: properties.linejoin_miter,
+ linejoin_round: properties.linejoin_round,
+ main_icon: tools.main_menu,
+ mode_connect: tools.mode_connect,
+ tools_shapelib_show: tools.mode_shapelib,
+ palette: ui.palette_info,
+ zoom_panel: ui.zoom_level,
+ path_node_x: properties.node_x,
+ path_node_y: properties.node_y,
+ rect_height_tool: properties.rect_height,
+ rect_width_tool: properties.rect_width,
+ seg_type: properties.seg_type,
+ selLayerNames: layers.move_selected,
+ selected_x: properties.pos_x,
+ selected_y: properties.pos_y,
+ stroke_color: properties.stroke_color,
+ stroke_style: properties.stroke_style,
+ stroke_width: properties.stroke_width,
+ svginfo_title: config.doc_title,
+ text: properties.text_contents,
+ toggle_stroke_tools: ui.toggle_stroke_tools,
+ tool_add_subpath: tools.add_subpath,
+ tool_alignbottom: tools.align_bottom,
+ tool_aligncenter: tools.align_center,
+ tool_alignleft: tools.align_left,
+ tool_alignmiddle: tools.align_middle,
+ tool_alignright: tools.align_right,
+ tool_aligntop: tools.align_top,
+ tool_angle: properties.angle,
+ tool_blur: properties.blur,
+ tool_bold: properties.bold,
+ tool_circle: tools.mode_circle,
+ tool_clone: tools.clone,
+ tool_clone_multi: tools.clone,
+ tool_delete: tools.del,
+ tool_delete_multi: tools.del,
+ tool_ellipse: tools.mode_ellipse,
+ tool_eyedropper: tools.mode_eyedropper,
+ tool_fhellipse: tools.mode_fhellipse,
+ tool_fhpath: tools.mode_fhpath,
+ tool_fhrect: tools.mode_fhrect,
+ tool_font_size: properties.font_size,
+ tool_group: tools.group,
+ tool_make_link: tools.make_link,
+ tool_link_url: tools.set_link_url,
+ tool_image: tools.mode_image,
+ tool_italic: properties.italic,
+ tool_line: tools.mode_line,
+ tool_move_bottom: tools.move_bottom,
+ tool_move_top: tools.move_top,
+ tool_node_clone: tools.node_clone,
+ tool_node_delete: tools.node_delete,
+ tool_node_link: tools.node_link,
+ tool_opacity: properties.opacity,
+ tool_openclose_path: tools.openclose_path,
+ tool_path: tools.mode_path,
+ tool_position: tools.align_to_page,
+ tool_rect: tools.mode_rect,
+ tool_redo: tools.redo,
+ tool_reorient: tools.reorient_path,
+ tool_select: tools.mode_select,
+ tool_source: tools.source_save,
+ tool_square: tools.mode_square,
+ tool_text: tools.mode_text,
+ tool_topath: tools.to_path,
+ tool_undo: tools.undo,
+ tool_ungroup: tools.ungroup,
+ tool_wireframe: tools.wireframe_mode,
+ view_grid: tools.toggle_grid,
+ tool_zoom: tools.mode_zoom,
+ url_notice: tools.no_embed
+
+ }
+ , true);
+
+ Editor.setLang(lang_param, langData);
+ }
+
+ Editor.putLocale = function(given_param, good_langs){
+
+ if(given_param) {
+ lang_param = given_param;
+ } else {
+ lang_param = $.pref('lang');
+ if(!lang_param) {
+ if (navigator.userLanguage) // Explorer
+ lang_param = navigator.userLanguage;
+ else if (navigator.language) // FF, Opera, ...
+ lang_param = navigator.language;
+ if (lang_param == "")
+ return;
+ }
+
+ console.log('Lang: ' + lang_param);
+
+ // Set to English if language is not in list of good langs
+ if($.inArray(lang_param, good_langs) == -1 && lang_param !== 'test') {
+ lang_param = "en";
+ }
+
+ // don't bother on first run if language is English
+ if(lang_param.indexOf("en") == 0) return;
+
+ }
+
+ var conf = Editor.curConfig;
+
+ var url = conf.langPath + "lang." + lang_param + ".js";
+
+ $.getScript(url, function(d) {
+ // Fails locally in Chrome 5+
+ if(!d) {
+ var s = document.createElement('script');
+ s.src = url;
+ document.querySelector('head').appendChild(s);
+ }
+ });
+
+ };
+
+ return Editor;
+}(jQuery, svgEditor));
+
diff --git a/files_svgedit/svg-edit/math.js b/files_svgedit/svg-edit/math.js
new file mode 100644
index 000000000..86ee4cf56
--- /dev/null
+++ b/files_svgedit/svg-edit/math.js
@@ -0,0 +1,246 @@
+/**
+ * Package: svedit.math
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// None.
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.math) {
+ svgedit.math = {};
+}
+
+// Constants
+var NEAR_ZERO = 1e-14;
+
+// Throw away SVGSVGElement used for creating matrices/transforms.
+var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+
+// Function: svgedit.math.transformPoint
+// A (hopefully) quicker function to transform a point by a matrix
+// (this function avoids any DOM calls and just does the math)
+//
+// Parameters:
+// x - Float representing the x coordinate
+// y - Float representing the y coordinate
+// m - Matrix object to transform the point with
+// Returns a x,y object representing the transformed point
+svgedit.math.transformPoint = function(x, y, m) {
+ return { x: m.a * x + m.c * y + m.e, y: m.b * x + m.d * y + m.f};
+};
+
+
+// Function: svgedit.math.isIdentity
+// Helper function to check if the matrix performs no actual transform
+// (i.e. exists for identity purposes)
+//
+// Parameters:
+// m - The matrix object to check
+//
+// Returns:
+// Boolean indicating whether or not the matrix is 1,0,0,1,0,0
+svgedit.math.isIdentity = function(m) {
+ return (m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0);
+};
+
+
+// Function: svgedit.math.matrixMultiply
+// This function tries to return a SVGMatrix that is the multiplication m1*m2.
+// We also round to zero when it's near zero
+//
+// Parameters:
+// >= 2 Matrix objects to multiply
+//
+// Returns:
+// The matrix object resulting from the calculation
+svgedit.math.matrixMultiply = function() {
+ var args = arguments, i = args.length, m = args[i-1];
+
+ while(i-- > 1) {
+ var m1 = args[i-1];
+ m = m1.multiply(m);
+ }
+ if (Math.abs(m.a) < NEAR_ZERO) m.a = 0;
+ if (Math.abs(m.b) < NEAR_ZERO) m.b = 0;
+ if (Math.abs(m.c) < NEAR_ZERO) m.c = 0;
+ if (Math.abs(m.d) < NEAR_ZERO) m.d = 0;
+ if (Math.abs(m.e) < NEAR_ZERO) m.e = 0;
+ if (Math.abs(m.f) < NEAR_ZERO) m.f = 0;
+
+ return m;
+};
+
+// Function: svgedit.math.hasMatrixTransform
+// See if the given transformlist includes a non-indentity matrix transform
+//
+// Parameters:
+// tlist - The transformlist to check
+//
+// Returns:
+// Boolean on whether or not a matrix transform was found
+svgedit.math.hasMatrixTransform = function(tlist) {
+ if(!tlist) return false;
+ var num = tlist.numberOfItems;
+ while (num--) {
+ var xform = tlist.getItem(num);
+ if (xform.type == 1 && !svgedit.math.isIdentity(xform.matrix)) return true;
+ }
+ return false;
+};
+
+// Function: svgedit.math.transformBox
+// Transforms a rectangle based on the given matrix
+//
+// Parameters:
+// l - Float with the box's left coordinate
+// t - Float with the box's top coordinate
+// w - Float with the box width
+// h - Float with the box height
+// m - Matrix object to transform the box by
+//
+// Returns:
+// An object with the following values:
+// * tl - The top left coordinate (x,y object)
+// * tr - The top right coordinate (x,y object)
+// * bl - The bottom left coordinate (x,y object)
+// * br - The bottom right coordinate (x,y object)
+// * aabox - Object with the following values:
+// * Float with the axis-aligned x coordinate
+// * Float with the axis-aligned y coordinate
+// * Float with the axis-aligned width coordinate
+// * Float with the axis-aligned height coordinate
+svgedit.math.transformBox = function(l, t, w, h, m) {
+ var topleft = {x:l,y:t},
+ topright = {x:(l+w),y:t},
+ botright = {x:(l+w),y:(t+h)},
+ botleft = {x:l,y:(t+h)};
+ var transformPoint = svgedit.math.transformPoint;
+ topleft = transformPoint( topleft.x, topleft.y, m );
+ var minx = topleft.x,
+ maxx = topleft.x,
+ miny = topleft.y,
+ maxy = topleft.y;
+ topright = transformPoint( topright.x, topright.y, m );
+ minx = Math.min(minx, topright.x);
+ maxx = Math.max(maxx, topright.x);
+ miny = Math.min(miny, topright.y);
+ maxy = Math.max(maxy, topright.y);
+ botleft = transformPoint( botleft.x, botleft.y, m);
+ minx = Math.min(minx, botleft.x);
+ maxx = Math.max(maxx, botleft.x);
+ miny = Math.min(miny, botleft.y);
+ maxy = Math.max(maxy, botleft.y);
+ botright = transformPoint( botright.x, botright.y, m );
+ minx = Math.min(minx, botright.x);
+ maxx = Math.max(maxx, botright.x);
+ miny = Math.min(miny, botright.y);
+ maxy = Math.max(maxy, botright.y);
+
+ return {tl:topleft, tr:topright, bl:botleft, br:botright,
+ aabox: {x:minx, y:miny, width:(maxx-minx), height:(maxy-miny)} };
+};
+
+// Function: svgedit.math.transformListToTransform
+// This returns a single matrix Transform for a given Transform List
+// (this is the equivalent of SVGTransformList.consolidate() but unlike
+// that method, this one does not modify the actual SVGTransformList)
+// This function is very liberal with its min,max arguments
+//
+// Parameters:
+// tlist - The transformlist object
+// min - Optional integer indicating start transform position
+// max - Optional integer indicating end transform position
+//
+// Returns:
+// A single matrix transform object
+svgedit.math.transformListToTransform = function(tlist, min, max) {
+ if(tlist == null) {
+ // Or should tlist = null have been prevented before this?
+ return svg.createSVGTransformFromMatrix(svg.createSVGMatrix());
+ }
+ var min = min == undefined ? 0 : min;
+ var max = max == undefined ? (tlist.numberOfItems-1) : max;
+ min = parseInt(min);
+ max = parseInt(max);
+ if (min > max) { var temp = max; max = min; min = temp; }
+ var m = svg.createSVGMatrix();
+ for (var i = min; i <= max; ++i) {
+ // if our indices are out of range, just use a harmless identity matrix
+ var mtom = (i >= 0 && i < tlist.numberOfItems ?
+ tlist.getItem(i).matrix :
+ svg.createSVGMatrix());
+ m = svgedit.math.matrixMultiply(m, mtom);
+ }
+ return svg.createSVGTransformFromMatrix(m);
+};
+
+
+// Function: svgedit.math.getMatrix
+// Get the matrix object for a given element
+//
+// Parameters:
+// elem - The DOM element to check
+//
+// Returns:
+// The matrix object associated with the element's transformlist
+svgedit.math.getMatrix = function(elem) {
+ var tlist = svgedit.transformlist.getTransformList(elem);
+ return svgedit.math.transformListToTransform(tlist).matrix;
+};
+
+
+// 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};
+};
+
+
+// Function: rectsIntersect
+// Check if two rectangles (BBoxes objects) intersect each other
+//
+// Paramaters:
+// r1 - The first BBox-like object
+// r2 - The second BBox-like object
+//
+// Returns:
+// Boolean that's true if rectangles intersect
+svgedit.math.rectsIntersect = function(r1, r2) {
+ return r2.x < (r1.x+r1.width) &&
+ (r2.x+r2.width) > r1.x &&
+ r2.y < (r1.y+r1.height) &&
+ (r2.y+r2.height) > r1.y;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/path.js b/files_svgedit/svg-edit/path.js
new file mode 100644
index 000000000..e4901826a
--- /dev/null
+++ b/files_svgedit/svg-edit/path.js
@@ -0,0 +1,980 @@
+/**
+ * Package: svgedit.path
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2011 Alexis Deveria
+ * Copyright(c) 2011 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) math.js
+// 4) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.path) {
+ svgedit.path = {};
+}
+
+var svgns = "http://www.w3.org/2000/svg";
+
+var uiStrings = {
+ "pathNodeTooltip": "Drag node to move it. Double-click node to change segment type",
+ "pathCtrlPtTooltip": "Drag control point to adjust curve properties"
+};
+
+var segData = {
+ 2: ['x','y'],
+ 4: ['x','y'],
+ 6: ['x','y','x1','y1','x2','y2'],
+ 8: ['x','y','x1','y1'],
+ 10: ['x','y','r1','r2','angle','largeArcFlag','sweepFlag'],
+ 12: ['x'],
+ 14: ['y'],
+ 16: ['x','y','x2','y2'],
+ 18: ['x','y']
+};
+
+var pathFuncs = [];
+
+var link_control_pts = true;
+
+// Stores references to paths via IDs.
+// TODO: Make this cross-document happy.
+var pathData = {};
+
+svgedit.path.setLinkControlPoints = function(lcp) {
+ link_control_pts = lcp;
+};
+
+svgedit.path.path = null;
+
+var editorContext_ = null;
+
+svgedit.path.init = function(editorContext) {
+ editorContext_ = editorContext;
+
+ pathFuncs = [0,'ClosePath'];
+ var pathFuncsStrs = ['Moveto', 'Lineto', 'CurvetoCubic', 'CurvetoQuadratic', 'Arc',
+ 'LinetoHorizontal', 'LinetoVertical','CurvetoCubicSmooth','CurvetoQuadraticSmooth'];
+ $.each(pathFuncsStrs, function(i,s) {
+ pathFuncs.push(s+'Abs');
+ pathFuncs.push(s+'Rel');
+ });
+};
+
+svgedit.path.insertItemBefore = function(elem, newseg, index) {
+ // Support insertItemBefore on paths for FF2
+ var list = elem.pathSegList;
+
+ if(svgedit.browser.supportsPathInsertItemBefore()) {
+ list.insertItemBefore(newseg, index);
+ return;
+ }
+ var len = list.numberOfItems;
+ var arr = [];
+ for(var i=0; i<len; i++) {
+ var cur_seg = list.getItem(i);
+ arr.push(cur_seg)
+ }
+ list.clear();
+ for(var i=0; i<len; i++) {
+ if(i == index) { //index+1
+ list.appendItem(newseg);
+ }
+ list.appendItem(arr[i]);
+ }
+};
+
+// TODO: See if this should just live in replacePathSeg
+svgedit.path.ptObjToArr = function(type, seg_item) {
+ var arr = segData[type], len = arr.length;
+ var out = Array(len);
+ for(var i=0; i<len; i++) {
+ out[i] = seg_item[arr[i]];
+ }
+ return out;
+};
+
+svgedit.path.getGripPt = function(seg, alt_pt) {
+ var out = {
+ x: alt_pt? alt_pt.x : seg.item.x,
+ y: alt_pt? alt_pt.y : seg.item.y
+ }, path = seg.path;
+
+ if(path.matrix) {
+ var pt = svgedit.math.transformPoint(out.x, out.y, path.matrix);
+ out = pt;
+ }
+
+ out.x *= editorContext_.getCurrentZoom();
+ out.y *= editorContext_.getCurrentZoom();
+
+ return out;
+};
+
+svgedit.path.getPointFromGrip = function(pt, path) {
+ var out = {
+ x: pt.x,
+ y: pt.y
+ }
+
+ if(path.matrix) {
+ var pt = svgedit.math.transformPoint(out.x, out.y, path.imatrix);
+ out.x = pt.x;
+ out.y = pt.y;
+ }
+
+ out.x /= editorContext_.getCurrentZoom();
+ out.y /= editorContext_.getCurrentZoom();
+
+ return out;
+};
+
+svgedit.path.addPointGrip = function(index, x, y) {
+ // create the container of all the point grips
+ var pointGripContainer = svgedit.path.getGripContainer();
+
+ var pointGrip = svgedit.utilities.getElem("pathpointgrip_"+index);
+ // create it
+ if (!pointGrip) {
+ pointGrip = document.createElementNS(svgns, "circle");
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'id': "pathpointgrip_" + index,
+ 'display': "none",
+ 'r': 4,
+ 'fill': "#0FF",
+ 'stroke': "#00F",
+ 'stroke-width': 2,
+ 'cursor': 'move',
+ 'style': 'pointer-events:all',
+ 'xlink:title': uiStrings.pathNodeTooltip
+ });
+ pointGrip = pointGripContainer.appendChild(pointGrip);
+
+ var grip = $('#pathpointgrip_'+index);
+ grip.dblclick(function() {
+ if(svgedit.path.path) svgedit.path.path.setSegType();
+ });
+ }
+ if(x && y) {
+ // set up the point grip element and display it
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'cx': x,
+ 'cy': y,
+ 'display': "inline"
+ });
+ }
+ return pointGrip;
+};
+
+svgedit.path.getGripContainer = function() {
+ var c = svgedit.utilities.getElem("pathpointgrip_container");
+ if (!c) {
+ var parent = svgedit.utilities.getElem("selectorParentGroup");
+ c = parent.appendChild(document.createElementNS(svgns, "g"));
+ c.id = "pathpointgrip_container";
+ }
+ return c;
+};
+
+svgedit.path.addCtrlGrip = function(id) {
+ var pointGrip = svgedit.utilities.getElem("ctrlpointgrip_"+id);
+ if(pointGrip) return pointGrip;
+
+ pointGrip = document.createElementNS(svgns, "circle");
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'id': "ctrlpointgrip_" + id,
+ 'display': "none",
+ 'r': 4,
+ 'fill': "#0FF",
+ 'stroke': "#55F",
+ 'stroke-width': 1,
+ 'cursor': 'move',
+ 'style': 'pointer-events:all',
+ 'xlink:title': uiStrings.pathCtrlPtTooltip
+ });
+ svgedit.path.getGripContainer().appendChild(pointGrip);
+ return pointGrip;
+};
+
+svgedit.path.getCtrlLine = function(id) {
+ var ctrlLine = svgedit.utilities.getElem("ctrlLine_"+id);
+ if(ctrlLine) return ctrlLine;
+
+ ctrlLine = document.createElementNS(svgns, "line");
+ svgedit.utilities.assignAttributes(ctrlLine, {
+ 'id': "ctrlLine_"+id,
+ 'stroke': "#555",
+ 'stroke-width': 1,
+ "style": "pointer-events:none"
+ });
+ svgedit.path.getGripContainer().appendChild(ctrlLine);
+ return ctrlLine;
+};
+
+svgedit.path.getPointGrip = function(seg, update) {
+ var index = seg.index;
+ var pointGrip = svgedit.path.addPointGrip(index);
+
+ if(update) {
+ var pt = svgedit.path.getGripPt(seg);
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'cx': pt.x,
+ 'cy': pt.y,
+ 'display': "inline"
+ });
+ }
+
+ return pointGrip;
+};
+
+svgedit.path.getControlPoints = function(seg) {
+ var item = seg.item;
+ var index = seg.index;
+ if(!("x1" in item) || !("x2" in item)) return null;
+ var cpt = {};
+ var pointGripContainer = svgedit.path.getGripContainer();
+
+ // Note that this is intentionally not seg.prev.item
+ var prev = svgedit.path.path.segs[index-1].item;
+
+ var seg_items = [prev, item];
+
+ for(var i=1; i<3; i++) {
+ var id = index + 'c' + i;
+
+ var ctrlLine = cpt['c' + i + '_line'] = svgedit.path.getCtrlLine(id);
+
+ var pt = svgedit.path.getGripPt(seg, {x:item['x' + i], y:item['y' + i]});
+ var gpt = svgedit.path.getGripPt(seg, {x:seg_items[i-1].x, y:seg_items[i-1].y});
+
+ svgedit.utilities.assignAttributes(ctrlLine, {
+ 'x1': pt.x,
+ 'y1': pt.y,
+ 'x2': gpt.x,
+ 'y2': gpt.y,
+ 'display': "inline"
+ });
+
+ cpt['c' + i + '_line'] = ctrlLine;
+
+ // create it
+ pointGrip = cpt['c' + i] = svgedit.path.addCtrlGrip(id);
+
+ svgedit.utilities.assignAttributes(pointGrip, {
+ 'cx': pt.x,
+ 'cy': pt.y,
+ 'display': "inline"
+ });
+ cpt['c' + i] = pointGrip;
+ }
+ return cpt;
+};
+
+// This replaces the segment at the given index. Type is given as number.
+svgedit.path.replacePathSeg = function(type, index, pts, elem) {
+ var path = elem || svgedit.path.path.elem;
+ var func = 'createSVGPathSeg' + pathFuncs[type];
+ var seg = path[func].apply(path, pts);
+
+ if(svgedit.browser.supportsPathReplaceItem()) {
+ path.pathSegList.replaceItem(seg, index);
+ } else {
+ var segList = path.pathSegList;
+ var len = segList.numberOfItems;
+ var arr = [];
+ for(var i=0; i<len; i++) {
+ var cur_seg = segList.getItem(i);
+ arr.push(cur_seg)
+ }
+ segList.clear();
+ for(var i=0; i<len; i++) {
+ if(i == index) {
+ segList.appendItem(seg);
+ } else {
+ segList.appendItem(arr[i]);
+ }
+ }
+ }
+};
+
+svgedit.path.getSegSelector = function(seg, update) {
+ var index = seg.index;
+ var segLine = svgedit.utilities.getElem("segline_" + index);
+ if(!segLine) {
+ var pointGripContainer = svgedit.path.getGripContainer();
+ // create segline
+ segLine = document.createElementNS(svgns, "path");
+ svgedit.utilities.assignAttributes(segLine, {
+ 'id': "segline_" + index,
+ 'display': 'none',
+ 'fill': "none",
+ 'stroke': "#0FF",
+ 'stroke-width': 2,
+ 'style':'pointer-events:none',
+ 'd': 'M0,0 0,0'
+ });
+ pointGripContainer.appendChild(segLine);
+ }
+
+ if(update) {
+ var prev = seg.prev;
+ if(!prev) {
+ segLine.setAttribute("display", "none");
+ return segLine;
+ }
+
+ var pt = svgedit.path.getGripPt(prev);
+ // Set start point
+ svgedit.path.replacePathSeg(2, 0, [pt.x, pt.y], segLine);
+
+ var pts = svgedit.path.ptObjToArr(seg.type, seg.item, true);
+ for(var i=0; i < pts.length; i+=2) {
+ var pt = svgedit.path.getGripPt(seg, {x:pts[i], y:pts[i+1]});
+ pts[i] = pt.x;
+ pts[i+1] = pt.y;
+ }
+
+ svgedit.path.replacePathSeg(seg.type, 1, pts, segLine);
+ }
+ return segLine;
+};
+
+// Function: smoothControlPoints
+// Takes three points and creates a smoother line based on them
+//
+// Parameters:
+// ct1 - Object with x and y values (first control point)
+// ct2 - Object with x and y values (second control point)
+// pt - Object with x and y values (third point)
+//
+// Returns:
+// Array of two "smoothed" point objects
+svgedit.path.smoothControlPoints = this.smoothControlPoints = function(ct1, ct2, pt) {
+ // each point must not be the origin
+ var x1 = ct1.x - pt.x,
+ y1 = ct1.y - pt.y,
+ x2 = ct2.x - pt.x,
+ y2 = ct2.y - pt.y;
+
+ if ( (x1 != 0 || y1 != 0) && (x2 != 0 || y2 != 0) ) {
+ var anglea = Math.atan2(y1,x1),
+ angleb = Math.atan2(y2,x2),
+ r1 = Math.sqrt(x1*x1+y1*y1),
+ r2 = Math.sqrt(x2*x2+y2*y2),
+ nct1 = editorContext_.getSVGRoot().createSVGPoint(),
+ nct2 = editorContext_.getSVGRoot().createSVGPoint();
+ if (anglea < 0) { anglea += 2*Math.PI; }
+ if (angleb < 0) { angleb += 2*Math.PI; }
+
+ var angleBetween = Math.abs(anglea - angleb),
+ angleDiff = Math.abs(Math.PI - angleBetween)/2;
+
+ var new_anglea, new_angleb;
+ if (anglea - angleb > 0) {
+ new_anglea = angleBetween < Math.PI ? (anglea + angleDiff) : (anglea - angleDiff);
+ new_angleb = angleBetween < Math.PI ? (angleb - angleDiff) : (angleb + angleDiff);
+ }
+ else {
+ new_anglea = angleBetween < Math.PI ? (anglea - angleDiff) : (anglea + angleDiff);
+ new_angleb = angleBetween < Math.PI ? (angleb + angleDiff) : (angleb - angleDiff);
+ }
+
+ // rotate the points
+ nct1.x = r1 * Math.cos(new_anglea) + pt.x;
+ nct1.y = r1 * Math.sin(new_anglea) + pt.y;
+ nct2.x = r2 * Math.cos(new_angleb) + pt.x;
+ nct2.y = r2 * Math.sin(new_angleb) + pt.y;
+
+ return [nct1, nct2];
+ }
+ return undefined;
+};
+
+svgedit.path.Segment = function(index, item) {
+ this.selected = false;
+ this.index = index;
+ this.item = item;
+ this.type = item.pathSegType;
+
+ this.ctrlpts = [];
+ this.ptgrip = null;
+ this.segsel = null;
+};
+
+svgedit.path.Segment.prototype.showCtrlPts = function(y) {
+ for (var i in this.ctrlpts) {
+ this.ctrlpts[i].setAttribute("display", y ? "inline" : "none");
+ }
+};
+
+svgedit.path.Segment.prototype.selectCtrls = function(y) {
+ $('#ctrlpointgrip_' + this.index + 'c1, #ctrlpointgrip_' + this.index + 'c2').
+ attr('fill', y ? '#0FF' : '#EEE');
+};
+
+svgedit.path.Segment.prototype.show = function(y) {
+ if(this.ptgrip) {
+ this.ptgrip.setAttribute("display", y ? "inline" : "none");
+ this.segsel.setAttribute("display", y ? "inline" : "none");
+ // Show/hide all control points if available
+ this.showCtrlPts(y);
+ }
+};
+
+svgedit.path.Segment.prototype.select = function(y) {
+ if(this.ptgrip) {
+ this.ptgrip.setAttribute("stroke", y ? "#0FF" : "#00F");
+ this.segsel.setAttribute("display", y ? "inline" : "none");
+ if(this.ctrlpts) {
+ this.selectCtrls(y);
+ }
+ this.selected = y;
+ }
+};
+
+svgedit.path.Segment.prototype.addGrip = function() {
+ this.ptgrip = svgedit.path.getPointGrip(this, true);
+ this.ctrlpts = svgedit.path.getControlPoints(this, true);
+ this.segsel = svgedit.path.getSegSelector(this, true);
+};
+
+svgedit.path.Segment.prototype.update = function(full) {
+ if(this.ptgrip) {
+ var pt = svgedit.path.getGripPt(this);
+ svgedit.utilities.assignAttributes(this.ptgrip, {
+ 'cx': pt.x,
+ 'cy': pt.y
+ });
+
+ svgedit.path.getSegSelector(this, true);
+
+ if(this.ctrlpts) {
+ if(full) {
+ this.item = svgedit.path.path.elem.pathSegList.getItem(this.index);
+ this.type = this.item.pathSegType;
+ }
+ svgedit.path.getControlPoints(this);
+ }
+ // this.segsel.setAttribute("display", y?"inline":"none");
+ }
+};
+
+svgedit.path.Segment.prototype.move = function(dx, dy) {
+ var item = this.item;
+
+ if(this.ctrlpts) {
+ var cur_pts = [item.x += dx, item.y += dy,
+ item.x1, item.y1, item.x2 += dx, item.y2 += dy];
+ } else {
+ var cur_pts = [item.x += dx, item.y += dy];
+ }
+ svgedit.path.replacePathSeg(this.type, this.index, cur_pts);
+
+ if(this.next && this.next.ctrlpts) {
+ var next = this.next.item;
+ var next_pts = [next.x, next.y,
+ next.x1 += dx, next.y1 += dy, next.x2, next.y2];
+ svgedit.path.replacePathSeg(this.next.type, this.next.index, next_pts);
+ }
+
+ if(this.mate) {
+ // The last point of a closed subpath has a "mate",
+ // which is the "M" segment of the subpath
+ var item = this.mate.item;
+ var pts = [item.x += dx, item.y += dy];
+ svgedit.path.replacePathSeg(this.mate.type, this.mate.index, pts);
+ // Has no grip, so does not need "updating"?
+ }
+
+ this.update(true);
+ if(this.next) this.next.update(true);
+};
+
+svgedit.path.Segment.prototype.setLinked = function(num) {
+ var seg, anum, pt;
+ if (num == 2) {
+ anum = 1;
+ seg = this.next;
+ if(!seg) return;
+ pt = this.item;
+ } else {
+ anum = 2;
+ seg = this.prev;
+ if(!seg) return;
+ pt = seg.item;
+ }
+
+ var item = seg.item;
+
+ item['x' + anum] = pt.x + (pt.x - this.item['x' + num]);
+ item['y' + anum] = pt.y + (pt.y - this.item['y' + num]);
+
+ var pts = [item.x, item.y,
+ item.x1, item.y1,
+ item.x2, item.y2];
+
+ svgedit.path.replacePathSeg(seg.type, seg.index, pts);
+ seg.update(true);
+};
+
+svgedit.path.Segment.prototype.moveCtrl = function(num, dx, dy) {
+ var item = this.item;
+
+ item['x' + num] += dx;
+ item['y' + num] += dy;
+
+ var pts = [item.x,item.y,
+ item.x1,item.y1, item.x2,item.y2];
+
+ svgedit.path.replacePathSeg(this.type, this.index, pts);
+ this.update(true);
+};
+
+svgedit.path.Segment.prototype.setType = function(new_type, pts) {
+ svgedit.path.replacePathSeg(new_type, this.index, pts);
+ this.type = new_type;
+ this.item = svgedit.path.path.elem.pathSegList.getItem(this.index);
+ this.showCtrlPts(new_type === 6);
+ this.ctrlpts = svgedit.path.getControlPoints(this);
+ this.update(true);
+};
+
+svgedit.path.Path = function(elem) {
+ if(!elem || elem.tagName !== "path") {
+ throw "svgedit.path.Path constructed without a <path> element";
+ }
+
+ this.elem = elem;
+ this.segs = [];
+ this.selected_pts = [];
+ svgedit.path.path = this;
+
+ this.init();
+};
+
+// Reset path data
+svgedit.path.Path.prototype.init = function() {
+ // Hide all grips, etc
+ $(svgedit.path.getGripContainer()).find("*").attr("display", "none");
+ var segList = this.elem.pathSegList;
+ var len = segList.numberOfItems;
+ this.segs = [];
+ this.selected_pts = [];
+ this.first_seg = null;
+
+ // Set up segs array
+ for(var i=0; i < len; i++) {
+ var item = segList.getItem(i);
+ var segment = new svgedit.path.Segment(i, item);
+ segment.path = this;
+ this.segs.push(segment);
+ }
+
+ var segs = this.segs;
+ var start_i = null;
+
+ for(var i=0; i < len; i++) {
+ var seg = segs[i];
+ var next_seg = (i+1) >= len ? null : segs[i+1];
+ var prev_seg = (i-1) < 0 ? null : segs[i-1];
+
+ if(seg.type === 2) {
+ if(prev_seg && prev_seg.type !== 1) {
+ // New sub-path, last one is open,
+ // so add a grip to last sub-path's first point
+ var start_seg = segs[start_i];
+ start_seg.next = segs[start_i+1];
+ start_seg.next.prev = start_seg;
+ start_seg.addGrip();
+ }
+ // Remember that this is a starter seg
+ start_i = i;
+ } else if(next_seg && next_seg.type === 1) {
+ // This is the last real segment of a closed sub-path
+ // Next is first seg after "M"
+ seg.next = segs[start_i+1];
+
+ // First seg after "M"'s prev is this
+ seg.next.prev = seg;
+ seg.mate = segs[start_i];
+ seg.addGrip();
+ if(this.first_seg == null) {
+ this.first_seg = seg;
+ }
+ } else if(!next_seg) {
+ if(seg.type !== 1) {
+ // Last seg, doesn't close so add a grip
+ // to last sub-path's first point
+ var start_seg = segs[start_i];
+ start_seg.next = segs[start_i+1];
+ start_seg.next.prev = start_seg;
+ start_seg.addGrip();
+ seg.addGrip();
+
+ if(!this.first_seg) {
+ // Open path, so set first as real first and add grip
+ this.first_seg = segs[start_i];
+ }
+ }
+ } else if(seg.type !== 1){
+ // Regular segment, so add grip and its "next"
+ seg.addGrip();
+
+ // Don't set its "next" if it's an "M"
+ if(next_seg && next_seg.type !== 2) {
+ seg.next = next_seg;
+ seg.next.prev = seg;
+ }
+ }
+ }
+ return this;
+};
+
+svgedit.path.Path.prototype.eachSeg = function(fn) {
+ var len = this.segs.length
+ for(var i=0; i < len; i++) {
+ var ret = fn.call(this.segs[i], i);
+ if(ret === false) break;
+ }
+};
+
+svgedit.path.Path.prototype.addSeg = function(index) {
+ // Adds a new segment
+ var seg = this.segs[index];
+ if(!seg.prev) return;
+
+ var prev = seg.prev;
+ var newseg;
+ switch(seg.item.pathSegType) {
+ case 4:
+ var new_x = (seg.item.x + prev.item.x) / 2;
+ var new_y = (seg.item.y + prev.item.y) / 2;
+ newseg = this.elem.createSVGPathSegLinetoAbs(new_x, new_y);
+ break;
+ case 6: //make it a curved segment to preserve the shape (WRS)
+ // http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm#Geometric_interpretation
+ var p0_x = (prev.item.x + seg.item.x1)/2;
+ var p1_x = (seg.item.x1 + seg.item.x2)/2;
+ var p2_x = (seg.item.x2 + seg.item.x)/2;
+ var p01_x = (p0_x + p1_x)/2;
+ var p12_x = (p1_x + p2_x)/2;
+ var new_x = (p01_x + p12_x)/2;
+ var p0_y = (prev.item.y + seg.item.y1)/2;
+ var p1_y = (seg.item.y1 + seg.item.y2)/2;
+ var p2_y = (seg.item.y2 + seg.item.y)/2;
+ var p01_y = (p0_y + p1_y)/2;
+ var p12_y = (p1_y + p2_y)/2;
+ var new_y = (p01_y + p12_y)/2;
+ newseg = this.elem.createSVGPathSegCurvetoCubicAbs(new_x,new_y, p0_x,p0_y, p01_x,p01_y);
+ var pts = [seg.item.x,seg.item.y,p12_x,p12_y,p2_x,p2_y];
+ svgedit.path.replacePathSeg(seg.type,index,pts);
+ break;
+ }
+
+ svgedit.path.insertItemBefore(this.elem, newseg, index);
+};
+
+svgedit.path.Path.prototype.deleteSeg = function(index) {
+ var seg = this.segs[index];
+ var list = this.elem.pathSegList;
+
+ seg.show(false);
+ var next = seg.next;
+ if(seg.mate) {
+ // Make the next point be the "M" point
+ var pt = [next.item.x, next.item.y];
+ svgedit.path.replacePathSeg(2, next.index, pt);
+
+ // Reposition last node
+ svgedit.path.replacePathSeg(4, seg.index, pt);
+
+ list.removeItem(seg.mate.index);
+ } else if(!seg.prev) {
+ // First node of open path, make next point the M
+ var item = seg.item;
+ var pt = [next.item.x, next.item.y];
+ svgedit.path.replacePathSeg(2, seg.next.index, pt);
+ list.removeItem(index);
+
+ } else {
+ list.removeItem(index);
+ }
+};
+
+svgedit.path.Path.prototype.subpathIsClosed = function(index) {
+ var closed = false;
+ // Check if subpath is already open
+ svgedit.path.path.eachSeg(function(i) {
+ if(i <= index) return true;
+ if(this.type === 2) {
+ // Found M first, so open
+ return false;
+ } else if(this.type === 1) {
+ // Found Z first, so closed
+ closed = true;
+ return false;
+ }
+ });
+
+ return closed;
+};
+
+svgedit.path.Path.prototype.removePtFromSelection = function(index) {
+ var pos = this.selected_pts.indexOf(index);
+ if(pos == -1) {
+ return;
+ }
+ this.segs[index].select(false);
+ this.selected_pts.splice(pos, 1);
+};
+
+svgedit.path.Path.prototype.clearSelection = function() {
+ this.eachSeg(function(i) {
+ // 'this' is the segment here
+ this.select(false);
+ });
+ this.selected_pts = [];
+};
+
+svgedit.path.Path.prototype.storeD = function() {
+ this.last_d = this.elem.getAttribute('d');
+};
+
+svgedit.path.Path.prototype.show = function(y) {
+ // Shows this path's segment grips
+ this.eachSeg(function() {
+ // 'this' is the segment here
+ this.show(y);
+ });
+ if(y) {
+ this.selectPt(this.first_seg.index);
+ }
+ return this;
+};
+
+// Move selected points
+svgedit.path.Path.prototype.movePts = function(d_x, d_y) {
+ var i = this.selected_pts.length;
+ while(i--) {
+ var seg = this.segs[this.selected_pts[i]];
+ seg.move(d_x, d_y);
+ }
+};
+
+svgedit.path.Path.prototype.moveCtrl = function(d_x, d_y) {
+ var seg = this.segs[this.selected_pts[0]];
+ seg.moveCtrl(this.dragctrl, d_x, d_y);
+ if(link_control_pts) {
+ seg.setLinked(this.dragctrl);
+ }
+};
+
+svgedit.path.Path.prototype.setSegType = function(new_type) {
+ this.storeD();
+ var i = this.selected_pts.length;
+ var text;
+ while(i--) {
+ var sel_pt = this.selected_pts[i];
+
+ // Selected seg
+ var cur = this.segs[sel_pt];
+ var prev = cur.prev;
+ if(!prev) continue;
+
+ if(!new_type) { // double-click, so just toggle
+ text = "Toggle Path Segment Type";
+
+ // Toggle segment to curve/straight line
+ var old_type = cur.type;
+
+ new_type = (old_type == 6) ? 4 : 6;
+ }
+
+ new_type = new_type-0;
+
+ var cur_x = cur.item.x;
+ var cur_y = cur.item.y;
+ var prev_x = prev.item.x;
+ var prev_y = prev.item.y;
+ var points;
+ switch ( new_type ) {
+ case 6:
+ if(cur.olditem) {
+ var old = cur.olditem;
+ points = [cur_x,cur_y, old.x1,old.y1, old.x2,old.y2];
+ } else {
+ var diff_x = cur_x - prev_x;
+ var diff_y = cur_y - prev_y;
+ // get control points from straight line segment
+ /*
+ var ct1_x = (prev_x + (diff_y/2));
+ var ct1_y = (prev_y - (diff_x/2));
+ var ct2_x = (cur_x + (diff_y/2));
+ var ct2_y = (cur_y - (diff_x/2));
+ */
+ //create control points on the line to preserve the shape (WRS)
+ var ct1_x = (prev_x + (diff_x/3));
+ var ct1_y = (prev_y + (diff_y/3));
+ var ct2_x = (cur_x - (diff_x/3));
+ var ct2_y = (cur_y - (diff_y/3));
+ points = [cur_x,cur_y, ct1_x,ct1_y, ct2_x,ct2_y];
+ }
+ break;
+ case 4:
+ points = [cur_x,cur_y];
+
+ // Store original prevve segment nums
+ cur.olditem = cur.item;
+ break;
+ }
+
+ cur.setType(new_type, points);
+ }
+ svgedit.path.path.endChanges(text);
+};
+
+svgedit.path.Path.prototype.selectPt = function(pt, ctrl_num) {
+ this.clearSelection();
+ if(pt == null) {
+ this.eachSeg(function(i) {
+ // 'this' is the segment here.
+ if(this.prev) {
+ pt = i;
+ }
+ });
+ }
+ this.addPtsToSelection(pt);
+ if(ctrl_num) {
+ this.dragctrl = ctrl_num;
+
+ if(link_control_pts) {
+ this.segs[pt].setLinked(ctrl_num);
+ }
+ }
+};
+
+// Update position of all points
+svgedit.path.Path.prototype.update = function() {
+ var elem = this.elem;
+ if(svgedit.utilities.getRotationAngle(elem)) {
+ this.matrix = svgedit.math.getMatrix(elem);
+ this.imatrix = this.matrix.inverse();
+ } else {
+ this.matrix = null;
+ this.imatrix = null;
+ }
+
+ this.eachSeg(function(i) {
+ this.item = elem.pathSegList.getItem(i);
+ this.update();
+ });
+
+ return this;
+};
+
+svgedit.path.getPath_ = function(elem) {
+ var p = pathData[elem.id];
+ if(!p) p = pathData[elem.id] = new svgedit.path.Path(elem);
+ return p;
+};
+
+svgedit.path.removePath_ = function(id) {
+ if(id in pathData) delete pathData[id];
+};
+
+var getRotVals = function(x, y) {
+ dx = x - oldcx;
+ dy = y - oldcy;
+
+ // rotate the point around the old center
+ r = Math.sqrt(dx*dx + dy*dy);
+ theta = Math.atan2(dy,dx) + angle;
+ dx = r * Math.cos(theta) + oldcx;
+ dy = r * Math.sin(theta) + oldcy;
+
+ // dx,dy should now hold the actual coordinates of each
+ // point after being rotated
+
+ // now we want to rotate them around the new center in the reverse direction
+ dx -= newcx;
+ dy -= newcy;
+
+ r = Math.sqrt(dx*dx + dy*dy);
+ theta = Math.atan2(dy,dx) - angle;
+
+ return {'x':(r * Math.cos(theta) + newcx)/1,
+ 'y':(r * Math.sin(theta) + newcy)/1};
+};
+
+// If the path was rotated, we must now pay the piper:
+// Every path point must be rotated into the rotated coordinate system of
+// its old center, then determine the new center, then rotate it back
+// This is because we want the path to remember its rotation
+
+// TODO: This is still using ye olde transform methods, can probably
+// be optimized or even taken care of by recalculateDimensions
+svgedit.path.recalcRotatedPath = function() {
+ var current_path = svgedit.path.path.elem;
+ var angle = svgedit.utilities.getRotationAngle(current_path, true);
+ if(!angle) return;
+// selectedBBoxes[0] = svgedit.path.path.oldbbox;
+ var box = svgedit.utilities.getBBox(current_path),
+ oldbox = svgedit.path.path.oldbbox,//selectedBBoxes[0],
+ oldcx = oldbox.x + oldbox.width/2,
+ oldcy = oldbox.y + oldbox.height/2,
+ newcx = box.x + box.width/2,
+ newcy = box.y + box.height/2,
+
+ // un-rotate the new center to the proper position
+ dx = newcx - oldcx,
+ dy = newcy - oldcy,
+ r = Math.sqrt(dx*dx + dy*dy),
+ theta = Math.atan2(dy,dx) + angle;
+
+ newcx = r * Math.cos(theta) + oldcx;
+ newcy = r * Math.sin(theta) + oldcy;
+
+ var list = current_path.pathSegList,
+ i = list.numberOfItems;
+ while (i) {
+ i -= 1;
+ var seg = list.getItem(i),
+ type = seg.pathSegType;
+ if(type == 1) continue;
+
+ var rvals = getRotVals(seg.x,seg.y),
+ points = [rvals.x, rvals.y];
+ if(seg.x1 != null && seg.x2 != null) {
+ c_vals1 = getRotVals(seg.x1, seg.y1);
+ c_vals2 = getRotVals(seg.x2, seg.y2);
+ points.splice(points.length, 0, c_vals1.x , c_vals1.y, c_vals2.x, c_vals2.y);
+ }
+ svgedit.path.replacePathSeg(type, i, points);
+ } // loop for each point
+
+ box = svgedit.utilities.getBBox(current_path);
+// selectedBBoxes[0].x = box.x; selectedBBoxes[0].y = box.y;
+// selectedBBoxes[0].width = box.width; selectedBBoxes[0].height = box.height;
+
+ // now we must set the new transform to be rotated around the new center
+ var R_nc = svgroot.createSVGTransform(),
+ tlist = svgedit.transformlist.getTransformList(current_path);
+ R_nc.setRotate((angle * 180.0 / Math.PI), newcx, newcy);
+ tlist.replaceItem(R_nc,0);
+};
+
+// ====================================
+// Public API starts here
+
+svgedit.path.clearData = function() {
+ pathData = {};
+};
+
+})();
diff --git a/files_svgedit/svg-edit/sanitize.js b/files_svgedit/svg-edit/sanitize.js
new file mode 100644
index 000000000..5924a598d
--- /dev/null
+++ b/files_svgedit/svg-edit/sanitize.js
@@ -0,0 +1,273 @@
+/**
+ * Package: svgedit.sanitize
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) browser.js
+// 2) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.sanitize) {
+ svgedit.sanitize = {};
+}
+
+// Namespace constants
+var svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ xmlns = "http://www.w3.org/XML/1998/namespace",
+ xmlnsns = "http://www.w3.org/2000/xmlns/", // see http://www.w3.org/TR/REC-xml-names/#xmlReserved
+ se_ns = "http://svg-edit.googlecode.com",
+ htmlns = "http://www.w3.org/1999/xhtml",
+ mathns = "http://www.w3.org/1998/Math/MathML";
+
+// map namespace URIs to prefixes
+var nsMap_ = {};
+nsMap_[xlinkns] = 'xlink';
+nsMap_[xmlns] = 'xml';
+nsMap_[xmlnsns] = 'xmlns';
+nsMap_[se_ns] = 'se';
+nsMap_[htmlns] = 'xhtml';
+nsMap_[mathns] = 'mathml';
+
+// map prefixes to namespace URIs
+var nsRevMap_ = {};
+$.each(nsMap_, function(key,value){
+ nsRevMap_[value] = key;
+});
+
+// this defines which elements and attributes that we support
+var svgWhiteList_ = {
+ // SVG Elements
+ "a": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "id", "mask", "opacity", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "xlink:href", "xlink:title"],
+ "circle": ["class", "clip-path", "clip-rule", "cx", "cy", "fill", "fill-opacity", "fill-rule", "filter", "id", "mask", "opacity", "r", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "clipPath": ["class", "clipPathUnits", "id"],
+ "defs": [],
+ "style" : ["type"],
+ "desc": [],
+ "ellipse": ["class", "clip-path", "clip-rule", "cx", "cy", "fill", "fill-opacity", "fill-rule", "filter", "id", "mask", "opacity", "requiredFeatures", "rx", "ry", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "feGaussianBlur": ["class", "color-interpolation-filters", "id", "requiredFeatures", "stdDeviation"],
+ "filter": ["class", "color-interpolation-filters", "filterRes", "filterUnits", "height", "id", "primitiveUnits", "requiredFeatures", "width", "x", "xlink:href", "y"],
+ "foreignObject": ["class", "font-size", "height", "id", "opacity", "requiredFeatures", "style", "transform", "width", "x", "y"],
+ "g": ["class", "clip-path", "clip-rule", "id", "display", "fill", "fill-opacity", "fill-rule", "filter", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "font-family", "font-size", "font-style", "font-weight", "text-anchor"],
+ "image": ["class", "clip-path", "clip-rule", "filter", "height", "id", "mask", "opacity", "requiredFeatures", "style", "systemLanguage", "transform", "width", "x", "xlink:href", "xlink:title", "y"],
+ "line": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "id", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "x1", "x2", "y1", "y2"],
+ "linearGradient": ["class", "id", "gradientTransform", "gradientUnits", "requiredFeatures", "spreadMethod", "systemLanguage", "x1", "x2", "xlink:href", "y1", "y2"],
+ "marker": ["id", "class", "markerHeight", "markerUnits", "markerWidth", "orient", "preserveAspectRatio", "refX", "refY", "systemLanguage", "viewBox"],
+ "mask": ["class", "height", "id", "maskContentUnits", "maskUnits", "width", "x", "y"],
+ "metadata": ["class", "id"],
+ "path": ["class", "clip-path", "clip-rule", "d", "fill", "fill-opacity", "fill-rule", "filter", "id", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "pattern": ["class", "height", "id", "patternContentUnits", "patternTransform", "patternUnits", "requiredFeatures", "style", "systemLanguage", "viewBox", "width", "x", "xlink:href", "y"],
+ "polygon": ["class", "clip-path", "clip-rule", "id", "fill", "fill-opacity", "fill-rule", "filter", "id", "class", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "points", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "polyline": ["class", "clip-path", "clip-rule", "id", "fill", "fill-opacity", "fill-rule", "filter", "marker-end", "marker-mid", "marker-start", "mask", "opacity", "points", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform"],
+ "radialGradient": ["class", "cx", "cy", "fx", "fy", "gradientTransform", "gradientUnits", "id", "r", "requiredFeatures", "spreadMethod", "systemLanguage", "xlink:href"],
+ "rect": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "height", "id", "mask", "opacity", "requiredFeatures", "rx", "ry", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "width", "x", "y"],
+ "stop": ["class", "id", "offset", "requiredFeatures", "stop-color", "stop-opacity", "style", "systemLanguage"],
+ "svg": ["class", "clip-path", "clip-rule", "filter", "id", "height", "mask", "preserveAspectRatio", "requiredFeatures", "style", "systemLanguage", "viewBox", "width", "x", "xmlns", "xmlns:se", "xmlns:xlink", "y"],
+ "switch": ["class", "id", "requiredFeatures", "systemLanguage"],
+ "symbol": ["class", "fill", "fill-opacity", "fill-rule", "filter", "font-family", "font-size", "font-style", "font-weight", "id", "opacity", "preserveAspectRatio", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "transform", "viewBox"],
+ "text": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "font-family", "font-size", "font-style", "font-weight", "id", "mask", "opacity", "requiredFeatures", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "text-anchor", "transform", "x", "xml:space", "y"],
+ "textPath": ["class", "id", "method", "requiredFeatures", "spacing", "startOffset", "style", "systemLanguage", "transform", "xlink:href"],
+ "title": [],
+ "tspan": ["class", "clip-path", "clip-rule", "dx", "dy", "fill", "fill-opacity", "fill-rule", "filter", "font-family", "font-size", "font-style", "font-weight", "id", "mask", "opacity", "requiredFeatures", "rotate", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "systemLanguage", "text-anchor", "textLength", "transform", "x", "xml:space", "y"],
+ "use": ["class", "clip-path", "clip-rule", "fill", "fill-opacity", "fill-rule", "filter", "height", "id", "mask", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "transform", "width", "x", "xlink:href", "y"],
+
+ // MathML Elements
+ "annotation": ["encoding"],
+ "annotation-xml": ["encoding"],
+ "maction": ["actiontype", "other", "selection"],
+ "math": ["class", "id", "display", "xmlns"],
+ "menclose": ["notation"],
+ "merror": [],
+ "mfrac": ["linethickness"],
+ "mi": ["mathvariant"],
+ "mmultiscripts": [],
+ "mn": [],
+ "mo": ["fence", "lspace", "maxsize", "minsize", "rspace", "stretchy"],
+ "mover": [],
+ "mpadded": ["lspace", "width", "height", "depth", "voffset"],
+ "mphantom": [],
+ "mprescripts": [],
+ "mroot": [],
+ "mrow": ["xlink:href", "xlink:type", "xmlns:xlink"],
+ "mspace": ["depth", "height", "width"],
+ "msqrt": [],
+ "mstyle": ["displaystyle", "mathbackground", "mathcolor", "mathvariant", "scriptlevel"],
+ "msub": [],
+ "msubsup": [],
+ "msup": [],
+ "mtable": ["align", "columnalign", "columnlines", "columnspacing", "displaystyle", "equalcolumns", "equalrows", "frame", "rowalign", "rowlines", "rowspacing", "width"],
+ "mtd": ["columnalign", "columnspan", "rowalign", "rowspan"],
+ "mtext": [],
+ "mtr": ["columnalign", "rowalign"],
+ "munder": [],
+ "munderover": [],
+ "none": [],
+ "semantics": []
+};
+
+// Produce a Namespace-aware version of svgWhitelist
+var svgWhiteListNS_ = {};
+$.each(svgWhiteList_, function(elt,atts){
+ var attNS = {};
+ $.each(atts, function(i, att){
+ if (att.indexOf(':') >= 0) {
+ var v = att.split(':');
+ attNS[v[1]] = nsRevMap_[v[0]];
+ } else {
+ attNS[att] = att == 'xmlns' ? xmlnsns : null;
+ }
+ });
+ svgWhiteListNS_[elt] = attNS;
+});
+
+// temporarily expose these
+svgedit.sanitize.getNSMap = function() { return nsMap_; }
+
+// Function: svgedit.sanitize.sanitizeSvg
+// Sanitizes the input node and its children
+// It only keeps what is allowed from our whitelist defined above
+//
+// Parameters:
+// node - The DOM element to be checked, will also check its children
+svgedit.sanitize.sanitizeSvg = function(node) {
+ // we only care about element nodes
+ // automatically return for all comment, etc nodes
+ // for text, we do a whitespace trim
+ if (node.nodeType == 3) {
+ node.nodeValue = node.nodeValue.replace(/^\s+|\s+$/g, "");
+ // Remove empty text nodes
+ if(!node.nodeValue.length) node.parentNode.removeChild(node);
+ }
+ 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...
+ if (!doc || !parent) return;
+
+ var allowedAttrs = svgWhiteList_[node.nodeName];
+ var allowedAttrsNS = svgWhiteListNS_[node.nodeName];
+
+ // if this element is allowed
+ if (allowedAttrs != undefined) {
+
+ var se_attrs = [];
+
+ var i = node.attributes.length;
+ while (i--) {
+ // if the attribute is not in our whitelist, then remove it
+ // could use jQuery's inArray(), but I don't know if that's any better
+ var attr = node.attributes.item(i);
+ var attrName = attr.nodeName;
+ var attrLocalName = attr.localName;
+ var attrNsURI = attr.namespaceURI;
+ // Check that an attribute with the correct localName in the correct namespace is on
+ // our whitelist or is a namespace declaration for one of our allowed namespaces
+ if (!(allowedAttrsNS.hasOwnProperty(attrLocalName) && attrNsURI == allowedAttrsNS[attrLocalName] && attrNsURI != xmlnsns) &&
+ !(attrNsURI == xmlnsns && nsMap_[attr.nodeValue]) )
+ {
+ // TODO(codedread): Programmatically add the se: attributes to the NS-aware whitelist.
+ // Bypassing the whitelist to allow se: prefixes. Is there
+ // a more appropriate way to do this?
+ if(attrName.indexOf('se:') == 0) {
+ se_attrs.push([attrName, attr.nodeValue]);
+ }
+ node.removeAttributeNS(attrNsURI, attrLocalName);
+ }
+
+ // Add spaces before negative signs where necessary
+ if(svgedit.browser.isGecko()) {
+ switch ( attrName ) {
+ case "transform":
+ case "gradientTransform":
+ case "patternTransform":
+ var val = attr.nodeValue.replace(/(\d)-/g, "$1 -");
+ node.setAttribute(attrName, val);
+ }
+ }
+
+ // for the style attribute, rewrite it in terms of XML presentational attributes
+ if (attrName == "style") {
+ var props = attr.nodeValue.split(";"),
+ p = props.length;
+ while(p--) {
+ var nv = props[p].split(":");
+ // now check that this attribute is supported
+ if (allowedAttrs.indexOf(nv[0]) >= 0) {
+ node.setAttribute(nv[0],nv[1]);
+ }
+ }
+ node.removeAttribute('style');
+ }
+ }
+
+ $.each(se_attrs, function(i, attr) {
+ node.setAttributeNS(se_ns, attr[0], attr[1]);
+ });
+
+ // for some elements that have a xlink:href, ensure the URI refers to a local element
+ // (but not for links)
+ var href = svgedit.utilities.getHref(node);
+ if(href &&
+ ["filter", "linearGradient", "pattern",
+ "radialGradient", "textPath", "use"].indexOf(node.nodeName) >= 0)
+ {
+ // TODO: we simply check if the first character is a #, is this bullet-proof?
+ if (href[0] != "#") {
+ // remove the attribute (but keep the element)
+ svgedit.utilities.setHref(node, "");
+ node.removeAttributeNS(xlinkns, "href");
+ }
+ }
+
+ // Safari crashes on a <use> without a xlink:href, so we just remove the node here
+ if (node.nodeName == "use" && !svgedit.utilities.getHref(node)) {
+ parent.removeChild(node);
+ return;
+ }
+ // if the element has attributes pointing to a non-local reference,
+ // need to remove the attribute
+ $.each(["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"],function(i,attr) {
+ var val = node.getAttribute(attr);
+ if (val) {
+ val = svgedit.utilities.getUrlFromAttr(val);
+ // simply check for first character being a '#'
+ if (val && val[0] !== "#") {
+ node.setAttribute(attr, "");
+ node.removeAttribute(attr);
+ }
+ }
+ });
+
+ // recurse to children
+ i = node.childNodes.length;
+ while (i--) { svgedit.sanitize.sanitizeSvg(node.childNodes.item(i)); }
+ }
+ // else, remove this element
+ else {
+ // remove all children from this node and insert them before this node
+ // FIXME: in the case of animation elements this will hardly ever be correct
+ var children = [];
+ while (node.hasChildNodes()) {
+ children.push(parent.insertBefore(node.firstChild, node));
+ }
+
+ // remove this node from the document altogether
+ parent.removeChild(node);
+
+ // call sanitizeSvg on each of those children
+ var i = children.length;
+ while (i--) { svgedit.sanitize.sanitizeSvg(children[i]); }
+
+ }
+};
+
+})();
+
diff --git a/files_svgedit/svg-edit/select.js b/files_svgedit/svg-edit/select.js
new file mode 100644
index 000000000..c13f29184
--- /dev/null
+++ b/files_svgedit/svg-edit/select.js
@@ -0,0 +1,529 @@
+/**
+ * Package: svedit.select
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) math.js
+// 4) svgutils.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.select) {
+ svgedit.select = {};
+}
+
+var svgFactory_;
+var config_;
+var selectorManager_; // A Singleton
+
+// Class: svgedit.select.Selector
+// Private class for DOM element selection boxes
+//
+// Parameters:
+// id - integer to internally indentify the selector
+// elem - DOM element associated with this selector
+svgedit.select.Selector = function(id, elem) {
+ // this is the selector's unique number
+ this.id = id;
+
+ // this holds a reference to the element for which this selector is being used
+ this.selectedElement = elem;
+
+ // this is a flag used internally to track whether the selector is being used or not
+ this.locked = true;
+
+ // this holds a reference to the <g> element that holds all visual elements of the selector
+ this.selectorGroup = svgFactory_.createSVGElement({
+ 'element': 'g',
+ 'attr': {'id': ('selectorGroup' + this.id)}
+ });
+
+ // this holds a reference to the path rect
+ this.selectorRect = this.selectorGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'path',
+ 'attr': {
+ 'id': ('selectedBox' + this.id),
+ 'fill': 'none',
+ 'stroke': '#22C',
+ 'stroke-width': '1',
+ 'stroke-dasharray': '5,5',
+ // need to specify this so that the rect is not selectable
+ 'style': 'pointer-events:none'
+ }
+ })
+ );
+
+ // this holds a reference to the grip coordinates for this selector
+ this.gripCoords = {
+ 'nw': null,
+ 'n' : null,
+ 'ne': null,
+ 'e' : null,
+ 'se': null,
+ 's' : null,
+ 'sw': null,
+ 'w' : null
+ };
+
+ this.reset(this.selectedElement);
+};
+
+
+// Function: svgedit.select.Selector.reset
+// Used to reset the id and element that the selector is attached to
+//
+// Parameters:
+// e - DOM element associated with this selector
+svgedit.select.Selector.prototype.reset = function(e) {
+ this.locked = true;
+ this.selectedElement = e;
+ this.resize();
+ this.selectorGroup.setAttribute('display', 'inline');
+};
+
+// Function: svgedit.select.Selector.updateGripCursors
+// Updates cursors for corner grips on rotation so arrows point the right way
+//
+// Parameters:
+// angle - Float indicating current rotation angle in degrees
+svgedit.select.Selector.prototype.updateGripCursors = function(angle) {
+ var dir_arr = [];
+ var steps = Math.round(angle / 45);
+ if(steps < 0) steps += 8;
+ for (var dir in selectorManager_.selectorGrips) {
+ dir_arr.push(dir);
+ }
+ while(steps > 0) {
+ dir_arr.push(dir_arr.shift());
+ steps--;
+ }
+ var i = 0;
+ for (var dir in selectorManager_.selectorGrips) {
+ selectorManager_.selectorGrips[dir].setAttribute('style', ('cursor:' + dir_arr[i] + '-resize'));
+ i++;
+ };
+};
+
+// Function: svgedit.select.Selector.showGrips
+// Show the resize grips of this selector
+//
+// Parameters:
+// show - boolean indicating whether grips should be shown or not
+svgedit.select.Selector.prototype.showGrips = function(show) {
+ // TODO: use suspendRedraw() here
+ var bShow = show ? 'inline' : 'none';
+ selectorManager_.selectorGripsGroup.setAttribute('display', bShow);
+ var elem = this.selectedElement;
+ this.hasGrips = show;
+ if(elem && show) {
+ this.selectorGroup.appendChild(selectorManager_.selectorGripsGroup);
+ this.updateGripCursors(svgedit.utilities.getRotationAngle(elem));
+ }
+};
+
+// Function: svgedit.select.Selector.resize
+// Updates the selector to match the element's size
+svgedit.select.Selector.prototype.resize = function() {
+ var selectedBox = this.selectorRect,
+ mgr = selectorManager_,
+ selectedGrips = mgr.selectorGrips,
+ selected = this.selectedElement,
+ sw = selected.getAttribute('stroke-width'),
+ current_zoom = svgFactory_.currentZoom();
+ var offset = 1/current_zoom;
+ if (selected.getAttribute('stroke') !== 'none' && !isNaN(sw)) {
+ offset += (sw/2);
+ }
+
+ var tagName = selected.tagName;
+ if (tagName === 'text') {
+ offset += 2/current_zoom;
+ }
+
+ // loop and transform our bounding box until we reach our first rotation
+ var tlist = svgedit.transformlist.getTransformList(selected);
+ var m = svgedit.math.transformListToTransform(tlist).matrix;
+
+ // This should probably be handled somewhere else, but for now
+ // it keeps the selection box correctly positioned when zoomed
+ m.e *= current_zoom;
+ m.f *= current_zoom;
+
+ var bbox = svgedit.utilities.getBBox(selected);
+ if(tagName === 'g' && !$.data(selected, 'gsvg')) {
+ // The bbox for a group does not include stroke vals, so we
+ // get the bbox based on its children.
+ var stroked_bbox = svgFactory_.getStrokedBBox(selected.childNodes);
+ if(stroked_bbox) {
+ bbox = stroked_bbox;
+ }
+ }
+
+ // apply the transforms
+ var l=bbox.x, t=bbox.y, w=bbox.width, h=bbox.height,
+ bbox = {x:l, y:t, width:w, height:h};
+
+ // we need to handle temporary transforms too
+ // if skewed, get its transformed box, then find its axis-aligned bbox
+
+ //*
+ offset *= current_zoom;
+
+ var nbox = svgedit.math.transformBox(l*current_zoom, t*current_zoom, w*current_zoom, h*current_zoom, m),
+ aabox = nbox.aabox,
+ nbax = aabox.x - offset,
+ nbay = aabox.y - offset,
+ nbaw = aabox.width + (offset * 2),
+ nbah = aabox.height + (offset * 2);
+
+ // now if the shape is rotated, un-rotate it
+ var cx = nbax + nbaw/2,
+ cy = nbay + nbah/2;
+
+ var angle = svgedit.utilities.getRotationAngle(selected);
+ if (angle) {
+ var rot = svgFactory_.svgRoot().createSVGTransform();
+ rot.setRotate(-angle,cx,cy);
+ var rotm = rot.matrix;
+ nbox.tl = svgedit.math.transformPoint(nbox.tl.x,nbox.tl.y,rotm);
+ nbox.tr = svgedit.math.transformPoint(nbox.tr.x,nbox.tr.y,rotm);
+ nbox.bl = svgedit.math.transformPoint(nbox.bl.x,nbox.bl.y,rotm);
+ nbox.br = svgedit.math.transformPoint(nbox.br.x,nbox.br.y,rotm);
+
+ // calculate the axis-aligned bbox
+ var tl = nbox.tl;
+ var minx = tl.x,
+ miny = tl.y,
+ maxx = tl.x,
+ maxy = tl.y;
+
+ var Min = Math.min, Max = Math.max;
+
+ minx = Min(minx, Min(nbox.tr.x, Min(nbox.bl.x, nbox.br.x) ) ) - offset;
+ miny = Min(miny, Min(nbox.tr.y, Min(nbox.bl.y, nbox.br.y) ) ) - offset;
+ maxx = Max(maxx, Max(nbox.tr.x, Max(nbox.bl.x, nbox.br.x) ) ) + offset;
+ maxy = Max(maxy, Max(nbox.tr.y, Max(nbox.bl.y, nbox.br.y) ) ) + offset;
+
+ nbax = minx;
+ nbay = miny;
+ nbaw = (maxx-minx);
+ nbah = (maxy-miny);
+ }
+ var sr_handle = svgFactory_.svgRoot().suspendRedraw(100);
+
+ var dstr = 'M' + nbax + ',' + nbay
+ + ' L' + (nbax+nbaw) + ',' + nbay
+ + ' ' + (nbax+nbaw) + ',' + (nbay+nbah)
+ + ' ' + nbax + ',' + (nbay+nbah) + 'z';
+ selectedBox.setAttribute('d', dstr);
+
+ var xform = angle ? 'rotate(' + [angle,cx,cy].join(',') + ')' : '';
+ this.selectorGroup.setAttribute('transform', xform);
+
+ // TODO(codedread): Is this if needed?
+// if(selected === selectedElements[0]) {
+ this.gripCoords = {
+ 'nw': [nbax, nbay],
+ 'ne': [nbax+nbaw, nbay],
+ 'sw': [nbax, nbay+nbah],
+ 'se': [nbax+nbaw, nbay+nbah],
+ 'n': [nbax + (nbaw)/2, nbay],
+ 'w': [nbax, nbay + (nbah)/2],
+ 'e': [nbax + nbaw, nbay + (nbah)/2],
+ 's': [nbax + (nbaw)/2, nbay + nbah]
+ };
+
+ for(var dir in this.gripCoords) {
+ var coords = this.gripCoords[dir];
+ selectedGrips[dir].setAttribute('cx', coords[0]);
+ selectedGrips[dir].setAttribute('cy', coords[1]);
+ };
+
+ // we want to go 20 pixels in the negative transformed y direction, ignoring scale
+ mgr.rotateGripConnector.setAttribute('x1', nbax + (nbaw)/2);
+ mgr.rotateGripConnector.setAttribute('y1', nbay);
+ mgr.rotateGripConnector.setAttribute('x2', nbax + (nbaw)/2);
+ mgr.rotateGripConnector.setAttribute('y2', nbay - 20);
+
+ mgr.rotateGrip.setAttribute('cx', nbax + (nbaw)/2);
+ mgr.rotateGrip.setAttribute('cy', nbay - 20);
+// }
+
+ svgFactory_.svgRoot().unsuspendRedraw(sr_handle);
+};
+
+
+// Class: svgedit.select.SelectorManager
+svgedit.select.SelectorManager = function() {
+ // this will hold the <g> element that contains all selector rects/grips
+ this.selectorParentGroup = null;
+
+ // this is a special rect that is used for multi-select
+ this.rubberBandBox = null;
+
+ // this will hold objects of type svgedit.select.Selector (see above)
+ this.selectors = [];
+
+ // this holds a map of SVG elements to their Selector object
+ this.selectorMap = {};
+
+ // this holds a reference to the grip elements
+ this.selectorGrips = {
+ 'nw': null,
+ 'n' : null,
+ 'ne': null,
+ 'e' : null,
+ 'se': null,
+ 's' : null,
+ 'sw': null,
+ 'w' : null
+ };
+
+ this.selectorGripsGroup = null;
+ this.rotateGripConnector = null;
+ this.rotateGrip = null;
+
+ this.initGroup();
+};
+
+// Function: svgedit.select.SelectorManager.initGroup
+// Resets the parent selector group element
+svgedit.select.SelectorManager.prototype.initGroup = function() {
+ // remove old selector parent group if it existed
+ if (this.selectorParentGroup && this.selectorParentGroup.parentNode) {
+ this.selectorParentGroup.parentNode.removeChild(this.selectorParentGroup);
+ }
+
+ // create parent selector group and add it to svgroot
+ this.selectorParentGroup = svgFactory_.createSVGElement({
+ 'element': 'g',
+ 'attr': {'id': 'selectorParentGroup'}
+ });
+ this.selectorGripsGroup = svgFactory_.createSVGElement({
+ 'element': 'g',
+ 'attr': {'display': 'none'}
+ });
+ this.selectorParentGroup.appendChild(this.selectorGripsGroup);
+ svgFactory_.svgRoot().appendChild(this.selectorParentGroup);
+
+ this.selectorMap = {};
+ this.selectors = [];
+ this.rubberBandBox = null;
+
+ // add the corner grips
+ for (var dir in this.selectorGrips) {
+ var grip = svgFactory_.createSVGElement({
+ 'element': 'circle',
+ 'attr': {
+ 'id': ('selectorGrip_resize_' + dir),
+ 'fill': '#22C',
+ 'r': 4,
+ 'style': ('cursor:' + dir + '-resize'),
+ // This expands the mouse-able area of the grips making them
+ // easier to grab with the mouse.
+ // This works in Opera and WebKit, but does not work in Firefox
+ // see https://bugzilla.mozilla.org/show_bug.cgi?id=500174
+ 'stroke-width': 2,
+ 'pointer-events': 'all'
+ }
+ });
+
+ $.data(grip, 'dir', dir);
+ $.data(grip, 'type', 'resize');
+ this.selectorGrips[dir] = this.selectorGripsGroup.appendChild(grip);
+ }
+
+ // add rotator elems
+ this.rotateGripConnector = this.selectorGripsGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'line',
+ 'attr': {
+ 'id': ('selectorGrip_rotateconnector'),
+ 'stroke': '#22C',
+ 'stroke-width': '1'
+ }
+ })
+ );
+
+ this.rotateGrip = this.selectorGripsGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'circle',
+ 'attr': {
+ 'id': 'selectorGrip_rotate',
+ 'fill': 'lime',
+ 'r': 4,
+ 'stroke': '#22C',
+ 'stroke-width': 2,
+ 'style': 'cursor:url(' + config_.imgPath + 'rotate.png) 12 12, auto;'
+ }
+ })
+ );
+ $.data(this.rotateGrip, 'type', 'rotate');
+
+ if($('#canvasBackground').length) return;
+
+ var dims = config_.dimensions;
+ var canvasbg = svgFactory_.createSVGElement({
+ 'element': 'svg',
+ 'attr': {
+ 'id': 'canvasBackground',
+ 'width': dims[0],
+ 'height': dims[1],
+ 'x': 0,
+ 'y': 0,
+ 'overflow': (svgedit.browser.isWebkit() ? 'none' : 'visible'), // Chrome 7 has a problem with this when zooming out
+ 'style': 'pointer-events:none'
+ }
+ });
+
+ var rect = svgFactory_.createSVGElement({
+ 'element': 'rect',
+ 'attr': {
+ 'width': '100%',
+ 'height': '100%',
+ 'x': 0,
+ 'y': 0,
+ 'stroke-width': 1,
+ 'stroke': '#000',
+ 'fill': '#FFF',
+ 'style': 'pointer-events:none'
+ }
+ });
+
+ // Both Firefox and WebKit are too slow with this filter region (especially at higher
+ // zoom levels) and Opera has at least one bug
+// if (!svgedit.browser.isOpera()) rect.setAttribute('filter', 'url(#canvashadow)');
+ canvasbg.appendChild(rect);
+ svgFactory_.svgRoot().insertBefore(canvasbg, svgFactory_.svgContent());
+};
+
+// Function: svgedit.select.SelectorManager.requestSelector
+// Returns the selector based on the given element
+//
+// Parameters:
+// elem - DOM element to get the selector for
+svgedit.select.SelectorManager.prototype.requestSelector = function(elem) {
+ if (elem == null) return null;
+ var N = this.selectors.length;
+ // If we've already acquired one for this element, return it.
+ if (typeof(this.selectorMap[elem.id]) == 'object') {
+ this.selectorMap[elem.id].locked = true;
+ return this.selectorMap[elem.id];
+ }
+ for (var i = 0; i < N; ++i) {
+ if (this.selectors[i] && !this.selectors[i].locked) {
+ this.selectors[i].locked = true;
+ this.selectors[i].reset(elem);
+ this.selectorMap[elem.id] = this.selectors[i];
+ return this.selectors[i];
+ }
+ }
+ // if we reached here, no available selectors were found, we create one
+ this.selectors[N] = new svgedit.select.Selector(N, elem);
+ this.selectorParentGroup.appendChild(this.selectors[N].selectorGroup);
+ this.selectorMap[elem.id] = this.selectors[N];
+ return this.selectors[N];
+};
+
+// Function: svgedit.select.SelectorManager.releaseSelector
+// Removes the selector of the given element (hides selection box)
+//
+// Parameters:
+// elem - DOM element to remove the selector for
+svgedit.select.SelectorManager.prototype.releaseSelector = function(elem) {
+ if (elem == null) return;
+ var N = this.selectors.length,
+ sel = this.selectorMap[elem.id];
+ for (var i = 0; i < N; ++i) {
+ if (this.selectors[i] && this.selectors[i] == sel) {
+ if (sel.locked == false) {
+ // TODO(codedread): Ensure this exists in this module.
+ console.log('WARNING! selector was released but was already unlocked');
+ }
+ delete this.selectorMap[elem.id];
+ sel.locked = false;
+ sel.selectedElement = null;
+ sel.showGrips(false);
+
+ // remove from DOM and store reference in JS but only if it exists in the DOM
+ try {
+ sel.selectorGroup.setAttribute('display', 'none');
+ } catch(e) { }
+
+ break;
+ }
+ }
+};
+
+// Function: svgedit.select.SelectorManager.getRubberBandBox
+// Returns the rubberBandBox DOM element. This is the rectangle drawn by the user for selecting/zooming
+svgedit.select.SelectorManager.prototype.getRubberBandBox = function() {
+ if (!this.rubberBandBox) {
+ this.rubberBandBox = this.selectorParentGroup.appendChild(
+ svgFactory_.createSVGElement({
+ 'element': 'rect',
+ 'attr': {
+ 'id': 'selectorRubberBand',
+ 'fill': '#22C',
+ 'fill-opacity': 0.15,
+ 'stroke': '#22C',
+ 'stroke-width': 0.5,
+ 'display': 'none',
+ 'style': 'pointer-events:none'
+ }
+ })
+ );
+ }
+ return this.rubberBandBox;
+};
+
+
+/**
+ * Interface: svgedit.select.SVGFactory
+ * An object that creates SVG elements for the canvas.
+ *
+ * interface svgedit.select.SVGFactory {
+ * SVGElement createSVGElement(jsonMap);
+ * SVGSVGElement svgRoot();
+ * SVGSVGElement svgContent();
+ *
+ * Number currentZoom();
+ * Object getStrokedBBox(Element[]); // TODO(codedread): Remove when getStrokedBBox() has been put into svgutils.js
+ * }
+ */
+
+/**
+ * Function: svgedit.select.init()
+ * Initializes this module.
+ *
+ * Parameters:
+ * config - an object containing configurable parameters (imgPath)
+ * svgFactory - an object implementing the SVGFactory interface (see above).
+ */
+svgedit.select.init = function(config, svgFactory) {
+ config_ = config;
+ svgFactory_ = svgFactory;
+ selectorManager_ = new svgedit.select.SelectorManager();
+};
+
+/**
+ * Function: svgedit.select.getSelectorManager
+ *
+ * Returns:
+ * The SelectorManager instance.
+ */
+svgedit.select.getSelectorManager = function() {
+ return selectorManager_;
+};
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/all-wcprops b/files_svgedit/svg-edit/spinbtn/.svn/all-wcprops
new file mode 100644
index 000000000..5424d3b23
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/all-wcprops
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 39
+/svn/!svn/ver/2004/trunk/editor/spinbtn
+END
+JQuerySpinBtn.css
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/280/trunk/editor/spinbtn/JQuerySpinBtn.css
+END
+spinbtn_updn.png
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/284/trunk/editor/spinbtn/spinbtn_updn.png
+END
+JQuerySpinBtn.js
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/1984/trunk/editor/spinbtn/JQuerySpinBtn.js
+END
+JQuerySpinBtn.min.js
+K 25
+svn:wc:ra_dav:version-url
+V 60
+/svn/!svn/ver/2004/trunk/editor/spinbtn/JQuerySpinBtn.min.js
+END
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/entries b/files_svgedit/svg-edit/spinbtn/.svn/entries
new file mode 100644
index 000000000..c5e4bc4df
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/entries
@@ -0,0 +1,164 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/spinbtn
+http://svg-edit.googlecode.com/svn
+
+
+
+2011-02-23T21:06:26.780195Z
+2004
+adeveria
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+JQuerySpinBtn.css
+file
+
+
+
+
+2012-03-25T18:41:47.464355Z
+dc925b39a7565d75db06cce93adfb8f4
+2009-07-07T15:06:19.314340Z
+280
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2135
+
+spinbtn_updn.png
+file
+
+
+
+
+2012-03-25T18:41:47.464355Z
+5a67503500b8abb3ca5e300da92b513d
+2009-07-08T14:58:03.984771Z
+284
+rusnakp
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+666
+
+JQuerySpinBtn.js
+file
+
+
+
+
+2012-03-25T18:41:47.464355Z
+0783ae68f89271134164778c9f39b779
+2011-02-09T06:14:47.166399Z
+1984
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9314
+
+JQuerySpinBtn.min.js
+file
+
+
+
+
+2012-03-25T18:41:47.464355Z
+e3444b1204b7ef30e9e254e27e564a95
+2011-02-23T21:06:26.780195Z
+2004
+adeveria
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3592
+
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.css.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.css.svn-base
new file mode 100644
index 000000000..69cd89925
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.css.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 8
+text/css
+END
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.js.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.min.js.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.min.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/JQuerySpinBtn.min.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/prop-base/spinbtn_updn.png.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/spinbtn_updn.png.svn-base
new file mode 100644
index 000000000..6f145cebf
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/prop-base/spinbtn_updn.png.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 9
+image/png
+END
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.css.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.css.svn-base
new file mode 100644
index 000000000..7a279a09e
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.css.svn-base
@@ -0,0 +1,41 @@
+/*
+ Styles to make ordinary <INPUT type="text"/> look like a spinbutton/spinbox control.
+ Use with JQuerySpinBtn.js to provide the spin functionality by reacting to mouse etc.
+ (Requires a reference to the JQuery library found at http://jquery.com/src/latest/)
+ (Hats-off to John Resig for creating the excellent JQuery library. It is fab.)
+
+ This control is achieved with no extra html markup whatsoever and uses unobtrusive javascript.
+
+ Written by George Adamson, Software Unity (george.jquery@softwareunity.com) September 2006.
+ Big improvements added by Mark Gibson, (mgibson@designlinks.net) September 2006.
+
+ Do contact me with comments and suggestions but please don't ask for support.
+ As much as I'd love to help with specific problems I have plenty to get on with already!
+
+ Go ahead and use it in your own projects. This code is provided 'as is'.
+ Sure I've tested in heaps of ways. Its good for me, but you use it at your own risk.
+ SoftwareUnity and I are certainly not responsible if your computer sets fire to the sofa,
+ hacks into the pentagon, hijacks a plane or gives you any kind of hassle whatsoever.
+
+ If you'd like your spin-button image in a different place then you'll need to alter both
+ the CSS below and the javascript isMouseOverUpDn() function to accommodate the new position.
+ You could even have left and right buttons either side of the textbox.
+*/
+
+INPUT.spin-button {
+ /* explicitly put padding for top/bottom/left in here so that Opera displays it better */
+ padding: 2px 20px 2px 2px;
+ background-repeat:no-repeat; /* Warning: Img may disappear in Firefox if you use 'background-attachment:fixed' ! */
+ background-position:100% 0%;
+ background-image:url('spinbtn_updn.png');
+ background-color:white; /* Needed for Opera */
+}
+
+INPUT.spin-button.up { /* Change button img when mouse is over the UP-arrow */
+ cursor:pointer;
+ background-position:100% -18px; /* 18px matches height of 2 visible buttons */
+}
+INPUT.spin-button.down { /* Change button img when mouse is over the DOWN-arrow */
+ cursor:pointer;
+ background-position:100% -36px; /* 36px matches height of 2x2 visible buttons */
+}
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.js.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.js.svn-base
new file mode 100644
index 000000000..77f924ed2
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.js.svn-base
@@ -0,0 +1,266 @@
+/* SpinButton control
+ *
+ * Adds bells and whistles to any ordinary textbox to
+ * make it look and feel like a SpinButton Control.
+ *
+ * Originally written by George Adamson, Software Unity (george.jquery@softwareunity.com) August 2006.
+ * - Added min/max options
+ * - Added step size option
+ * - Added bigStep (page up/down) option
+ *
+ * Modifications made by Mark Gibson, (mgibson@designlinks.net) September 2006:
+ * - Converted to jQuery plugin
+ * - Allow limited or unlimited min/max values
+ * - Allow custom class names, and add class to input element
+ * - Removed global vars
+ * - Reset (to original or through config) when invalid value entered
+ * - Repeat whilst holding mouse button down (with initial pause, like keyboard repeat)
+ * - Support mouse wheel in Firefox
+ * - Fix double click in IE
+ * - Refactored some code and renamed some vars
+ *
+ * Modifications by Jeff Schiller, June 2009:
+ * - provide callback function for when the value changes based on the following
+ * http://www.mail-archive.com/jquery-en@googlegroups.com/msg36070.html
+ * Modifications by Jeff Schiller, July 2009:
+ * - improve styling for widget in Opera
+ * - consistent key-repeat handling cross-browser
+ * Modifications by Alexis Deveria, October 2009:
+ * - provide "stepfunc" callback option to allow custom function to run when changing a value
+ * - Made adjustValue(0) only run on certain keyup events, not all.
+ *
+ * Tested in IE6, Opera9, Firefox 1.5
+ * v1.0 11 Aug 2006 - George Adamson - First release
+ * v1.1 Aug 2006 - George Adamson - Minor enhancements
+ * v1.2 27 Sep 2006 - Mark Gibson - Major enhancements
+ * v1.3a 28 Sep 2006 - George Adamson - Minor enhancements
+ * v1.4 18 Jun 2009 - Jeff Schiller - Added callback function
+ * v1.5 06 Jul 2009 - Jeff Schiller - Fixes for Opera.
+ * v1.6 13 Oct 2009 - Alexis Deveria - Added stepfunc function
+ * v1.7 21 Oct 2009 - Alexis Deveria - Minor fixes
+ * Fast-repeat for keys and live updating as you type.
+ * v1.8 12 Jan 2010 - Benjamin Thomas - Fixes for mouseout behavior.
+ * Added smallStep
+
+ Sample usage:
+
+ // Create group of settings to initialise spinbutton(s). (Optional)
+ var myOptions = {
+ min: 0, // Set lower limit.
+ max: 100, // Set upper limit.
+ step: 1, // Set increment size.
+ smallStep: 0.5, // Set shift-click increment size.
+ spinClass: mySpinBtnClass, // CSS class to style the spinbutton. (Class also specifies url of the up/down button image.)
+ upClass: mySpinUpClass, // CSS class for style when mouse over up button.
+ downClass: mySpinDnClass // CSS class for style when mouse over down button.
+ }
+
+ $(document).ready(function(){
+
+ // Initialise INPUT element(s) as SpinButtons: (passing options if desired)
+ $("#myInputElement").SpinButton(myOptions);
+
+ });
+
+ */
+$.fn.SpinButton = function(cfg){
+ return this.each(function(){
+
+ this.repeating = false;
+
+ // Apply specified options or defaults:
+ // (Ought to refactor this some day to use $.extend() instead)
+ this.spinCfg = {
+ //min: cfg && cfg.min ? Number(cfg.min) : null,
+ //max: cfg && cfg.max ? Number(cfg.max) : null,
+ min: cfg && !isNaN(parseFloat(cfg.min)) ? Number(cfg.min) : null, // Fixes bug with min:0
+ max: cfg && !isNaN(parseFloat(cfg.max)) ? Number(cfg.max) : null,
+ step: cfg && cfg.step ? Number(cfg.step) : 1,
+ stepfunc: cfg && cfg.stepfunc ? cfg.stepfunc : false,
+ page: cfg && cfg.page ? Number(cfg.page) : 10,
+ upClass: cfg && cfg.upClass ? cfg.upClass : 'up',
+ downClass: cfg && cfg.downClass ? cfg.downClass : 'down',
+ reset: cfg && cfg.reset ? cfg.reset : this.value,
+ delay: cfg && cfg.delay ? Number(cfg.delay) : 500,
+ interval: cfg && cfg.interval ? Number(cfg.interval) : 100,
+ _btn_width: 20,
+ _direction: null,
+ _delay: null,
+ _repeat: null,
+ callback: cfg && cfg.callback ? cfg.callback : null
+ };
+
+ // if a smallStep isn't supplied, use half the regular step
+ this.spinCfg.smallStep = cfg && cfg.smallStep ? cfg.smallStep : this.spinCfg.step/2;
+
+ this.adjustValue = function(i){
+ var v;
+ if(isNaN(this.value)) {
+ v = this.spinCfg.reset;
+ } else if($.isFunction(this.spinCfg.stepfunc)) {
+ v = this.spinCfg.stepfunc(this, i);
+ } else {
+ // weirdest javascript bug ever: 5.1 + 0.1 = 5.199999999
+ v = Number((Number(this.value) + Number(i)).toFixed(5));
+ }
+ if (this.spinCfg.min !== null) v = Math.max(v, this.spinCfg.min);
+ if (this.spinCfg.max !== null) v = Math.min(v, this.spinCfg.max);
+ this.value = v;
+ if ($.isFunction(this.spinCfg.callback)) this.spinCfg.callback(this);
+ };
+
+ $(this)
+ .addClass(cfg && cfg.spinClass ? cfg.spinClass : 'spin-button')
+
+ .mousemove(function(e){
+ // Determine which button mouse is over, or not (spin direction):
+ var x = e.pageX || e.x;
+ var y = e.pageY || e.y;
+ var el = e.target || e.srcElement;
+ var scale = svgEditor.tool_scale || 1;
+ var height = $(el).height()/2;
+
+ var direction =
+ (x > coord(el,'offsetLeft') + el.offsetWidth*scale - this.spinCfg._btn_width)
+ ? ((y < coord(el,'offsetTop') + height*scale) ? 1 : -1) : 0;
+
+ if (direction !== this.spinCfg._direction) {
+ // Style up/down buttons:
+ switch(direction){
+ case 1: // Up arrow:
+ $(this).removeClass(this.spinCfg.downClass).addClass(this.spinCfg.upClass);
+ break;
+ case -1: // Down arrow:
+ $(this).removeClass(this.spinCfg.upClass).addClass(this.spinCfg.downClass);
+ break;
+ default: // Mouse is elsewhere in the textbox
+ $(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);
+ }
+
+ // Set spin direction:
+ this.spinCfg._direction = direction;
+ }
+ })
+
+ .mouseout(function(){
+ // Reset up/down buttons to their normal appearance when mouse moves away:
+ $(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);
+ this.spinCfg._direction = null;
+ window.clearInterval(this.spinCfg._repeat);
+ window.clearTimeout(this.spinCfg._delay);
+ })
+
+ .mousedown(function(e){
+ if ( e.button === 0 && this.spinCfg._direction != 0) {
+ // Respond to click on one of the buttons:
+ var self = this;
+ var stepSize = e.shiftKey ? self.spinCfg.smallStep : self.spinCfg.step
+
+ var adjust = function() {
+ self.adjustValue(self.spinCfg._direction * stepSize);
+ };
+
+ adjust();
+
+ // Initial delay before repeating adjustment
+ self.spinCfg._delay = window.setTimeout(function() {
+ adjust();
+ // Repeat adjust at regular intervals
+ self.spinCfg._repeat = window.setInterval(adjust, self.spinCfg.interval);
+ }, self.spinCfg.delay);
+ }
+ })
+
+ .mouseup(function(e){
+ // Cancel repeating adjustment
+ window.clearInterval(this.spinCfg._repeat);
+ window.clearTimeout(this.spinCfg._delay);
+ })
+
+ .dblclick(function(e) {
+ if ($.browser.msie)
+ this.adjustValue(this.spinCfg._direction * this.spinCfg.step);
+ })
+
+ .keydown(function(e){
+ // Respond to up/down arrow keys.
+ switch(e.keyCode){
+ case 38: this.adjustValue(this.spinCfg.step); break; // Up
+ case 40: this.adjustValue(-this.spinCfg.step); break; // Down
+ case 33: this.adjustValue(this.spinCfg.page); break; // PageUp
+ case 34: this.adjustValue(-this.spinCfg.page); break; // PageDown
+ }
+ })
+
+ /*
+ http://unixpapa.com/js/key.html describes the current state-of-affairs for
+ key repeat events:
+ - Safari 3.1 changed their model so that keydown is reliably repeated going forward
+ - Firefox and Opera still only repeat the keypress event, not the keydown
+ */
+ .keypress(function(e){
+ if (this.repeating) {
+ // Respond to up/down arrow keys.
+ switch(e.keyCode){
+ case 38: this.adjustValue(this.spinCfg.step); break; // Up
+ case 40: this.adjustValue(-this.spinCfg.step); break; // Down
+ case 33: this.adjustValue(this.spinCfg.page); break; // PageUp
+ case 34: this.adjustValue(-this.spinCfg.page); break; // PageDown
+ }
+ }
+ // we always ignore the first keypress event (use the keydown instead)
+ else {
+ this.repeating = true;
+ }
+ })
+
+ // clear the 'repeating' flag
+ .keyup(function(e) {
+ this.repeating = false;
+ switch(e.keyCode){
+ case 38: // Up
+ case 40: // Down
+ case 33: // PageUp
+ case 34: // PageDown
+ case 13: this.adjustValue(0); break; // Enter/Return
+ }
+ })
+
+ .bind("mousewheel", function(e){
+ // Respond to mouse wheel in IE. (It returns up/dn motion in multiples of 120)
+ if (e.wheelDelta >= 120)
+ this.adjustValue(this.spinCfg.step);
+ else if (e.wheelDelta <= -120)
+ this.adjustValue(-this.spinCfg.step);
+
+ e.preventDefault();
+ })
+
+ .change(function(e){
+ this.adjustValue(0);
+ });
+
+ if (this.addEventListener) {
+ // Respond to mouse wheel in Firefox
+ this.addEventListener('DOMMouseScroll', function(e) {
+ if (e.detail > 0)
+ this.adjustValue(-this.spinCfg.step);
+ else if (e.detail < 0)
+ this.adjustValue(this.spinCfg.step);
+
+ e.preventDefault();
+ }, false);
+ }
+ });
+
+ function coord(el,prop) {
+ var c = el[prop], b = document.body;
+
+ while ((el = el.offsetParent) && (el != b)) {
+ if (!$.browser.msie || (el.currentStyle.position != 'relative'))
+ c += el[prop];
+ }
+
+ return c;
+ }
+};
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.min.js.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.min.js.svn-base
new file mode 100644
index 000000000..f7532073a
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/text-base/JQuerySpinBtn.min.js.svn-base
@@ -0,0 +1,7 @@
+$.fn.SpinButton=function(b){function f(a,c){for(var e=a[c],d=document.body;(a=a.offsetParent)&&a!=d;)if(!$.browser.msie||a.currentStyle.position!="relative")e+=a[c];return e}return this.each(function(){this.repeating=false;this.spinCfg={min:b&&!isNaN(parseFloat(b.min))?Number(b.min):null,max:b&&!isNaN(parseFloat(b.max))?Number(b.max):null,step:b&&b.step?Number(b.step):1,stepfunc:b&&b.stepfunc?b.stepfunc:false,page:b&&b.page?Number(b.page):10,upClass:b&&b.upClass?b.upClass:"up",downClass:b&&b.downClass?
+b.downClass:"down",reset:b&&b.reset?b.reset:this.value,delay:b&&b.delay?Number(b.delay):500,interval:b&&b.interval?Number(b.interval):100,_btn_width:20,_direction:null,_delay:null,_repeat:null,callback:b&&b.callback?b.callback:null};this.spinCfg.smallStep=b&&b.smallStep?b.smallStep:this.spinCfg.step/2;this.adjustValue=function(a){a=isNaN(this.value)?this.spinCfg.reset:$.isFunction(this.spinCfg.stepfunc)?this.spinCfg.stepfunc(this,a):Number((Number(this.value)+Number(a)).toFixed(5));if(this.spinCfg.min!==
+null)a=Math.max(a,this.spinCfg.min);if(this.spinCfg.max!==null)a=Math.min(a,this.spinCfg.max);this.value=a;$.isFunction(this.spinCfg.callback)&&this.spinCfg.callback(this)};$(this).addClass(b&&b.spinClass?b.spinClass:"spin-button").mousemove(function(a){var c=a.pageX||a.x,e=a.pageY||a.y;a=a.target||a.srcElement;var d=svgEditor.tool_scale||1,g=$(a).height()/2;c=c>f(a,"offsetLeft")+a.offsetWidth*d-this.spinCfg._btn_width?e<f(a,"offsetTop")+g*d?1:-1:0;if(c!==this.spinCfg._direction){switch(c){case 1:$(this).removeClass(this.spinCfg.downClass).addClass(this.spinCfg.upClass);
+break;case -1:$(this).removeClass(this.spinCfg.upClass).addClass(this.spinCfg.downClass);break;default:$(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass)}this.spinCfg._direction=c}}).mouseout(function(){$(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);this.spinCfg._direction=null;window.clearInterval(this.spinCfg._repeat);window.clearTimeout(this.spinCfg._delay)}).mousedown(function(a){if(a.button===0&&this.spinCfg._direction!=0){var c=this,
+e=a.shiftKey?c.spinCfg.smallStep:c.spinCfg.step,d=function(){c.adjustValue(c.spinCfg._direction*e)};d();c.spinCfg._delay=window.setTimeout(function(){d();c.spinCfg._repeat=window.setInterval(d,c.spinCfg.interval)},c.spinCfg.delay)}}).mouseup(function(){window.clearInterval(this.spinCfg._repeat);window.clearTimeout(this.spinCfg._delay)}).dblclick(function(){$.browser.msie&&this.adjustValue(this.spinCfg._direction*this.spinCfg.step)}).keydown(function(a){switch(a.keyCode){case 38:this.adjustValue(this.spinCfg.step);
+break;case 40:this.adjustValue(-this.spinCfg.step);break;case 33:this.adjustValue(this.spinCfg.page);break;case 34:this.adjustValue(-this.spinCfg.page)}}).keypress(function(a){if(this.repeating)switch(a.keyCode){case 38:this.adjustValue(this.spinCfg.step);break;case 40:this.adjustValue(-this.spinCfg.step);break;case 33:this.adjustValue(this.spinCfg.page);break;case 34:this.adjustValue(-this.spinCfg.page)}else this.repeating=true}).keyup(function(a){this.repeating=false;switch(a.keyCode){case 38:case 40:case 33:case 34:case 13:this.adjustValue(0)}}).bind("mousewheel",
+function(a){if(a.wheelDelta>=120)this.adjustValue(this.spinCfg.step);else a.wheelDelta<=-120&&this.adjustValue(-this.spinCfg.step);a.preventDefault()}).change(function(){this.adjustValue(0)});this.addEventListener&&this.addEventListener("DOMMouseScroll",function(a){if(a.detail>0)this.adjustValue(-this.spinCfg.step);else a.detail<0&&this.adjustValue(this.spinCfg.step);a.preventDefault()},false)})}; \ No newline at end of file
diff --git a/files_svgedit/svg-edit/spinbtn/.svn/text-base/spinbtn_updn.png.svn-base b/files_svgedit/svg-edit/spinbtn/.svn/text-base/spinbtn_updn.png.svn-base
new file mode 100644
index 000000000..8baa1b0cc
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/.svn/text-base/spinbtn_updn.png.svn-base
Binary files differ
diff --git a/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.css b/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.css
new file mode 100644
index 000000000..7a279a09e
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.css
@@ -0,0 +1,41 @@
+/*
+ Styles to make ordinary <INPUT type="text"/> look like a spinbutton/spinbox control.
+ Use with JQuerySpinBtn.js to provide the spin functionality by reacting to mouse etc.
+ (Requires a reference to the JQuery library found at http://jquery.com/src/latest/)
+ (Hats-off to John Resig for creating the excellent JQuery library. It is fab.)
+
+ This control is achieved with no extra html markup whatsoever and uses unobtrusive javascript.
+
+ Written by George Adamson, Software Unity (george.jquery@softwareunity.com) September 2006.
+ Big improvements added by Mark Gibson, (mgibson@designlinks.net) September 2006.
+
+ Do contact me with comments and suggestions but please don't ask for support.
+ As much as I'd love to help with specific problems I have plenty to get on with already!
+
+ Go ahead and use it in your own projects. This code is provided 'as is'.
+ Sure I've tested in heaps of ways. Its good for me, but you use it at your own risk.
+ SoftwareUnity and I are certainly not responsible if your computer sets fire to the sofa,
+ hacks into the pentagon, hijacks a plane or gives you any kind of hassle whatsoever.
+
+ If you'd like your spin-button image in a different place then you'll need to alter both
+ the CSS below and the javascript isMouseOverUpDn() function to accommodate the new position.
+ You could even have left and right buttons either side of the textbox.
+*/
+
+INPUT.spin-button {
+ /* explicitly put padding for top/bottom/left in here so that Opera displays it better */
+ padding: 2px 20px 2px 2px;
+ background-repeat:no-repeat; /* Warning: Img may disappear in Firefox if you use 'background-attachment:fixed' ! */
+ background-position:100% 0%;
+ background-image:url('spinbtn_updn.png');
+ background-color:white; /* Needed for Opera */
+}
+
+INPUT.spin-button.up { /* Change button img when mouse is over the UP-arrow */
+ cursor:pointer;
+ background-position:100% -18px; /* 18px matches height of 2 visible buttons */
+}
+INPUT.spin-button.down { /* Change button img when mouse is over the DOWN-arrow */
+ cursor:pointer;
+ background-position:100% -36px; /* 36px matches height of 2x2 visible buttons */
+}
diff --git a/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.js b/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.js
new file mode 100644
index 000000000..77f924ed2
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.js
@@ -0,0 +1,266 @@
+/* SpinButton control
+ *
+ * Adds bells and whistles to any ordinary textbox to
+ * make it look and feel like a SpinButton Control.
+ *
+ * Originally written by George Adamson, Software Unity (george.jquery@softwareunity.com) August 2006.
+ * - Added min/max options
+ * - Added step size option
+ * - Added bigStep (page up/down) option
+ *
+ * Modifications made by Mark Gibson, (mgibson@designlinks.net) September 2006:
+ * - Converted to jQuery plugin
+ * - Allow limited or unlimited min/max values
+ * - Allow custom class names, and add class to input element
+ * - Removed global vars
+ * - Reset (to original or through config) when invalid value entered
+ * - Repeat whilst holding mouse button down (with initial pause, like keyboard repeat)
+ * - Support mouse wheel in Firefox
+ * - Fix double click in IE
+ * - Refactored some code and renamed some vars
+ *
+ * Modifications by Jeff Schiller, June 2009:
+ * - provide callback function for when the value changes based on the following
+ * http://www.mail-archive.com/jquery-en@googlegroups.com/msg36070.html
+ * Modifications by Jeff Schiller, July 2009:
+ * - improve styling for widget in Opera
+ * - consistent key-repeat handling cross-browser
+ * Modifications by Alexis Deveria, October 2009:
+ * - provide "stepfunc" callback option to allow custom function to run when changing a value
+ * - Made adjustValue(0) only run on certain keyup events, not all.
+ *
+ * Tested in IE6, Opera9, Firefox 1.5
+ * v1.0 11 Aug 2006 - George Adamson - First release
+ * v1.1 Aug 2006 - George Adamson - Minor enhancements
+ * v1.2 27 Sep 2006 - Mark Gibson - Major enhancements
+ * v1.3a 28 Sep 2006 - George Adamson - Minor enhancements
+ * v1.4 18 Jun 2009 - Jeff Schiller - Added callback function
+ * v1.5 06 Jul 2009 - Jeff Schiller - Fixes for Opera.
+ * v1.6 13 Oct 2009 - Alexis Deveria - Added stepfunc function
+ * v1.7 21 Oct 2009 - Alexis Deveria - Minor fixes
+ * Fast-repeat for keys and live updating as you type.
+ * v1.8 12 Jan 2010 - Benjamin Thomas - Fixes for mouseout behavior.
+ * Added smallStep
+
+ Sample usage:
+
+ // Create group of settings to initialise spinbutton(s). (Optional)
+ var myOptions = {
+ min: 0, // Set lower limit.
+ max: 100, // Set upper limit.
+ step: 1, // Set increment size.
+ smallStep: 0.5, // Set shift-click increment size.
+ spinClass: mySpinBtnClass, // CSS class to style the spinbutton. (Class also specifies url of the up/down button image.)
+ upClass: mySpinUpClass, // CSS class for style when mouse over up button.
+ downClass: mySpinDnClass // CSS class for style when mouse over down button.
+ }
+
+ $(document).ready(function(){
+
+ // Initialise INPUT element(s) as SpinButtons: (passing options if desired)
+ $("#myInputElement").SpinButton(myOptions);
+
+ });
+
+ */
+$.fn.SpinButton = function(cfg){
+ return this.each(function(){
+
+ this.repeating = false;
+
+ // Apply specified options or defaults:
+ // (Ought to refactor this some day to use $.extend() instead)
+ this.spinCfg = {
+ //min: cfg && cfg.min ? Number(cfg.min) : null,
+ //max: cfg && cfg.max ? Number(cfg.max) : null,
+ min: cfg && !isNaN(parseFloat(cfg.min)) ? Number(cfg.min) : null, // Fixes bug with min:0
+ max: cfg && !isNaN(parseFloat(cfg.max)) ? Number(cfg.max) : null,
+ step: cfg && cfg.step ? Number(cfg.step) : 1,
+ stepfunc: cfg && cfg.stepfunc ? cfg.stepfunc : false,
+ page: cfg && cfg.page ? Number(cfg.page) : 10,
+ upClass: cfg && cfg.upClass ? cfg.upClass : 'up',
+ downClass: cfg && cfg.downClass ? cfg.downClass : 'down',
+ reset: cfg && cfg.reset ? cfg.reset : this.value,
+ delay: cfg && cfg.delay ? Number(cfg.delay) : 500,
+ interval: cfg && cfg.interval ? Number(cfg.interval) : 100,
+ _btn_width: 20,
+ _direction: null,
+ _delay: null,
+ _repeat: null,
+ callback: cfg && cfg.callback ? cfg.callback : null
+ };
+
+ // if a smallStep isn't supplied, use half the regular step
+ this.spinCfg.smallStep = cfg && cfg.smallStep ? cfg.smallStep : this.spinCfg.step/2;
+
+ this.adjustValue = function(i){
+ var v;
+ if(isNaN(this.value)) {
+ v = this.spinCfg.reset;
+ } else if($.isFunction(this.spinCfg.stepfunc)) {
+ v = this.spinCfg.stepfunc(this, i);
+ } else {
+ // weirdest javascript bug ever: 5.1 + 0.1 = 5.199999999
+ v = Number((Number(this.value) + Number(i)).toFixed(5));
+ }
+ if (this.spinCfg.min !== null) v = Math.max(v, this.spinCfg.min);
+ if (this.spinCfg.max !== null) v = Math.min(v, this.spinCfg.max);
+ this.value = v;
+ if ($.isFunction(this.spinCfg.callback)) this.spinCfg.callback(this);
+ };
+
+ $(this)
+ .addClass(cfg && cfg.spinClass ? cfg.spinClass : 'spin-button')
+
+ .mousemove(function(e){
+ // Determine which button mouse is over, or not (spin direction):
+ var x = e.pageX || e.x;
+ var y = e.pageY || e.y;
+ var el = e.target || e.srcElement;
+ var scale = svgEditor.tool_scale || 1;
+ var height = $(el).height()/2;
+
+ var direction =
+ (x > coord(el,'offsetLeft') + el.offsetWidth*scale - this.spinCfg._btn_width)
+ ? ((y < coord(el,'offsetTop') + height*scale) ? 1 : -1) : 0;
+
+ if (direction !== this.spinCfg._direction) {
+ // Style up/down buttons:
+ switch(direction){
+ case 1: // Up arrow:
+ $(this).removeClass(this.spinCfg.downClass).addClass(this.spinCfg.upClass);
+ break;
+ case -1: // Down arrow:
+ $(this).removeClass(this.spinCfg.upClass).addClass(this.spinCfg.downClass);
+ break;
+ default: // Mouse is elsewhere in the textbox
+ $(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);
+ }
+
+ // Set spin direction:
+ this.spinCfg._direction = direction;
+ }
+ })
+
+ .mouseout(function(){
+ // Reset up/down buttons to their normal appearance when mouse moves away:
+ $(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);
+ this.spinCfg._direction = null;
+ window.clearInterval(this.spinCfg._repeat);
+ window.clearTimeout(this.spinCfg._delay);
+ })
+
+ .mousedown(function(e){
+ if ( e.button === 0 && this.spinCfg._direction != 0) {
+ // Respond to click on one of the buttons:
+ var self = this;
+ var stepSize = e.shiftKey ? self.spinCfg.smallStep : self.spinCfg.step
+
+ var adjust = function() {
+ self.adjustValue(self.spinCfg._direction * stepSize);
+ };
+
+ adjust();
+
+ // Initial delay before repeating adjustment
+ self.spinCfg._delay = window.setTimeout(function() {
+ adjust();
+ // Repeat adjust at regular intervals
+ self.spinCfg._repeat = window.setInterval(adjust, self.spinCfg.interval);
+ }, self.spinCfg.delay);
+ }
+ })
+
+ .mouseup(function(e){
+ // Cancel repeating adjustment
+ window.clearInterval(this.spinCfg._repeat);
+ window.clearTimeout(this.spinCfg._delay);
+ })
+
+ .dblclick(function(e) {
+ if ($.browser.msie)
+ this.adjustValue(this.spinCfg._direction * this.spinCfg.step);
+ })
+
+ .keydown(function(e){
+ // Respond to up/down arrow keys.
+ switch(e.keyCode){
+ case 38: this.adjustValue(this.spinCfg.step); break; // Up
+ case 40: this.adjustValue(-this.spinCfg.step); break; // Down
+ case 33: this.adjustValue(this.spinCfg.page); break; // PageUp
+ case 34: this.adjustValue(-this.spinCfg.page); break; // PageDown
+ }
+ })
+
+ /*
+ http://unixpapa.com/js/key.html describes the current state-of-affairs for
+ key repeat events:
+ - Safari 3.1 changed their model so that keydown is reliably repeated going forward
+ - Firefox and Opera still only repeat the keypress event, not the keydown
+ */
+ .keypress(function(e){
+ if (this.repeating) {
+ // Respond to up/down arrow keys.
+ switch(e.keyCode){
+ case 38: this.adjustValue(this.spinCfg.step); break; // Up
+ case 40: this.adjustValue(-this.spinCfg.step); break; // Down
+ case 33: this.adjustValue(this.spinCfg.page); break; // PageUp
+ case 34: this.adjustValue(-this.spinCfg.page); break; // PageDown
+ }
+ }
+ // we always ignore the first keypress event (use the keydown instead)
+ else {
+ this.repeating = true;
+ }
+ })
+
+ // clear the 'repeating' flag
+ .keyup(function(e) {
+ this.repeating = false;
+ switch(e.keyCode){
+ case 38: // Up
+ case 40: // Down
+ case 33: // PageUp
+ case 34: // PageDown
+ case 13: this.adjustValue(0); break; // Enter/Return
+ }
+ })
+
+ .bind("mousewheel", function(e){
+ // Respond to mouse wheel in IE. (It returns up/dn motion in multiples of 120)
+ if (e.wheelDelta >= 120)
+ this.adjustValue(this.spinCfg.step);
+ else if (e.wheelDelta <= -120)
+ this.adjustValue(-this.spinCfg.step);
+
+ e.preventDefault();
+ })
+
+ .change(function(e){
+ this.adjustValue(0);
+ });
+
+ if (this.addEventListener) {
+ // Respond to mouse wheel in Firefox
+ this.addEventListener('DOMMouseScroll', function(e) {
+ if (e.detail > 0)
+ this.adjustValue(-this.spinCfg.step);
+ else if (e.detail < 0)
+ this.adjustValue(this.spinCfg.step);
+
+ e.preventDefault();
+ }, false);
+ }
+ });
+
+ function coord(el,prop) {
+ var c = el[prop], b = document.body;
+
+ while ((el = el.offsetParent) && (el != b)) {
+ if (!$.browser.msie || (el.currentStyle.position != 'relative'))
+ c += el[prop];
+ }
+
+ return c;
+ }
+};
diff --git a/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.min.js b/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.min.js
new file mode 100644
index 000000000..f7532073a
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/JQuerySpinBtn.min.js
@@ -0,0 +1,7 @@
+$.fn.SpinButton=function(b){function f(a,c){for(var e=a[c],d=document.body;(a=a.offsetParent)&&a!=d;)if(!$.browser.msie||a.currentStyle.position!="relative")e+=a[c];return e}return this.each(function(){this.repeating=false;this.spinCfg={min:b&&!isNaN(parseFloat(b.min))?Number(b.min):null,max:b&&!isNaN(parseFloat(b.max))?Number(b.max):null,step:b&&b.step?Number(b.step):1,stepfunc:b&&b.stepfunc?b.stepfunc:false,page:b&&b.page?Number(b.page):10,upClass:b&&b.upClass?b.upClass:"up",downClass:b&&b.downClass?
+b.downClass:"down",reset:b&&b.reset?b.reset:this.value,delay:b&&b.delay?Number(b.delay):500,interval:b&&b.interval?Number(b.interval):100,_btn_width:20,_direction:null,_delay:null,_repeat:null,callback:b&&b.callback?b.callback:null};this.spinCfg.smallStep=b&&b.smallStep?b.smallStep:this.spinCfg.step/2;this.adjustValue=function(a){a=isNaN(this.value)?this.spinCfg.reset:$.isFunction(this.spinCfg.stepfunc)?this.spinCfg.stepfunc(this,a):Number((Number(this.value)+Number(a)).toFixed(5));if(this.spinCfg.min!==
+null)a=Math.max(a,this.spinCfg.min);if(this.spinCfg.max!==null)a=Math.min(a,this.spinCfg.max);this.value=a;$.isFunction(this.spinCfg.callback)&&this.spinCfg.callback(this)};$(this).addClass(b&&b.spinClass?b.spinClass:"spin-button").mousemove(function(a){var c=a.pageX||a.x,e=a.pageY||a.y;a=a.target||a.srcElement;var d=svgEditor.tool_scale||1,g=$(a).height()/2;c=c>f(a,"offsetLeft")+a.offsetWidth*d-this.spinCfg._btn_width?e<f(a,"offsetTop")+g*d?1:-1:0;if(c!==this.spinCfg._direction){switch(c){case 1:$(this).removeClass(this.spinCfg.downClass).addClass(this.spinCfg.upClass);
+break;case -1:$(this).removeClass(this.spinCfg.upClass).addClass(this.spinCfg.downClass);break;default:$(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass)}this.spinCfg._direction=c}}).mouseout(function(){$(this).removeClass(this.spinCfg.upClass).removeClass(this.spinCfg.downClass);this.spinCfg._direction=null;window.clearInterval(this.spinCfg._repeat);window.clearTimeout(this.spinCfg._delay)}).mousedown(function(a){if(a.button===0&&this.spinCfg._direction!=0){var c=this,
+e=a.shiftKey?c.spinCfg.smallStep:c.spinCfg.step,d=function(){c.adjustValue(c.spinCfg._direction*e)};d();c.spinCfg._delay=window.setTimeout(function(){d();c.spinCfg._repeat=window.setInterval(d,c.spinCfg.interval)},c.spinCfg.delay)}}).mouseup(function(){window.clearInterval(this.spinCfg._repeat);window.clearTimeout(this.spinCfg._delay)}).dblclick(function(){$.browser.msie&&this.adjustValue(this.spinCfg._direction*this.spinCfg.step)}).keydown(function(a){switch(a.keyCode){case 38:this.adjustValue(this.spinCfg.step);
+break;case 40:this.adjustValue(-this.spinCfg.step);break;case 33:this.adjustValue(this.spinCfg.page);break;case 34:this.adjustValue(-this.spinCfg.page)}}).keypress(function(a){if(this.repeating)switch(a.keyCode){case 38:this.adjustValue(this.spinCfg.step);break;case 40:this.adjustValue(-this.spinCfg.step);break;case 33:this.adjustValue(this.spinCfg.page);break;case 34:this.adjustValue(-this.spinCfg.page)}else this.repeating=true}).keyup(function(a){this.repeating=false;switch(a.keyCode){case 38:case 40:case 33:case 34:case 13:this.adjustValue(0)}}).bind("mousewheel",
+function(a){if(a.wheelDelta>=120)this.adjustValue(this.spinCfg.step);else a.wheelDelta<=-120&&this.adjustValue(-this.spinCfg.step);a.preventDefault()}).change(function(){this.adjustValue(0)});this.addEventListener&&this.addEventListener("DOMMouseScroll",function(a){if(a.detail>0)this.adjustValue(-this.spinCfg.step);else a.detail<0&&this.adjustValue(this.spinCfg.step);a.preventDefault()},false)})}; \ No newline at end of file
diff --git a/files_svgedit/svg-edit/spinbtn/spinbtn_updn.png b/files_svgedit/svg-edit/spinbtn/spinbtn_updn.png
new file mode 100644
index 000000000..8baa1b0cc
--- /dev/null
+++ b/files_svgedit/svg-edit/spinbtn/spinbtn_updn.png
Binary files differ
diff --git a/files_svgedit/svg-edit/svg-editor.css b/files_svgedit/svg-edit/svg-editor.css
new file mode 100644
index 000000000..a56e60350
--- /dev/null
+++ b/files_svgedit/svg-edit/svg-editor.css
@@ -0,0 +1,1419 @@
+body {
+ background: #D0D0D0;
+}
+
+html, body, div{
+ -webkit-user-select: text;
+ -khtml-user-select: text;
+ -moz-user-select: text;
+ -o-user-select: text;
+ user-select: text;
+ /* this will work for QtWebKit in future */
+ -webkit-user-drag: text;
+}
+
+#browser-not-supported {
+ font-size: 0.8em;
+ font-family: Verdana, Helvetica, Arial;
+ color: #000000;
+}
+
+
+#svg_editor * {
+ transform-origin: 0 0;
+ -moz-transform-origin: 0 0;
+ -o-transform-origin: 0 0;
+ -webkit-transform-origin: 0 0;
+}
+
+#svg_editor {
+ font-size: 8pt;
+ font-family: Verdana, Helvetica, Arial;
+ color: #000000;
+}
+
+#svg_editor a {
+ color: #0000FF;
+}
+
+#svg_editor hr {
+ border: none;
+ border-bottom: 1px solid #808080;
+}
+
+#svg_editor select {
+ margin-top: 4px;
+}
+
+#svg_editor #svgroot {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+#svg_editor #svgcanvas {
+ line-height: normal;
+ display: inline-block;
+ background-color: #A0A0A0;
+ text-align: center;
+ vertical-align: middle;
+ width: 640px;
+ height: 480px;
+ -apple-dashboard-region:dashboard-region(control rectangle 0px 0px 0px 0px); /* for widget regions that shouldn't react to dragging */
+ position: relative;
+ /*
+ A subtle gradient effect in the canvas.
+ Just experimenting - not sure if this is worth it.
+ */
+ background: -moz-radial-gradient(45deg,#bbb,#222);
+ background: -webkit-gradient(radial, center center, 3, center center, 1000, from(#bbb), to(#222));
+}
+
+#rulers > div {
+ position: absolute;
+ background: #DDD;
+ z-index: 1;
+ overflow: hidden;
+}
+
+#ruler_corner {
+ top: 76px;
+ left: 41px;
+ width: 15px;
+ height: 15px;
+}
+
+#ruler_x {
+ height: 15px;
+ top: 76px;
+ left: 56px;
+ right: 30px;
+ border-bottom: 1px solid;
+ border-left: 1px solid #777;
+}
+
+#rulers.moved #ruler_corner,
+#rulers.moved #ruler_x {
+ top: 101px;
+}
+
+#ruler_y {
+ width: 15px;
+ top: 91px;
+ left: 41px;
+ bottom: 78px;
+ border-right: 1px solid;
+ border-top: 1px solid #777;
+}
+
+#rulers.moved #ruler_y {
+ top: 116px;
+}
+
+
+#ruler_x canvas:first-child {
+ margin-left: -16px;
+}
+
+#ruler_x canvas {
+ float: left;
+}
+
+#ruler_y canvas {
+ margin-top: -16px;
+}
+
+#ruler_x > div,
+#ruler_y > div {
+ overflow: hidden;
+}
+
+
+
+
+#svg_editor div#palette_holder {
+ overflow-x: scroll;
+ overflow-y: hidden;
+ height: 31px;
+ border: 1px solid #808080;
+ border-top: none;
+ margin-top: 2px;
+ margin-left: 4px;
+ position: relative;
+ z-index: 2;
+}
+
+#svg_editor #stroke_bg,
+#svg_editor #fill_bg {
+ height: 16px;
+ width: 16px;
+ margin: 1px;
+}
+
+#svg_editor #fill_color, #svg_editor #stroke_color {
+ height: 16px;
+ width: 16px;
+ border: 1px solid #808080;
+ cursor: pointer;
+ margin-top: -18px;
+ margin-left: 1px;
+}
+
+#tool_stroke select {
+ margin-top: 0;
+}
+
+#svg_editor #color_tools .icon_label {
+ padding: 3px 19%;
+ width: 28px;
+ height: 100%;
+ cursor: pointer;
+
+}
+
+#svg_editor #group_opacityLabel,
+#svg_editor #zoomLabel {
+ cursor: pointer;
+ margin-right: 5px;
+ padding-top: 4px
+}
+
+#svg_editor #linkLabel > svg {
+ height: 20px;
+ padding-top: 4px;
+}
+
+#color_tools .icon_label > * {
+ position: relative;
+ top: 1px;
+}
+
+#svg_editor div#palette {
+ float: left;
+ width: 672px;
+ height: 16px;
+}
+
+#svg_editor div#workarea {
+ display: inline-table-cell;
+ position:absolute;
+ top: 75px;
+ left: 40px;
+ bottom: 62px;
+ right: 14px;
+ background-color: #A0A0A0;
+ border: 1px solid #808080;
+ overflow: auto;
+ text-align: center;
+}
+
+#svg_editor #sidepanels {
+ display: inline-block;
+ position:absolute;
+ top: 75px;
+ bottom: 60px;
+ right: 0px;
+ width: 2px;
+ padding: 10px;
+ border-color: #808080;
+ border-style: solid;
+ border-width: 1px;
+ border-left: none;
+}
+
+#svg_editor #layerpanel {
+ display: inline-block;
+ position:absolute;
+ top: 1px;
+ bottom: 0px;
+ right: 0px;
+ width: 0px;
+ overflow: auto;
+ margin: 0px;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+
+}
+
+/*
+ border-style: solid;
+ border-color: #666;
+ border-width: 0px 0px 0px 1px;
+*/
+#svg_editor #sidepanel_handle {
+ display: inline-block;
+ position: absolute;
+ background-color: #D0D0D0;
+ font-weight: bold;
+ left: 0px;
+ top: 40%;
+ width: 1em;
+ padding: 5px 1px 5px 5px;
+ margin-left: 3px;
+ cursor: pointer;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
+
+#svg_editor #sidepanel_handle:hover {
+ font-weight: bold;
+}
+
+#svg_editor #sidepanel_handle * {
+ cursor: pointer;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+}
+#svg_editor #layerbuttons {
+ margin: 0px;
+ padding: 0px;
+ padding-left: 2px;
+ padding-right: 2px;
+ width: 125px;
+ height: 20px;
+ border-right: 1px solid #FFFFFF;
+ border-bottom: 1px solid #FFFFFF;
+ border-left: 1px solid #808080;
+ border-top: 1px solid #808080;
+ overflow: hidden;
+}
+
+#svg_editor .layer_button {
+ width: 14px;
+ height: 14px;
+ padding: 1px;
+ border-left: 1px solid #FFFFFF;
+ border-top: 1px solid #FFFFFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ cursor: pointer;
+ float: left;
+ margin-right: 3px;
+}
+
+#svg_editor .layer_button:last-child {
+ margin-right: 0;
+}
+
+#svg_editor .layer_buttonpressed {
+ width: 14px;
+ height: 14px;
+ padding: 1px;
+ border-right: 1px solid #FFFFFF;
+ border-bottom: 1px solid #FFFFFF;
+ border-left: 1px solid #808080;
+ border-top: 1px solid #808080;
+ cursor: pointer;
+}
+
+#svg_editor #layerlist {
+ margin: 1px;
+ padding: 0px;
+ width: 127px;
+ border-collapse: collapse;
+ border: 1px solid #808080;
+ background-color: #FFFFFF;
+}
+
+#svg_editor #layerlist tr.layer {
+ background-color: #FFFFFF;
+ margin: 0px;
+ padding: 0px;
+}
+#svg_editor #layerlist tr.layersel {
+ border: 1px solid #808080;
+ background-color: #CCCCCC;
+}
+
+#svg_editor #layerlist td.layervis {
+ width: 22px;
+ cursor:pointer;
+}
+#svg_editor #layerlist td.layerinvis {
+ background-image: none;
+ cursor:pointer;
+}
+
+#svg_editor #layerlist td.layervis * {
+ display: block;
+}
+
+#svg_editor #layerlist td.layerinvis * {
+ display: none;
+}
+
+#svg_editor #layerlist td.layername {
+ cursor: pointer;
+}
+
+#svg_editor #layerlist tr.layersel td.layername {
+ font-weight: bold;
+}
+
+#svg_editor #selLayerLabel {
+ white-space: nowrap;
+}
+
+#svg_editor #selLayerNames {
+ display: block;
+}
+
+#svg_editor div.palette_item {
+ height: 16px;
+ width: 16px;
+ float: left;
+}
+
+#svg_editor #main_button {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ z-index: 5;
+}
+
+
+#svg_editor #main_icon {
+ background: #E8E8E8;
+ position: relative;
+ top: -2px;
+ left: -2px;
+ padding: 1px 0 2px 1px;
+ width: 44px;
+ height: 30px;
+ border-left: 1px solid #FFF;
+ border-top: 1px solid #FFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ border-radius: 8px;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+}
+
+#svg_editor .tool_button:hover,
+#svg_editor .push_button:hover,
+#svg_editor .buttonup:hover,
+#svg_editor .buttondown,
+#svg_editor .tool_button_current,
+#svg_editor .push_button_pressed
+{
+ border-left: 1px #fcd9ba solid !important;
+ border-top: 1px #fcd9ba solid !important;
+ border-right: 1px #e0a874 solid !important;
+ border-bottom: 1px #e0a874 solid !important;
+ background-color: #FFC !important;
+}
+
+#svg_editor .tool_button_current,
+#svg_editor .push_button_pressed,
+#svg_editor .buttondown {
+ background-color: #f4e284 !important;
+ border-top: 1px solid #630 !important;
+ border-left: 1px solid #630 !important;
+}
+
+#svg_editor #main_icon span {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ display: block;
+ z-index: 2;
+}
+
+#svg_editor #main_menu {
+ z-index: 12;
+ background: #E8E8E8;
+ position: relative;
+ width: 230px;
+ padding: 5px;
+ -moz-box-shadow: #555 1px 1px 4px;
+ -webkit-box-shadow: #555 1px 1px 4px;
+ font-size: 1.1em;
+ display: none;
+ overflow: hidden;
+ border: 1px outset gray;
+ clear: both;
+}
+
+#svg_editor #main_menu ul,
+#svg_editor #main_menu li {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#svg_editor #main_menu li {
+/* height: 35px;*/
+ line-height: 22px;
+ padding-top: 7px;
+ padding-left: 7px;
+ margin: -5px;
+ overflow: auto;
+ cursor: default;
+}
+
+#svg_editor #main_menu li:hover {
+ background: #FFC;
+}
+
+#svg_editor #main_menu li > div {
+ float: left;
+ padding-right: 5px;
+}
+
+#svg_editor #main_menu p {
+ margin-top: 5px;
+}
+
+#svg_editor #logo img {
+ border: 0;
+ width: 32px;
+ height: 32px;
+}
+
+
+
+#main_icon > div {
+ float: left;
+}
+
+#svg_editor #main_button .dropdown {
+ padding-top: 28%;
+ margin-left: -1px;
+}
+
+
+
+#svg_editor #tools_top {
+ position: absolute;
+ left: 50px;
+ right: 2px;
+ top: 2px;
+ height: 72px;
+ border-bottom: none;
+ overflow: auto;
+}
+
+#svg_editor #tools_left {
+ position: absolute;
+ border-right: none;
+ width: 32px;
+ top: 75px;
+ left: 0;
+ padding-left: 2px;
+ background: #D0D0D0; /* Needed so flyout icons don't appear on the left */
+ z-index: 4;
+}
+
+#workarea.wireframe #svgcontent * {
+ fill: none;
+ stroke: #000;
+ stroke-width: 1px;
+ stroke-opacity: 1.0;
+ stroke-dasharray: 0;
+ opacity: 1;
+ pointer-events: stroke;
+ vector-effect: non-scaling-stroke;
+ filter: none;
+}
+
+#workarea.wireframe #svgcontent text {
+ fill: #000;
+ stroke: none;
+}
+
+#workarea.wireframe #canvasBackground > rect {
+ fill: #FFF !important;
+}
+
+#tools_top div[id$="_panel"]:not(#editor_panel):not(#history_panel) {
+ display: none;
+}
+
+#svg_editor #multiselected_panel .selected_tool {
+ vertical-align: 12px;
+}
+
+#cur_context_panel {
+ position: absolute;
+ top: 77px;
+ left: 40px;
+ right: 0;
+ line-height: 22px;
+ overflow: auto;
+ border: 1px solid #777;
+ border-bottom: none;
+ border-right: none;
+ padding-left: 5px;
+ font-size: 12px;
+}
+
+#svg_editor #cur_context_panel a {
+ float: none;
+ text-decoration: none;
+}
+
+#svg_editor #cur_context_panel a:hover {
+ text-decoration: underline;
+}
+
+#svg_editor #tools_top > div, #tools_top {
+ line-height: 26px;
+}
+
+#svg_editor div.toolset,
+#svg_editor div.toolset > * {
+ float: left;
+}
+
+#svg_editor div.toolset {
+ height: 34px;
+}
+
+#svg_editor div.toolset label span {
+/* outline: 1px solid red;*/
+ padding-top: 3px;
+ display: inline-block;
+}
+
+#tools_top > div > * {
+ float: left;
+ margin-right: 2px;
+}
+
+#tools_top label {
+ margin-top: 0;
+ margin-left: 5px;
+}
+
+#tools_top input {
+ margin-top: 5px;
+ height: 15px;
+}
+
+#svg_editor #tools_left .tool_button,
+#svg_editor #tools_left .tool_button_current {
+ position: relative;
+ z-index: 11;
+}
+
+#svg_editor .flyout_arrow_horiz {
+ position: absolute;
+ bottom: -1px;
+ right: 0;
+ z-index: 10;
+}
+
+
+span.zoom_tool {
+ line-height: 26px;
+ padding: 3px;
+}
+
+#zoom_panel {
+ margin-top: 5px;
+}
+
+.dropdown {
+ position: relative;
+}
+
+#svg_editor .dropdown button {
+ width: 15px;
+ height: 21px;
+ margin: 6px 0 0 1px;
+ padding: 0;
+ border-left: 1px solid #FFFFFF;
+ border-top: 1px solid #FFFFFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ background-color: #E8E8E8;
+}
+
+.dropdown button.down {
+ border-left: 1px solid #808080;
+ border-top: 1px solid #808080;
+ border-right: 1px solid #FFFFFF;
+ border-bottom: 1px solid #FFFFFF;
+ background-color: #B0B0B0;
+}
+
+.dropdown ul {
+ list-style: none;
+ position: absolute;
+ margin: 0;
+ padding: 0;
+ left: -80px;
+ top: 26px;
+ z-index: 4;
+ display: none;
+}
+
+.dropup ul {
+ top: auto;
+ bottom: 26px;
+}
+
+.dropdown li {
+ display: block;
+ width: 120px;
+ padding: 4px;
+ background: #E8E8E8;
+ border: 1px solid #B0B0B0;
+ margin: 0 0 -1px 0;
+ line-height: 16px;
+}
+
+.dropdown li:hover {
+ background-color: #FFC;
+}
+
+.dropdown li.special {
+ padding: 10px 4px;
+}
+
+.dropdown li.special:hover {
+ background: #FFC;
+}
+
+#font_family_dropdown-list li {
+ font-size: 1.4em;
+}
+
+#font_family {
+ margin-left: 5px;
+ margin-right: 0;
+}
+
+
+#svg_editor .tool_button,
+#svg_editor .push_button,
+#svg_editor .tool_button_current,
+#svg_editor .push_button_pressed
+{
+ height: 24px;
+ width: 24px;
+ margin: 2px;
+ padding: 2px;
+ border-left: 1px solid #FFF;
+ border-top: 1px solid #FFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ background-color: #E8E8E8;
+ cursor: pointer;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+#svg_editor #main_menu li#tool_open, #svg_editor #main_menu li#tool_import {
+ position: relative;
+ overflow: hidden;
+}
+
+#tool_image {
+ overflow: hidden;
+}
+
+#tool_open input,
+#tool_import input,
+#tool_image input {
+ position: absolute;
+ opacity: 0;
+ font-size: 10em;
+ top: -5px;
+ right: -5px;
+ margin: 0;
+ cursor: pointer; /* Sadly doesn't appear to have an effect */
+}
+
+#svg_editor .disabled {
+ opacity: 0.5;
+ cursor: default;
+}
+
+#svg_editor .tool_sep {
+ width: 1px;
+ background: #888;
+ border-left: 1px outset #EEE;
+ margin: 2px 3px;
+ padding: 0;
+ height: 24px;
+
+}
+
+#svg_editor .icon_label {
+ float: left;
+ padding-top: 3px;
+ padding-right: 3px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ height: 0;
+}
+
+#svg_editor .width_label {
+ padding-right: 5px;
+}
+
+#tool_bold, #tool_italic {
+ font: bold 2.1em/1.1em serif;
+ text-align: center;
+ padding-left: 2px;
+ position: relative;
+}
+
+#text {
+ position: absolute;
+ left: -9999px;
+}
+
+#tool_bold span, #tool_italic span {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0; left: 0;
+ background: #000;
+ opacity: 0;
+}
+
+#tool_italic {
+ font-weight: normal;
+ font-style: italic;
+}
+
+#url_notice {
+ padding-top: 4px;
+ display: none;
+}
+
+#svg_editor #color_picker {
+ position: absolute;
+ display: none;
+ background: #E8E8E8;
+ height: 350px;
+ z-index: 5;
+}
+
+#svg_editor .tools_flyout {
+ position: absolute;
+ display: none;
+ cursor: pointer;
+ width: 400px;
+ z-index: 1;
+}
+
+#svg_editor .tools_flyout_v {
+ position: absolute;
+ display: none;
+ cursor: pointer;
+ width: 30px;
+}
+
+#svg_editor .tools_flyout .tool_button {
+ float: left;
+ background-color: #E8E8E8;
+ border-left: 1px solid #FFFFFF;
+ border-top: 1px solid #FFFFFF;
+ border-right: 1px solid #808080;
+ border-bottom: 1px solid #808080;
+ height: 28px;
+ width: 28px;
+}
+
+#svg_editor #tools_bottom {
+ position: absolute;
+ left: 40px;
+ right: 0;
+ bottom: 0;
+ height: 64px;
+ overflow: visible;
+}
+
+#svg_editor #tools_bottom_1 {
+ width: 115px;
+ float: left;
+}
+
+#svg_editor #tools_bottom_2 {
+ width: 165px;
+ position: relative;
+ float: left;
+}
+
+#tools_bottom input[type=text] {
+ width: 2.2em;
+}
+
+#svg_editor #color_tools {
+ display: table;
+ margin-top: 1px;
+ border-spacing: 0 3px;
+ clip: rect(0,0,10px,0);
+}
+
+.color_tool {
+ display: table-row;
+ overflow: hidden;
+ height: 26px;
+ padding: 0 4px;
+}
+
+.color_tool > * {
+ display: table-cell;
+ background: #f0f0f0;
+ padding: 0 5px 0 0;
+ vertical-align: middle;
+/* height: 25px;*/
+}
+
+#toggle_stroke_tools {
+ letter-spacing: -.2em;
+ padding-right: 8px;
+}
+
+#toggle_stroke_tools:hover {
+ cursor: pointer;
+ background: #FFC;
+}
+
+.stroke_tool {
+ display: none;
+ white-space: nowrap;
+}
+
+#svg_editor .stroke_tool button {
+ margin-top: 3px;
+ background: #F0F0F0;
+}
+
+#svg_editor .stroke_tool div div {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ width: 20px;
+ height: 20px;
+ margin: 1px 0;
+ padding: 1px;
+ border: 1px solid #DDD;
+}
+
+#svg_editor .stroke_tool:hover div > * {
+ background-color: #FFC;
+}
+
+#svg_editor .stroke_tool.down div div,
+#svg_editor .stroke_tool.down button,
+#tools_top .dropdown.down > * {
+ border: 1px inset gray;
+ background: #F4E284;
+}
+
+.stroke_tool > div {
+ width: 42px;
+}
+
+.stroke_tool > div > * {
+ float: left;
+}
+
+
+#tools_top .dropdown .icon_label {
+ border: 1px solid transparent;
+/* margin-top: 3px;*/
+ height: auto;
+}
+
+#option_lists ul {
+ display: none;
+ position: absolute;
+ height: auto;
+ z-index: 3;
+ margin: 0;
+ list-style: none;
+ padding-left: 0;
+}
+
+#option_lists .optcols2 {
+ width: 70px;
+ margin-left: -15px;
+}
+
+#option_lists .optcols3 {
+ width: 90px;
+ margin-left: -31px;
+}
+
+#option_lists .optcols4 {
+ width: 130px;
+ margin-left: -44px;
+}
+
+#option_lists ul[class^=optcols] li {
+ float: left;
+}
+
+#svg_editor ul li.current {
+ background-color: #F4E284;
+}
+
+#svg_editor #option_lists ul li {
+ margin: 0;
+ border-radius: 0;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+}
+
+.color_tool > *:first-child {
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ padding-right: 0;
+}
+
+.color_tool > *:last-child {
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+}
+
+#svg_editor #tool_opacity {
+ position: absolute;
+ top: 4px;
+ right: 2px;
+ background: #f0f0f0;
+ height: 26px;
+ border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ padding: 0 3px;
+}
+
+#tools_bottom .dropdown button {
+ margin-top: 2px;
+}
+
+#opacity_dropdown li {
+ width: 140px;
+}
+
+#svg_editor #copyright {
+ text-align: right;
+ padding-right: .3em;
+}
+
+#svg_source_editor {
+ display: none;
+}
+
+#svg_source_editor #svg_source_overlay {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ background-color: black;
+ opacity: 0.6;
+ z-index: 5;
+}
+
+#svg_source_editor #svg_source_container {
+ position: absolute;
+ top: 30px;
+ left: 30px;
+ right: 30px;
+ bottom: 30px;
+ background-color: #B0B0B0;
+ opacity: 1.0;
+ text-align: center;
+ border: 1px outset #777;
+ z-index: 6;
+}
+
+#save_output_btns {
+ display: none;
+ text-align: left;
+}
+
+#save_output_btns p {
+ margin: .5em 1.5em;
+ display: inline-block;
+}
+
+#bg_blocks {
+ overflow: auto;
+ margin-left: 30px;
+}
+
+#svg_docprops #svg_docprops_container,
+#svg_prefs #svg_prefs_container {
+ position: absolute;
+ top: 50px;
+ padding: 10px;
+ background-color: #B0B0B0;
+ border: 1px outset #777;
+ opacity: 1.0;
+/* width: 450px;*/
+ font-family: Verdana, Helvetica, sans-serif;
+ font-size: .8em;
+ z-index: 20001;
+}
+
+#svg_docprops .error {
+ border: 1px solid red;
+ padding: 3px;
+}
+
+#svg_docprops #resolution {
+ max-width: 14em;
+}
+
+#tool_docprops_back,
+#tool_prefs_back {
+ margin-left: 1em;
+ overflow: auto;
+}
+
+#svg_docprops_container #svg_docprops_docprops,
+#svg_prefs #svg_docprops_prefs {
+ float: left;
+ width: 221px;
+ margin: 5px .7em;
+ overflow: hidden;
+}
+
+#svg_prefs_container fieldset + fieldset {
+ float: right;
+}
+
+#svg_docprops legend,
+#svg_prefs legend {
+ max-width: 195px;
+}
+
+#svg_docprops_docprops > legend,
+#svg_prefs_container > fieldset > legend {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+
+#svg_docprops_container fieldset,
+#svg_prefs fieldset {
+ padding: 5px;
+ margin: 5px;
+ border: 1px solid #DDD;
+}
+
+#svg_docprops_container label,
+#svg_prefs_container label {
+ display: block;
+ margin: .5em;
+}
+
+#svginfo_bg_note {
+ font-size: .9em;
+ font-style: italic;
+ color: #444;
+}
+
+#canvas_title, #canvas_bg_url {
+ display: block;
+ width: 96%;
+}
+
+#svg_source_editor #svg_source_textarea {
+ position: relative;
+ width: 95%;
+ top: 5px;
+ height: 250px;
+ padding: 5px;
+ font-size: 12px;
+}
+
+#svg_source_editor #tool_source_back {
+ text-align: left;
+ padding-left: 20px;
+}
+
+#svg_prefs_container div.color_block {
+ float: left;
+ margin: 2px;
+ padding: 20px;
+}
+
+#change_background div.cur_background {
+ border: 2px solid blue;
+ padding: 18px;
+}
+
+#background_img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ text-align: left;
+}
+
+#svg_docprops button,
+#svg_prefs button {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+#svg_docprops,
+#svg_prefs {
+ display: none;
+}
+
+#image_save_opts label {
+ font-size: .9em;
+}
+
+#image_save_opts input {
+ margin-left: 0;
+}
+
+#svg_docprops #svg_docprops_overlay,
+#svg_prefs #svg_prefs_overlay {
+ position: absolute;
+ top: 0px;
+ right: 0px;
+ left: 0px;
+ bottom: 0px;
+ background-color: black;
+ opacity: 0.6;
+ z-index: 20000;
+}
+
+#tool_prefs_option {
+ float: right;
+}
+
+.toolbar_button button {
+ border:1px solid #dedede;
+ line-height:130%;
+ float: left;
+ background: #E8E8E8 none;
+ padding:5px 10px 5px 7px; /* Firefox */
+ line-height:17px; /* Safari */
+ margin: 5px 20px 0 0;
+
+ border: 1px #808080 solid;
+ border-top-color: #FFF;
+ border-left-color: #FFF;
+
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+.toolbar_button button:hover {
+ border: 1px #e0a874 solid;
+ border-top-color: #fcd9ba;
+ border-left-color: #fcd9ba;
+ background-color: #FFC;
+}
+.toolbar_button button:active {
+ background-color: #F4E284;
+ border-left: 1px solid #663300;
+ border-top: 1px solid #663300;
+}
+
+.toolbar_button button .svg_icon {
+ margin:0 3px -3px 0 !important;
+ padding:0;
+ border:none;
+ width:16px;
+ height:16px;
+}
+
+#dialog_box {
+ display: none;
+}
+
+#dialog_box_overlay {
+ background: black;
+ opacity: .5;
+ height:100%;
+ left:0;
+ position:absolute;
+ top:0;
+ width:100%;
+ z-index: 6;
+}
+
+#dialog_content {
+ height: 95px;
+ margin: 10px 10px 5px 10px;
+ background: #DDD;
+ overflow: auto;
+ text-align: left;
+ border: 1px solid #B0B0B0;
+}
+
+#dialog_content.prompt {
+ height: 75px;
+}
+
+#dialog_content p {
+ margin: 10px;
+ line-height: 1.3em;
+}
+
+#dialog_container {
+ position: absolute;
+ font-family: Verdana;
+ text-align: center;
+ left: 50%;
+ top: 50%;
+ width: 300px;
+ margin-left: -150px;
+ height: 150px;
+ margin-top: -80px;
+ position:fixed;
+ z-index:50001;
+ background: #CCC;
+ border: 1px outset #777;
+ font-family:Verdana,Helvetica,sans-serif;
+ font-size:0.8em;
+}
+
+#dialog_container, #dialog_content {
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+#dialog_buttons input[type=text] {
+ width: 90%;
+ display: block;
+ margin: 0 0 5px 11px;
+}
+
+#dialog_buttons input[type=button] {
+ margin: 0 1em;
+}
+
+
+/* Slider
+----------------------------------*/
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }
+
+.ui-slider {
+ border: 1px solid #B0B0B0;
+}
+
+.ui-slider-handle {
+ background: #B0B0B0;
+ border: 1px solid #000;
+}
+
+/* Necessary to keep the flyouts sized properly */
+#svg_editor .tools_flyout .tool_button,
+#svg_editor .tools_flyout .tool_flyout {
+ padding: 2px;
+ width: 24px;
+ height: 24px;
+ margin: 0;
+ border-radius: 0px;
+ -moz-border-radius: 0px;
+ -webkit-border-radius: 0px;
+}
+
+/* Generic context menu styles */
+.contextMenu {
+ position: absolute;
+ z-index: 99999;
+ border: solid 1px rgba(0,0,0,.33);
+ background: rgba(255,255,255,.95);
+ padding: 5px 0;
+ margin: 0px;
+ display: none;
+ font: 12px/15px Lucida Sans, Helvetica, Verdana, sans-serif;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -moz-box-shadow: 2px 5px 10px rgba(0,0,0,.3);
+ -webkit-box-shadow: 2px 5px 10px rgba(0,0,0,.3);
+ box-shadow: 2px 5px 10px rgba(0,0,0,.3);
+}
+
+.contextMenu LI {
+ list-style: none;
+ padding: 0px;
+ margin: 0px;
+}
+
+.contextMenu .shortcut {
+ width: 115px;
+ text-align:right;
+ float:right;
+}
+
+.contextMenu A {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ color: #222;
+ text-decoration: none;
+ display: block;
+ line-height: 20px;
+ height: 20px;
+ background-position: 6px center;
+ background-repeat: no-repeat;
+ outline: none;
+ padding: 0px 15px 1px 20px;
+}
+
+.contextMenu LI.hover A {
+ background-color: #2e5dea;
+ color: white;
+ cursor: default;
+}
+
+.contextMenu LI.disabled A {
+ color: #999;
+}
+
+.contextMenu LI.hover.disabled A {
+ background-color: transparent;
+}
+
+.contextMenu LI.separator {
+ border-top: solid 1px #E3E3E3;
+ padding-top: 5px;
+ margin-top: 5px;
+}
+
+/*
+ Adding Icons
+
+ You can add icons to the context menu by adding
+ classes to the respective LI element(s)
+*/
+/*
+
+.contextMenu LI.edit A { background-image: url(images/page_white_edit.png); }
+.contextMenu LI.cut A { background-image: url(images/cut.png); }
+.contextMenu LI.copy A { background-image: url(images/page_white_copy.png); }
+.contextMenu LI.paste A { background-image: url(images/page_white_paste.png); }
+.contextMenu LI.delete A { background-image: url(images/page_white_delete.png); }
+.contextMenu LI.quit A { background-image: url(images/door.png); }
+*/
diff --git a/files_svgedit/svg-edit/svg-editor.html b/files_svgedit/svg-edit/svg-editor.html
new file mode 100644
index 000000000..8dce445ae
--- /dev/null
+++ b/files_svgedit/svg-edit/svg-editor.html
@@ -0,0 +1,790 @@
+<!DOCTYPE html>
+<html>
+<!-- removed for now, causes problems in Firefox: manifest="svg-editor.manifest" -->
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
+<link rel="icon" type="image/png" href="images/logo.png"/>
+<link rel="stylesheet" href="jgraduate/css/jPicker.css" type="text/css"/>
+<link rel="stylesheet" href="jgraduate/css/jgraduate.css" type="text/css"/>
+<link rel="stylesheet" href="svg-editor.css" type="text/css"/>
+<link rel="stylesheet" href="spinbtn/JQuerySpinBtn.css" type="text/css"/>
+
+<!--{if jquery_release}>
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
+<!{else}-->
+ <script type="text/javascript" src="jquery.js"></script>
+<!--{endif}-->
+
+<script type="text/javascript" src="js-hotkeys/jquery.hotkeys.min.js"></script>
+<script type="text/javascript" src="jquerybbq/jquery.bbq.min.js"></script>
+<script type="text/javascript" src="svgicons/jquery.svgicons.js"></script>
+<script type="text/javascript" src="jgraduate/jquery.jgraduate.min.js"></script>
+<script type="text/javascript" src="spinbtn/JQuerySpinBtn.min.js"></script>
+
+<!--{if svg_edit_release}>
+ <script type="text/javascript" src="svgedit.compiled.js"></script>
+<!{else}-->
+ <script type="text/javascript" src="contextmenu/jquery.contextMenu.js"></script>
+ <script type="text/javascript" src="browser.js"></script>
+ <script type="text/javascript" src="svgtransformlist.js"></script>
+ <script type="text/javascript" src="math.js"></script>
+ <script type="text/javascript" src="units.js"></script>
+ <script type="text/javascript" src="svgutils.js"></script>
+ <script type="text/javascript" src="sanitize.js"></script>
+ <script type="text/javascript" src="history.js"></script>
+ <script type="text/javascript" src="select.js"></script>
+ <script type="text/javascript" src="draw.js"></script>
+ <script type="text/javascript" src="path.js"></script>
+ <script type="text/javascript" src="svgcanvas.js"></script>
+ <script type="text/javascript" src="svg-editor.js"></script>
+ <script type="text/javascript" src="locale/locale.js"></script>
+ <script type="text/javascript" src="contextmenu.js"></script>
+<!--{endif}-->
+
+<!-- you can load extensions here -->
+<!-- <script type="text/javascript" src="extensions/ext-helloworld.js"></script> -->
+
+<!-- always minified scripts -->
+<script type="text/javascript" src="jquery-ui/jquery-ui-1.8.17.custom.min.js"></script>
+<script type="text/javascript" src="jgraduate/jpicker.min.js"></script>
+
+<!-- feeds -->
+<link rel="alternate" type="application/atom+xml" title="SVG-edit General Discussion" href="http://groups.google.com/group/svg-edit/feed/atom_v1_0_msgs.xml" />
+<link rel="alternate" type="application/atom+xml" title="SVG-edit Updates (Issues/Fixes/Commits)" href="http://code.google.com/feeds/p/svg-edit/updates/basic" />
+
+<!-- Add script with custom handlers here -->
+<title>SVG-edit</title>
+</head>
+<body>
+<div id="svg_editor">
+
+<div id="rulers">
+ <div id="ruler_corner"></div>
+ <div id="ruler_x">
+ <div>
+ <canvas height="15"></canvas>
+ </div>
+ </div>
+ <div id="ruler_y">
+ <div>
+ <canvas width="15"></canvas>
+ </div>
+ </div>
+</div>
+
+<div id="workarea">
+<style id="styleoverrides" type="text/css" media="screen" scoped="scoped"></style>
+<div id="svgcanvas" style="position:relative">
+
+</div>
+</div>
+
+<div id="sidepanels">
+ <div id="layerpanel">
+ <h3 id="layersLabel">Layers</h3>
+ <fieldset id="layerbuttons">
+ <div id="layer_new" class="layer_button" title="New Layer"></div>
+ <div id="layer_delete" class="layer_button" title="Delete Layer"></div>
+ <div id="layer_rename" class="layer_button" title="Rename Layer"></div>
+ <div id="layer_up" class="layer_button" title="Move Layer Up"></div>
+ <div id="layer_down" class="layer_button" title="Move Layer Down"></div>
+ <div id="layer_moreopts" class="layer_button" title="More Options"></div>
+ </fieldset>
+
+ <table id="layerlist">
+ <tr class="layer">
+ <td class="layervis"></td>
+ <td class="layername">Layer 1</td>
+ </tr>
+ </table>
+ <span id="selLayerLabel">Move elements to:</span>
+ <select id="selLayerNames" title="Move selected elements to a different layer" disabled="disabled">
+ <option selected="selected" value="layer1">Layer 1</option>
+ </select>
+ </div>
+ <div id="sidepanel_handle" title="Drag left/right to resize side panel [X]">L a y e r s</div>
+</div>
+
+<div id="main_button">
+ <div id="main_icon" class="buttonup" title="Main Menu">
+ <span></span>
+ <div id="logo"></div>
+ <div class="dropdown"></div>
+ </div>
+
+ <div id="main_menu">
+
+ <!-- File-like buttons: New, Save, Source -->
+ <ul>
+ <li id="tool_clear">
+ <div></div>
+ New Image (N)
+ </li>
+
+ <li id="tool_open" style="display:none;">
+ <div id="fileinputs">
+ <div></div>
+ </div>
+ Open Image
+ </li>
+
+ <li id="tool_import" style="display:none;">
+ <div id="fileinputs_import">
+ <div></div>
+ </div>
+ Import SVG
+ </li>
+
+ <li id="tool_save">
+ <div></div>
+ Save Image (S)
+ </li>
+
+ <li id="tool_export">
+ <div></div>
+ Export as PNG
+ </li>
+
+ <li id="tool_docprops">
+ <div></div>
+ Document Properties (D)
+ </li>
+ </ul>
+
+ <p>
+ <a href="http://svg-edit.googlecode.com/" target="_blank">
+ SVG-edit Home Page
+ </a>
+ </p>
+
+ <button id="tool_prefs_option">
+ Editor Options
+ </button>
+
+
+ </div>
+</div>
+
+
+
+<div id="tools_top" class="tools_panel">
+
+ <div id="editor_panel">
+ <div class="push_button" id="tool_source" title="Edit Source [U]"></div>
+ <div class="tool_button" id="tool_wireframe" title="Wireframe Mode [F]"></div>
+ </div>
+
+ <!-- History buttons -->
+ <div id="history_panel">
+ <div class="tool_sep"></div>
+ <div class="push_button tool_button_disabled" id="tool_undo" title="Undo [Z]"></div>
+ <div class="push_button tool_button_disabled" id="tool_redo" title="Redo [Y]"></div>
+ </div>
+
+ <!-- Buttons when a single element is selected -->
+ <div id="selected_panel">
+ <div class="toolset">
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_clone" title="Duplicate Element [D]"></div>
+ <div class="push_button" id="tool_delete" title="Delete Element [Delete/Backspace]"></div>
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_move_top" title="Bring to Front [ Ctrl+Shift+] ]"></div>
+ <div class="push_button" id="tool_move_bottom" title="Send to Back [ Ctrl+Shift+[ ]"></div>
+ <div class="push_button" id="tool_topath" title="Convert to Path"></div>
+ <div class="push_button" id="tool_reorient" title="Reorient path"></div>
+ <div class="push_button" id="tool_make_link" title="Make (hyper)link"></div>
+ <div class="tool_sep"></div>
+ <label id="idLabel" title="Identify the element">
+ <span>id:</span>
+ <input id="elem_id" class="attr_changer" data-attr="id" size="10" type="text"/>
+ </label>
+ </div>
+
+ <label id="tool_angle" title="Change rotation angle" class="toolset">
+ <span id="angleLabel" class="icon_label"></span>
+ <input id="angle" size="2" value="0" type="text"/>
+ </label>
+
+ <div class="toolset" id="tool_blur" title="Change gaussian blur value">
+ <label>
+ <span id="blurLabel" class="icon_label"></span>
+ <input id="blur" size="2" value="0" type="text"/>
+ </label>
+ <div id="blur_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li class="special"><div id="blur_slider"></div></li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="dropdown toolset" id="tool_position" title="Align Element to Page">
+ <div id="cur_position" class="icon_label"></div>
+ <button></button>
+ </div>
+
+ <div id="xy_panel" class="toolset">
+ <label>
+ x: <input id="selected_x" class="attr_changer" title="Change X coordinate" size="3" data-attr="x"/>
+ </label>
+ <label>
+ y: <input id="selected_y" class="attr_changer" title="Change Y coordinate" size="3" data-attr="y"/>
+ </label>
+ </div>
+ </div>
+
+ <!-- Buttons when multiple elements are selected -->
+ <div id="multiselected_panel">
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_clone_multi" title="Clone Elements [C]"></div>
+ <div class="push_button" id="tool_delete_multi" title="Delete Selected Elements [Delete/Backspace]"></div>
+ <div class="tool_sep"></div>
+ <div class="push_button" id="tool_group" title="Group Elements [G]"></div>
+ <div class="push_button" id="tool_make_link_multi" title="Make (hyper)link"></div>
+ <div class="push_button" id="tool_alignleft" title="Align Left"></div>
+ <div class="push_button" id="tool_aligncenter" title="Align Center"></div>
+ <div class="push_button" id="tool_alignright" title="Align Right"></div>
+ <div class="push_button" id="tool_aligntop" title="Align Top"></div>
+ <div class="push_button" id="tool_alignmiddle" title="Align Middle"></div>
+ <div class="push_button" id="tool_alignbottom" title="Align Bottom"></div>
+ <label id="tool_align_relative">
+ <span id="relativeToLabel">relative to:</span>
+ <select id="align_relative_to" title="Align relative to ...">
+ <option id="selected_objects" value="selected">selected objects</option>
+ <option id="largest_object" value="largest">largest object</option>
+ <option id="smallest_object" value="smallest">smallest object</option>
+ <option id="page" value="page">page</option>
+ </select>
+ </label>
+ <div class="tool_sep"></div>
+
+ </div>
+
+ <div id="rect_panel">
+ <div class="toolset">
+ <label id="rect_width_tool" title="Change rectangle width">
+ <span id="rwidthLabel" class="icon_label"></span>
+ <input id="rect_width" class="attr_changer" size="3" data-attr="width"/>
+ </label>
+ <label id="rect_height_tool" title="Change rectangle height">
+ <span id="rheightLabel" class="icon_label"></span>
+ <input id="rect_height" class="attr_changer" size="3" data-attr="height"/>
+ </label>
+ </div>
+ <label id="cornerRadiusLabel" title="Change Rectangle Corner Radius" class="toolset">
+ <span class="icon_label"></span>
+ <input id="rect_rx" size="3" value="0" type="text" data-attr="Corner Radius"/>
+ </label>
+ </div>
+
+ <div id="image_panel">
+ <div class="toolset">
+ <label><span id="iwidthLabel" class="icon_label"></span>
+ <input id="image_width" class="attr_changer" title="Change image width" size="3" data-attr="width"/>
+ </label>
+ <label><span id="iheightLabel" class="icon_label"></span>
+ <input id="image_height" class="attr_changer" title="Change image height" size="3" data-attr="height"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_image_url">url:
+ <input id="image_url" type="text" title="Change URL" size="35"/>
+ </label>
+ <label id="tool_change_image">
+ <button id="change_image_url" style="display:none;">Change Image</button>
+ <span id="url_notice" title="NOTE: This image cannot be embedded. It will depend on this path to be displayed"></span>
+ </label>
+ </div>
+ </div>
+
+ <div id="circle_panel">
+ <div class="toolset">
+ <label id="tool_circle_cx">cx:
+ <input id="circle_cx" class="attr_changer" title="Change circle's cx coordinate" size="3" data-attr="cx"/>
+ </label>
+ <label id="tool_circle_cy">cy:
+ <input id="circle_cy" class="attr_changer" title="Change circle's cy coordinate" size="3" data-attr="cy"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_circle_r">r:
+ <input id="circle_r" class="attr_changer" title="Change circle's radius" size="3" data-attr="r"/>
+ </label>
+ </div>
+ </div>
+
+ <div id="ellipse_panel">
+ <div class="toolset">
+ <label id="tool_ellipse_cx">cx:
+ <input id="ellipse_cx" class="attr_changer" title="Change ellipse's cx coordinate" size="3" data-attr="cx"/>
+ </label>
+ <label id="tool_ellipse_cy">cy:
+ <input id="ellipse_cy" class="attr_changer" title="Change ellipse's cy coordinate" size="3" data-attr="cy"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_ellipse_rx">rx:
+ <input id="ellipse_rx" class="attr_changer" title="Change ellipse's x radius" size="3" data-attr="rx"/>
+ </label>
+ <label id="tool_ellipse_ry">ry:
+ <input id="ellipse_ry" class="attr_changer" title="Change ellipse's y radius" size="3" data-attr="ry"/>
+ </label>
+ </div>
+ </div>
+
+ <div id="line_panel">
+ <div class="toolset">
+ <label id="tool_line_x1">x1:
+ <input id="line_x1" class="attr_changer" title="Change line's starting x coordinate" size="3" data-attr="x1"/>
+ </label>
+ <label id="tool_line_y1">y1:
+ <input id="line_y1" class="attr_changer" title="Change line's starting y coordinate" size="3" data-attr="y1"/>
+ </label>
+ </div>
+ <div class="toolset">
+ <label id="tool_line_x2">x2:
+ <input id="line_x2" class="attr_changer" title="Change line's ending x coordinate" size="3" data-attr="x2"/>
+ </label>
+ <label id="tool_line_y2">y2:
+ <input id="line_y2" class="attr_changer" title="Change line's ending y coordinate" size="3" data-attr="y2"/>
+ </label>
+ </div>
+ </div>
+
+ <div id="text_panel">
+ <div class="toolset">
+ <div class="tool_button" id="tool_bold" title="Bold Text [B]"><span></span>B</div>
+ <div class="tool_button" id="tool_italic" title="Italic Text [I]"><span></span>i</div>
+ </div>
+
+ <div class="toolset" id="tool_font_family">
+ <label>
+ <!-- Font family -->
+ <input id="font_family" type="text" title="Change Font Family" size="12"/>
+ </label>
+ <div id="font_family_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li style="font-family:serif">Serif</li>
+ <li style="font-family:sans-serif">Sans-serif</li>
+ <li style="font-family:cursive">Cursive</li>
+ <li style="font-family:fantasy">Fantasy</li>
+ <li style="font-family:monospace">Monospace</li>
+ </ul>
+ </div>
+ </div>
+
+ <label id="tool_font_size" title="Change Font Size">
+ <span id="font_sizeLabel" class="icon_label"></span>
+ <input id="font_size" size="3" value="0" type="text"/>
+ </label>
+
+ <!-- Not visible, but still used -->
+ <input id="text" type="text" size="35"/>
+ </div>
+
+ <!-- formerly gsvg_panel -->
+ <div id="container_panel">
+ <div class="tool_sep"></div>
+
+ <!-- Add viewBox field here? -->
+
+ <label id="group_title" title="Group identification label">
+ <span>label:</span>
+ <input id="g_title" data-attr="title" size="10" type="text"/>
+ </label>
+ </div>
+
+ <div id="use_panel">
+ <div class="push_button" id="tool_unlink_use" title="Break link to reference element (make unique)"></div>
+ </div>
+
+ <div id="g_panel">
+ <div class="push_button" id="tool_ungroup" title="Ungroup Elements [G]"></div>
+ </div>
+
+ <!-- For anchor elements -->
+ <div id="a_panel">
+ <label id="tool_link_url" title="Set link URL (leave empty to remove)">
+ <span id="linkLabel" class="icon_label"></span>
+ <input id="link_url" type="text" size="35"/>
+ </label>
+ </div>
+
+ <div id="path_node_panel">
+ <div class="tool_sep"></div>
+ <div class="tool_button push_button_pressed" id="tool_node_link" title="Link Control Points"></div>
+ <div class="tool_sep"></div>
+ <label id="tool_node_x">x:
+ <input id="path_node_x" class="attr_changer" title="Change node's x coordinate" size="3" data-attr="x"/>
+ </label>
+ <label id="tool_node_y">y:
+ <input id="path_node_y" class="attr_changer" title="Change node's y coordinate" size="3" data-attr="y"/>
+ </label>
+
+ <select id="seg_type" title="Change Segment type">
+ <option id="straight_segments" selected="selected" value="4">Straight</option>
+ <option id="curve_segments" value="6">Curve</option>
+ </select>
+ <div class="tool_button" id="tool_node_clone" title="Clone Node"></div>
+ <div class="tool_button" id="tool_node_delete" title="Delete Node"></div>
+ <div class="tool_button" id="tool_openclose_path" title="Open/close sub-path"></div>
+ <div class="tool_button" id="tool_add_subpath" title="Add sub-path"></div>
+ </div>
+</div> <!-- tools_top -->
+ <div id="cur_context_panel">
+
+ </div>
+
+
+<div id="tools_left" class="tools_panel">
+ <div class="tool_button" id="tool_select" title="Select Tool"></div>
+ <div class="tool_button" id="tool_fhpath" title="Pencil Tool"></div>
+ <div class="tool_button" id="tool_line" title="Line Tool"></div>
+ <div class="tool_button flyout_current" id="tools_rect_show" title="Square/Rect Tool">
+ <div class="flyout_arrow_horiz"></div>
+ </div>
+ <div class="tool_button flyout_current" id="tools_ellipse_show" title="Ellipse/Circle Tool">
+ <div class="flyout_arrow_horiz"></div>
+ </div>
+ <div class="tool_button" id="tool_path" title="Path Tool"></div>
+ <div class="tool_button" id="tool_text" title="Text Tool"></div>
+ <div class="tool_button" id="tool_image" title="Image Tool"></div>
+ <div class="tool_button" id="tool_zoom" title="Zoom Tool [Ctrl+Up/Down]"></div>
+
+ <div style="display: none">
+ <div id="tool_rect" title="Rectangle"></div>
+ <div id="tool_square" title="Square"></div>
+ <div id="tool_fhrect" title="Free-Hand Rectangle"></div>
+ <div id="tool_ellipse" title="Ellipse"></div>
+ <div id="tool_circle" title="Circle"></div>
+ <div id="tool_fhellipse" title="Free-Hand Ellipse"></div>
+ </div>
+</div> <!-- tools_left -->
+
+<div id="tools_bottom" class="tools_panel">
+
+ <!-- Zoom buttons -->
+ <div id="zoom_panel" class="toolset" title="Change zoom level">
+ <label>
+ <span id="zoomLabel" class="zoom_tool icon_label"></span>
+ <input id="zoom" size="3" value="100" type="text" />
+ </label>
+ <div id="zoom_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li>1000%</li>
+ <li>400%</li>
+ <li>200%</li>
+ <li>100%</li>
+ <li>50%</li>
+ <li>25%</li>
+ <li id="fit_to_canvas" data-val="canvas">Fit to canvas</li>
+ <li id="fit_to_sel" data-val="selection">Fit to selection</li>
+ <li id="fit_to_layer_content" data-val="layer">Fit to layer content</li>
+ <li id="fit_to_all" data-val="content">Fit to all content</li>
+ <li>100%</li>
+ </ul>
+ </div>
+ <div class="tool_sep"></div>
+ </div>
+
+ <div id="tools_bottom_2">
+ <div id="color_tools">
+ <div class="color_tool" id="tool_fill">
+ <label class="icon_label" for="fill_color" title="Change fill color"></label>
+ <div class="color_block">
+ <div id="fill_bg"></div>
+ <div id="fill_color" class="color_block"></div>
+ </div>
+ </div>
+
+ <div class="color_tool" id="tool_stroke">
+ <div class="color_block">
+ <label class="icon_label" title="Change stroke color"></label>
+ </div>
+ <div class="color_block">
+ <div id="stroke_bg"></div>
+ <div id="stroke_color" class="color_block" title="Change stroke color"></div>
+ </div>
+
+ <label>
+ <input id="stroke_width" title="Change stroke width by 1, shift-click to change by 0.1" size="2" value="5" type="text" data-attr="Stroke Width"/>
+ </label>
+
+ <label class="stroke_tool">
+ <select id="stroke_style" title="Change stroke dash style">
+ <option selected="selected" value="none">&mdash;</option>
+ <option value="2,2">...</option>
+ <option value="5,5">- -</option>
+ <option value="5,2,2,2">- .</option>
+ <option value="5,2,2,2,2,2">- ..</option>
+ </select>
+ </label>
+
+ <div class="stroke_tool dropdown" id="stroke_linejoin">
+ <div>
+ <div id="cur_linejoin" title="Linejoin: Miter"></div>
+ <button></button>
+ </div>
+ </div>
+
+ <div class="stroke_tool dropdown" id="stroke_linecap">
+ <div>
+ <div id="cur_linecap" title="Linecap: Butt"></div>
+ <button></button>
+ </div>
+ </div>
+
+ <div id="toggle_stroke_tools" title="Show/hide more stroke tools">
+ &gt;&gt;
+ </div>
+
+ </div>
+ </div>
+
+ <div class="toolset" id="tool_opacity" title="Change selected item opacity">
+ <label>
+ <span id="group_opacityLabel" class="icon_label"></span>
+ <input id="group_opacity" size="3" value="100" type="text"/>
+ </label>
+ <div id="opacity_dropdown" class="dropdown">
+ <button></button>
+ <ul>
+ <li>0%</li>
+ <li>25%</li>
+ <li>50%</li>
+ <li>75%</li>
+ <li>100%</li>
+ <li class="special"><div id="opac_slider"></div></li>
+ </ul>
+ </div>
+ </div>
+
+ </div>
+
+ <div id="tools_bottom_3">
+ <div id="palette_holder"><div id="palette" title="Click to change fill color, shift-click to change stroke color"></div></div>
+ </div>
+ <div id="copyright"><span id="copyrightLabel">Powered by</span> <a href="http://svg-edit.googlecode.com/" target="_blank">SVG-edit v2.6-alpha</a></div>
+</div>
+
+<div id="option_lists" class="dropdown">
+ <ul id="linejoin_opts">
+ <li class="tool_button current" id="linejoin_miter" title="Linejoin: Miter"></li>
+ <li class="tool_button" id="linejoin_round" title="Linejoin: Round"></li>
+ <li class="tool_button" id="linejoin_bevel" title="Linejoin: Bevel"></li>
+ </ul>
+
+ <ul id="linecap_opts">
+ <li class="tool_button current" id="linecap_butt" title="Linecap: Butt"></li>
+ <li class="tool_button" id="linecap_square" title="Linecap: Square"></li>
+ <li class="tool_button" id="linecap_round" title="Linecap: Round"></li>
+ </ul>
+
+ <ul id="position_opts" class="optcols3">
+ <li class="push_button" id="tool_posleft" title="Align Left"></li>
+ <li class="push_button" id="tool_poscenter" title="Align Center"></li>
+ <li class="push_button" id="tool_posright" title="Align Right"></li>
+ <li class="push_button" id="tool_postop" title="Align Top"></li>
+ <li class="push_button" id="tool_posmiddle" title="Align Middle"></li>
+ <li class="push_button" id="tool_posbottom" title="Align Bottom"></li>
+ </ul>
+</div>
+
+
+<!-- hidden divs -->
+<div id="color_picker"></div>
+
+</div> <!-- svg_editor -->
+
+<div id="svg_source_editor">
+ <div id="svg_source_overlay"></div>
+ <div id="svg_source_container">
+ <div id="tool_source_back" class="toolbar_button">
+ <button id="tool_source_save">Apply Changes</button>
+ <button id="tool_source_cancel">Cancel</button>
+ </div>
+ <div id="save_output_btns">
+ <p id="copy_save_note">Copy the contents of this box into a text editor, then save the file with a .svg extension.</p>
+ <button id="copy_save_done">Done</button>
+ </div>
+ <form>
+ <textarea id="svg_source_textarea" spellcheck="false"></textarea>
+ </form>
+ </div>
+</div>
+
+
+<div id="svg_docprops">
+ <div id="svg_docprops_overlay"></div>
+ <div id="svg_docprops_container">
+ <div id="tool_docprops_back" class="toolbar_button">
+ <button id="tool_docprops_save">OK</button>
+ <button id="tool_docprops_cancel">Cancel</button>
+ </div>
+
+
+ <fieldset id="svg_docprops_docprops">
+ <legend id="svginfo_image_props">Image Properties</legend>
+ <label>
+ <span id="svginfo_title">Title:</span>
+ <input type="text" id="canvas_title"/>
+ </label>
+
+ <fieldset id="change_resolution">
+ <legend id="svginfo_dim">Canvas Dimensions</legend>
+
+ <label><span id="svginfo_width">width:</span> <input type="text" id="canvas_width" size="6"/></label>
+
+ <label><span id="svginfo_height">height:</span> <input type="text" id="canvas_height" size="6"/></label>
+
+ <label>
+ <select id="resolution">
+ <option id="selectedPredefined" selected="selected">Select predefined:</option>
+ <option>640x480</option>
+ <option>800x600</option>
+ <option>1024x768</option>
+ <option>1280x960</option>
+ <option>1600x1200</option>
+ <option id="fitToContent" value="content">Fit to Content</option>
+ </select>
+ </label>
+ </fieldset>
+
+ <fieldset id="image_save_opts">
+ <legend id="includedImages">Included Images</legend>
+ <label><input type="radio" name="image_opt" value="embed" checked="checked"/> <span id="image_opt_embed">Embed data (local files)</span> </label>
+ <label><input type="radio" name="image_opt" value="ref"/> <span id="image_opt_ref">Use file reference</span> </label>
+ </fieldset>
+ </fieldset>
+
+ </div>
+</div>
+
+<div id="svg_prefs">
+ <div id="svg_prefs_overlay"></div>
+ <div id="svg_prefs_container">
+ <div id="tool_prefs_back" class="toolbar_button">
+ <button id="tool_prefs_save">OK</button>
+ <button id="tool_prefs_cancel">Cancel</button>
+ </div>
+
+ <fieldset>
+ <legend id="svginfo_editor_prefs">Editor Preferences</legend>
+
+ <label><span id="svginfo_lang">Language:</span>
+ <!-- Source: http://en.wikipedia.org/wiki/Language_names -->
+ <select id="lang_select">
+ <option id="lang_ar" value="ar">العربية</option>
+ <option id="lang_cs" value="cs">Čeština</option>
+ <option id="lang_de" value="de">Deutsch</option>
+ <option id="lang_en" value="en" selected="selected">English</option>
+ <option id="lang_es" value="es">Español</option>
+ <option id="lang_fa" value="fa">فارسی</option>
+ <option id="lang_fr" value="fr">Français</option>
+ <option id="lang_fy" value="fy">Frysk</option>
+ <option id="lang_hi" value="hi">&#2361;&#2367;&#2344;&#2381;&#2342;&#2368;, &#2361;&#2367;&#2306;&#2342;&#2368;</option>
+ <option id="lang_it" value="it">Italiano</option>
+ <option id="lang_ja" value="ja">日本語</option>
+ <option id="lang_nl" value="nl">Nederlands</option>
+ <option id="lang_pt-BR" value="pt-BR">Português (BR)</option>
+ <option id="lang_ro" value="ro">Româneşte</option>
+ <option id="lang_ru" value="ru">Русский</option>
+ <option id="lang_sk" value="sk">Slovenčina</option>
+ <option id="lang_zh-TW" value="zh-TW">繁體中文</option>
+ </select>
+ </label>
+
+ <label><span id="svginfo_icons">Icon size:</span>
+ <select id="iconsize">
+ <option id="icon_small" value="s">Small</option>
+ <option id="icon_medium" value="m" selected="selected">Medium</option>
+ <option id="icon_large" value="l">Large</option>
+ <option id="icon_xlarge" value="xl">Extra Large</option>
+ </select>
+ </label>
+
+ <fieldset id="change_background">
+ <legend id="svginfo_change_background">Editor Background</legend>
+ <div id="bg_blocks"></div>
+ <label><span id="svginfo_bg_url">URL:</span> <input type="text" id="canvas_bg_url"/></label>
+ <p id="svginfo_bg_note">Note: Background will not be saved with image.</p>
+ </fieldset>
+
+ <fieldset id="change_grid">
+ <legend id="svginfo_grid_settings">Grid</legend>
+ <label><span id="svginfo_snap_onoff">Snapping on/off</span><input type="checkbox" value="snapping_on" id="grid_snapping_on"></label>
+ <label><span id="svginfo_snap_step">Snapping Step-Size:</span> <input type="text" id="grid_snapping_step" size="3" value="10"/></label>
+ </fieldset>
+
+ <fieldset id="units_rulers">
+ <legend id="svginfo_units_rulers">Units & Rulers</legend>
+ <label><span id="svginfo_rulers_onoff">Show rulers</span><input type="checkbox" value="show_rulers" id="show_rulers" checked></label>
+ <label>
+ <span id="svginfo_unit">Base Unit:</span>
+ <select id="base_unit">
+ <option value="px">Pixels</option>
+ <option value="cm">Centimeters</option>
+ <option value="mm">Millimeters</option>
+ <option value="in">Inches</option>
+ <option value="pt">Points</option>
+ <option value="pc">Picas</option>
+ <option value="em">Ems</option>
+ <option value="ex">Exs</option>
+ </select>
+ </label>
+ <!-- Should this be an export option instead? -->
+<!--
+ <span id="svginfo_unit_system">Unit System:</span>
+ <label>
+ <input type="radio" name="unit_system" value="single" checked="checked"/>
+ <span id="svginfo_single_type_unit">Single type unit</span>
+ <small id="svginfo_single_type_unit_sub">CSS unit type is set on root element. If a different unit type is entered in a text field, it is converted back to user units on export.</small>
+ </label>
+ <label>
+ <input type="radio" name="unit_system" value="multi"/>
+ <span id="svginfo_multi_units">Multiple CSS units</span>
+ <small id="svginfo_single_type_unit_sub">Attributes can be given different CSS units, which may lead to inconsistant results among viewers.</small>
+ </label>
+ -->
+ </fieldset>
+
+ </fieldset>
+
+ </div>
+</div>
+
+<div id="dialog_box">
+ <div id="dialog_box_overlay"></div>
+ <div id="dialog_container">
+ <div id="dialog_content"></div>
+ <div id="dialog_buttons"></div>
+ </div>
+</div>
+
+<ul id="cmenu_canvas" class="contextMenu">
+ <li><a href="#cut">Cut</a></li>
+ <li><a href="#copy">Copy</a></li>
+ <li><a href="#paste">Paste</a></li>
+ <li><a href="#paste_in_place">Paste in Place</a></li>
+ <li class="separator"><a href="#delete">Delete</a></li>
+ <li class="separator"><a href="#group">Group<span class="shortcut">G</span></a></li>
+ <li><a href="#ungroup">Ungroup<span class="shortcut">G</span></a></li>
+ <li class="separator"><a href="#move_front">Bring to Front<span class="shortcut">SHFT+CTRL+]</span></a></li>
+ <li><a href="#move_up">Bring Forward<span class="shortcut">CTRL+]</span></a></li>
+ <li><a href="#move_down">Send Backward<span class="shortcut">CTRL+[</span></a></li>
+ <li><a href="#move_back">Send to Back<span class="shortcut">SHFT+CTRL+[</span></a></li>
+</ul>
+
+
+<ul id="cmenu_layers" class="contextMenu">
+ <li><a href="#dupe">Duplicate Layer...</a></li>
+ <li><a href="#delete">Delete Layer</a></li>
+ <li><a href="#merge_down">Merge Down</a></li>
+ <li><a href="#merge_all">Merge All</a></li>
+</ul>
+
+</body>
+</html>
diff --git a/files_svgedit/svg-edit/svg-editor.js b/files_svgedit/svg-edit/svg-editor.js
new file mode 100644
index 000000000..f9bf2540d
--- /dev/null
+++ b/files_svgedit/svg-edit/svg-editor.js
@@ -0,0 +1,4881 @@
+/*
+ * svg-editor.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Pavol Rusnak
+ * Copyright(c) 2010 Jeff Schiller
+ * Copyright(c) 2010 Narendra Sisodiya
+ *
+ */
+
+// Dependencies:
+// 1) units.js
+// 2) browser.js
+// 3) svgcanvas.js
+
+(function() {
+
+ if(!window.svgEditor) window.svgEditor = function($) {
+ var svgCanvas;
+ var Editor = {};
+ var is_ready = false;
+
+ var defaultPrefs = {
+ lang:'en',
+ iconsize:'m',
+ bkgd_color:'#FFF',
+ bkgd_url:'',
+ img_save:'embed'
+ },
+ curPrefs = {},
+
+ // Note: Difference between Prefs and Config is that Prefs can be
+ // changed in the UI and are stored in the browser, config can not
+
+ curConfig = {
+ canvas_expansion: 3,
+ dimensions: [640,480],
+ initFill: {
+ color: 'FF0000', // solid red
+ opacity: 1
+ },
+ initStroke: {
+ width: 5,
+ color: '000000', // solid black
+ opacity: 1
+ },
+ initOpacity: 1,
+ imgPath: 'images/',
+ langPath: 'locale/',
+ extPath: 'extensions/',
+ jGraduatePath: 'jgraduate/images/',
+ extensions: ['ext-markers.js','ext-connector.js', 'ext-eyedropper.js', 'ext-shapes.js', 'ext-imagelib.js','ext-grid.js'],
+ initTool: 'select',
+ wireframe: false,
+ colorPickerCSS: null,
+ gridSnapping: false,
+ gridColor: "#000",
+ baseUnit: 'px',
+ snappingStep: 10,
+ showRulers: true
+ },
+ uiStrings = Editor.uiStrings = {
+ common: {
+ "ok":"OK",
+ "cancel":"Cancel",
+ "key_up":"Up",
+ "key_down":"Down",
+ "key_backspace":"Backspace",
+ "key_del":"Del"
+
+ },
+ // This is needed if the locale is English, since the locale strings are not read in that instance.
+ layers: {
+ "layer":"Layer"
+ },
+ notification: {
+ "invalidAttrValGiven":"Invalid value given",
+ "noContentToFitTo":"No content to fit to",
+ "dupeLayerName":"There is already a layer named that!",
+ "enterUniqueLayerName":"Please enter a unique layer name",
+ "enterNewLayerName":"Please enter the new layer name",
+ "layerHasThatName":"Layer already has that name",
+ "QmoveElemsToLayer":"Move selected elements to layer \"%s\"?",
+ "QwantToClear":"Do you want to clear the drawing?\nThis will also erase your undo history!",
+ "QwantToOpen":"Do you want to open a new file?\nThis will also erase your undo history!",
+ "QerrorsRevertToSource":"There were parsing errors in your SVG source.\nRevert back to original SVG source?",
+ "QignoreSourceChanges":"Ignore changes made to SVG source?",
+ "featNotSupported":"Feature not supported",
+ "enterNewImgURL":"Enter the new image URL",
+ "defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
+ "loadingImage":"Loading image, please wait...",
+ "saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file.",
+ "noteTheseIssues": "Also note the following issues: ",
+ "unsavedChanges": "There are unsaved changes.",
+ "enterNewLinkURL": "Enter the new hyperlink URL",
+ "errorLoadingSVG": "Error: Unable to load SVG data",
+ "URLloadFail": "Unable to load from URL",
+ "retrieving": 'Retrieving "%s" ...'
+ }
+ };
+
+ var curPrefs = {}; //$.extend({}, defaultPrefs);
+
+ var customHandlers = {};
+
+ Editor.curConfig = curConfig;
+
+ Editor.tool_scale = 1;
+
+ // Store and retrieve preferences
+ $.pref = function(key, val) {
+ if(val) curPrefs[key] = val;
+ key = 'svg-edit-'+key;
+ var host = location.hostname,
+ onweb = host && host.indexOf('.') >= 0,
+ store = (val != undefined),
+ storage = false;
+ // Some FF versions throw security errors here
+ try {
+ if(window.localStorage) { // && onweb removed so Webkit works locally
+ storage = localStorage;
+ }
+ } catch(e) {}
+ try {
+ if(window.globalStorage && onweb) {
+ storage = globalStorage[host];
+ }
+ } catch(e) {}
+
+ if(storage) {
+ if(store) storage.setItem(key, val);
+ else if (storage.getItem(key)) return storage.getItem(key) + ''; // Convert to string for FF (.value fails in Webkit)
+ } else if(window.widget) {
+ if(store) widget.setPreferenceForKey(val, key);
+ else return widget.preferenceForKey(key);
+ } else {
+ if(store) {
+ var d = new Date();
+ d.setTime(d.getTime() + 31536000000);
+ val = encodeURIComponent(val);
+ document.cookie = key+'='+val+'; expires='+d.toUTCString();
+ } else {
+ var result = document.cookie.match(new RegExp(key + "=([^;]+)"));
+ return result?decodeURIComponent(result[1]):'';
+ }
+ }
+ }
+
+ Editor.setConfig = function(opts) {
+ $.each(opts, function(key, val) {
+ // Only allow prefs defined in defaultPrefs
+ if(key in defaultPrefs) {
+ $.pref(key, val);
+ }
+ });
+ $.extend(true, curConfig, opts);
+ if(opts.extensions) {
+ curConfig.extensions = opts.extensions;
+ }
+
+ }
+
+ // Extension mechanisms must call setCustomHandlers with two functions: opts.open and opts.save
+ // opts.open's responsibilities are:
+ // - invoke a file chooser dialog in 'open' mode
+ // - let user pick a SVG file
+ // - calls setCanvas.setSvgString() with the string contents of that file
+ // opts.save's responsibilities are:
+ // - accept the string contents of the current document
+ // - invoke a file chooser dialog in 'save' mode
+ // - save the file to location chosen by the user
+ Editor.setCustomHandlers = function(opts) {
+ Editor.ready(function() {
+ if(opts.open) {
+ $('#tool_open > input[type="file"]').remove();
+ $('#tool_open').show();
+ svgCanvas.open = opts.open;
+ }
+ if(opts.save) {
+ Editor.show_save_warning = false;
+ svgCanvas.bind("saved", opts.save);
+ }
+ if(opts.pngsave) {
+ svgCanvas.bind("exported", opts.pngsave);
+ }
+ customHandlers = opts;
+ });
+ }
+
+ Editor.randomizeIds = function() {
+ svgCanvas.randomizeIds(arguments)
+ }
+
+ Editor.init = function() {
+ // For external openers
+ (function() {
+ // let the opener know SVG Edit is ready
+ var w = window.opener;
+ if (w) {
+ try {
+ var svgEditorReadyEvent = w.document.createEvent("Event");
+ svgEditorReadyEvent.initEvent("svgEditorReady", true, true);
+ w.document.documentElement.dispatchEvent(svgEditorReadyEvent);
+ }
+ catch(e) {}
+ }
+ })();
+
+ (function() {
+ // Load config/data from URL if given
+ var urldata = $.deparam.querystring(true);
+ if(!$.isEmptyObject(urldata)) {
+ if(urldata.dimensions) {
+ urldata.dimensions = urldata.dimensions.split(',');
+ }
+
+ if(urldata.extensions) {
+ urldata.extensions = urldata.extensions.split(',');
+ }
+
+ if(urldata.bkgd_color) {
+ urldata.bkgd_color = '#' + urldata.bkgd_color;
+ }
+
+ svgEditor.setConfig(urldata);
+
+ var src = urldata.source;
+ var qstr = $.param.querystring();
+
+ if(!src) { // urldata.source may have been null if it ended with '='
+ if(qstr.indexOf('source=data:') >= 0) {
+ src = qstr.match(/source=(data:[^&]*)/)[1];
+ }
+ }
+
+ if(src) {
+ if(src.indexOf("data:") === 0) {
+ // plusses get replaced by spaces, so re-insert
+ src = src.replace(/ /g, "+");
+ Editor.loadFromDataURI(src);
+ } else {
+ Editor.loadFromString(src);
+ }
+ } else if(qstr.indexOf('paramurl=') !== -1) {
+ // Get paramater URL (use full length of remaining location.href)
+ svgEditor.loadFromURL(qstr.substr(9));
+ } else if(urldata.url) {
+ svgEditor.loadFromURL(urldata.url);
+ }
+ }
+ })();
+
+ var extFunc = function() {
+ $.each(curConfig.extensions, function() {
+ var extname = this;
+ $.getScript(curConfig.extPath + extname, function(d) {
+ // Fails locally in Chrome 5
+ if(!d) {
+ var s = document.createElement('script');
+ s.src = curConfig.extPath + extname;
+ document.querySelector('head').appendChild(s);
+ }
+ });
+ });
+
+ var good_langs = [];
+
+ $('#lang_select option').each(function() {
+ good_langs.push(this.value);
+ });
+
+ // var lang = ('lang' in curPrefs) ? curPrefs.lang : null;
+ Editor.putLocale(null, good_langs);
+ }
+
+ // Load extensions
+ // Bit of a hack to run extensions in local Opera/IE9
+ if(document.location.protocol === 'file:') {
+ setTimeout(extFunc, 100);
+ } else {
+ extFunc();
+ }
+ $.svgIcons(curConfig.imgPath + 'svg_edit_icons.svg', {
+ w:24, h:24,
+ id_match: false,
+ no_img: !svgedit.browser.isWebkit(), // Opera & Firefox 4 gives odd behavior w/images
+ fallback_path: curConfig.imgPath,
+ fallback:{
+ 'new_image':'clear.png',
+ 'save':'save.png',
+ 'open':'open.png',
+ 'source':'source.png',
+ 'docprops':'document-properties.png',
+ 'wireframe':'wireframe.png',
+
+ 'undo':'undo.png',
+ 'redo':'redo.png',
+
+ 'select':'select.png',
+ 'select_node':'select_node.png',
+ 'pencil':'fhpath.png',
+ 'pen':'line.png',
+ 'square':'square.png',
+ 'rect':'rect.png',
+ 'fh_rect':'freehand-square.png',
+ 'circle':'circle.png',
+ 'ellipse':'ellipse.png',
+ 'fh_ellipse':'freehand-circle.png',
+ 'path':'path.png',
+ 'text':'text.png',
+ 'image':'image.png',
+ 'zoom':'zoom.png',
+
+ 'clone':'clone.png',
+ 'node_clone':'node_clone.png',
+ 'delete':'delete.png',
+ 'node_delete':'node_delete.png',
+ 'group':'shape_group.png',
+ 'ungroup':'shape_ungroup.png',
+ 'move_top':'move_top.png',
+ 'move_bottom':'move_bottom.png',
+ 'to_path':'to_path.png',
+ 'link_controls':'link_controls.png',
+ 'reorient':'reorient.png',
+
+ 'align_left':'align-left.png',
+ 'align_center':'align-center',
+ 'align_right':'align-right',
+ 'align_top':'align-top',
+ 'align_middle':'align-middle',
+ 'align_bottom':'align-bottom',
+
+ 'go_up':'go-up.png',
+ 'go_down':'go-down.png',
+
+ 'ok':'save.png',
+ 'cancel':'cancel.png',
+
+ 'arrow_right':'flyouth.png',
+ 'arrow_down':'dropdown.gif'
+ },
+ placement: {
+ '#logo':'logo',
+
+ '#tool_clear div,#layer_new':'new_image',
+ '#tool_save div':'save',
+ '#tool_export div':'export',
+ '#tool_open div div':'open',
+ '#tool_import div div':'import',
+ '#tool_source':'source',
+ '#tool_docprops > div':'docprops',
+ '#tool_wireframe':'wireframe',
+
+ '#tool_undo':'undo',
+ '#tool_redo':'redo',
+
+ '#tool_select':'select',
+ '#tool_fhpath':'pencil',
+ '#tool_line':'pen',
+ '#tool_rect,#tools_rect_show':'rect',
+ '#tool_square':'square',
+ '#tool_fhrect':'fh_rect',
+ '#tool_ellipse,#tools_ellipse_show':'ellipse',
+ '#tool_circle':'circle',
+ '#tool_fhellipse':'fh_ellipse',
+ '#tool_path':'path',
+ '#tool_text,#layer_rename':'text',
+ '#tool_image':'image',
+ '#tool_zoom':'zoom',
+
+ '#tool_clone,#tool_clone_multi':'clone',
+ '#tool_node_clone':'node_clone',
+ '#layer_delete,#tool_delete,#tool_delete_multi':'delete',
+ '#tool_node_delete':'node_delete',
+ '#tool_add_subpath':'add_subpath',
+ '#tool_openclose_path':'open_path',
+ '#tool_move_top':'move_top',
+ '#tool_move_bottom':'move_bottom',
+ '#tool_topath':'to_path',
+ '#tool_node_link':'link_controls',
+ '#tool_reorient':'reorient',
+ '#tool_group':'group',
+ '#tool_ungroup':'ungroup',
+ '#tool_unlink_use':'unlink_use',
+
+ '#tool_alignleft, #tool_posleft':'align_left',
+ '#tool_aligncenter, #tool_poscenter':'align_center',
+ '#tool_alignright, #tool_posright':'align_right',
+ '#tool_aligntop, #tool_postop':'align_top',
+ '#tool_alignmiddle, #tool_posmiddle':'align_middle',
+ '#tool_alignbottom, #tool_posbottom':'align_bottom',
+ '#cur_position':'align',
+
+ '#linecap_butt,#cur_linecap':'linecap_butt',
+ '#linecap_round':'linecap_round',
+ '#linecap_square':'linecap_square',
+
+ '#linejoin_miter,#cur_linejoin':'linejoin_miter',
+ '#linejoin_round':'linejoin_round',
+ '#linejoin_bevel':'linejoin_bevel',
+
+ '#url_notice':'warning',
+
+ '#layer_up':'go_up',
+ '#layer_down':'go_down',
+ '#layer_moreopts':'context_menu',
+ '#layerlist td.layervis':'eye',
+
+ '#tool_source_save,#tool_docprops_save,#tool_prefs_save':'ok',
+ '#tool_source_cancel,#tool_docprops_cancel,#tool_prefs_cancel':'cancel',
+
+ '#rwidthLabel, #iwidthLabel':'width',
+ '#rheightLabel, #iheightLabel':'height',
+ '#cornerRadiusLabel span':'c_radius',
+ '#angleLabel':'angle',
+ '#linkLabel,#tool_make_link,#tool_make_link_multi':'globe_link',
+ '#zoomLabel':'zoom',
+ '#tool_fill label': 'fill',
+ '#tool_stroke .icon_label': 'stroke',
+ '#group_opacityLabel': 'opacity',
+ '#blurLabel': 'blur',
+ '#font_sizeLabel': 'fontsize',
+
+ '.flyout_arrow_horiz':'arrow_right',
+ '.dropdown button, #main_button .dropdown':'arrow_down',
+ '#palette .palette_item:first, #fill_bg, #stroke_bg':'no_color'
+ },
+ resize: {
+ '#logo .svg_icon': 32,
+ '.flyout_arrow_horiz .svg_icon': 5,
+ '.layer_button .svg_icon, #layerlist td.layervis .svg_icon': 14,
+ '.dropdown button .svg_icon': 7,
+ '#main_button .dropdown .svg_icon': 9,
+ '.palette_item:first .svg_icon, #fill_bg .svg_icon, #stroke_bg .svg_icon': 16,
+ '.toolbar_button button .svg_icon':16,
+ '.stroke_tool div div .svg_icon': 20,
+ '#tools_bottom label .svg_icon': 18
+ },
+ callback: function(icons) {
+ $('.toolbar_button button > svg, .toolbar_button button > img').each(function() {
+ $(this).parent().prepend(this);
+ });
+
+ var tleft = $('#tools_left');
+ if (tleft.length != 0) {
+ var min_height = tleft.offset().top + tleft.outerHeight();
+ }
+// var size = $.pref('iconsize');
+// if(size && size != 'm') {
+// svgEditor.setIconSize(size);
+// } else if($(window).height() < min_height) {
+// // Make smaller
+// svgEditor.setIconSize('s');
+// }
+
+ // Look for any missing flyout icons from plugins
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ var sel = shower.attr('data-curopt');
+ // Check if there's an icon here
+ if(!shower.children('svg, img').length) {
+ var clone = $(sel).children().clone();
+ if(clone.length) {
+ clone[0].removeAttribute('style'); //Needed for Opera
+ shower.append(clone);
+ }
+ }
+ });
+
+ svgEditor.runCallbacks();
+
+ setTimeout(function() {
+ $('.flyout_arrow_horiz:empty').each(function() {
+ $(this).append($.getSvgIcon('arrow_right').width(5).height(5));
+ });
+ }, 1);
+ }
+ });
+
+ Editor.canvas = svgCanvas = new $.SvgCanvas(document.getElementById("svgcanvas"), curConfig);
+ Editor.show_save_warning = false;
+ var palette = ["#000000", "#3f3f3f", "#7f7f7f", "#bfbfbf", "#ffffff",
+ "#ff0000", "#ff7f00", "#ffff00", "#7fff00",
+ "#00ff00", "#00ff7f", "#00ffff", "#007fff",
+ "#0000ff", "#7f00ff", "#ff00ff", "#ff007f",
+ "#7f0000", "#7f3f00", "#7f7f00", "#3f7f00",
+ "#007f00", "#007f3f", "#007f7f", "#003f7f",
+ "#00007f", "#3f007f", "#7f007f", "#7f003f",
+ "#ffaaaa", "#ffd4aa", "#ffffaa", "#d4ffaa",
+ "#aaffaa", "#aaffd4", "#aaffff", "#aad4ff",
+ "#aaaaff", "#d4aaff", "#ffaaff", "#ffaad4"
+ ],
+ isMac = (navigator.platform.indexOf("Mac") >= 0),
+ isWebkit = (navigator.userAgent.indexOf("AppleWebKit") >= 0),
+ modKey = (isMac ? "meta+" : "ctrl+"), // ⌘
+ path = svgCanvas.pathActions,
+ undoMgr = svgCanvas.undoMgr,
+ Utils = svgedit.utilities,
+ default_img_url = curConfig.imgPath + "logo.png",
+ workarea = $("#workarea"),
+ canv_menu = $("#cmenu_canvas"),
+ layer_menu = $("#cmenu_layers"),
+ exportWindow = null,
+ tool_scale = 1,
+ zoomInIcon = 'crosshair',
+ zoomOutIcon = 'crosshair',
+ ui_context = 'toolbars',
+ orig_source = '',
+ paintBox = {fill: null, stroke:null};
+
+ // This sets up alternative dialog boxes. They mostly work the same way as
+ // their UI counterparts, expect instead of returning the result, a callback
+ // needs to be included that returns the result as its first parameter.
+ // In the future we may want to add additional types of dialog boxes, since
+ // they should be easy to handle this way.
+ (function() {
+ $('#dialog_container').draggable({cancel:'#dialog_content, #dialog_buttons *', containment: 'window'});
+ var box = $('#dialog_box'), btn_holder = $('#dialog_buttons');
+
+ var dbox = function(type, msg, callback, defText) {
+ $('#dialog_content').html('<p>'+msg.replace(/\n/g,'</p><p>')+'</p>')
+ .toggleClass('prompt',(type=='prompt'));
+ btn_holder.empty();
+
+ var ok = $('<input type="button" value="' + uiStrings.common.ok + '">').appendTo(btn_holder);
+
+ if(type != 'alert') {
+ $('<input type="button" value="' + uiStrings.common.cancel + '">')
+ .appendTo(btn_holder)
+ .click(function() { box.hide();callback(false)});
+ }
+
+ if(type == 'prompt') {
+ var input = $('<input type="text">').prependTo(btn_holder);
+ input.val(defText || '');
+ input.bind('keydown', 'return', function() {ok.click();});
+ }
+
+ if(type == 'process') {
+ ok.hide();
+ }
+
+ box.show();
+
+ ok.click(function() {
+ box.hide();
+ var resp = (type == 'prompt')?input.val():true;
+ if(callback) callback(resp);
+ }).focus();
+
+ if(type == 'prompt') input.focus();
+ }
+
+ $.alert = function(msg, cb) { dbox('alert', msg, cb);};
+ $.confirm = function(msg, cb) { dbox('confirm', msg, cb);};
+ $.process_cancel = function(msg, cb) { dbox('process', msg, cb);};
+ $.prompt = function(msg, txt, cb) { dbox('prompt', msg, cb, txt);};
+ }());
+
+ var setSelectMode = function() {
+ var curr = $('.tool_button_current');
+ if(curr.length && curr[0].id !== 'tool_select') {
+ curr.removeClass('tool_button_current').addClass('tool_button');
+ $('#tool_select').addClass('tool_button_current').removeClass('tool_button');
+ $('#styleoverrides').text('#svgcanvas svg *{cursor:move;pointer-events:all} #svgcanvas svg{cursor:default}');
+ }
+ svgCanvas.setMode('select');
+ workarea.css('cursor','auto');
+ };
+
+ var togglePathEditMode = function(editmode, elems) {
+ $('#path_node_panel').toggle(editmode);
+ $('#tools_bottom_2,#tools_bottom_3').toggle(!editmode);
+ if(editmode) {
+ // Change select icon
+ $('.tool_button_current').removeClass('tool_button_current').addClass('tool_button');
+ $('#tool_select').addClass('tool_button_current').removeClass('tool_button');
+ setIcon('#tool_select', 'select_node');
+ multiselected = false;
+ if(elems.length) {
+ selectedElement = elems[0];
+ }
+ } else {
+ setIcon('#tool_select', 'select');
+ }
+ }
+
+ // used to make the flyouts stay on the screen longer the very first time
+ var flyoutspeed = 1250;
+ var textBeingEntered = false;
+ var selectedElement = null;
+ var multiselected = false;
+ var editingsource = false;
+ var docprops = false;
+ var preferences = false;
+ var cur_context = '';
+ var orig_title = $('title:first').text();
+
+ var saveHandler = function(window,svg) {
+ Editor.show_save_warning = false;
+
+ // by default, we add the XML prolog back, systems integrating SVG-edit (wikis, CMSs)
+ // can just provide their own custom save handler and might not want the XML prolog
+ svg = '<?xml version="1.0"?>\n' + svg;
+
+ // Opens the SVG in new window, with warning about Mozilla bug #308590 when applicable
+
+ var ua = navigator.userAgent;
+
+ // Chrome 5 (and 6?) don't allow saving, show source instead ( http://code.google.com/p/chromium/issues/detail?id=46735 )
+ // IE9 doesn't allow standalone Data URLs ( https://connect.microsoft.com/IE/feedback/details/542600/data-uri-images-fail-when-loaded-by-themselves )
+ if((~ua.indexOf('Chrome') && $.browser.version >= 533) || ~ua.indexOf('MSIE')) {
+ showSourceEditor(0,true);
+ return;
+ }
+ var win = window.open("data:image/svg+xml;base64," + Utils.encode64(svg));
+
+ // Alert will only appear the first time saved OR the first time the bug is encountered
+ var done = $.pref('save_notice_done');
+ if(done !== "all") {
+
+ var note = uiStrings.notification.saveFromBrowser.replace('%s', 'SVG');
+
+ // Check if FF and has <defs/>
+ if(ua.indexOf('Gecko/') !== -1) {
+ if(svg.indexOf('<defs') !== -1) {
+ note += "\n\n" + uiStrings.notification.defsFailOnSave;
+ $.pref('save_notice_done', 'all');
+ done = "all";
+ } else {
+ $.pref('save_notice_done', 'part');
+ }
+ } else {
+ $.pref('save_notice_done', 'all');
+ }
+
+ if(done !== 'part') {
+ win.alert(note);
+ }
+ }
+ };
+
+ var exportHandler = function(window, data) {
+ var issues = data.issues;
+
+ if(!$('#export_canvas').length) {
+ $('<canvas>', {id: 'export_canvas'}).hide().appendTo('body');
+ }
+ var c = $('#export_canvas')[0];
+
+ c.width = svgCanvas.contentW;
+ c.height = svgCanvas.contentH;
+ canvg(c, data.svg, {renderCallback: function() {
+ var datauri = c.toDataURL('image/png');
+ exportWindow.location.href = datauri;
+ var done = $.pref('export_notice_done');
+ if(done !== "all") {
+ var note = uiStrings.notification.saveFromBrowser.replace('%s', 'PNG');
+
+ // Check if there's issues
+ if(issues.length) {
+ var pre = "\n \u2022 ";
+ note += ("\n\n" + uiStrings.notification.noteTheseIssues + pre + issues.join(pre));
+ }
+
+ // Note that this will also prevent the notice even though new issues may appear later.
+ // May want to find a way to deal with that without annoying the user
+ $.pref('export_notice_done', 'all');
+ exportWindow.alert(note);
+ }
+ }});
+ };
+
+ // called when we've selected a different element
+ var selectedChanged = function(window,elems) {
+ var mode = svgCanvas.getMode();
+ if(mode === "select") setSelectMode();
+ var is_node = (mode == "pathedit");
+ // if elems[1] is present, then we have more than one element
+ selectedElement = (elems.length == 1 || elems[1] == null ? elems[0] : null);
+ multiselected = (elems.length >= 2 && elems[1] != null);
+ if (selectedElement != null) {
+ // unless we're already in always set the mode of the editor to select because
+ // upon creation of a text element the editor is switched into
+ // select mode and this event fires - we need our UI to be in sync
+
+ if (!is_node) {
+ updateToolbar();
+ }
+
+ } // if (elem != null)
+
+ // Deal with pathedit mode
+ togglePathEditMode(is_node, elems);
+ updateContextPanel();
+ svgCanvas.runExtensions("selectedChanged", {
+ elems: elems,
+ selectedElement: selectedElement,
+ multiselected: multiselected
+ });
+ };
+
+ // Call when part of element is in process of changing, generally
+ // on mousemove actions like rotate, move, etc.
+ var elementTransition = function(window,elems) {
+ var mode = svgCanvas.getMode();
+ var elem = elems[0];
+
+ if(!elem) return;
+
+ multiselected = (elems.length >= 2 && elems[1] != null);
+ // Only updating fields for single elements for now
+ if(!multiselected) {
+ switch ( mode ) {
+ case "rotate":
+ var ang = svgCanvas.getRotationAngle(elem);
+ $('#angle').val(ang);
+ $('#tool_reorient').toggleClass('disabled', ang == 0);
+ break;
+
+ // TODO: Update values that change on move/resize, etc
+// case "select":
+// case "resize":
+// break;
+ }
+ }
+ svgCanvas.runExtensions("elementTransition", {
+ elems: elems
+ });
+ };
+
+ // called when any element has changed
+ var elementChanged = function(window,elems) {
+ var mode = svgCanvas.getMode();
+ if(mode === "select") {
+ setSelectMode();
+ }
+
+ for (var i = 0; i < elems.length; ++i) {
+ var elem = elems[i];
+
+ // if the element changed was the svg, then it could be a resolution change
+ if (elem && elem.tagName === "svg") {
+ populateLayers();
+ updateCanvas();
+ }
+ // Update selectedElement if element is no longer part of the image.
+ // This occurs for the text elements in Firefox
+ else if(elem && selectedElement && selectedElement.parentNode == null) {
+// || elem && elem.tagName == "path" && !multiselected) { // This was added in r1430, but not sure why
+ selectedElement = elem;
+ }
+ }
+
+ Editor.show_save_warning = true;
+
+ // we update the contextual panel with potentially new
+ // positional/sizing information (we DON'T want to update the
+ // toolbar here as that creates an infinite loop)
+ // also this updates the history buttons
+
+ // we tell it to skip focusing the text control if the
+ // text element was previously in focus
+ updateContextPanel();
+
+ // In the event a gradient was flipped:
+ if(selectedElement && mode === "select") {
+ paintBox.fill.update();
+ paintBox.stroke.update();
+ }
+
+ svgCanvas.runExtensions("elementChanged", {
+ elems: elems
+ });
+ };
+
+ var zoomChanged = function(window, bbox, autoCenter) {
+ var scrbar = 15,
+ res = svgCanvas.getResolution(),
+ w_area = workarea,
+ canvas_pos = $('#svgcanvas').position();
+ var z_info = svgCanvas.setBBoxZoom(bbox, w_area.width()-scrbar, w_area.height()-scrbar);
+ if(!z_info) return;
+ var zoomlevel = z_info.zoom,
+ bb = z_info.bbox;
+
+ if(zoomlevel < .001) {
+ changeZoom({value: .1});
+ return;
+ }
+
+// $('#zoom').val(Math.round(zoomlevel*100));
+ $('#zoom').val(zoomlevel*100);
+
+ if(autoCenter) {
+ updateCanvas();
+ } else {
+ updateCanvas(false, {x: bb.x * zoomlevel + (bb.width * zoomlevel)/2, y: bb.y * zoomlevel + (bb.height * zoomlevel)/2});
+ }
+
+ if(svgCanvas.getMode() == 'zoom' && bb.width) {
+ // Go to select if a zoom box was drawn
+ setSelectMode();
+ }
+
+ zoomDone();
+ }
+
+ $('#cur_context_panel').delegate('a', 'click', function() {
+ var link = $(this);
+ if(link.attr('data-root')) {
+ svgCanvas.leaveContext();
+ } else {
+ svgCanvas.setContext(link.text());
+ }
+ return false;
+ });
+
+ var contextChanged = function(win, context) {
+ $('#workarea,#sidepanels').css('top', context?100:75);
+ $('#rulers').toggleClass('moved', context);
+ if(cur_context && !context) {
+ // Back to normal
+ workarea[0].scrollTop -= 25;
+ } else if(!cur_context && context) {
+ workarea[0].scrollTop += 25;
+ }
+
+ var link_str = '';
+ if(context) {
+ var str = '';
+ link_str = '<a href="#" data-root="y">' + svgCanvas.getCurrentDrawing().getCurrentLayerName() + '</a>';
+
+ $(context).parentsUntil('#svgcontent > g').andSelf().each(function() {
+ if(this.id) {
+ str += ' > ' + this.id;
+ if(this !== context) {
+ link_str += ' > <a href="#">' + this.id + '</a>';
+ } else {
+ link_str += ' > ' + this.id;
+ }
+ }
+ });
+
+ cur_context = str;
+ } else {
+ cur_context = null;
+ }
+ $('#cur_context_panel').toggle(!!context).html(link_str);
+
+
+ updateTitle();
+ }
+
+ // Makes sure the current selected paint is available to work with
+ var prepPaints = function() {
+ paintBox.fill.prep();
+ paintBox.stroke.prep();
+ }
+
+ var flyout_funcs = {};
+
+ var setupFlyouts = function(holders) {
+ $.each(holders, function(hold_sel, btn_opts) {
+ var buttons = $(hold_sel).children();
+ var show_sel = hold_sel + '_show';
+ var shower = $(show_sel);
+ var def = false;
+ buttons.addClass('tool_button')
+ .unbind('click mousedown mouseup') // may not be necessary
+ .each(function(i) {
+ // Get this buttons options
+ var opts = btn_opts[i];
+
+ // Remember the function that goes with this ID
+ flyout_funcs[opts.sel] = opts.fn;
+
+ if(opts.isDefault) def = i;
+
+ // Clicking the icon in flyout should set this set's icon
+ var func = function(event) {
+ var options = opts;
+ //find the currently selected tool if comes from keystroke
+ if (event.type === "keydown") {
+ var flyoutIsSelected = $(options.parent + "_show").hasClass('tool_button_current');
+ var currentOperation = $(options.parent + "_show").attr("data-curopt");
+ $.each(holders[opts.parent], function(i, tool){
+ if (tool.sel == currentOperation) {
+ if(!event.shiftKey || !flyoutIsSelected) {
+ options = tool;
+ }
+ else {
+ options = holders[opts.parent][i+1] || holders[opts.parent][0];
+ }
+ }
+ });
+ }
+ if($(this).hasClass('disabled')) return false;
+ if (toolButtonClick(show_sel)) {
+ options.fn();
+ }
+ if(options.icon) {
+ var icon = $.getSvgIcon(options.icon, true);
+ } else {
+ var icon = $(options.sel).children().eq(0).clone();
+ }
+
+ icon[0].setAttribute('width',shower.width());
+ icon[0].setAttribute('height',shower.height());
+ shower.children(':not(.flyout_arrow_horiz)').remove();
+ shower.append(icon).attr('data-curopt', options.sel); // This sets the current mode
+ }
+
+ $(this).mouseup(func);
+
+ if(opts.key) {
+ $(document).bind('keydown', opts.key[0] + " shift+" + opts.key[0], func);
+ }
+ });
+
+ if(def) {
+ shower.attr('data-curopt', btn_opts[def].sel);
+ } else if(!shower.attr('data-curopt')) {
+ // Set first as default
+ shower.attr('data-curopt', btn_opts[0].sel);
+ }
+
+ var timer;
+
+ var pos = $(show_sel).position();
+ $(hold_sel).css({'left': pos.left+34, 'top': pos.top+77});
+
+ // Clicking the "show" icon should set the current mode
+ shower.mousedown(function(evt) {
+ if(shower.hasClass('disabled')) return false;
+ var holder = $(hold_sel);
+ var l = pos.left+34;
+ var w = holder.width()*-1;
+ var time = holder.data('shown_popop')?200:0;
+ timer = setTimeout(function() {
+ // Show corresponding menu
+ if(!shower.data('isLibrary')) {
+ holder.css('left', w).show().animate({
+ left: l
+ },150);
+ } else {
+ holder.css('left', l).show();
+ }
+ holder.data('shown_popop',true);
+ },time);
+ evt.preventDefault();
+ }).mouseup(function(evt) {
+ clearTimeout(timer);
+ var opt = $(this).attr('data-curopt');
+ // Is library and popped up, so do nothing
+ if(shower.data('isLibrary') && $(show_sel.replace('_show','')).is(':visible')) {
+ toolButtonClick(show_sel, true);
+ return;
+ }
+ if (toolButtonClick(show_sel) && (opt in flyout_funcs)) {
+ flyout_funcs[opt]();
+ }
+ });
+
+ // $('#tools_rect').mouseleave(function(){$('#tools_rect').fadeOut();});
+ });
+
+ setFlyoutTitles();
+ }
+
+ var makeFlyoutHolder = function(id, child) {
+ var div = $('<div>',{
+ 'class': 'tools_flyout',
+ id: id
+ }).appendTo('#svg_editor').append(child);
+
+ return div;
+ }
+
+ var setFlyoutPositions = function() {
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ var pos = shower.offset();
+ var w = shower.outerWidth();
+ $(this).css({left: (pos.left + w)*tool_scale, top: pos.top});
+ });
+ }
+
+ var setFlyoutTitles = function() {
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ if(shower.data('isLibrary')) return;
+
+ var tooltips = [];
+ $(this).children().each(function() {
+ tooltips.push(this.title);
+ });
+ shower[0].title = tooltips.join(' / ');
+ });
+ }
+
+ var resize_timer;
+
+ var extAdded = function(window, ext) {
+
+ var cb_called = false;
+ var resize_done = false;
+ var cb_ready = true; // Set to false to delay callback (e.g. wait for $.svgIcons)
+
+ function prepResize() {
+ if(resize_timer) {
+ clearTimeout(resize_timer);
+ resize_timer = null;
+ }
+ if(!resize_done) {
+ resize_timer = setTimeout(function() {
+ resize_done = true;
+ setIconSize(curPrefs.iconsize);
+ }, 50);
+ }
+ }
+
+
+ var runCallback = function() {
+ if(ext.callback && !cb_called && cb_ready) {
+ cb_called = true;
+ ext.callback();
+ }
+ }
+
+ var btn_selects = [];
+
+ if(ext.context_tools) {
+ $.each(ext.context_tools, function(i, tool) {
+ // Add select tool
+ var cont_id = tool.container_id?(' id="' + tool.container_id + '"'):"";
+
+ var panel = $('#' + tool.panel);
+
+ // create the panel if it doesn't exist
+ if(!panel.length)
+ panel = $('<div>', {id: tool.panel}).appendTo("#tools_top");
+
+ // TODO: Allow support for other types, or adding to existing tool
+ switch (tool.type) {
+ case 'tool_button':
+ var html = '<div class="tool_button">' + tool.id + '</div>';
+ var div = $(html).appendTo(panel);
+ if (tool.events) {
+ $.each(tool.events, function(evt, func) {
+ $(div).bind(evt, func);
+ });
+ }
+ break;
+ case 'select':
+ var html = '<label' + cont_id + '>'
+ + '<select id="' + tool.id + '">';
+ $.each(tool.options, function(val, text) {
+ var sel = (val == tool.defval) ? " selected":"";
+ html += '<option value="'+val+'"' + sel + '>' + text + '</option>';
+ });
+ html += "</select></label>";
+ // Creates the tool, hides & adds it, returns the select element
+ var sel = $(html).appendTo(panel).find('select');
+
+ $.each(tool.events, function(evt, func) {
+ $(sel).bind(evt, func);
+ });
+ break;
+ case 'button-select':
+ var html = '<div id="' + tool.id + '" class="dropdown toolset" title="' + tool.title + '">'
+ + '<div id="cur_' + tool.id + '" class="icon_label"></div><button></button></div>';
+
+ var list = $('<ul id="' + tool.id + '_opts"></ul>').appendTo('#option_lists');
+
+ if(tool.colnum) {
+ list.addClass('optcols' + tool.colnum);
+ }
+
+ // Creates the tool, hides & adds it, returns the select element
+ var dropdown = $(html).appendTo(panel).children();
+
+ btn_selects.push({
+ elem: ('#' + tool.id),
+ list: ('#' + tool.id + '_opts'),
+ title: tool.title,
+ callback: tool.events.change,
+ cur: ('#cur_' + tool.id)
+ });
+
+ break;
+ case 'input':
+ var html = '<label' + cont_id + '>'
+ + '<span id="' + tool.id + '_label">'
+ + tool.label + ':</span>'
+ + '<input id="' + tool.id + '" title="' + tool.title
+ + '" size="' + (tool.size || "4") + '" value="' + (tool.defval || "") + '" type="text"/></label>'
+
+ // Creates the tool, hides & adds it, returns the select element
+
+ // Add to given tool.panel
+ var inp = $(html).appendTo(panel).find('input');
+
+ if(tool.spindata) {
+ inp.SpinButton(tool.spindata);
+ }
+
+ if(tool.events) {
+ $.each(tool.events, function(evt, func) {
+ inp.bind(evt, func);
+ });
+ }
+ break;
+
+ default:
+ break;
+ }
+ });
+ }
+
+ if(ext.buttons) {
+ var fallback_obj = {},
+ placement_obj = {},
+ svgicons = ext.svgicons;
+ var holders = {};
+
+
+ // Add buttons given by extension
+ $.each(ext.buttons, function(i, btn) {
+ var icon;
+ var id = btn.id;
+ var num = i;
+
+ // Give button a unique ID
+ while($('#'+id).length) {
+ id = btn.id + '_' + (++num);
+ }
+
+ if(!svgicons) {
+ icon = $('<img src="' + btn.icon + '">');
+ } else {
+ fallback_obj[id] = btn.icon;
+ var svgicon = btn.svgicon?btn.svgicon:btn.id;
+ if(btn.type == 'app_menu') {
+ placement_obj['#' + id + ' > div'] = svgicon;
+ } else {
+ placement_obj['#' + id] = svgicon;
+ }
+ }
+
+ var cls, parent;
+
+ // Set button up according to its type
+ switch ( btn.type ) {
+ case 'mode_flyout':
+ case 'mode':
+ cls = 'tool_button';
+ parent = "#tools_left";
+ break;
+ case 'context':
+ cls = 'tool_button';
+ parent = "#" + btn.panel;
+ // create the panel if it doesn't exist
+ if(!$(parent).length)
+ $('<div>', {id: btn.panel}).appendTo("#tools_top");
+ break;
+ case 'app_menu':
+ cls = '';
+ parent = '#main_menu ul';
+ break;
+ }
+
+ var button = $((btn.list || btn.type == 'app_menu')?'<li/>':'<div/>')
+ .attr("id", id)
+ .attr("title", btn.title)
+ .addClass(cls);
+ if(!btn.includeWith && !btn.list) {
+ if("position" in btn) {
+ $(parent).children().eq(btn.position).before(button);
+ } else {
+ button.appendTo(parent);
+ }
+
+ if(btn.type =='mode_flyout') {
+ // Add to flyout menu / make flyout menu
+ // var opts = btn.includeWith;
+ // // opts.button, default, position
+ var ref_btn = $(button);
+
+ var flyout_holder = ref_btn.parent();
+ // Create a flyout menu if there isn't one already
+ if(!ref_btn.parent().hasClass('tools_flyout')) {
+ // Create flyout placeholder
+ var tls_id = ref_btn[0].id.replace('tool_','tools_')
+ var show_btn = ref_btn.clone()
+ .attr('id',tls_id + '_show')
+ .append($('<div>',{'class':'flyout_arrow_horiz'}));
+
+ ref_btn.before(show_btn);
+
+ // Create a flyout div
+ flyout_holder = makeFlyoutHolder(tls_id, ref_btn);
+ flyout_holder.data('isLibrary', true);
+ show_btn.data('isLibrary', true);
+ }
+
+
+
+ // var ref_data = Actions.getButtonData(opts.button);
+
+ placement_obj['#' + tls_id + '_show'] = btn.id;
+ // TODO: Find way to set the current icon using the iconloader if this is not default
+
+ // Include data for extension button as well as ref button
+ var cur_h = holders['#'+flyout_holder[0].id] = [{
+ sel: '#'+id,
+ fn: btn.events.click,
+ icon: btn.id,
+// key: btn.key,
+ isDefault: true
+ }, ref_data];
+ //
+ // // {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}
+ //
+ // var pos = ("position" in opts)?opts.position:'last';
+ // var len = flyout_holder.children().length;
+ //
+ // // Add at given position or end
+ // if(!isNaN(pos) && pos >= 0 && pos < len) {
+ // flyout_holder.children().eq(pos).before(button);
+ // } else {
+ // flyout_holder.append(button);
+ // cur_h.reverse();
+ // }
+ } else if(btn.type == 'app_menu') {
+ button.append('<div>').append(btn.title);
+ }
+
+ } else if(btn.list) {
+ // Add button to list
+ button.addClass('push_button');
+ $('#' + btn.list + '_opts').append(button);
+ if(btn.isDefault) {
+ $('#cur_' + btn.list).append(button.children().clone());
+ var svgicon = btn.svgicon?btn.svgicon:btn.id;
+ placement_obj['#cur_' + btn.list] = svgicon;
+ }
+ } else if(btn.includeWith) {
+ // Add to flyout menu / make flyout menu
+ var opts = btn.includeWith;
+ // opts.button, default, position
+ var ref_btn = $(opts.button);
+
+ var flyout_holder = ref_btn.parent();
+ // Create a flyout menu if there isn't one already
+ if(!ref_btn.parent().hasClass('tools_flyout')) {
+ // Create flyout placeholder
+ var tls_id = ref_btn[0].id.replace('tool_','tools_')
+ var show_btn = ref_btn.clone()
+ .attr('id',tls_id + '_show')
+ .append($('<div>',{'class':'flyout_arrow_horiz'}));
+
+ ref_btn.before(show_btn);
+
+ // Create a flyout div
+ flyout_holder = makeFlyoutHolder(tls_id, ref_btn);
+ }
+
+ var ref_data = Actions.getButtonData(opts.button);
+
+ if(opts.isDefault) {
+ placement_obj['#' + tls_id + '_show'] = btn.id;
+ }
+ // TODO: Find way to set the current icon using the iconloader if this is not default
+
+ // Include data for extension button as well as ref button
+ var cur_h = holders['#'+flyout_holder[0].id] = [{
+ sel: '#'+id,
+ fn: btn.events.click,
+ icon: btn.id,
+ key: btn.key,
+ isDefault: btn.includeWith?btn.includeWith.isDefault:0
+ }, ref_data];
+
+ // {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: 4, parent: '#tools_rect', icon: 'rect'}
+
+ var pos = ("position" in opts)?opts.position:'last';
+ var len = flyout_holder.children().length;
+
+ // Add at given position or end
+ if(!isNaN(pos) && pos >= 0 && pos < len) {
+ flyout_holder.children().eq(pos).before(button);
+ } else {
+ flyout_holder.append(button);
+ cur_h.reverse();
+ }
+ }
+
+ if(!svgicons) {
+ button.append(icon);
+ }
+
+ if(!btn.list) {
+ // Add given events to button
+ $.each(btn.events, function(name, func) {
+ if(name == "click") {
+ if(btn.type == 'mode') {
+ if(btn.includeWith) {
+ button.bind(name, func);
+ } else {
+ button.bind(name, function() {
+ if(toolButtonClick(button)) {
+ func();
+ }
+ });
+ }
+ if(btn.key) {
+ $(document).bind('keydown', btn.key, func);
+ if(btn.title) button.attr("title", btn.title + ' ['+btn.key+']');
+ }
+ } else {
+ button.bind(name, func);
+ }
+ } else {
+ button.bind(name, func);
+ }
+ });
+ }
+
+ setupFlyouts(holders);
+ });
+
+ $.each(btn_selects, function() {
+ addAltDropDown(this.elem, this.list, this.callback, {seticon: true});
+ });
+
+ if (svgicons)
+ cb_ready = false; // Delay callback
+
+ $.svgIcons(svgicons, {
+ w:24, h:24,
+ id_match: false,
+ no_img: (!isWebkit),
+ fallback: fallback_obj,
+ placement: placement_obj,
+ callback: function(icons) {
+ // Non-ideal hack to make the icon match the current size
+ if(curPrefs.iconsize && curPrefs.iconsize != 'm') {
+ prepResize();
+ }
+ cb_ready = true; // Ready for callback
+ runCallback();
+ }
+
+ });
+ }
+
+ runCallback();
+ };
+
+ var getPaint = function(color, opac, type) {
+ // update the editor's fill paint
+ var opts = null;
+ if (color.indexOf("url(#") === 0) {
+ var refElem = svgCanvas.getRefElem(color);
+ if(refElem) {
+ refElem = refElem.cloneNode(true);
+ } else {
+ refElem = $("#" + type + "_color defs *")[0];
+ }
+
+ opts = { alpha: opac };
+ opts[refElem.tagName] = refElem;
+ }
+ else if (color.indexOf("#") === 0) {
+ opts = {
+ alpha: opac,
+ solidColor: color.substr(1)
+ };
+ }
+ else {
+ opts = {
+ alpha: opac,
+ solidColor: 'none'
+ };
+ }
+ return new $.jGraduate.Paint(opts);
+ };
+
+
+ // updates the toolbar (colors, opacity, etc) based on the selected element
+ // This function also updates the opacity and id elements that are in the context panel
+ var updateToolbar = function() {
+ if (selectedElement != null) {
+
+ switch ( selectedElement.tagName ) {
+ case 'use':
+ case 'image':
+ case 'foreignObject':
+ break;
+ case 'g':
+ case 'a':
+ // Look for common styles
+
+ var gWidth = null;
+
+ var childs = selectedElement.getElementsByTagName('*');
+ for(var i = 0, len = childs.length; i < len; i++) {
+ var swidth = childs[i].getAttribute("stroke-width");
+
+ if(i === 0) {
+ gWidth = swidth;
+ } else if(gWidth !== swidth) {
+ gWidth = null;
+ }
+ }
+
+ $('#stroke_width').val(gWidth === null ? "" : gWidth);
+
+ paintBox.fill.update(true);
+ paintBox.stroke.update(true);
+
+
+ break;
+ default:
+ paintBox.fill.update(true);
+ paintBox.stroke.update(true);
+
+ $('#stroke_width').val(selectedElement.getAttribute("stroke-width") || 1);
+ $('#stroke_style').val(selectedElement.getAttribute("stroke-dasharray")||"none");
+
+ var attr = selectedElement.getAttribute("stroke-linejoin") || 'miter';
+
+ if ($('#linejoin_' + attr).length != 0)
+ setStrokeOpt($('#linejoin_' + attr)[0]);
+
+ attr = selectedElement.getAttribute("stroke-linecap") || 'butt';
+
+ if ($('#linecap_' + attr).length != 0)
+ setStrokeOpt($('#linecap_' + attr)[0]);
+ }
+
+ }
+
+ // All elements including image and group have opacity
+ if(selectedElement != null) {
+ var opac_perc = ((selectedElement.getAttribute("opacity")||1.0)*100);
+ $('#group_opacity').val(opac_perc);
+ $('#opac_slider').slider('option', 'value', opac_perc);
+ $('#elem_id').val(selectedElement.id);
+ }
+
+ updateToolButtonState();
+ };
+
+ var setImageURL = Editor.setImageURL = function(url) {
+ if(!url) url = default_img_url;
+
+ svgCanvas.setImageURL(url);
+ $('#image_url').val(url);
+
+ if(url.indexOf('data:') === 0) {
+ // data URI found
+ $('#image_url').hide();
+ $('#change_image_url').show();
+ } else {
+ // regular URL
+
+ svgCanvas.embedImage(url, function(datauri) {
+ if(!datauri) {
+ // Couldn't embed, so show warning
+ $('#url_notice').show();
+ } else {
+ $('#url_notice').hide();
+ }
+ default_img_url = url;
+ });
+ $('#image_url').show();
+ $('#change_image_url').hide();
+ }
+ }
+
+ var setInputWidth = function(elem) {
+ var w = Math.min(Math.max(12 + elem.value.length * 6, 50), 300);
+ $(elem).width(w);
+ }
+
+ // updates the context panel tools based on the selected element
+ var updateContextPanel = function() {
+ var elem = selectedElement;
+ // If element has just been deleted, consider it null
+ if(elem != null && !elem.parentNode) elem = null;
+ var currentLayerName = svgCanvas.getCurrentDrawing().getCurrentLayerName();
+ var currentMode = svgCanvas.getMode();
+ var unit = curConfig.baseUnit !== 'px' ? curConfig.baseUnit : null;
+
+ var is_node = currentMode == 'pathedit'; //elem ? (elem.id && elem.id.indexOf('pathpointgrip') == 0) : false;
+ var menu_items = $('#cmenu_canvas li');
+ $('#selected_panel, #multiselected_panel, #g_panel, #rect_panel, #circle_panel,\
+ #ellipse_panel, #line_panel, #text_panel, #image_panel, #container_panel, #use_panel, #a_panel').hide();
+ if (elem != null) {
+ var elname = elem.nodeName;
+
+ // If this is a link with no transform and one child, pretend
+ // its child is selected
+// console.log('go', elem)
+// if(elname === 'a') { // && !$(elem).attr('transform')) {
+// elem = elem.firstChild;
+// }
+
+ var angle = svgCanvas.getRotationAngle(elem);
+ $('#angle').val(angle);
+
+ var blurval = svgCanvas.getBlur(elem);
+ $('#blur').val(blurval);
+ $('#blur_slider').slider('option', 'value', blurval);
+
+ if(svgCanvas.addedNew) {
+ if(elname === 'image') {
+ // Prompt for URL if not a data URL
+ if(svgCanvas.getHref(elem).indexOf('data:') !== 0) {
+ promptImgURL();
+ }
+ } /*else if(elname == 'text') {
+ // TODO: Do something here for new text
+ }*/
+ }
+
+ if(!is_node && currentMode != 'pathedit') {
+ $('#selected_panel').show();
+ // Elements in this array already have coord fields
+ if(['line', 'circle', 'ellipse'].indexOf(elname) >= 0) {
+ $('#xy_panel').hide();
+ } else {
+ var x,y;
+
+ // Get BBox vals for g, polyline and path
+ if(['g', 'polyline', 'path'].indexOf(elname) >= 0) {
+ var bb = svgCanvas.getStrokedBBox([elem]);
+ if(bb) {
+ x = bb.x;
+ y = bb.y;
+ }
+ } else {
+ x = elem.getAttribute('x');
+ y = elem.getAttribute('y');
+ }
+
+ if(unit) {
+ x = svgedit.units.convertUnit(x);
+ y = svgedit.units.convertUnit(y);
+ }
+
+ $('#selected_x').val(x || 0);
+ $('#selected_y').val(y || 0);
+ $('#xy_panel').show();
+ }
+
+ // Elements in this array cannot be converted to a path
+ var no_path = ['image', 'text', 'path', 'g', 'use'].indexOf(elname) == -1;
+ $('#tool_topath').toggle(no_path);
+ $('#tool_reorient').toggle(elname == 'path');
+ $('#tool_reorient').toggleClass('disabled', angle == 0);
+ } else {
+ var point = path.getNodePoint();
+ $('#tool_add_subpath').removeClass('push_button_pressed').addClass('tool_button');
+ $('#tool_node_delete').toggleClass('disabled', !path.canDeleteNodes);
+
+ // Show open/close button based on selected point
+ setIcon('#tool_openclose_path', path.closed_subpath ? 'open_path' : 'close_path');
+
+ if(point) {
+ var seg_type = $('#seg_type');
+ if(unit) {
+ point.x = svgedit.units.convertUnit(point.x);
+ point.y = svgedit.units.convertUnit(point.y);
+ }
+ $('#path_node_x').val(point.x);
+ $('#path_node_y').val(point.y);
+ if(point.type) {
+ seg_type.val(point.type).removeAttr('disabled');
+ } else {
+ seg_type.val(4).attr('disabled','disabled');
+ }
+ }
+ return;
+ }
+
+ // update contextual tools here
+ var panels = {
+ g: [],
+ a: [],
+ rect: ['rx','width','height'],
+ image: ['width','height'],
+ circle: ['cx','cy','r'],
+ ellipse: ['cx','cy','rx','ry'],
+ line: ['x1','y1','x2','y2'],
+ text: [],
+ 'use': []
+ };
+
+ var el_name = elem.tagName;
+
+// if($(elem).data('gsvg')) {
+// $('#g_panel').show();
+// }
+
+ var link_href = null;
+ if (el_name === 'a') {
+ link_href = svgCanvas.getHref(elem);
+ $('#g_panel').show();
+ }
+
+ if(elem.parentNode.tagName === 'a') {
+ if(!$(elem).siblings().length) {
+ $('#a_panel').show();
+ link_href = svgCanvas.getHref(elem.parentNode);
+ }
+ }
+
+ // Hide/show the make_link buttons
+ $('#tool_make_link, #tool_make_link').toggle(!link_href);
+
+ if(link_href) {
+ $('#link_url').val(link_href);
+ }
+
+ if(panels[el_name]) {
+ var cur_panel = panels[el_name];
+
+ $('#' + el_name + '_panel').show();
+
+ $.each(cur_panel, function(i, item) {
+ var attrVal = elem.getAttribute(item);
+ if(curConfig.baseUnit !== 'px' && elem[item]) {
+ var bv = elem[item].baseVal.value;
+ attrVal = svgedit.units.convertUnit(bv);
+ }
+
+ $('#' + el_name + '_' + item).val(attrVal || 0);
+ });
+
+ if(el_name == 'text') {
+ $('#text_panel').css("display", "inline");
+ if (svgCanvas.getItalic()) {
+ $('#tool_italic').addClass('push_button_pressed').removeClass('tool_button');
+ }
+ else {
+ $('#tool_italic').removeClass('push_button_pressed').addClass('tool_button');
+ }
+ if (svgCanvas.getBold()) {
+ $('#tool_bold').addClass('push_button_pressed').removeClass('tool_button');
+ }
+ else {
+ $('#tool_bold').removeClass('push_button_pressed').addClass('tool_button');
+ }
+ $('#font_family').val(elem.getAttribute("font-family"));
+ $('#font_size').val(elem.getAttribute("font-size"));
+ $('#text').val(elem.textContent);
+ if (svgCanvas.addedNew) {
+ // Timeout needed for IE9
+ setTimeout(function() {
+ $('#text').focus().select();
+ },100);
+ }
+ } // text
+ else if(el_name == 'image') {
+ setImageURL(svgCanvas.getHref(elem));
+ } // image
+ else if(el_name === 'g' || el_name === 'use') {
+ $('#container_panel').show();
+ var title = svgCanvas.getTitle();
+ var label = $('#g_title')[0];
+ label.value = title;
+ setInputWidth(label);
+ var d = 'disabled';
+ if(el_name == 'use') {
+ label.setAttribute(d, d);
+ } else {
+ label.removeAttribute(d);
+ }
+ }
+ }
+ menu_items[(el_name === 'g' ? 'en':'dis') + 'ableContextMenuItems']('#ungroup');
+ menu_items[((el_name === 'g' || !multiselected) ? 'dis':'en') + 'ableContextMenuItems']('#group');
+ } // if (elem != null)
+ else if (multiselected) {
+ $('#multiselected_panel').show();
+ menu_items
+ .enableContextMenuItems('#group')
+ .disableContextMenuItems('#ungroup');
+ } else {
+ menu_items.disableContextMenuItems('#delete,#cut,#copy,#group,#ungroup,#move_front,#move_up,#move_down,#move_back');
+ }
+
+ // update history buttons
+ if (undoMgr.getUndoStackSize() > 0) {
+ $('#tool_undo').removeClass( 'disabled');
+ }
+ else {
+ $('#tool_undo').addClass( 'disabled');
+ }
+ if (undoMgr.getRedoStackSize() > 0) {
+ $('#tool_redo').removeClass( 'disabled');
+ }
+ else {
+ $('#tool_redo').addClass( 'disabled');
+ }
+
+ svgCanvas.addedNew = false;
+
+ if ( (elem && !is_node) || multiselected) {
+ // update the selected elements' layer
+ $('#selLayerNames').removeAttr('disabled').val(currentLayerName);
+
+ // Enable regular menu options
+ canv_menu.enableContextMenuItems('#delete,#cut,#copy,#move_front,#move_up,#move_down,#move_back');
+ }
+ else {
+ $('#selLayerNames').attr('disabled', 'disabled');
+ }
+ };
+
+ $('#text').focus( function(){ textBeingEntered = true; } );
+ $('#text').blur( function(){ textBeingEntered = false; } );
+
+ // bind the selected event to our function that handles updates to the UI
+ svgCanvas.bind("selected", selectedChanged);
+ svgCanvas.bind("transition", elementTransition);
+ svgCanvas.bind("changed", elementChanged);
+ svgCanvas.bind("saved", saveHandler);
+ svgCanvas.bind("exported", exportHandler);
+ svgCanvas.bind("zoomed", zoomChanged);
+ svgCanvas.bind("contextset", contextChanged);
+ svgCanvas.bind("extension_added", extAdded);
+ svgCanvas.textActions.setInputElem($("#text")[0]);
+
+ var str = '<div class="palette_item" data-rgb="none"></div>'
+ $.each(palette, function(i,item){
+ str += '<div class="palette_item" style="background-color: ' + item + ';" data-rgb="' + item + '"></div>';
+ });
+ $('#palette').append(str);
+
+ // Set up editor background functionality
+ // TODO add checkerboard as "pattern"
+ var color_blocks = ['#FFF','#888','#000']; // ,'url(data:image/gif;base64,R0lGODlhEAAQAIAAAP%2F%2F%2F9bW1iH5BAAAAAAALAAAAAAQABAAAAIfjG%2Bgq4jM3IFLJgpswNly%2FXkcBpIiVaInlLJr9FZWAQA7)'];
+ var str = '';
+ $.each(color_blocks, function() {
+ str += '<div class="color_block" style="background-color:' + this + ';"></div>';
+ });
+ $('#bg_blocks').append(str);
+ var blocks = $('#bg_blocks div');
+ var cur_bg = 'cur_background';
+ blocks.each(function() {
+ var blk = $(this);
+ blk.click(function() {
+ blocks.removeClass(cur_bg);
+ $(this).addClass(cur_bg);
+ });
+ });
+
+ if($.pref('bkgd_color')) {
+ setBackground($.pref('bkgd_color'), $.pref('bkgd_url'));
+ } else if($.pref('bkgd_url')) {
+ // No color set, only URL
+ setBackground(defaultPrefs.bkgd_color, $.pref('bkgd_url'));
+ }
+
+ if($.pref('img_save')) {
+ curPrefs.img_save = $.pref('img_save');
+ $('#image_save_opts input').val([curPrefs.img_save]);
+ }
+
+ var changeRectRadius = function(ctl) {
+ svgCanvas.setRectRadius(ctl.value);
+ }
+
+ var changeFontSize = function(ctl) {
+ svgCanvas.setFontSize(ctl.value);
+ }
+
+ var changeStrokeWidth = function(ctl) {
+ var val = ctl.value;
+ if(val == 0 && selectedElement && ['line', 'polyline'].indexOf(selectedElement.nodeName) >= 0) {
+ val = ctl.value = 1;
+ }
+ svgCanvas.setStrokeWidth(val);
+ }
+
+ var changeRotationAngle = function(ctl) {
+ svgCanvas.setRotationAngle(ctl.value);
+ $('#tool_reorient').toggleClass('disabled', ctl.value == 0);
+ }
+ var changeZoom = function(ctl) {
+ var zoomlevel = ctl.value / 100;
+ if(zoomlevel < .001) {
+ ctl.value = .1;
+ return;
+ }
+ var zoom = svgCanvas.getZoom();
+ var w_area = workarea;
+
+ zoomChanged(window, {
+ width: 0,
+ height: 0,
+ // center pt of scroll position
+ x: (w_area[0].scrollLeft + w_area.width()/2)/zoom,
+ y: (w_area[0].scrollTop + w_area.height()/2)/zoom,
+ zoom: zoomlevel
+ }, true);
+ }
+
+ var changeOpacity = function(ctl, val) {
+ if(val == null) val = ctl.value;
+ $('#group_opacity').val(val);
+ if(!ctl || !ctl.handle) {
+ $('#opac_slider').slider('option', 'value', val);
+ }
+ svgCanvas.setOpacity(val/100);
+ }
+
+ var changeBlur = function(ctl, val, noUndo) {
+ if(val == null) val = ctl.value;
+ $('#blur').val(val);
+ var complete = false;
+ if(!ctl || !ctl.handle) {
+ $('#blur_slider').slider('option', 'value', val);
+ complete = true;
+ }
+ if(noUndo) {
+ svgCanvas.setBlurNoUndo(val);
+ } else {
+ svgCanvas.setBlur(val, complete);
+ }
+ }
+
+ var operaRepaint = function() {
+ // Repaints canvas in Opera. Needed for stroke-dasharray change as well as fill change
+ if(!window.opera) return;
+ $('<p/>').hide().appendTo('body').remove();
+ }
+
+ $('#stroke_style').change(function(){
+ svgCanvas.setStrokeAttr('stroke-dasharray', $(this).val());
+ operaRepaint();
+ });
+
+ $('#stroke_linejoin').change(function(){
+ svgCanvas.setStrokeAttr('stroke-linejoin', $(this).val());
+ operaRepaint();
+ });
+
+
+ // Lose focus for select elements when changed (Allows keyboard shortcuts to work better)
+ $('select').change(function(){$(this).blur();});
+
+ // fired when user wants to move elements to another layer
+ var promptMoveLayerOnce = false;
+ $('#selLayerNames').change(function(){
+ var destLayer = this.options[this.selectedIndex].value;
+ var confirm_str = uiStrings.notification.QmoveElemsToLayer.replace('%s',destLayer);
+ var moveToLayer = function(ok) {
+ if(!ok) return;
+ promptMoveLayerOnce = true;
+ svgCanvas.moveSelectedToLayer(destLayer);
+ svgCanvas.clearSelection();
+ populateLayers();
+ }
+ if (destLayer) {
+ if(promptMoveLayerOnce) {
+ moveToLayer(true);
+ } else {
+ $.confirm(confirm_str, moveToLayer);
+ }
+ }
+ });
+
+ $('#font_family').change(function() {
+ svgCanvas.setFontFamily(this.value);
+ });
+
+ $('#seg_type').change(function() {
+ svgCanvas.setSegType($(this).val());
+ });
+
+ $('#text').keyup(function(){
+ svgCanvas.setTextContent(this.value);
+ });
+
+ $('#image_url').change(function(){
+ setImageURL(this.value);
+ });
+
+ $('#link_url').change(function() {
+ if(this.value.length) {
+ svgCanvas.setLinkURL(this.value);
+ } else {
+ svgCanvas.removeHyperlink();
+ }
+ });
+
+ $('#g_title').change(function() {
+ svgCanvas.setGroupTitle(this.value);
+ });
+
+ $('.attr_changer').change(function() {
+ var attr = this.getAttribute("data-attr");
+ var val = this.value;
+ var valid = svgedit.units.isValidUnit(attr, val);
+
+ if(!valid) {
+ $.alert(uiStrings.notification.invalidAttrValGiven);
+ this.value = selectedElement.getAttribute(attr);
+ return false;
+ }
+
+ if (attr !== "id") {
+ if (isNaN(val)) {
+ val = svgCanvas.convertToNum(attr, val);
+ } else if(curConfig.baseUnit !== 'px') {
+ // Convert unitless value to one with given unit
+
+ var unitData = svgedit.units.getTypeMap();
+
+ if(selectedElement[attr] || svgCanvas.getMode() === "pathedit" || attr === "x" || attr === "y") {
+ val *= unitData[curConfig.baseUnit];
+ }
+ }
+ }
+
+ // if the user is changing the id, then de-select the element first
+ // change the ID, then re-select it with the new ID
+ if (attr === "id") {
+ var elem = selectedElement;
+ svgCanvas.clearSelection();
+ elem.id = val;
+ svgCanvas.addToSelection([elem],true);
+ }
+ else {
+ svgCanvas.changeSelectedAttribute(attr, val);
+ }
+ });
+
+ // Prevent selection of elements when shift-clicking
+ $('#palette').mouseover(function() {
+ var inp = $('<input type="hidden">');
+ $(this).append(inp);
+ inp.focus().remove();
+ })
+
+ $('.palette_item').mousedown(function(evt){
+ var right_click = evt.button === 2;
+ var isStroke = evt.shiftKey || right_click;
+ var picker = isStroke ? "stroke" : "fill";
+ var color = $(this).attr('data-rgb');
+ var paint = null;
+
+ // Webkit-based browsers returned 'initial' here for no stroke
+ if (color === 'transparent' || color === 'initial') {
+ color = 'none';
+ paint = new $.jGraduate.Paint();
+ }
+ else {
+ paint = new $.jGraduate.Paint({alpha: 100, solidColor: color.substr(1)});
+ }
+
+ paintBox[picker].setPaint(paint);
+
+ if (isStroke) {
+ svgCanvas.setColor('stroke', color);
+ if (color != 'none' && svgCanvas.getStrokeOpacity() != 1) {
+ svgCanvas.setPaintOpacity('stroke', 1.0);
+ }
+ } else {
+ svgCanvas.setColor('fill', color);
+ if (color != 'none' && svgCanvas.getFillOpacity() != 1) {
+ svgCanvas.setPaintOpacity('fill', 1.0);
+ }
+ }
+ updateToolButtonState();
+ }).bind('contextmenu', function(e) {e.preventDefault()});
+
+ $("#toggle_stroke_tools").toggle(function() {
+ $(".stroke_tool").css('display','table-cell');
+ $(this).text('<<');
+ resetScrollPos();
+ }, function() {
+ $(".stroke_tool").css('display','none');
+ $(this).text('>>');
+ resetScrollPos();
+ });
+
+ // This is a common function used when a tool has been clicked (chosen)
+ // It does several common things:
+ // - removes the tool_button_current class from whatever tool currently has it
+ // - hides any flyouts
+ // - adds the tool_button_current class to the button passed in
+ var toolButtonClick = function(button, noHiding) {
+ if ($(button).hasClass('disabled')) return false;
+ if($(button).parent().hasClass('tools_flyout')) return true;
+ var fadeFlyouts = fadeFlyouts || 'normal';
+ if(!noHiding) {
+ $('.tools_flyout').fadeOut(fadeFlyouts);
+ }
+ $('#styleoverrides').text('');
+ workarea.css('cursor','auto');
+ $('.tool_button_current').removeClass('tool_button_current').addClass('tool_button');
+ $(button).addClass('tool_button_current').removeClass('tool_button');
+ return true;
+ };
+
+ (function() {
+ var last_x = null, last_y = null, w_area = workarea[0],
+ panning = false, keypan = false;
+
+ $('#svgcanvas').bind('mousemove mouseup', function(evt) {
+ if(panning === false) return;
+
+ w_area.scrollLeft -= (evt.clientX - last_x);
+ w_area.scrollTop -= (evt.clientY - last_y);
+
+ last_x = evt.clientX;
+ last_y = evt.clientY;
+
+ if(evt.type === 'mouseup') panning = false;
+ return false;
+ }).mousedown(function(evt) {
+ if(evt.button === 1 || keypan === true) {
+ panning = true;
+ last_x = evt.clientX;
+ last_y = evt.clientY;
+ return false;
+ }
+ });
+
+ $(window).mouseup(function() {
+ panning = false;
+ });
+
+ $(document).bind('keydown', 'space', function(evt) {
+ svgCanvas.spaceKey = keypan = true;
+ evt.preventDefault();
+ }).bind('keyup', 'space', function(evt) {
+ evt.preventDefault();
+ svgCanvas.spaceKey = keypan = false;
+ }).bind('keydown', 'shift', function(evt) {
+ if(svgCanvas.getMode() === 'zoom') {
+ workarea.css('cursor', zoomOutIcon);
+ }
+ }).bind('keyup', 'shift', function(evt) {
+ if(svgCanvas.getMode() === 'zoom') {
+ workarea.css('cursor', zoomInIcon);
+ }
+ })
+ }());
+
+
+ function setStrokeOpt(opt, changeElem) {
+ var id = opt.id;
+ var bits = id.split('_');
+ var pre = bits[0];
+ var val = bits[1];
+
+ if(changeElem) {
+ svgCanvas.setStrokeAttr('stroke-' + pre, val);
+ }
+ operaRepaint();
+ setIcon('#cur_' + pre , id, 20);
+ $(opt).addClass('current').siblings().removeClass('current');
+ }
+
+ (function() {
+ var button = $('#main_icon');
+ var overlay = $('#main_icon span');
+ var list = $('#main_menu');
+ var on_button = false;
+ var height = 0;
+ var js_hover = true;
+ var set_click = false;
+
+ var hideMenu = function() {
+ list.fadeOut(200);
+ };
+
+ $(window).mouseup(function(evt) {
+ if(!on_button) {
+ button.removeClass('buttondown');
+ // do not hide if it was the file input as that input needs to be visible
+ // for its change event to fire
+ if (evt.target.tagName != "INPUT") {
+ list.fadeOut(200);
+ } else if(!set_click) {
+ set_click = true;
+ $(evt.target).click(function() {
+ list.css('margin-left','-9999px').show();
+ });
+ }
+ }
+ on_button = false;
+ }).mousedown(function(evt) {
+// $(".contextMenu").hide();
+// console.log('cm', $(evt.target).closest('.contextMenu'));
+
+ var islib = $(evt.target).closest('div.tools_flyout, .contextMenu').length;
+ if(!islib) $('.tools_flyout:visible,.contextMenu').fadeOut(250);
+ });
+
+ overlay.bind('mousedown',function() {
+ if (!button.hasClass('buttondown')) {
+ button.addClass('buttondown').removeClass('buttonup')
+ // Margin must be reset in case it was changed before;
+ list.css('margin-left',0).show();
+ if(!height) {
+ height = list.height();
+ }
+ // Using custom animation as slideDown has annoying "bounce effect"
+ list.css('height',0).animate({
+ 'height': height
+ },200);
+ on_button = true;
+ return false;
+ } else {
+ button.removeClass('buttondown').addClass('buttonup');
+ list.fadeOut(200);
+ }
+ }).hover(function() {
+ on_button = true;
+ }).mouseout(function() {
+ on_button = false;
+ });
+
+ var list_items = $('#main_menu li');
+
+ // Check if JS method of hovering needs to be used (Webkit bug)
+ list_items.mouseover(function() {
+ js_hover = ($(this).css('background-color') == 'rgba(0, 0, 0, 0)');
+
+ list_items.unbind('mouseover');
+ if(js_hover) {
+ list_items.mouseover(function() {
+ this.style.backgroundColor = '#FFC';
+ }).mouseout(function() {
+ this.style.backgroundColor = 'transparent';
+ return true;
+ });
+ }
+ });
+ }());
+ // Made public for UI customization.
+ // TODO: Group UI functions into a public svgEditor.ui interface.
+ Editor.addDropDown = function(elem, callback, dropUp) {
+ if ($(elem).length == 0) return; // Quit if called on non-existant element
+ var button = $(elem).find('button');
+
+ var list = $(elem).find('ul').attr('id', $(elem)[0].id + '-list');
+
+ if(!dropUp) {
+ // Move list to place where it can overflow container
+ $('#option_lists').append(list);
+ }
+
+ var on_button = false;
+ if(dropUp) {
+ $(elem).addClass('dropup');
+ }
+
+ list.find('li').bind('mouseup', callback);
+
+ $(window).mouseup(function(evt) {
+ if(!on_button) {
+ button.removeClass('down');
+ list.hide();
+ }
+ on_button = false;
+ });
+
+ button.bind('mousedown',function() {
+ if (!button.hasClass('down')) {
+ button.addClass('down');
+
+ if(!dropUp) {
+ var pos = $(elem).position();
+ list.css({
+ top: pos.top + 24,
+ left: pos.left - 10
+ });
+ }
+ list.show();
+
+ on_button = true;
+ } else {
+ button.removeClass('down');
+ list.hide();
+ }
+ }).hover(function() {
+ on_button = true;
+ }).mouseout(function() {
+ on_button = false;
+ });
+ }
+
+ // TODO: Combine this with addDropDown or find other way to optimize
+ var addAltDropDown = function(elem, list, callback, opts) {
+ var button = $(elem);
+ var list = $(list);
+ var on_button = false;
+ var dropUp = opts.dropUp;
+ if(dropUp) {
+ $(elem).addClass('dropup');
+ }
+ list.find('li').bind('mouseup', function() {
+ if(opts.seticon) {
+ setIcon('#cur_' + button[0].id , $(this).children());
+ $(this).addClass('current').siblings().removeClass('current');
+ }
+ callback.apply(this, arguments);
+
+ });
+
+ $(window).mouseup(function(evt) {
+ if(!on_button) {
+ button.removeClass('down');
+ list.hide();
+ list.css({top:0, left:0});
+ }
+ on_button = false;
+ });
+
+ var height = list.height();
+ $(elem).bind('mousedown',function() {
+ var off = $(elem).offset();
+ if(dropUp) {
+ off.top -= list.height();
+ off.left += 8;
+ } else {
+ off.top += $(elem).height();
+ }
+ $(list).offset(off);
+
+ if (!button.hasClass('down')) {
+ button.addClass('down');
+ list.show();
+ on_button = true;
+ return false;
+ } else {
+ button.removeClass('down');
+ // CSS position must be reset for Webkit
+ list.hide();
+ list.css({top:0, left:0});
+ }
+ }).hover(function() {
+ on_button = true;
+ }).mouseout(function() {
+ on_button = false;
+ });
+
+ if(opts.multiclick) {
+ list.mousedown(function() {
+ on_button = true;
+ });
+ }
+ }
+
+ Editor.addDropDown('#font_family_dropdown', function() {
+ var fam = $(this).text();
+ $('#font_family').val($(this).text()).change();
+ });
+
+ Editor.addDropDown('#opacity_dropdown', function() {
+ if($(this).find('div').length) return;
+ var perc = parseInt($(this).text().split('%')[0]);
+ changeOpacity(false, perc);
+ }, true);
+
+ // For slider usage, see: http://jqueryui.com/demos/slider/
+ $("#opac_slider").slider({
+ start: function() {
+ $('#opacity_dropdown li:not(.special)').hide();
+ },
+ stop: function() {
+ $('#opacity_dropdown li').show();
+ $(window).mouseup();
+ },
+ slide: function(evt, ui){
+ changeOpacity(ui);
+ }
+ });
+
+ Editor.addDropDown('#blur_dropdown', $.noop);
+
+ var slideStart = false;
+
+ $("#blur_slider").slider({
+ max: 10,
+ step: .1,
+ stop: function(evt, ui) {
+ slideStart = false;
+ changeBlur(ui);
+ $('#blur_dropdown li').show();
+ $(window).mouseup();
+ },
+ start: function() {
+ slideStart = true;
+ },
+ slide: function(evt, ui){
+ changeBlur(ui, null, slideStart);
+ }
+ });
+
+
+ Editor.addDropDown('#zoom_dropdown', function() {
+ var item = $(this);
+ var val = item.attr('data-val');
+ if(val) {
+ zoomChanged(window, val);
+ } else {
+ changeZoom({value:parseInt(item.text())});
+ }
+ }, true);
+
+ addAltDropDown('#stroke_linecap', '#linecap_opts', function() {
+ setStrokeOpt(this, true);
+ }, {dropUp: true});
+
+ addAltDropDown('#stroke_linejoin', '#linejoin_opts', function() {
+ setStrokeOpt(this, true);
+ }, {dropUp: true});
+
+ addAltDropDown('#tool_position', '#position_opts', function() {
+ var letter = this.id.replace('tool_pos','').charAt(0);
+ svgCanvas.alignSelectedElements(letter, 'page');
+ }, {multiclick: true});
+
+ /*
+
+ When a flyout icon is selected
+ (if flyout) {
+ - Change the icon
+ - Make pressing the button run its stuff
+ }
+ - Run its stuff
+
+ When its shortcut key is pressed
+ - If not current in list, do as above
+ , else:
+ - Just run its stuff
+
+ */
+
+ // Unfocus text input when workarea is mousedowned.
+ (function() {
+ var inp;
+
+ var unfocus = function() {
+ $(inp).blur();
+ }
+
+ $('#svg_editor').find('button, select, input:not(#text)').focus(function() {
+ inp = this;
+ ui_context = 'toolbars';
+ workarea.mousedown(unfocus);
+ }).blur(function() {
+ ui_context = 'canvas';
+ workarea.unbind('mousedown', unfocus);
+ // Go back to selecting text if in textedit mode
+ if(svgCanvas.getMode() == 'textedit') {
+ $('#text').focus();
+ }
+ });
+
+ }());
+
+ var clickSelect = function() {
+ if (toolButtonClick('#tool_select')) {
+ svgCanvas.setMode('select');
+ $('#styleoverrides').text('#svgcanvas svg *{cursor:move;pointer-events:all}, #svgcanvas svg{cursor:default}');
+ }
+ };
+
+ var clickFHPath = function() {
+ if (toolButtonClick('#tool_fhpath')) {
+ svgCanvas.setMode('fhpath');
+ }
+ };
+
+ var clickLine = function() {
+ if (toolButtonClick('#tool_line')) {
+ svgCanvas.setMode('line');
+ }
+ };
+
+ var clickSquare = function(){
+ if (toolButtonClick('#tool_square')) {
+ svgCanvas.setMode('square');
+ }
+ };
+
+ var clickRect = function(){
+ if (toolButtonClick('#tool_rect')) {
+ svgCanvas.setMode('rect');
+ }
+ };
+
+ var clickFHRect = function(){
+ if (toolButtonClick('#tool_fhrect')) {
+ svgCanvas.setMode('fhrect');
+ }
+ };
+
+ var clickCircle = function(){
+ if (toolButtonClick('#tool_circle')) {
+ svgCanvas.setMode('circle');
+ }
+ };
+
+ var clickEllipse = function(){
+ if (toolButtonClick('#tool_ellipse')) {
+ svgCanvas.setMode('ellipse');
+ }
+ };
+
+ var clickFHEllipse = function(){
+ if (toolButtonClick('#tool_fhellipse')) {
+ svgCanvas.setMode('fhellipse');
+ }
+ };
+
+ var clickImage = function(){
+ if (toolButtonClick('#tool_image')) {
+ svgCanvas.setMode('image');
+ }
+ };
+
+ var clickZoom = function(){
+ if (toolButtonClick('#tool_zoom')) {
+ svgCanvas.setMode('zoom');
+ workarea.css('cursor', zoomInIcon);
+ }
+ };
+
+ var dblclickZoom = function(){
+ if (toolButtonClick('#tool_zoom')) {
+ zoomImage();
+ setSelectMode();
+ }
+ };
+
+ var clickText = function(){
+ if (toolButtonClick('#tool_text')) {
+ svgCanvas.setMode('text');
+ }
+ };
+
+ var clickPath = function(){
+ if (toolButtonClick('#tool_path')) {
+ svgCanvas.setMode('path');
+ }
+ };
+
+ // Delete is a contextual tool that only appears in the ribbon if
+ // an element has been selected
+ var deleteSelected = function() {
+ if (selectedElement != null || multiselected) {
+ svgCanvas.deleteSelectedElements();
+ }
+ };
+
+ var cutSelected = function() {
+ if (selectedElement != null || multiselected) {
+ svgCanvas.cutSelectedElements();
+ }
+ };
+
+ var copySelected = function() {
+ if (selectedElement != null || multiselected) {
+ svgCanvas.copySelectedElements();
+ }
+ };
+
+ var pasteInCenter = function() {
+ var zoom = svgCanvas.getZoom();
+
+ var x = (workarea[0].scrollLeft + workarea.width()/2)/zoom - svgCanvas.contentW;
+ var y = (workarea[0].scrollTop + workarea.height()/2)/zoom - svgCanvas.contentH;
+ svgCanvas.pasteElements('point', x, y);
+ }
+
+ var moveToTopSelected = function() {
+ if (selectedElement != null) {
+ svgCanvas.moveToTopSelectedElement();
+ }
+ };
+
+ var moveToBottomSelected = function() {
+ if (selectedElement != null) {
+ svgCanvas.moveToBottomSelectedElement();
+ }
+ };
+
+ var moveUpDownSelected = function(dir) {
+ if (selectedElement != null) {
+ svgCanvas.moveUpDownSelected(dir);
+ }
+ };
+
+ var convertToPath = function() {
+ if (selectedElement != null) {
+ svgCanvas.convertToPath();
+ }
+ }
+
+ var reorientPath = function() {
+ if (selectedElement != null) {
+ path.reorient();
+ }
+ }
+
+ var makeHyperlink = function() {
+ if (selectedElement != null || multiselected) {
+ $.prompt(uiStrings.notification.enterNewLinkURL, "http://", function(url) {
+ if(url) svgCanvas.makeHyperlink(url);
+ });
+ }
+ }
+
+ var moveSelected = function(dx,dy) {
+ if (selectedElement != null || multiselected) {
+ if(curConfig.gridSnapping) {
+ // Use grid snap value regardless of zoom level
+ var multi = svgCanvas.getZoom() * curConfig.snappingStep;
+ dx *= multi;
+ dy *= multi;
+ }
+ svgCanvas.moveSelectedElements(dx,dy);
+ }
+ };
+
+ var linkControlPoints = function() {
+ var linked = !$('#tool_node_link').hasClass('push_button_pressed');
+ if (linked)
+ $('#tool_node_link').addClass('push_button_pressed').removeClass('tool_button');
+ else
+ $('#tool_node_link').removeClass('push_button_pressed').addClass('tool_button');
+
+ path.linkControlPoints(linked);
+ }
+
+ var clonePathNode = function() {
+ if (path.getNodePoint()) {
+ path.clonePathNode();
+ }
+ };
+
+ var deletePathNode = function() {
+ if (path.getNodePoint()) {
+ path.deletePathNode();
+ }
+ };
+
+ var addSubPath = function() {
+ var button = $('#tool_add_subpath');
+ var sp = !button.hasClass('push_button_pressed');
+ if (sp) {
+ button.addClass('push_button_pressed').removeClass('tool_button');
+ } else {
+ button.removeClass('push_button_pressed').addClass('tool_button');
+ }
+
+ path.addSubPath(sp);
+
+ };
+
+ var opencloseSubPath = function() {
+ path.opencloseSubPath();
+ }
+
+ var selectNext = function() {
+ svgCanvas.cycleElement(1);
+ };
+
+ var selectPrev = function() {
+ svgCanvas.cycleElement(0);
+ };
+
+ var rotateSelected = function(cw,step) {
+ if (selectedElement == null || multiselected) return;
+ if(!cw) step *= -1;
+ var new_angle = $('#angle').val()*1 + step;
+ svgCanvas.setRotationAngle(new_angle);
+ updateContextPanel();
+ };
+
+ var clickClear = function(){
+ var dims = curConfig.dimensions;
+ $.confirm(uiStrings.notification.QwantToClear, function(ok) {
+ if(!ok) return;
+ setSelectMode();
+ svgCanvas.clear();
+ svgCanvas.setResolution(dims[0], dims[1]);
+ updateCanvas(true);
+ zoomImage();
+ populateLayers();
+ updateContextPanel();
+ prepPaints();
+ svgCanvas.runExtensions('onNewDocument');
+ });
+ };
+
+ var clickBold = function(){
+ svgCanvas.setBold( !svgCanvas.getBold() );
+ updateContextPanel();
+ return false;
+ };
+
+ var clickItalic = function(){
+ svgCanvas.setItalic( !svgCanvas.getItalic() );
+ updateContextPanel();
+ return false;
+ };
+
+ var clickSave = function(){
+ // In the future, more options can be provided here
+ var saveOpts = {
+ 'images': curPrefs.img_save,
+ 'round_digits': 6
+ }
+ svgCanvas.save(saveOpts);
+ };
+
+ var clickExport = function() {
+ // Open placeholder window (prevents popup)
+ if(!customHandlers.pngsave) {
+ var str = uiStrings.notification.loadingImage;
+ exportWindow = window.open("data:text/html;charset=utf-8,<title>" + str + "<\/title><h1>" + str + "<\/h1>");
+ }
+
+ if(window.canvg) {
+ svgCanvas.rasterExport();
+ } else {
+ $.getScript('canvg/rgbcolor.js', function() {
+ $.getScript('canvg/canvg.js', function() {
+ svgCanvas.rasterExport();
+ });
+ });
+ }
+ }
+
+ // by default, svgCanvas.open() is a no-op.
+ // it is up to an extension mechanism (opera widget, etc)
+ // to call setCustomHandlers() which will make it do something
+ var clickOpen = function(){
+ svgCanvas.open();
+ };
+ var clickImport = function(){
+ };
+
+ var clickUndo = function(){
+ if (undoMgr.getUndoStackSize() > 0) {
+ undoMgr.undo();
+ populateLayers();
+ }
+ };
+
+ var clickRedo = function(){
+ if (undoMgr.getRedoStackSize() > 0) {
+ undoMgr.redo();
+ populateLayers();
+ }
+ };
+
+ var clickGroup = function(){
+ // group
+ if (multiselected) {
+ svgCanvas.groupSelectedElements();
+ }
+ // ungroup
+ else if(selectedElement){
+ svgCanvas.ungroupSelectedElement();
+ }
+ };
+
+ var clickClone = function(){
+ svgCanvas.cloneSelectedElements(20,20);
+ };
+
+ var clickAlign = function() {
+ var letter = this.id.replace('tool_align','').charAt(0);
+ svgCanvas.alignSelectedElements(letter, $('#align_relative_to').val());
+ };
+
+ var zoomImage = function(multiplier) {
+ var res = svgCanvas.getResolution();
+ multiplier = multiplier?res.zoom * multiplier:1;
+ // setResolution(res.w * multiplier, res.h * multiplier, true);
+ $('#zoom').val(multiplier * 100);
+ svgCanvas.setZoom(multiplier);
+ zoomDone();
+ updateCanvas(true);
+ };
+
+ var zoomDone = function() {
+ // updateBgImage();
+ updateWireFrame();
+ //updateCanvas(); // necessary?
+ }
+
+ var clickWireframe = function() {
+ var wf = !$('#tool_wireframe').hasClass('push_button_pressed');
+ if (wf)
+ $('#tool_wireframe').addClass('push_button_pressed').removeClass('tool_button');
+ else
+ $('#tool_wireframe').removeClass('push_button_pressed').addClass('tool_button');
+ workarea.toggleClass('wireframe');
+
+ if(supportsNonSS) return;
+ var wf_rules = $('#wireframe_rules');
+ if(!wf_rules.length) {
+ wf_rules = $('<style id="wireframe_rules"><\/style>').appendTo('head');
+ } else {
+ wf_rules.empty();
+ }
+
+ updateWireFrame();
+ }
+
+ var updateWireFrame = function() {
+ // Test support
+ if(supportsNonSS) return;
+
+ var rule = "#workarea.wireframe #svgcontent * { stroke-width: " + 1/svgCanvas.getZoom() + "px; }";
+ $('#wireframe_rules').text(workarea.hasClass('wireframe') ? rule : "");
+ }
+
+ var showSourceEditor = function(e, forSaving){
+ if (editingsource) return;
+ editingsource = true;
+
+ $('#save_output_btns').toggle(!!forSaving);
+ $('#tool_source_back').toggle(!forSaving);
+
+ var str = orig_source = svgCanvas.getSvgString();
+ $('#svg_source_textarea').val(str);
+ $('#svg_source_editor').fadeIn();
+ properlySourceSizeTextArea();
+ $('#svg_source_textarea').focus();
+ };
+
+ $('#svg_docprops_container, #svg_prefs_container').draggable({cancel:'button,fieldset', containment: 'window'});
+
+ var showDocProperties = function(){
+ if (docprops) return;
+ docprops = true;
+
+ // This selects the correct radio button by using the array notation
+ $('#image_save_opts input').val([curPrefs.img_save]);
+
+ // update resolution option with actual resolution
+ var res = svgCanvas.getResolution();
+ if(curConfig.baseUnit !== "px") {
+ res.w = svgedit.units.convertUnit(res.w) + curConfig.baseUnit;
+ res.h = svgedit.units.convertUnit(res.h) + curConfig.baseUnit;
+ }
+
+ $('#canvas_width').val(res.w);
+ $('#canvas_height').val(res.h);
+ $('#canvas_title').val(svgCanvas.getDocumentTitle());
+
+ $('#svg_docprops').show();
+ };
+
+
+ var showPreferences = function(){
+ if (preferences) return;
+ preferences = true;
+ $('#main_menu').hide();
+
+ // Update background color with current one
+ var blocks = $('#bg_blocks div');
+ var cur_bg = 'cur_background';
+ var canvas_bg = $.pref('bkgd_color');
+ var url = $.pref('bkgd_url');
+ // if(url) url = url[1];
+ blocks.each(function() {
+ var blk = $(this);
+ var is_bg = blk.css('background-color') == canvas_bg;
+ blk.toggleClass(cur_bg, is_bg);
+ if(is_bg) $('#canvas_bg_url').removeClass(cur_bg);
+ });
+ if(!canvas_bg) blocks.eq(0).addClass(cur_bg);
+ if(url) {
+ $('#canvas_bg_url').val(url);
+ }
+ $('grid_snapping_step').attr('value', curConfig.snappingStep);
+ if (curConfig.gridSnapping == true) {
+ $('#grid_snapping_on').attr('checked', 'checked');
+ } else {
+ $('#grid_snapping_on').removeAttr('checked');
+ }
+
+ $('#svg_prefs').show();
+ };
+
+ var properlySourceSizeTextArea = function(){
+ // TODO: remove magic numbers here and get values from CSS
+ var height = $('#svg_source_container').height() - 80;
+ $('#svg_source_textarea').css('height', height);
+ };
+
+ var saveSourceEditor = function(){
+ if (!editingsource) return;
+
+ var saveChanges = function() {
+ svgCanvas.clearSelection();
+ hideSourceEditor();
+ zoomImage();
+ populateLayers();
+ updateTitle();
+ prepPaints();
+ }
+
+ if (!svgCanvas.setSvgString($('#svg_source_textarea').val())) {
+ $.confirm(uiStrings.notification.QerrorsRevertToSource, function(ok) {
+ if(!ok) return false;
+ saveChanges();
+ });
+ } else {
+ saveChanges();
+ }
+ setSelectMode();
+ };
+
+ var updateTitle = function(title) {
+ title = title || svgCanvas.getDocumentTitle();
+ var new_title = orig_title + (title?': ' + title:'');
+
+ // Remove title update with current context info, isn't really necessary
+// if(cur_context) {
+// new_title = new_title + cur_context;
+// }
+ $('title:first').text(new_title);
+ }
+
+ var saveDocProperties = function(){
+ // set title
+ var new_title = $('#canvas_title').val();
+ updateTitle(new_title);
+ svgCanvas.setDocumentTitle(new_title);
+
+ // update resolution
+ var width = $('#canvas_width'), w = width.val();
+ var height = $('#canvas_height'), h = height.val();
+
+ if(w != "fit" && !svgedit.units.isValidUnit('width', w)) {
+ $.alert(uiStrings.notification.invalidAttrValGiven);
+ width.parent().addClass('error');
+ return false;
+ }
+
+ width.parent().removeClass('error');
+
+ if(h != "fit" && !svgedit.units.isValidUnit('height', h)) {
+ $.alert(uiStrings.notification.invalidAttrValGiven);
+ height.parent().addClass('error');
+ return false;
+ }
+
+ height.parent().removeClass('error');
+
+ if(!svgCanvas.setResolution(w, h)) {
+ $.alert(uiStrings.notification.noContentToFitTo);
+ return false;
+ }
+
+ // set image save option
+ curPrefs.img_save = $('#image_save_opts :checked').val();
+ $.pref('img_save',curPrefs.img_save);
+ updateCanvas();
+ hideDocProperties();
+ };
+
+ var savePreferences = function() {
+ // set background
+ var color = $('#bg_blocks div.cur_background').css('background-color') || '#FFF';
+ setBackground(color, $('#canvas_bg_url').val());
+
+ // set language
+ var lang = $('#lang_select').val();
+ if(lang != curPrefs.lang) {
+ Editor.putLocale(lang);
+ }
+
+ // set icon size
+ setIconSize($('#iconsize').val());
+
+ // set grid setting
+ curConfig.gridSnapping = $('#grid_snapping_on')[0].checked;
+ curConfig.snappingStep = $('#grid_snapping_step').val();
+ curConfig.showRulers = $('#show_rulers')[0].checked;
+
+ $('#rulers').toggle(curConfig.showRulers);
+ if(curConfig.showRulers) updateRulers();
+ curConfig.baseUnit = $('#base_unit').val();
+
+ svgCanvas.setConfig(curConfig);
+
+ updateCanvas();
+ hidePreferences();
+ }
+
+ function setBackground(color, url) {
+// if(color == curPrefs.bkgd_color && url == curPrefs.bkgd_url) return;
+ $.pref('bkgd_color', color);
+ $.pref('bkgd_url', url);
+
+ // This should be done in svgcanvas.js for the borderRect fill
+ svgCanvas.setBackground(color, url);
+ }
+
+ var setIcon = Editor.setIcon = function(elem, icon_id, forcedSize) {
+ var icon = (typeof icon_id === 'string') ? $.getSvgIcon(icon_id, true) : icon_id.clone();
+ if(!icon) {
+ console.log('NOTE: Icon image missing: ' + icon_id);
+ return;
+ }
+
+ $(elem).empty().append(icon);
+ }
+
+ var ua_prefix;
+ (ua_prefix = function() {
+ var regex = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/;
+ var someScript = document.getElementsByTagName('script')[0];
+ for(var prop in someScript.style) {
+ if(regex.test(prop)) {
+ // test is faster than match, so it's better to perform
+ // that on the lot and match only when necessary
+ return prop.match(regex)[0];
+ }
+ }
+
+ // Nothing found so far?
+ if('WebkitOpacity' in someScript.style) return 'Webkit';
+ if('KhtmlOpacity' in someScript.style) return 'Khtml';
+
+ return '';
+ }());
+
+ var scaleElements = function(elems, scale) {
+ var prefix = '-' + ua_prefix.toLowerCase() + '-';
+
+ var sides = ['top', 'left', 'bottom', 'right'];
+
+ elems.each(function() {
+// console.log('go', scale);
+
+ // Handled in CSS
+ // this.style[ua_prefix + 'Transform'] = 'scale(' + scale + ')';
+
+ var el = $(this);
+
+ var w = el.outerWidth() * (scale - 1);
+ var h = el.outerHeight() * (scale - 1);
+ var margins = {};
+
+ for(var i = 0; i < 4; i++) {
+ var s = sides[i];
+
+ var cur = el.data('orig_margin-' + s);
+ if(cur == null) {
+ cur = parseInt(el.css('margin-' + s));
+ // Cache the original margin
+ el.data('orig_margin-' + s, cur);
+ }
+ var val = cur * scale;
+ if(s === 'right') {
+ val += w;
+ } else if(s === 'bottom') {
+ val += h;
+ }
+
+ el.css('margin-' + s, val);
+// el.css('outline', '1px solid red');
+ }
+ });
+ }
+
+ var setIconSize = Editor.setIconSize = function(size, force) {
+ if(size == curPrefs.size && !force) return;
+// return;
+// var elems = $('.tool_button, .push_button, .tool_button_current, .disabled, .icon_label, #url_notice, #tool_open');
+ console.log('size', size);
+
+ var sel_toscale = '#tools_top .toolset, #editor_panel > *, #history_panel > *,\
+ #main_button, #tools_left > *, #path_node_panel > *, #multiselected_panel > *,\
+ #g_panel > *, #tool_font_size > *, .tools_flyout';
+
+ var elems = $(sel_toscale);
+
+ var scale = 1;
+
+ if(typeof size == 'number') {
+ scale = size;
+ } else {
+ var icon_sizes = { s:.75, m:1, l:1.25, xl:1.5 };
+ scale = icon_sizes[size];
+ }
+
+ Editor.tool_scale = tool_scale = scale;
+
+ setFlyoutPositions();
+ // $('.tools_flyout').each(function() {
+// var pos = $(this).position();
+// console.log($(this), pos.left+(34 * scale));
+// $(this).css({'left': pos.left+(34 * scale), 'top': pos.top+(77 * scale)});
+// console.log('l', $(this).css('left'));
+// });
+
+// var scale = .75;//0.75;
+
+ var hidden_ps = elems.parents(':hidden');
+ hidden_ps.css('visibility', 'hidden').show();
+ scaleElements(elems, scale);
+ hidden_ps.css('visibility', 'visible').hide();
+// console.timeEnd('elems');
+// return;
+
+ $.pref('iconsize', size);
+ $('#iconsize').val(size);
+
+
+ // Change icon size
+// $('.tool_button, .push_button, .tool_button_current, .disabled, .icon_label, #url_notice, #tool_open')
+// .find('> svg, > img').each(function() {
+// this.setAttribute('width',size_num);
+// this.setAttribute('height',size_num);
+// });
+//
+// $.resizeSvgIcons({
+// '.flyout_arrow_horiz > svg, .flyout_arrow_horiz > img': size_num / 5,
+// '#logo > svg, #logo > img': size_num * 1.3,
+// '#tools_bottom .icon_label > *': (size_num === 16 ? 18 : size_num * .75)
+// });
+// if(size != 's') {
+// $.resizeSvgIcons({'#layerbuttons svg, #layerbuttons img': size_num * .6});
+// }
+
+ // Note that all rules will be prefixed with '#svg_editor' when parsed
+ var cssResizeRules = {
+// ".tool_button,\
+// .push_button,\
+// .tool_button_current,\
+// .push_button_pressed,\
+// .disabled,\
+// .icon_label,\
+// .tools_flyout .tool_button": {
+// 'width': {s: '16px', l: '32px', xl: '48px'},
+// 'height': {s: '16px', l: '32px', xl: '48px'},
+// 'padding': {s: '1px', l: '2px', xl: '3px'}
+// },
+// ".tool_sep": {
+// 'height': {s: '16px', l: '32px', xl: '48px'},
+// 'margin': {s: '2px 2px', l: '2px 5px', xl: '2px 8px'}
+// },
+// "#main_icon": {
+// 'width': {s: '31px', l: '53px', xl: '75px'},
+// 'height': {s: '22px', l: '42px', xl: '64px'}
+// },
+ "#tools_top": {
+ 'left': 50,
+ 'height': 72
+ },
+ "#tools_left": {
+ 'width': 31,
+ 'top': 74
+ },
+ "div#workarea": {
+ 'left': 38,
+ 'top': 74
+ }
+// "#tools_bottom": {
+// 'left': {s: '27px', l: '46px', xl: '65px'},
+// 'height': {s: '58px', l: '98px', xl: '145px'}
+// },
+// "#color_tools": {
+// 'border-spacing': {s: '0 1px'},
+// 'margin-top': {s: '-1px'}
+// },
+// "#color_tools .icon_label": {
+// 'width': {l:'43px', xl: '60px'}
+// },
+// ".color_tool": {
+// 'height': {s: '20px'}
+// },
+// "#tool_opacity": {
+// 'top': {s: '1px'},
+// 'height': {s: 'auto', l:'auto', xl:'auto'}
+// },
+// "#tools_top input, #tools_bottom input": {
+// 'margin-top': {s: '2px', l: '4px', xl: '5px'},
+// 'height': {s: 'auto', l: 'auto', xl: 'auto'},
+// 'border': {s: '1px solid #555', l: 'auto', xl: 'auto'},
+// 'font-size': {s: '.9em', l: '1.2em', xl: '1.4em'}
+// },
+// "#zoom_panel": {
+// 'margin-top': {s: '3px', l: '4px', xl: '5px'}
+// },
+// "#copyright, #tools_bottom .label": {
+// 'font-size': {l: '1.5em', xl: '2em'},
+// 'line-height': {s: '15px'}
+// },
+// "#tools_bottom_2": {
+// 'width': {l: '295px', xl: '355px'},
+// 'top': {s: '4px'}
+// },
+// "#tools_top > div, #tools_top": {
+// 'line-height': {s: '17px', l: '34px', xl: '50px'}
+// },
+// ".dropdown button": {
+// 'height': {s: '18px', l: '34px', xl: '40px'},
+// 'line-height': {s: '18px', l: '34px', xl: '40px'},
+// 'margin-top': {s: '3px'}
+// },
+// "#tools_top label, #tools_bottom label": {
+// 'font-size': {s: '1em', l: '1.5em', xl: '2em'},
+// 'height': {s: '25px', l: '42px', xl: '64px'}
+// },
+// "div.toolset": {
+// 'height': {s: '25px', l: '42px', xl: '64px'}
+// },
+// "#tool_bold, #tool_italic": {
+// 'font-size': {s: '1.5em', l: '3em', xl: '4.5em'}
+// },
+// "#sidepanels": {
+// 'top': {s: '50px', l: '88px', xl: '125px'},
+// 'bottom': {s: '51px', l: '68px', xl: '65px'}
+// },
+// '#layerbuttons': {
+// 'width': {l: '130px', xl: '175px'},
+// 'height': {l: '24px', xl: '30px'}
+// },
+// '#layerlist': {
+// 'width': {l: '128px', xl: '150px'}
+// },
+// '.layer_button': {
+// 'width': {l: '19px', xl: '28px'},
+// 'height': {l: '19px', xl: '28px'}
+// },
+// "input.spin-button": {
+// 'background-image': {l: "url('images/spinbtn_updn_big.png')", xl: "url('images/spinbtn_updn_big.png')"},
+// 'background-position': {l: '100% -5px', xl: '100% -2px'},
+// 'padding-right': {l: '24px', xl: '24px' }
+// },
+// "input.spin-button.up": {
+// 'background-position': {l: '100% -45px', xl: '100% -42px'}
+// },
+// "input.spin-button.down": {
+// 'background-position': {l: '100% -85px', xl: '100% -82px'}
+// },
+// "#position_opts": {
+// 'width': {all: (size_num*4) +'px'}
+// }
+ };
+
+ var rule_elem = $('#tool_size_rules');
+ if(!rule_elem.length) {
+ rule_elem = $('<style id="tool_size_rules"><\/style>').appendTo('head');
+ } else {
+ rule_elem.empty();
+ }
+
+ if(size != 'm') {
+ var style_str = '';
+ $.each(cssResizeRules, function(selector, rules) {
+ selector = '#svg_editor ' + selector.replace(/,/g,', #svg_editor');
+ style_str += selector + '{';
+ $.each(rules, function(prop, values) {
+ if(typeof values === 'number') {
+ var val = (values * scale) + 'px';
+ } else if(values[size] || values.all) {
+ var val = (values[size] || values.all);
+ }
+ style_str += (prop + ':' + val + ';');
+ });
+ style_str += '}';
+ });
+ //this.style[ua_prefix + 'Transform'] = 'scale(' + scale + ')';
+ var prefix = '-' + ua_prefix.toLowerCase() + '-';
+ style_str += (sel_toscale + '{' + prefix + 'transform: scale(' + scale + ');}'
+ + ' #svg_editor div.toolset .toolset {' + prefix + 'transform: scale(1); margin: 1px !important;}' // Hack for markers
+ + ' #svg_editor .ui-slider {' + prefix + 'transform: scale(' + (1/scale) + ');}' // Hack for sliders
+ );
+ rule_elem.text(style_str);
+ }
+
+ setFlyoutPositions();
+ }
+
+ var cancelOverlays = function() {
+ $('#dialog_box').hide();
+ if (!editingsource && !docprops && !preferences) {
+ if(cur_context) {
+ svgCanvas.leaveContext();
+ }
+ return;
+ };
+
+ if (editingsource) {
+ if (orig_source !== $('#svg_source_textarea').val()) {
+ $.confirm(uiStrings.notification.QignoreSourceChanges, function(ok) {
+ if(ok) hideSourceEditor();
+ });
+ } else {
+ hideSourceEditor();
+ }
+ }
+ else if (docprops) {
+ hideDocProperties();
+ } else if (preferences) {
+ hidePreferences();
+ }
+ resetScrollPos();
+ };
+
+ var hideSourceEditor = function(){
+ $('#svg_source_editor').hide();
+ editingsource = false;
+ $('#svg_source_textarea').blur();
+ };
+
+ var hideDocProperties = function(){
+ $('#svg_docprops').hide();
+ $('#canvas_width,#canvas_height').removeAttr('disabled');
+ $('#resolution')[0].selectedIndex = 0;
+ $('#image_save_opts input').val([curPrefs.img_save]);
+ docprops = false;
+ };
+
+ var hidePreferences = function(){
+ $('#svg_prefs').hide();
+ preferences = false;
+ };
+
+ var win_wh = {width:$(window).width(), height:$(window).height()};
+
+ var resetScrollPos = $.noop, curScrollPos;
+
+ // Fix for Issue 781: Drawing area jumps to top-left corner on window resize (IE9)
+ if(svgedit.browser.isIE()) {
+ (function() {
+ resetScrollPos = function() {
+ if(workarea[0].scrollLeft === 0
+ && workarea[0].scrollTop === 0) {
+ workarea[0].scrollLeft = curScrollPos.left;
+ workarea[0].scrollTop = curScrollPos.top;
+ }
+ }
+
+ curScrollPos = {
+ left: workarea[0].scrollLeft,
+ top: workarea[0].scrollTop
+ };
+
+ $(window).resize(resetScrollPos);
+ svgEditor.ready(function() {
+ // TODO: Find better way to detect when to do this to minimize
+ // flickering effect
+ setTimeout(function() {
+ resetScrollPos();
+ }, 500);
+ });
+
+ workarea.scroll(function() {
+ curScrollPos = {
+ left: workarea[0].scrollLeft,
+ top: workarea[0].scrollTop
+ };
+ });
+ }());
+ }
+
+ $(window).resize(function(evt) {
+ if (editingsource) {
+ properlySourceSizeTextArea();
+ }
+
+ $.each(win_wh, function(type, val) {
+ var curval = $(window)[type]();
+ workarea[0]['scroll' + (type==='width'?'Left':'Top')] -= (curval - val)/2;
+ win_wh[type] = curval;
+ });
+ });
+
+ (function() {
+ workarea.scroll(function() {
+ // TODO: jQuery's scrollLeft/Top() wouldn't require a null check
+ if ($('#ruler_x').length != 0) {
+ $('#ruler_x')[0].scrollLeft = workarea[0].scrollLeft;
+ }
+ if ($('#ruler_y').length != 0) {
+ $('#ruler_y')[0].scrollTop = workarea[0].scrollTop;
+ }
+ });
+
+ }());
+
+ $('#url_notice').click(function() {
+ $.alert(this.title);
+ });
+
+ $('#change_image_url').click(promptImgURL);
+
+ function promptImgURL() {
+ var curhref = svgCanvas.getHref(selectedElement);
+ curhref = curhref.indexOf("data:") === 0?"":curhref;
+ $.prompt(uiStrings.notification.enterNewImgURL, curhref, function(url) {
+ if(url) setImageURL(url);
+ });
+ }
+
+ // added these event handlers for all the push buttons so they
+ // behave more like buttons being pressed-in and not images
+ (function() {
+ var toolnames = ['clear','open','save','source','delete','delete_multi','paste','clone','clone_multi','move_top','move_bottom'];
+ var all_tools = '';
+ var cur_class = 'tool_button_current';
+
+ $.each(toolnames, function(i,item) {
+ all_tools += '#tool_' + item + (i==toolnames.length-1?',':'');
+ });
+
+ $(all_tools).mousedown(function() {
+ $(this).addClass(cur_class);
+ }).bind('mousedown mouseout', function() {
+ $(this).removeClass(cur_class);
+ });
+
+ $('#tool_undo, #tool_redo').mousedown(function(){
+ if (!$(this).hasClass('disabled')) $(this).addClass(cur_class);
+ }).bind('mousedown mouseout',function(){
+ $(this).removeClass(cur_class);}
+ );
+ }());
+
+ // switch modifier key in tooltips if mac
+ // NOTE: This code is not used yet until I can figure out how to successfully bind ctrl/meta
+ // in Opera and Chrome
+ if (isMac && !window.opera) {
+ var shortcutButtons = ["tool_clear", "tool_save", "tool_source", "tool_undo", "tool_redo", "tool_clone"];
+ var i = shortcutButtons.length;
+ while (i--) {
+ var button = document.getElementById(shortcutButtons[i]);
+ if (button != null) {
+ var title = button.title;
+ var index = title.indexOf("Ctrl+");
+ button.title = [title.substr(0, index), "Cmd+", title.substr(index + 5)].join('');
+ }
+ }
+ }
+
+ // TODO: go back to the color boxes having white background-color and then setting
+ // background-image to none.png (otherwise partially transparent gradients look weird)
+ var colorPicker = function(elem) {
+ var picker = elem.attr('id') == 'stroke_color' ? 'stroke' : 'fill';
+// var opacity = (picker == 'stroke' ? $('#stroke_opacity') : $('#fill_opacity'));
+ var paint = paintBox[picker].paint;
+ var title = (picker == 'stroke' ? 'Pick a Stroke Paint and Opacity' : 'Pick a Fill Paint and Opacity');
+ var was_none = false;
+ var pos = elem.position();
+ $("#color_picker")
+ .draggable({cancel:'.jGraduate_tabs, .jGraduate_colPick, .jGraduate_gradPick, .jPicker', containment: 'window'})
+ .css(curConfig.colorPickerCSS || {'left': pos.left, 'bottom': 50 - pos.top})
+ .jGraduate(
+ {
+ paint: paint,
+ window: { pickerTitle: title },
+ images: { clientPath: curConfig.jGraduatePath },
+ newstop: 'inverse'
+ },
+ function(p) {
+ paint = new $.jGraduate.Paint(p);
+
+ paintBox[picker].setPaint(paint);
+ svgCanvas.setPaint(picker, paint);
+
+ $('#color_picker').hide();
+ },
+ function(p) {
+ $('#color_picker').hide();
+ });
+ };
+
+ var updateToolButtonState = function() {
+ var bNoFill = (svgCanvas.getColor('fill') == 'none');
+ var bNoStroke = (svgCanvas.getColor('stroke') == 'none');
+ var buttonsNeedingStroke = [ '#tool_fhpath', '#tool_line' ];
+ var buttonsNeedingFillAndStroke = [ '#tools_rect .tool_button', '#tools_ellipse .tool_button', '#tool_text', '#tool_path'];
+ if (bNoStroke) {
+ for (var index in buttonsNeedingStroke) {
+ var button = buttonsNeedingStroke[index];
+ if ($(button).hasClass('tool_button_current')) {
+ clickSelect();
+ }
+ $(button).addClass('disabled');
+ }
+ }
+ else {
+ for (var index in buttonsNeedingStroke) {
+ var button = buttonsNeedingStroke[index];
+ $(button).removeClass('disabled');
+ }
+ }
+
+ if (bNoStroke && bNoFill) {
+ for (var index in buttonsNeedingFillAndStroke) {
+ var button = buttonsNeedingFillAndStroke[index];
+ if ($(button).hasClass('tool_button_current')) {
+ clickSelect();
+ }
+ $(button).addClass('disabled');
+ }
+ }
+ else {
+ for (var index in buttonsNeedingFillAndStroke) {
+ var button = buttonsNeedingFillAndStroke[index];
+ $(button).removeClass('disabled');
+ }
+ }
+
+ svgCanvas.runExtensions("toolButtonStateUpdate", {
+ nofill: bNoFill,
+ nostroke: bNoStroke
+ });
+
+ // Disable flyouts if all inside are disabled
+ $('.tools_flyout').each(function() {
+ var shower = $('#' + this.id + '_show');
+ var has_enabled = false;
+ $(this).children().each(function() {
+ if(!$(this).hasClass('disabled')) {
+ has_enabled = true;
+ }
+ });
+ shower.toggleClass('disabled', !has_enabled);
+ });
+
+ operaRepaint();
+ };
+
+
+
+ var PaintBox = function(container, type) {
+ var cur = curConfig[type === 'fill' ? 'initFill' : 'initStroke'];
+
+ // set up gradients to be used for the buttons
+ var svgdocbox = new DOMParser().parseFromString(
+ '<svg xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%"\
+ fill="#' + cur.color + '" opacity="' + cur.opacity + '"/>\
+ <defs><linearGradient id="gradbox_"/></defs></svg>', 'text/xml');
+ var docElem = svgdocbox.documentElement;
+
+ docElem = $(container)[0].appendChild(document.importNode(docElem, true));
+
+ docElem.setAttribute('width',16.5);
+
+ this.rect = docElem.firstChild;
+ this.defs = docElem.getElementsByTagName('defs')[0];
+ this.grad = this.defs.firstChild;
+ this.paint = new $.jGraduate.Paint({solidColor: cur.color});
+ this.type = type;
+
+ this.setPaint = function(paint, apply) {
+ this.paint = paint;
+
+ var fillAttr = "none";
+ var ptype = paint.type;
+ var opac = paint.alpha / 100;
+
+ switch ( ptype ) {
+ case 'solidColor':
+ fillAttr = "#" + paint[ptype];
+ break;
+ case 'linearGradient':
+ case 'radialGradient':
+ this.defs.removeChild(this.grad);
+ this.grad = this.defs.appendChild(paint[ptype]);
+ var id = this.grad.id = 'gradbox_' + this.type;
+ fillAttr = "url(#" + id + ')';
+ }
+
+ this.rect.setAttribute('fill', fillAttr);
+ this.rect.setAttribute('opacity', opac);
+
+ if(apply) {
+ svgCanvas.setColor(this.type, paintColor, true);
+ svgCanvas.setPaintOpacity(this.type, paintOpacity, true);
+ }
+ }
+
+ this.update = function(apply) {
+ if(!selectedElement) return;
+ var type = this.type;
+
+ switch ( selectedElement.tagName ) {
+ case 'use':
+ case 'image':
+ case 'foreignObject':
+ // These elements don't have fill or stroke, so don't change
+ // the current value
+ return;
+ case 'g':
+ case 'a':
+ var gPaint = null;
+
+ var childs = selectedElement.getElementsByTagName('*');
+ for(var i = 0, len = childs.length; i < len; i++) {
+ var elem = childs[i];
+ var p = elem.getAttribute(type);
+ if(i === 0) {
+ gPaint = p;
+ } else if(gPaint !== p) {
+ gPaint = null;
+ break;
+ }
+ }
+ if(gPaint === null) {
+ // No common color, don't update anything
+ var paintColor = null;
+ return;
+ }
+ var paintColor = gPaint;
+
+ var paintOpacity = 1;
+ break;
+ default:
+ var paintOpacity = parseFloat(selectedElement.getAttribute(type + "-opacity"));
+ if (isNaN(paintOpacity)) {
+ paintOpacity = 1.0;
+ }
+
+ var defColor = type === "fill" ? "black" : "none";
+ var paintColor = selectedElement.getAttribute(type) || defColor;
+ }
+
+ if(apply) {
+ svgCanvas.setColor(type, paintColor, true);
+ svgCanvas.setPaintOpacity(type, paintOpacity, true);
+ }
+
+ paintOpacity *= 100;
+
+ var paint = getPaint(paintColor, paintOpacity, type);
+ // update the rect inside #fill_color/#stroke_color
+ this.setPaint(paint);
+ }
+
+ this.prep = function() {
+ var ptype = this.paint.type;
+
+ switch ( ptype ) {
+ case 'linearGradient':
+ case 'radialGradient':
+ var paint = new $.jGraduate.Paint({copy: this.paint});
+ svgCanvas.setPaint(type, paint);
+ }
+ }
+ };
+
+ paintBox.fill = new PaintBox('#fill_color', 'fill');
+ paintBox.stroke = new PaintBox('#stroke_color', 'stroke');
+
+ $('#stroke_width').val(curConfig.initStroke.width);
+ $('#group_opacity').val(curConfig.initOpacity * 100);
+
+ // Use this SVG elem to test vectorEffect support
+ var test_el = paintBox.fill.rect.cloneNode(false);
+ test_el.setAttribute('style','vector-effect:non-scaling-stroke');
+ var supportsNonSS = (test_el.style.vectorEffect === 'non-scaling-stroke');
+ test_el.removeAttribute('style');
+ var svgdocbox = paintBox.fill.rect.ownerDocument;
+ // Use this to test support for blur element. Seems to work to test support in Webkit
+ var blur_test = svgdocbox.createElementNS('http://www.w3.org/2000/svg', 'feGaussianBlur');
+ if(typeof blur_test.stdDeviationX === "undefined") {
+ $('#tool_blur').hide();
+ }
+ $(blur_test).remove();
+
+ // Test for zoom icon support
+ (function() {
+ var pre = '-' + ua_prefix.toLowerCase() + '-zoom-';
+ var zoom = pre + 'in';
+ workarea.css('cursor', zoom);
+ if(workarea.css('cursor') === zoom) {
+ zoomInIcon = zoom;
+ zoomOutIcon = pre + 'out';
+ }
+ workarea.css('cursor', 'auto');
+ }());
+
+
+
+ // Test for embedImage support (use timeout to not interfere with page load)
+ setTimeout(function() {
+ svgCanvas.embedImage('images/logo.png', function(datauri) {
+ if(!datauri) {
+ // Disable option
+ $('#image_save_opts [value=embed]').attr('disabled','disabled');
+ $('#image_save_opts input').val(['ref']);
+ curPrefs.img_save = 'ref';
+ $('#image_opt_embed').css('color','#666').attr('title',uiStrings.notification.featNotSupported);
+ }
+ });
+ },1000);
+
+ $('#fill_color, #tool_fill .icon_label').click(function(){
+ colorPicker($('#fill_color'));
+ updateToolButtonState();
+ });
+
+ $('#stroke_color, #tool_stroke .icon_label').click(function(){
+ colorPicker($('#stroke_color'));
+ updateToolButtonState();
+ });
+
+ $('#group_opacityLabel').click(function() {
+ $('#opacity_dropdown button').mousedown();
+ $(window).mouseup();
+ });
+
+ $('#zoomLabel').click(function() {
+ $('#zoom_dropdown button').mousedown();
+ $(window).mouseup();
+ });
+
+ $('#tool_move_top').mousedown(function(evt){
+ $('#tools_stacking').show();
+ evt.preventDefault();
+ });
+
+ $('.layer_button').mousedown(function() {
+ $(this).addClass('layer_buttonpressed');
+ }).mouseout(function() {
+ $(this).removeClass('layer_buttonpressed');
+ }).mouseup(function() {
+ $(this).removeClass('layer_buttonpressed');
+ });
+
+ $('.push_button').mousedown(function() {
+ if (!$(this).hasClass('disabled')) {
+ $(this).addClass('push_button_pressed').removeClass('push_button');
+ }
+ }).mouseout(function() {
+ $(this).removeClass('push_button_pressed').addClass('push_button');
+ }).mouseup(function() {
+ $(this).removeClass('push_button_pressed').addClass('push_button');
+ });
+
+ $('#layer_new').click(function() {
+ var i = svgCanvas.getCurrentDrawing().getNumLayers();
+ do {
+ var uniqName = uiStrings.layers.layer + " " + ++i;
+ } while(svgCanvas.getCurrentDrawing().hasLayer(uniqName));
+
+ $.prompt(uiStrings.notification.enterUniqueLayerName,uniqName, function(newName) {
+ if (!newName) return;
+ if (svgCanvas.getCurrentDrawing().hasLayer(newName)) {
+ $.alert(uiStrings.notification.dupeLayerName);
+ return;
+ }
+ svgCanvas.createLayer(newName);
+ updateContextPanel();
+ populateLayers();
+ });
+ });
+
+ function deleteLayer() {
+ if (svgCanvas.deleteCurrentLayer()) {
+ updateContextPanel();
+ populateLayers();
+ // This matches what SvgCanvas does
+ // TODO: make this behavior less brittle (svg-editor should get which
+ // layer is selected from the canvas and then select that one in the UI)
+ $('#layerlist tr.layer').removeClass("layersel");
+ $('#layerlist tr.layer:first').addClass("layersel");
+ }
+ }
+
+ function cloneLayer() {
+ var name = svgCanvas.getCurrentDrawing().getCurrentLayerName() + ' copy';
+
+ $.prompt(uiStrings.notification.enterUniqueLayerName, name, function(newName) {
+ if (!newName) return;
+ if (svgCanvas.getCurrentDrawing().hasLayer(newName)) {
+ $.alert(uiStrings.notification.dupeLayerName);
+ return;
+ }
+ svgCanvas.cloneLayer(newName);
+ updateContextPanel();
+ populateLayers();
+ });
+ }
+
+ function mergeLayer() {
+ if($('#layerlist tr.layersel').index() == svgCanvas.getCurrentDrawing().getNumLayers()-1) return;
+ svgCanvas.mergeLayer();
+ updateContextPanel();
+ populateLayers();
+ }
+
+ function moveLayer(pos) {
+ var curIndex = $('#layerlist tr.layersel').index();
+ var total = svgCanvas.getCurrentDrawing().getNumLayers();
+ if(curIndex > 0 || curIndex < total-1) {
+ curIndex += pos;
+ svgCanvas.setCurrentLayerPosition(total-curIndex-1);
+ populateLayers();
+ }
+ }
+
+ $('#layer_delete').click(deleteLayer);
+
+ $('#layer_up').click(function() {
+ moveLayer(-1);
+ });
+
+ $('#layer_down').click(function() {
+ moveLayer(1);
+ });
+
+ $('#layer_rename').click(function() {
+ var curIndex = $('#layerlist tr.layersel').prevAll().length;
+ var oldName = $('#layerlist tr.layersel td.layername').text();
+ $.prompt(uiStrings.notification.enterNewLayerName,"", function(newName) {
+ if (!newName) return;
+ if (oldName == newName || svgCanvas.getCurrentDrawing().hasLayer(newName)) {
+ $.alert(uiStrings.notification.layerHasThatName);
+ return;
+ }
+
+ svgCanvas.renameCurrentLayer(newName);
+ populateLayers();
+ });
+ });
+
+ var SIDEPANEL_MAXWIDTH = 300;
+ var SIDEPANEL_OPENWIDTH = 150;
+ var sidedrag = -1, sidedragging = false, allowmove = false;
+
+ var resizePanel = function(evt) {
+ if (!allowmove) return;
+ if (sidedrag == -1) return;
+ sidedragging = true;
+ var deltax = sidedrag - evt.pageX;
+
+ var sidepanels = $('#sidepanels');
+ var sidewidth = parseInt(sidepanels.css('width'));
+ if (sidewidth+deltax > SIDEPANEL_MAXWIDTH) {
+ deltax = SIDEPANEL_MAXWIDTH - sidewidth;
+ sidewidth = SIDEPANEL_MAXWIDTH;
+ }
+ else if (sidewidth+deltax < 2) {
+ deltax = 2 - sidewidth;
+ sidewidth = 2;
+ }
+
+ if (deltax == 0) return;
+ sidedrag -= deltax;
+
+ var layerpanel = $('#layerpanel');
+ workarea.css('right', parseInt(workarea.css('right'))+deltax);
+ sidepanels.css('width', parseInt(sidepanels.css('width'))+deltax);
+ layerpanel.css('width', parseInt(layerpanel.css('width'))+deltax);
+ var ruler_x = $('#ruler_x');
+ ruler_x.css('right', parseInt(ruler_x.css('right')) + deltax);
+ }
+
+ $('#sidepanel_handle')
+ .mousedown(function(evt) {
+ sidedrag = evt.pageX;
+ $(window).mousemove(resizePanel);
+ allowmove = false;
+ // Silly hack for Chrome, which always runs mousemove right after mousedown
+ setTimeout(function() {
+ allowmove = true;
+ }, 20);
+ })
+ .mouseup(function(evt) {
+ if (!sidedragging) toggleSidePanel();
+ sidedrag = -1;
+ sidedragging = false;
+ });
+
+ $(window).mouseup(function() {
+ sidedrag = -1;
+ sidedragging = false;
+ $('#svg_editor').unbind('mousemove', resizePanel);
+ });
+
+ // if width is non-zero, then fully close it, otherwise fully open it
+ // the optional close argument forces the side panel closed
+ var toggleSidePanel = function(close){
+ var w = parseInt($('#sidepanels').css('width'));
+ var deltax = (w > 2 || close ? 2 : SIDEPANEL_OPENWIDTH) - w;
+ var sidepanels = $('#sidepanels');
+ var layerpanel = $('#layerpanel');
+ var ruler_x = $('#ruler_x');
+ workarea.css('right', parseInt(workarea.css('right')) + deltax);
+ sidepanels.css('width', parseInt(sidepanels.css('width')) + deltax);
+ layerpanel.css('width', parseInt(layerpanel.css('width')) + deltax);
+ ruler_x.css('right', parseInt(ruler_x.css('right')) + deltax);
+ };
+
+ // this function highlights the layer passed in (by fading out the other layers)
+ // if no layer is passed in, this function restores the other layers
+ var toggleHighlightLayer = function(layerNameToHighlight) {
+ var curNames = new Array(svgCanvas.getCurrentDrawing().getNumLayers());
+ for (var i = 0; i < curNames.length; ++i) { curNames[i] = svgCanvas.getCurrentDrawing().getLayerName(i); }
+
+ if (layerNameToHighlight) {
+ for (var i = 0; i < curNames.length; ++i) {
+ if (curNames[i] != layerNameToHighlight) {
+ svgCanvas.getCurrentDrawing().setLayerOpacity(curNames[i], 0.5);
+ }
+ }
+ }
+ else {
+ for (var i = 0; i < curNames.length; ++i) {
+ svgCanvas.getCurrentDrawing().setLayerOpacity(curNames[i], 1.0);
+ }
+ }
+ };
+
+ var populateLayers = function(){
+ var layerlist = $('#layerlist tbody');
+ var selLayerNames = $('#selLayerNames');
+ layerlist.empty();
+ selLayerNames.empty();
+ var currentLayerName = svgCanvas.getCurrentDrawing().getCurrentLayerName();
+ var layer = svgCanvas.getCurrentDrawing().getNumLayers();
+ var icon = $.getSvgIcon('eye');
+ // we get the layers in the reverse z-order (the layer rendered on top is listed first)
+ while (layer--) {
+ var name = svgCanvas.getCurrentDrawing().getLayerName(layer);
+ // contenteditable=\"true\"
+ var appendstr = "<tr class=\"layer";
+ if (name == currentLayerName) {
+ appendstr += " layersel"
+ }
+ appendstr += "\">";
+
+ if (svgCanvas.getCurrentDrawing().getLayerVisibility(name)) {
+ appendstr += "<td class=\"layervis\"/><td class=\"layername\" >" + name + "</td></tr>";
+ }
+ else {
+ appendstr += "<td class=\"layervis layerinvis\"/><td class=\"layername\" >" + name + "</td></tr>";
+ }
+ layerlist.append(appendstr);
+ selLayerNames.append("<option value=\"" + name + "\">" + name + "</option>");
+ }
+ if(icon !== undefined) {
+ var copy = icon.clone();
+ $('td.layervis',layerlist).append(icon.clone());
+ $.resizeSvgIcons({'td.layervis .svg_icon':14});
+ }
+ // handle selection of layer
+ $('#layerlist td.layername')
+ .mouseup(function(evt){
+ $('#layerlist tr.layer').removeClass("layersel");
+ var row = $(this.parentNode);
+ row.addClass("layersel");
+ svgCanvas.setCurrentLayer(this.textContent);
+ evt.preventDefault();
+ })
+ .mouseover(function(evt){
+ $(this).css({"font-style": "italic", "color":"blue"});
+ toggleHighlightLayer(this.textContent);
+ })
+ .mouseout(function(evt){
+ $(this).css({"font-style": "normal", "color":"black"});
+ toggleHighlightLayer();
+ });
+ $('#layerlist td.layervis').click(function(evt){
+ var row = $(this.parentNode).prevAll().length;
+ var name = $('#layerlist tr.layer:eq(' + row + ') td.layername').text();
+ var vis = $(this).hasClass('layerinvis');
+ svgCanvas.setLayerVisibility(name, vis);
+ if (vis) {
+ $(this).removeClass('layerinvis');
+ }
+ else {
+ $(this).addClass('layerinvis');
+ }
+ });
+
+ // if there were too few rows, let's add a few to make it not so lonely
+ var num = 5 - $('#layerlist tr.layer').size();
+ while (num-- > 0) {
+ // FIXME: there must a better way to do this
+ layerlist.append("<tr><td style=\"color:white\">_</td><td/></tr>");
+ }
+ };
+ populateLayers();
+
+ // function changeResolution(x,y) {
+ // var zoom = svgCanvas.getResolution().zoom;
+ // setResolution(x * zoom, y * zoom);
+ // }
+
+ var centerCanvas = function() {
+ // this centers the canvas vertically in the workarea (horizontal handled in CSS)
+ workarea.css('line-height', workarea.height() + 'px');
+ };
+
+ $(window).bind('load resize', centerCanvas);
+
+ function stepFontSize(elem, step) {
+ var orig_val = elem.value-0;
+ var sug_val = orig_val + step;
+ var increasing = sug_val >= orig_val;
+ if(step === 0) return orig_val;
+
+ if(orig_val >= 24) {
+ if(increasing) {
+ return Math.round(orig_val * 1.1);
+ } else {
+ return Math.round(orig_val / 1.1);
+ }
+ } else if(orig_val <= 1) {
+ if(increasing) {
+ return orig_val * 2;
+ } else {
+ return orig_val / 2;
+ }
+ } else {
+ return sug_val;
+ }
+ }
+
+ function stepZoom(elem, step) {
+ var orig_val = elem.value-0;
+ if(orig_val === 0) return 100;
+ var sug_val = orig_val + step;
+ if(step === 0) return orig_val;
+
+ if(orig_val >= 100) {
+ return sug_val;
+ } else {
+ if(sug_val >= orig_val) {
+ return orig_val * 2;
+ } else {
+ return orig_val / 2;
+ }
+ }
+ }
+
+ // function setResolution(w, h, center) {
+ // updateCanvas();
+ // // w-=0; h-=0;
+ // // $('#svgcanvas').css( { 'width': w, 'height': h } );
+ // // $('#canvas_width').val(w);
+ // // $('#canvas_height').val(h);
+ // //
+ // // if(center) {
+ // // var w_area = workarea;
+ // // var scroll_y = h/2 - w_area.height()/2;
+ // // var scroll_x = w/2 - w_area.width()/2;
+ // // w_area[0].scrollTop = scroll_y;
+ // // w_area[0].scrollLeft = scroll_x;
+ // // }
+ // }
+
+ $('#resolution').change(function(){
+ var wh = $('#canvas_width,#canvas_height');
+ if(!this.selectedIndex) {
+ if($('#canvas_width').val() == 'fit') {
+ wh.removeAttr("disabled").val(100);
+ }
+ } else if(this.value == 'content') {
+ wh.val('fit').attr("disabled","disabled");
+ } else {
+ var dims = this.value.split('x');
+ $('#canvas_width').val(dims[0]);
+ $('#canvas_height').val(dims[1]);
+ wh.removeAttr("disabled");
+ }
+ });
+
+ //Prevent browser from erroneously repopulating fields
+ $('input,select').attr("autocomplete","off");
+
+ // Associate all button actions as well as non-button keyboard shortcuts
+ var Actions = function() {
+ // sel:'selector', fn:function, evt:'event', key:[key, preventDefault, NoDisableInInput]
+ var tool_buttons = [
+ {sel:'#tool_select', fn: clickSelect, evt: 'click', key: ['V', true]},
+ {sel:'#tool_fhpath', fn: clickFHPath, evt: 'click', key: ['Q', true]},
+ {sel:'#tool_line', fn: clickLine, evt: 'click', key: ['L', true]},
+ {sel:'#tool_rect', fn: clickRect, evt: 'mouseup', key: ['R', true], parent: '#tools_rect', icon: 'rect'},
+ {sel:'#tool_square', fn: clickSquare, evt: 'mouseup', parent: '#tools_rect', icon: 'square'},
+ {sel:'#tool_fhrect', fn: clickFHRect, evt: 'mouseup', parent: '#tools_rect', icon: 'fh_rect'},
+ {sel:'#tool_ellipse', fn: clickEllipse, evt: 'mouseup', key: ['E', true], parent: '#tools_ellipse', icon: 'ellipse'},
+ {sel:'#tool_circle', fn: clickCircle, evt: 'mouseup', parent: '#tools_ellipse', icon: 'circle'},
+ {sel:'#tool_fhellipse', fn: clickFHEllipse, evt: 'mouseup', parent: '#tools_ellipse', icon: 'fh_ellipse'},
+ {sel:'#tool_path', fn: clickPath, evt: 'click', key: ['P', true]},
+ {sel:'#tool_text', fn: clickText, evt: 'click', key: ['T', true]},
+ {sel:'#tool_image', fn: clickImage, evt: 'mouseup'},
+ {sel:'#tool_zoom', fn: clickZoom, evt: 'mouseup', key: ['Z', true]},
+ {sel:'#tool_clear', fn: clickClear, evt: 'mouseup', key: ['N', true]},
+ {sel:'#tool_save', fn: function() { editingsource?saveSourceEditor():clickSave()}, evt: 'mouseup', key: ['S', true]},
+ {sel:'#tool_export', fn: clickExport, evt: 'mouseup'},
+ {sel:'#tool_open', fn: clickOpen, evt: 'mouseup', key: ['O', true]},
+ {sel:'#tool_import', fn: clickImport, evt: 'mouseup'},
+ {sel:'#tool_source', fn: showSourceEditor, evt: 'click', key: ['U', true]},
+ {sel:'#tool_wireframe', fn: clickWireframe, evt: 'click', key: ['F', true]},
+ {sel:'#tool_source_cancel,#svg_source_overlay,#tool_docprops_cancel,#tool_prefs_cancel', fn: cancelOverlays, evt: 'click', key: ['esc', false, false], hidekey: true},
+ {sel:'#tool_source_save', fn: saveSourceEditor, evt: 'click'},
+ {sel:'#tool_docprops_save', fn: saveDocProperties, evt: 'click'},
+ {sel:'#tool_docprops', fn: showDocProperties, evt: 'mouseup'},
+ {sel:'#tool_prefs_save', fn: savePreferences, evt: 'click'},
+ {sel:'#tool_prefs_option', fn: function() {showPreferences();return false}, evt: 'mouseup'},
+ {sel:'#tool_delete,#tool_delete_multi', fn: deleteSelected, evt: 'click', key: ['del/backspace', true]},
+ {sel:'#tool_reorient', fn: reorientPath, evt: 'click'},
+ {sel:'#tool_node_link', fn: linkControlPoints, evt: 'click'},
+ {sel:'#tool_node_clone', fn: clonePathNode, evt: 'click'},
+ {sel:'#tool_node_delete', fn: deletePathNode, evt: 'click'},
+ {sel:'#tool_openclose_path', fn: opencloseSubPath, evt: 'click'},
+ {sel:'#tool_add_subpath', fn: addSubPath, evt: 'click'},
+ {sel:'#tool_move_top', fn: moveToTopSelected, evt: 'click', key: 'ctrl+shift+]'},
+ {sel:'#tool_move_bottom', fn: moveToBottomSelected, evt: 'click', key: 'ctrl+shift+['},
+ {sel:'#tool_topath', fn: convertToPath, evt: 'click'},
+ {sel:'#tool_make_link,#tool_make_link_multi', fn: makeHyperlink, evt: 'click'},
+ {sel:'#tool_undo', fn: clickUndo, evt: 'click', key: ['Z', true]},
+ {sel:'#tool_redo', fn: clickRedo, evt: 'click', key: ['Y', true]},
+ {sel:'#tool_clone,#tool_clone_multi', fn: clickClone, evt: 'click', key: ['D', true]},
+ {sel:'#tool_group', fn: clickGroup, evt: 'click', key: ['G', true]},
+ {sel:'#tool_ungroup', fn: clickGroup, evt: 'click'},
+ {sel:'#tool_unlink_use', fn: clickGroup, evt: 'click'},
+ {sel:'[id^=tool_align]', fn: clickAlign, evt: 'click'},
+ // these two lines are required to make Opera work properly with the flyout mechanism
+ // {sel:'#tools_rect_show', fn: clickRect, evt: 'click'},
+ // {sel:'#tools_ellipse_show', fn: clickEllipse, evt: 'click'},
+ {sel:'#tool_bold', fn: clickBold, evt: 'mousedown'},
+ {sel:'#tool_italic', fn: clickItalic, evt: 'mousedown'},
+ {sel:'#sidepanel_handle', fn: toggleSidePanel, key: ['X']},
+ {sel:'#copy_save_done', fn: cancelOverlays, evt: 'click'},
+
+ // Shortcuts not associated with buttons
+
+ {key: 'ctrl+left', fn: function(){rotateSelected(0,1)}},
+ {key: 'ctrl+right', fn: function(){rotateSelected(1,1)}},
+ {key: 'ctrl+shift+left', fn: function(){rotateSelected(0,5)}},
+ {key: 'ctrl+shift+right', fn: function(){rotateSelected(1,5)}},
+ {key: 'shift+O', fn: selectPrev},
+ {key: 'shift+P', fn: selectNext},
+ {key: [modKey+'up', true], fn: function(){zoomImage(2);}},
+ {key: [modKey+'down', true], fn: function(){zoomImage(.5);}},
+ {key: [modKey+']', true], fn: function(){moveUpDownSelected('Up');}},
+ {key: [modKey+'[', true], fn: function(){moveUpDownSelected('Down');}},
+ {key: ['up', true], fn: function(){moveSelected(0,-1);}},
+ {key: ['down', true], fn: function(){moveSelected(0,1);}},
+ {key: ['left', true], fn: function(){moveSelected(-1,0);}},
+ {key: ['right', true], fn: function(){moveSelected(1,0);}},
+ {key: 'shift+up', fn: function(){moveSelected(0,-10)}},
+ {key: 'shift+down', fn: function(){moveSelected(0,10)}},
+ {key: 'shift+left', fn: function(){moveSelected(-10,0)}},
+ {key: 'shift+right', fn: function(){moveSelected(10,0)}},
+ {key: ['alt+up', true], fn: function(){svgCanvas.cloneSelectedElements(0,-1)}},
+ {key: ['alt+down', true], fn: function(){svgCanvas.cloneSelectedElements(0,1)}},
+ {key: ['alt+left', true], fn: function(){svgCanvas.cloneSelectedElements(-1,0)}},
+ {key: ['alt+right', true], fn: function(){svgCanvas.cloneSelectedElements(1,0)}},
+ {key: ['alt+shift+up', true], fn: function(){svgCanvas.cloneSelectedElements(0,-10)}},
+ {key: ['alt+shift+down', true], fn: function(){svgCanvas.cloneSelectedElements(0,10)}},
+ {key: ['alt+shift+left', true], fn: function(){svgCanvas.cloneSelectedElements(-10,0)}},
+ {key: ['alt+shift+right', true], fn: function(){svgCanvas.cloneSelectedElements(10,0)}},
+ {key: 'A', fn: function(){svgCanvas.selectAllInCurrentLayer();}},
+
+ // Standard shortcuts
+ {key: modKey+'z', fn: clickUndo},
+ {key: modKey + 'shift+z', fn: clickRedo},
+ {key: modKey + 'y', fn: clickRedo},
+
+ {key: modKey+'x', fn: cutSelected},
+ {key: modKey+'c', fn: copySelected},
+ {key: modKey+'v', fn: pasteInCenter}
+
+
+ ];
+
+ // Tooltips not directly associated with a single function
+ var key_assocs = {
+ '4/Shift+4': '#tools_rect_show',
+ '5/Shift+5': '#tools_ellipse_show'
+ };
+
+ return {
+ setAll: function() {
+ var flyouts = {};
+
+ $.each(tool_buttons, function(i, opts) {
+ // Bind function to button
+ if(opts.sel) {
+ var btn = $(opts.sel);
+ if (btn.length == 0) return true; // Skip if markup does not exist
+ if(opts.evt) {
+ btn[opts.evt](opts.fn);
+ }
+
+ // Add to parent flyout menu, if able to be displayed
+ if(opts.parent && $(opts.parent + '_show').length != 0) {
+ var f_h = $(opts.parent);
+ if(!f_h.length) {
+ f_h = makeFlyoutHolder(opts.parent.substr(1));
+ }
+
+ f_h.append(btn);
+
+ if(!$.isArray(flyouts[opts.parent])) {
+ flyouts[opts.parent] = [];
+ }
+ flyouts[opts.parent].push(opts);
+ }
+ }
+
+
+ // Bind function to shortcut key
+ if(opts.key) {
+ // Set shortcut based on options
+ var keyval, shortcut = '', disInInp = true, fn = opts.fn, pd = false;
+ if($.isArray(opts.key)) {
+ keyval = opts.key[0];
+ if(opts.key.length > 1) pd = opts.key[1];
+ if(opts.key.length > 2) disInInp = opts.key[2];
+ } else {
+ keyval = opts.key;
+ }
+ keyval += '';
+
+ $.each(keyval.split('/'), function(i, key) {
+ $(document).bind('keydown', key, function(e) {
+ fn();
+ if(pd) {
+ e.preventDefault();
+ }
+ // Prevent default on ALL keys?
+ return false;
+ });
+ });
+
+ // Put shortcut in title
+ if(opts.sel && !opts.hidekey && btn.attr('title')) {
+ var new_title = btn.attr('title').split('[')[0] + ' (' + keyval + ')';
+ key_assocs[keyval] = opts.sel;
+ // Disregard for menu items
+ if(!btn.parents('#main_menu').length) {
+ btn.attr('title', new_title);
+ }
+ }
+ }
+ });
+
+ // Setup flyouts
+ setupFlyouts(flyouts);
+
+
+ // Misc additional actions
+
+ // Make "return" keypress trigger the change event
+ $('.attr_changer, #image_url').bind('keydown', 'return',
+ function(evt) {$(this).change();evt.preventDefault();}
+ );
+
+ $(window).bind('keydown', 'tab', function(e) {
+ if(ui_context === 'canvas') {
+ e.preventDefault();
+ selectNext();
+ }
+ }).bind('keydown', 'shift+tab', function(e) {
+ if(ui_context === 'canvas') {
+ e.preventDefault();
+ selectPrev();
+ }
+ });
+
+ $('#tool_zoom').dblclick(dblclickZoom);
+ },
+ setTitles: function() {
+ $.each(key_assocs, function(keyval, sel) {
+ var menu = ($(sel).parents('#main_menu').length);
+
+ $(sel).each(function() {
+ if(menu) {
+ var t = $(this).text().split(' [')[0];
+ } else {
+ var t = this.title.split(' [')[0];
+ }
+ var key_str = '';
+ // Shift+Up
+ $.each(keyval.split('/'), function(i, key) {
+ var mod_bits = key.split('+'), mod = '';
+ if(mod_bits.length > 1) {
+ mod = mod_bits[0] + '+';
+ key = mod_bits[1];
+ }
+ key_str += (i?'/':'') + mod + (uiStrings['key_'+key] || key);
+ });
+ if(menu) {
+ this.lastChild.textContent = t +' ['+key_str+']';
+ } else {
+ this.title = t +' ['+key_str+']';
+ }
+ });
+ });
+ },
+ getButtonData: function(sel) {
+ var b;
+ $.each(tool_buttons, function(i, btn) {
+ if(btn.sel === sel) b = btn;
+ });
+ return b;
+ }
+ };
+ }();
+
+ Actions.setAll();
+
+ // Select given tool
+ Editor.ready(function() {
+ var tool,
+ itool = curConfig.initTool,
+ container = $("#tools_left, #svg_editor .tools_flyout"),
+ pre_tool = container.find("#tool_" + itool),
+ reg_tool = container.find("#" + itool);
+ if(pre_tool.length) {
+ tool = pre_tool;
+ } else if(reg_tool.length){
+ tool = reg_tool;
+ } else {
+ tool = $("#tool_select");
+ }
+ tool.click().mouseup();
+
+ if(curConfig.wireframe) {
+ $('#tool_wireframe').click();
+ }
+
+ if(curConfig.showlayers) {
+ toggleSidePanel();
+ }
+
+ $('#rulers').toggle(!!curConfig.showRulers);
+
+ if (curConfig.showRulers) {
+ $('#show_rulers')[0].checked = true;
+ }
+
+ if(curConfig.gridSnapping) {
+ $('#grid_snapping_on')[0].checked = true;
+ }
+
+ if(curConfig.baseUnit) {
+ $('#base_unit').val(curConfig.baseUnit);
+ }
+
+ if(curConfig.snappingStep) {
+ $('#grid_snapping_step').val(curConfig.snappingStep);
+ }
+ });
+
+ $('#rect_rx').SpinButton({ min: 0, max: 1000, step: 1, callback: changeRectRadius });
+ $('#stroke_width').SpinButton({ min: 0, max: 99, step: 1, smallStep: 0.1, callback: changeStrokeWidth });
+ $('#angle').SpinButton({ min: -180, max: 180, step: 5, callback: changeRotationAngle });
+ $('#font_size').SpinButton({ step: 1, min: 0.001, stepfunc: stepFontSize, callback: changeFontSize });
+ $('#group_opacity').SpinButton({ step: 5, min: 0, max: 100, callback: changeOpacity });
+ $('#blur').SpinButton({ step: .1, min: 0, max: 10, callback: changeBlur });
+ $('#zoom').SpinButton({ min: 0.001, max: 10000, step: 50, stepfunc: stepZoom, callback: changeZoom })
+ // Set default zoom
+ .val(svgCanvas.getZoom() * 100);
+
+ $("#workarea").contextMenu({
+ menu: 'cmenu_canvas',
+ inSpeed: 0
+ },
+ function(action, el, pos) {
+ switch ( action ) {
+ case 'delete':
+ deleteSelected();
+ break;
+ case 'cut':
+ cutSelected();
+ break;
+ case 'copy':
+ copySelected();
+ break;
+ case 'paste':
+ svgCanvas.pasteElements();
+ break;
+ case 'paste_in_place':
+ svgCanvas.pasteElements('in_place');
+ break;
+ case 'group':
+ svgCanvas.groupSelectedElements();
+ break;
+ case 'ungroup':
+ svgCanvas.ungroupSelectedElement();
+ break;
+ case 'move_front':
+ moveToTopSelected();
+ break;
+ case 'move_up':
+ moveUpDownSelected('Up');
+ break;
+ case 'move_down':
+ moveUpDownSelected('Down');
+ break;
+ case 'move_back':
+ moveToBottomSelected();
+ break;
+ default:
+ if(svgedit.contextmenu && svgedit.contextmenu.hasCustomHandler(action)){
+ svgedit.contextmenu.getCustomHandler(action).call();
+ }
+ break;
+ }
+
+ if(svgCanvas.clipBoard.length) {
+ canv_menu.enableContextMenuItems('#paste,#paste_in_place');
+ }
+ });
+
+ var lmenu_func = function(action, el, pos) {
+ switch ( action ) {
+ case 'dupe':
+ cloneLayer();
+ break;
+ case 'delete':
+ deleteLayer();
+ break;
+ case 'merge_down':
+ mergeLayer();
+ break;
+ case 'merge_all':
+ svgCanvas.mergeAllLayers();
+ updateContextPanel();
+ populateLayers();
+ break;
+ }
+ }
+
+ $("#layerlist").contextMenu({
+ menu: 'cmenu_layers',
+ inSpeed: 0
+ },
+ lmenu_func
+ );
+
+ $("#layer_moreopts").contextMenu({
+ menu: 'cmenu_layers',
+ inSpeed: 0,
+ allowLeft: true
+ },
+ lmenu_func
+ );
+
+ $('.contextMenu li').mousedown(function(ev) {
+ ev.preventDefault();
+ })
+
+ $('#cmenu_canvas li').disableContextMenu();
+ canv_menu.enableContextMenuItems('#delete,#cut,#copy');
+
+ window.onbeforeunload = function() {
+ // Suppress warning if page is empty
+ if(undoMgr.getUndoStackSize() === 0) {
+ Editor.show_save_warning = false;
+ }
+
+ // show_save_warning is set to "false" when the page is saved.
+ if(!curConfig.no_save_warning && Editor.show_save_warning) {
+ // Browser already asks question about closing the page
+ return uiStrings.notification.unsavedChanges;
+ }
+ };
+
+ Editor.openPrep = function(func) {
+ $('#main_menu').hide();
+ if(undoMgr.getUndoStackSize() === 0) {
+ func(true);
+ } else {
+ $.confirm(uiStrings.notification.QwantToOpen, func);
+ }
+ }
+
+ // use HTML5 File API: http://www.w3.org/TR/FileAPI/
+ // if browser has HTML5 File API support, then we will show the open menu item
+ // and provide a file input to click. When that change event fires, it will
+ // get the text contents of the file and send it to the canvas
+ if (window.FileReader) {
+ var inp = $('<input type="file">').change(function() {
+ var f = this;
+ Editor.openPrep(function(ok) {
+ if(!ok) return;
+ svgCanvas.clear();
+ if(f.files.length==1) {
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ loadSvgString(e.target.result);
+ updateCanvas();
+ };
+ reader.readAsText(f.files[0]);
+ }
+ });
+ });
+ $("#tool_open").show().prepend(inp);
+ var inp2 = $('<input type="file">').change(function() {
+ $('#main_menu').hide();
+ if(this.files.length==1) {
+ var reader = new FileReader();
+ reader.onloadend = function(e) {
+ svgCanvas.importSvgString(e.target.result, true);
+ updateCanvas();
+ };
+ reader.readAsText(this.files[0]);
+ }
+ });
+ $("#tool_import").show().prepend(inp2);
+ }
+
+ var updateCanvas = Editor.updateCanvas = function(center, new_ctr) {
+
+ var w = workarea.width(), h = workarea.height();
+ var w_orig = w, h_orig = h;
+ var zoom = svgCanvas.getZoom();
+ var w_area = workarea;
+ var cnvs = $("#svgcanvas");
+
+ var old_ctr = {
+ x: w_area[0].scrollLeft + w_orig/2,
+ y: w_area[0].scrollTop + h_orig/2
+ };
+
+ var multi = curConfig.canvas_expansion;
+ w = Math.max(w_orig, svgCanvas.contentW * zoom * multi);
+ h = Math.max(h_orig, svgCanvas.contentH * zoom * multi);
+
+ if(w == w_orig && h == h_orig) {
+ workarea.css('overflow','hidden');
+ } else {
+ workarea.css('overflow','scroll');
+ }
+
+ var old_can_y = cnvs.height()/2;
+ var old_can_x = cnvs.width()/2;
+ cnvs.width(w).height(h);
+ var new_can_y = h/2;
+ var new_can_x = w/2;
+ var offset = svgCanvas.updateCanvas(w, h);
+
+ var ratio = new_can_x / old_can_x;
+
+ var scroll_x = w/2 - w_orig/2;
+ var scroll_y = h/2 - h_orig/2;
+
+ if(!new_ctr) {
+
+ var old_dist_x = old_ctr.x - old_can_x;
+ var new_x = new_can_x + old_dist_x * ratio;
+
+ var old_dist_y = old_ctr.y - old_can_y;
+ var new_y = new_can_y + old_dist_y * ratio;
+
+ new_ctr = {
+ x: new_x,
+ y: new_y
+ };
+
+ } else {
+ new_ctr.x += offset.x,
+ new_ctr.y += offset.y;
+ }
+
+ if(center) {
+ // Go to top-left for larger documents
+ if(svgCanvas.contentW > w_area.width()) {
+ // Top-left
+ workarea[0].scrollLeft = offset.x - 10;
+ workarea[0].scrollTop = offset.y - 10;
+ } else {
+ // Center
+ w_area[0].scrollLeft = scroll_x;
+ w_area[0].scrollTop = scroll_y;
+ }
+ } else {
+ w_area[0].scrollLeft = new_ctr.x - w_orig/2;
+ w_area[0].scrollTop = new_ctr.y - h_orig/2;
+ }
+ if(curConfig.showRulers) {
+ updateRulers(cnvs, zoom);
+ workarea.scroll();
+ }
+ }
+
+ // Make [1,2,5] array
+ var r_intervals = [];
+ for(var i = .1; i < 1E5; i *= 10) {
+ r_intervals.push(1 * i);
+ r_intervals.push(2 * i);
+ r_intervals.push(5 * i);
+ }
+
+ function updateRulers(scanvas, zoom) {
+ if(!zoom) zoom = svgCanvas.getZoom();
+ if(!scanvas) scanvas = $("#svgcanvas");
+
+ var limit = 30000;
+
+ var c_elem = svgCanvas.getContentElem();
+
+ var units = svgedit.units.getTypeMap();
+ var unit = units[curConfig.baseUnit]; // 1 = 1px
+
+ for(var d = 0; d < 2; d++) {
+ var is_x = (d === 0);
+ var dim = is_x ? 'x' : 'y';
+ var lentype = is_x?'width':'height';
+ var content_d = c_elem.getAttribute(dim)-0;
+
+ var $hcanv_orig = $('#ruler_' + dim + ' canvas:first');
+
+ // Bit of a hack to fully clear the canvas in Safari & IE9
+ $hcanv = $hcanv_orig.clone();
+ $hcanv_orig.replaceWith($hcanv);
+
+ var hcanv = $hcanv[0];
+
+ // Set the canvas size to the width of the container
+ var ruler_len = scanvas[lentype]();
+ var total_len = ruler_len;
+ hcanv.parentNode.style[lentype] = total_len + 'px';
+
+
+ var canv_count = 1;
+ var ctx_num = 0;
+ var ctx_arr;
+ var ctx = hcanv.getContext("2d");
+
+ ctx.fillStyle = "rgb(200,0,0)";
+ ctx.fillRect(0,0,hcanv.width,hcanv.height);
+
+ // Remove any existing canvasses
+ $hcanv.siblings().remove();
+
+ // Create multiple canvases when necessary (due to browser limits)
+ if(ruler_len >= limit) {
+ var num = parseInt(ruler_len / limit) + 1;
+ ctx_arr = Array(num);
+ ctx_arr[0] = ctx;
+ for(var i = 1; i < num; i++) {
+ hcanv[lentype] = limit;
+ var copy = hcanv.cloneNode(true);
+ hcanv.parentNode.appendChild(copy);
+ ctx_arr[i] = copy.getContext('2d');
+ }
+
+ copy[lentype] = ruler_len % limit;
+
+ // set copy width to last
+ ruler_len = limit;
+ }
+
+ hcanv[lentype] = ruler_len;
+
+ var u_multi = unit * zoom;
+
+ // Calculate the main number interval
+ var raw_m = 50 / u_multi;
+ var multi = 1;
+ for(var i = 0; i < r_intervals.length; i++) {
+ var num = r_intervals[i];
+ multi = num;
+ if(raw_m <= num) {
+ break;
+ }
+ }
+
+ var big_int = multi * u_multi;
+
+ ctx.font = "9px sans-serif";
+
+ var ruler_d = ((content_d / u_multi) % multi) * u_multi;
+ var label_pos = ruler_d - big_int;
+ for (; ruler_d < total_len; ruler_d += big_int) {
+ label_pos += big_int;
+ var real_d = ruler_d - content_d;
+
+ var cur_d = Math.round(ruler_d) + .5;
+ if(is_x) {
+ ctx.moveTo(cur_d, 15);
+ ctx.lineTo(cur_d, 0);
+ } else {
+ ctx.moveTo(15, cur_d);
+ ctx.lineTo(0, cur_d);
+ }
+
+ var num = (label_pos - content_d) / u_multi;
+ var label;
+ if(multi >= 1) {
+ label = Math.round(num);
+ } else {
+ var decs = (multi+'').split('.')[1].length;
+ label = num.toFixed(decs)-0;
+ }
+
+ // Do anything special for negative numbers?
+// var is_neg = label < 0;
+// real_d2 = Math.abs(real_d2);
+
+ // Change 1000s to Ks
+ if(label !== 0 && label !== 1000 && label % 1000 === 0) {
+ label = (label / 1000) + 'K';
+ }
+
+ if(is_x) {
+ ctx.fillText(label, ruler_d+2, 8);
+ } else {
+ var str = (label+'').split('');
+ for(var i = 0; i < str.length; i++) {
+ ctx.fillText(str[i], 1, (ruler_d+9) + i*9);
+ }
+ }
+
+ var part = big_int / 10;
+ for(var i = 1; i < 10; i++) {
+ var sub_d = Math.round(ruler_d + part * i) + .5;
+ if(ctx_arr && sub_d > ruler_len) {
+ ctx_num++;
+ ctx.stroke();
+ if(ctx_num >= ctx_arr.length) {
+ i = 10;
+ ruler_d = total_len;
+ continue;
+ }
+ ctx = ctx_arr[ctx_num];
+ ruler_d -= limit;
+ sub_d = Math.round(ruler_d + part * i) + .5;
+ }
+
+ var line_num = (i % 2)?12:10;
+ if(is_x) {
+ ctx.moveTo(sub_d, 15);
+ ctx.lineTo(sub_d, line_num);
+ } else {
+ ctx.moveTo(15, sub_d);
+ ctx.lineTo(line_num ,sub_d);
+ }
+ }
+ }
+
+ // console.log('ctx', ctx);
+ ctx.strokeStyle = "#000";
+ ctx.stroke();
+ }
+ }
+
+// $(function() {
+ updateCanvas(true);
+// });
+
+ // var revnums = "svg-editor.js ($Rev: 2067 $) ";
+ // revnums += svgCanvas.getVersion();
+ // $('#copyright')[0].setAttribute("title", revnums);
+
+ // Callback handler for embedapi.js
+ try{
+ var json_encode = function(obj){
+ //simple partial JSON encoder implementation
+ if(window.JSON && JSON.stringify) return JSON.stringify(obj);
+ var enc = arguments.callee; //for purposes of recursion
+ if(typeof obj == "boolean" || typeof obj == "number"){
+ return obj+'' //should work...
+ }else if(typeof obj == "string"){
+ //a large portion of this is stolen from Douglas Crockford's json2.js
+ return '"'+
+ obj.replace(
+ /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g
+ , function (a) {
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ })
+ +'"'; //note that this isn't quite as purtyful as the usualness
+ }else if(obj.length){ //simple hackish test for arrayish-ness
+ for(var i = 0; i < obj.length; i++){
+ obj[i] = enc(obj[i]); //encode every sub-thingy on top
+ }
+ return "["+obj.join(",")+"]";
+ }else{
+ var pairs = []; //pairs will be stored here
+ for(var k in obj){ //loop through thingys
+ pairs.push(enc(k)+":"+enc(obj[k])); //key: value
+ }
+ return "{"+pairs.join(",")+"}" //wrap in the braces
+ }
+ }
+ window.addEventListener("message", function(e){
+ var cbid = parseInt(e.data.substr(0, e.data.indexOf(";")));
+ try{
+ e.source.postMessage("SVGe"+cbid+";"+json_encode(eval(e.data)), "*");
+ }catch(err){
+ e.source.postMessage("SVGe"+cbid+";error:"+err.message, "*");
+ }
+ }, false)
+ }catch(err){
+ window.embed_error = err;
+ }
+
+
+
+ // For Compatibility with older extensions
+ $(function() {
+ window.svgCanvas = svgCanvas;
+ svgCanvas.ready = svgEditor.ready;
+ });
+
+
+ Editor.setLang = function(lang, allStrings) {
+ $.pref('lang', lang);
+ $('#lang_select').val(lang);
+ if(allStrings) {
+
+ var notif = allStrings.notification;
+
+
+
+ // $.extend will only replace the given strings
+ var oldLayerName = $('#layerlist tr.layersel td.layername').text();
+ var rename_layer = (oldLayerName == uiStrings.common.layer + ' 1');
+
+ $.extend(uiStrings, allStrings);
+ svgCanvas.setUiStrings(allStrings);
+ Actions.setTitles();
+
+ if(rename_layer) {
+ svgCanvas.renameCurrentLayer(uiStrings.common.layer + ' 1');
+ populateLayers();
+ }
+
+ svgCanvas.runExtensions("langChanged", lang);
+
+ // Update flyout tooltips
+ setFlyoutTitles();
+
+ // Copy title for certain tool elements
+ var elems = {
+ '#stroke_color': '#tool_stroke .icon_label, #tool_stroke .color_block',
+ '#fill_color': '#tool_fill label, #tool_fill .color_block',
+ '#linejoin_miter': '#cur_linejoin',
+ '#linecap_butt': '#cur_linecap'
+ }
+
+ $.each(elems, function(source, dest) {
+ $(dest).attr('title', $(source)[0].title);
+ });
+
+ // Copy alignment titles
+ $('#multiselected_panel div[id^=tool_align]').each(function() {
+ $('#tool_pos' + this.id.substr(10))[0].title = this.title;
+ });
+
+ }
+ };
+ };
+
+ var callbacks = [];
+
+ function loadSvgString(str, callback) {
+ var success = svgCanvas.setSvgString(str) !== false;
+ callback = callback || $.noop;
+ if(success) {
+ callback(true);
+ } else {
+ $.alert(uiStrings.notification.errorLoadingSVG, function() {
+ callback(false);
+ });
+ }
+ }
+
+ Editor.ready = function(cb) {
+ if(!is_ready) {
+ callbacks.push(cb);
+ } else {
+ cb();
+ }
+ };
+
+ Editor.runCallbacks = function() {
+ $.each(callbacks, function() {
+ this();
+ });
+ is_ready = true;
+ };
+
+ Editor.loadFromString = function(str) {
+ Editor.ready(function() {
+ loadSvgString(str);
+ });
+ };
+
+ Editor.disableUI = function(featList) {
+// $(function() {
+// $('#tool_wireframe, #tool_image, #main_button, #tool_source, #sidepanels').remove();
+// $('#tools_top').css('left', 5);
+// });
+ };
+
+ Editor.loadFromURL = function(url, opts) {
+ if(!opts) opts = {};
+
+ var cache = opts.cache;
+ var cb = opts.callback;
+
+ Editor.ready(function() {
+ $.ajax({
+ 'url': url,
+ 'dataType': 'text',
+ cache: !!cache,
+ success: function(str) {
+ loadSvgString(str, cb);
+ },
+ error: function(xhr, stat, err) {
+ if(xhr.status != 404 && xhr.responseText) {
+ loadSvgString(xhr.responseText, cb);
+ } else {
+ $.alert(uiStrings.notification.URLloadFail + ": \n"+err+'', cb);
+ }
+ }
+ });
+ });
+ };
+
+ Editor.loadFromDataURI = function(str) {
+ Editor.ready(function() {
+ var pre = 'data:image/svg+xml;base64,';
+ var src = str.substring(pre.length);
+ loadSvgString(svgedit.utilities.decode64(src));
+ });
+ };
+
+ Editor.addExtension = function() {
+ var args = arguments;
+
+ // Note that we don't want this on Editor.ready since some extensions
+ // may want to run before then (like server_opensave).
+ $(function() {
+ if(svgCanvas) svgCanvas.addExtension.apply(this, args);
+ });
+ };
+
+ return Editor;
+ }(jQuery);
+
+ // Run init once DOM is loaded
+ $(svgEditor.init);
+
+})();
+
+// ?iconsize=s&bkgd_color=555
+
+// svgEditor.setConfig({
+// // imgPath: 'foo',
+// dimensions: [800, 600],
+// canvas_expansion: 5,
+// initStroke: {
+// color: '0000FF',
+// width: 3.5,
+// opacity: .5
+// },
+// initFill: {
+// color: '550000',
+// opacity: .75
+// },
+// extensions: ['ext-helloworld.js']
+// })
diff --git a/files_svgedit/svg-edit/svg-editor.manifest b/files_svgedit/svg-edit/svg-editor.manifest
new file mode 100644
index 000000000..b1563746d
--- /dev/null
+++ b/files_svgedit/svg-edit/svg-editor.manifest
@@ -0,0 +1,121 @@
+CACHE MANIFEST
+svg-editor.html
+images/logo.png
+jgraduate/css/jPicker-1.0.9.css
+jgraduate/css/jGraduate-0.2.0.css
+svg-editor.css
+spinbtn/JQuerySpinBtn.css
+jquery.js
+js-hotkeys/jquery.hotkeys.min.js
+jquery-ui/jquery-ui-1.7.2.custom.min.js
+jgraduate/jpicker-1.0.9.min.js
+jgraduate/jquery.jgraduate.js
+spinbtn/JQuerySpinBtn.js
+svgcanvas.js
+svg-editor.js
+images/align-bottom.png
+images/align-center.png
+images/align-left.png
+images/align-middle.png
+images/align-right.png
+images/align-top.png
+images/bold.png
+images/cancel.png
+images/circle.png
+images/clear.png
+images/clone.png
+images/copy.png
+images/cut.png
+images/delete.png
+images/document-properties.png
+images/dropdown.gif
+images/ellipse.png
+images/eye.png
+images/flyouth.png
+images/flyup.gif
+images/freehand-circle.png
+images/freehand-square.png
+images/go-down.png
+images/go-up.png
+images/image.png
+images/italic.png
+images/line.png
+images/logo.png
+images/logo.svg
+images/move_bottom.png
+images/move_top.png
+images/none.png
+images/open.png
+images/paste.png
+images/path.png
+images/polygon.png
+images/rect.png
+images/redo.png
+images/save.png
+images/select.png
+images/sep.png
+images/shape_group.png
+images/shape_ungroup.png
+images/source.png
+images/square.png
+images/text.png
+images/undo.png
+images/view-refresh.png
+images/wave.png
+images/zoom.png
+locale/locale.js
+locale/lang.af.js
+locale/lang.ar.js
+locale/lang.az.js
+locale/lang.be.js
+locale/lang.bg.js
+locale/lang.ca.js
+locale/lang.cs.js
+locale/lang.cy.js
+locale/lang.da.js
+locale/lang.de.js
+locale/lang.el.js
+locale/lang.en.js
+locale/lang.es.js
+locale/lang.et.js
+locale/lang.fa.js
+locale/lang.fi.js
+locale/lang.fr.js
+locale/lang.ga.js
+locale/lang.gl.js
+locale/lang.hi.js
+locale/lang.hr.js
+locale/lang.hu.js
+locale/lang.hy.js
+locale/lang.id.js
+locale/lang.is.js
+locale/lang.it.js
+locale/lang.iw.js
+locale/lang.ja.js
+locale/lang.ko.js
+locale/lang.lt.js
+locale/lang.lv.js
+locale/lang.mk.js
+locale/lang.ms.js
+locale/lang.mt.js
+locale/lang.nl.js
+locale/lang.no.js
+locale/lang.pl.js
+locale/lang.pt-PT.js
+locale/lang.ro.js
+locale/lang.ru.js
+locale/lang.sk.js
+locale/lang.sl.js
+locale/lang.sq.js
+locale/lang.sr.js
+locale/lang.sv.js
+locale/lang.sw.js
+locale/lang.th.js
+locale/lang.tl.js
+locale/lang.tr.js
+locale/lang.uk.js
+locale/lang.vi.js
+locale/lang.yi.js
+locale/lang.zh-CN.js
+locale/lang.zh-TW.js
+locale/lang.zh.js
diff --git a/files_svgedit/svg-edit/svgcanvas.js b/files_svgedit/svg-edit/svgcanvas.js
new file mode 100644
index 000000000..3e9806a4f
--- /dev/null
+++ b/files_svgedit/svg-edit/svgcanvas.js
@@ -0,0 +1,8770 @@
+/*
+ * svgcanvas.js
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Pavol Rusnak
+ * Copyright(c) 2010 Jeff Schiller
+ *
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) svgtransformlist.js
+// 4) math.js
+// 5) units.js
+// 6) svgutils.js
+// 7) sanitize.js
+// 8) history.js
+// 9) select.js
+// 10) draw.js
+// 11) path.js
+
+if(!window.console) {
+ window.console = {};
+ window.console.log = function(str) {};
+ window.console.dir = function(str) {};
+}
+
+if(window.opera) {
+ window.console.log = function(str) { opera.postError(str); };
+ window.console.dir = function(str) {};
+}
+
+(function() {
+
+ // This fixes $(...).attr() to work as expected with SVG elements.
+ // Does not currently use *AttributeNS() since we rarely need that.
+
+ // See http://api.jquery.com/attr/ for basic documentation of .attr()
+
+ // Additional functionality:
+ // - When getting attributes, a string that's a number is return as type number.
+ // - If an array is supplied as first parameter, multiple values are returned
+ // as an object with values for each given attributes
+
+ var proxied = jQuery.fn.attr, svgns = "http://www.w3.org/2000/svg";
+ jQuery.fn.attr = function(key, value) {
+ var len = this.length;
+ if(!len) return proxied.apply(this, arguments);
+ for(var i=0; i<len; i++) {
+ var elem = this[i];
+ // set/get SVG attribute
+ if(elem.namespaceURI === svgns) {
+ // Setting attribute
+ if(value !== undefined) {
+ elem.setAttribute(key, value);
+ } else if($.isArray(key)) {
+ // Getting attributes from array
+ var j = key.length, obj = {};
+
+ while(j--) {
+ var aname = key[j];
+ var attr = elem.getAttribute(aname);
+ // This returns a number when appropriate
+ if(attr || attr === "0") {
+ attr = isNaN(attr)?attr:attr-0;
+ }
+ obj[aname] = attr;
+ }
+ return obj;
+
+ } else if(typeof key === "object") {
+ // Setting attributes form object
+ for(var v in key) {
+ elem.setAttribute(v, key[v]);
+ }
+ // Getting attribute
+ } else {
+ var attr = elem.getAttribute(key);
+ if(attr || attr === "0") {
+ attr = isNaN(attr)?attr:attr-0;
+ }
+
+ return attr;
+ }
+ } else {
+ return proxied.apply(this, arguments);
+ }
+ }
+ return this;
+ };
+
+}());
+
+// Class: SvgCanvas
+// The main SvgCanvas class that manages all SVG-related functions
+//
+// Parameters:
+// container - The container HTML element that should hold the SVG root element
+// config - An object that contains configuration data
+$.SvgCanvas = function(container, config)
+{
+// Namespace constants
+var svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ xmlns = "http://www.w3.org/XML/1998/namespace",
+ xmlnsns = "http://www.w3.org/2000/xmlns/", // see http://www.w3.org/TR/REC-xml-names/#xmlReserved
+ se_ns = "http://svg-edit.googlecode.com",
+ htmlns = "http://www.w3.org/1999/xhtml",
+ mathns = "http://www.w3.org/1998/Math/MathML";
+
+// Default configuration options
+var curConfig = {
+ show_outside_canvas: true,
+ selectNew: true,
+ dimensions: [640, 480]
+};
+
+// Update config with new one if given
+if(config) {
+ $.extend(curConfig, config);
+}
+
+// Array with width/height of canvas
+var dimensions = curConfig.dimensions;
+
+var canvas = this;
+
+// "document" element associated with the container (same as window.document using default svg-editor.js)
+// NOTE: This is not actually a SVG document, but a HTML document.
+var svgdoc = container.ownerDocument;
+
+// This is a container for the document being edited, not the document itself.
+var svgroot = svgdoc.importNode(svgedit.utilities.text2xml(
+ '<svg id="svgroot" xmlns="' + svgns + '" xlinkns="' + xlinkns + '" ' +
+ 'width="' + dimensions[0] + '" height="' + dimensions[1] + '" x="' + dimensions[0] + '" y="' + dimensions[1] + '" overflow="visible">' +
+ '<defs>' +
+ '<filter id="canvashadow" filterUnits="objectBoundingBox">' +
+ '<feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur"/>'+
+ '<feOffset in="blur" dx="5" dy="5" result="offsetBlur"/>'+
+ '<feMerge>'+
+ '<feMergeNode in="offsetBlur"/>'+
+ '<feMergeNode in="SourceGraphic"/>'+
+ '</feMerge>'+
+ '</filter>'+
+ '</defs>'+
+ '</svg>').documentElement, true);
+container.appendChild(svgroot);
+
+// The actual element that represents the final output SVG element
+var svgcontent = svgdoc.createElementNS(svgns, "svg");
+
+// This function resets the svgcontent element while keeping it in the DOM.
+var clearSvgContentElement = canvas.clearSvgContentElement = function() {
+ while (svgcontent.firstChild) { svgcontent.removeChild(svgcontent.firstChild); }
+
+ // TODO: Clear out all other attributes first?
+ $(svgcontent).attr({
+ id: 'svgcontent',
+ width: dimensions[0],
+ height: dimensions[1],
+ x: dimensions[0],
+ y: dimensions[1],
+ overflow: curConfig.show_outside_canvas ? 'visible' : 'hidden',
+ xmlns: svgns,
+ "xmlns:se": se_ns,
+ "xmlns:xlink": xlinkns
+ }).appendTo(svgroot);
+
+ // TODO: make this string optional and set by the client
+ var comment = svgdoc.createComment(" Created with SVG-edit - http://svg-edit.googlecode.com/ ");
+ svgcontent.appendChild(comment);
+};
+clearSvgContentElement();
+
+// Prefix string for element IDs
+var idprefix = "svg_";
+
+// Function: setIdPrefix
+// Changes the ID prefix to the given value
+//
+// Parameters:
+// p - String with the new prefix
+canvas.setIdPrefix = function(p) {
+ idprefix = p;
+};
+
+// Current svgedit.draw.Drawing object
+// @type {svgedit.draw.Drawing}
+canvas.current_drawing_ = new svgedit.draw.Drawing(svgcontent, idprefix);
+
+// Function: getCurrentDrawing
+// Returns the current Drawing.
+// @return {svgedit.draw.Drawing}
+var getCurrentDrawing = canvas.getCurrentDrawing = function() {
+ return canvas.current_drawing_;
+};
+
+// Float displaying the current zoom level (1 = 100%, .5 = 50%, etc)
+var current_zoom = 1;
+
+// pointer to current group (for in-group editing)
+var current_group = null;
+
+// Object containing data for the currently selected styles
+var all_properties = {
+ shape: {
+ fill: "#" + curConfig.initFill.color,
+ fill_paint: null,
+ fill_opacity: curConfig.initFill.opacity,
+ stroke: "#" + curConfig.initStroke.color,
+ stroke_paint: null,
+ stroke_opacity: curConfig.initStroke.opacity,
+ stroke_width: curConfig.initStroke.width,
+ stroke_dasharray: 'none',
+ stroke_linejoin: 'miter',
+ stroke_linecap: 'butt',
+ opacity: curConfig.initOpacity
+ }
+};
+
+all_properties.text = $.extend(true, {}, all_properties.shape);
+$.extend(all_properties.text, {
+ fill: "#000000",
+ stroke_width: 0,
+ font_size: 24,
+ font_family: 'serif'
+});
+
+// Current shape style properties
+var cur_shape = all_properties.shape;
+
+// Array with all the currently selected elements
+// default size of 1 until it needs to grow bigger
+var selectedElements = new Array(1);
+
+// Function: addSvgElementFromJson
+// Create a new SVG element based on the given object keys/values and add it to the current layer
+// The element will be ran through cleanupElement before being returned
+//
+// Parameters:
+// data - Object with the following keys/values:
+// * element - tag name of the SVG element to create
+// * attr - Object with attributes key-values to assign to the new element
+// * curStyles - Boolean indicating that current style attributes should be applied first
+//
+// Returns: The new element
+var addSvgElementFromJson = this.addSvgElementFromJson = function(data) {
+ var shape = svgedit.utilities.getElem(data.attr.id);
+ // if shape is a path but we need to create a rect/ellipse, then remove the path
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ if (shape && data.element != shape.tagName) {
+ current_layer.removeChild(shape);
+ shape = null;
+ }
+ if (!shape) {
+ shape = svgdoc.createElementNS(svgns, data.element);
+ if (current_layer) {
+ (current_group || current_layer).appendChild(shape);
+ }
+ }
+ if(data.curStyles) {
+ svgedit.utilities.assignAttributes(shape, {
+ "fill": cur_shape.fill,
+ "stroke": cur_shape.stroke,
+ "stroke-width": cur_shape.stroke_width,
+ "stroke-dasharray": cur_shape.stroke_dasharray,
+ "stroke-linejoin": cur_shape.stroke_linejoin,
+ "stroke-linecap": cur_shape.stroke_linecap,
+ "stroke-opacity": cur_shape.stroke_opacity,
+ "fill-opacity": cur_shape.fill_opacity,
+ "opacity": cur_shape.opacity / 2,
+ "style": "pointer-events:inherit"
+ }, 100);
+ }
+ svgedit.utilities.assignAttributes(shape, data.attr, 100);
+ svgedit.utilities.cleanupElement(shape);
+ return shape;
+};
+
+
+// import svgtransformlist.js
+var getTransformList = canvas.getTransformList = svgedit.transformlist.getTransformList;
+
+// import from math.js.
+var transformPoint = svgedit.math.transformPoint;
+var matrixMultiply = canvas.matrixMultiply = svgedit.math.matrixMultiply;
+var hasMatrixTransform = canvas.hasMatrixTransform = svgedit.math.hasMatrixTransform;
+var transformListToTransform = canvas.transformListToTransform = svgedit.math.transformListToTransform;
+var snapToAngle = svgedit.math.snapToAngle;
+var getMatrix = svgedit.math.getMatrix;
+
+// initialize from units.js
+// send in an object implementing the ElementContainer interface (see units.js)
+svgedit.units.init({
+ getBaseUnit: function() { return curConfig.baseUnit; },
+ getElement: svgedit.utilities.getElem,
+ getHeight: function() { return svgcontent.getAttribute("height")/current_zoom; },
+ getWidth: function() { return svgcontent.getAttribute("width")/current_zoom; },
+ getRoundDigits: function() { return save_options.round_digits; }
+});
+// import from units.js
+var convertToNum = canvas.convertToNum = svgedit.units.convertToNum;
+
+// import from svgutils.js
+svgedit.utilities.init({
+ getDOMDocument: function() { return svgdoc; },
+ getDOMContainer: function() { return container; },
+ getSVGRoot: function() { return svgroot; },
+ // TODO: replace this mostly with a way to get the current drawing.
+ getSelectedElements: function() { return selectedElements; },
+ getSVGContent: function() { return svgcontent; }
+});
+var getUrlFromAttr = canvas.getUrlFromAttr = svgedit.utilities.getUrlFromAttr;
+var getHref = canvas.getHref = svgedit.utilities.getHref;
+var setHref = canvas.setHref = svgedit.utilities.setHref;
+var getPathBBox = svgedit.utilities.getPathBBox;
+var getBBox = canvas.getBBox = svgedit.utilities.getBBox;
+var getRotationAngle = canvas.getRotationAngle = svgedit.utilities.getRotationAngle;
+var getElem = canvas.getElem = svgedit.utilities.getElem;
+var assignAttributes = canvas.assignAttributes = svgedit.utilities.assignAttributes;
+var cleanupElement = this.cleanupElement = svgedit.utilities.cleanupElement;
+
+// import from sanitize.js
+var nsMap = svgedit.sanitize.getNSMap();
+var sanitizeSvg = canvas.sanitizeSvg = svgedit.sanitize.sanitizeSvg;
+
+// import from history.js
+var MoveElementCommand = svgedit.history.MoveElementCommand;
+var InsertElementCommand = svgedit.history.InsertElementCommand;
+var RemoveElementCommand = svgedit.history.RemoveElementCommand;
+var ChangeElementCommand = svgedit.history.ChangeElementCommand;
+var BatchCommand = svgedit.history.BatchCommand;
+// Implement the svgedit.history.HistoryEventHandler interface.
+canvas.undoMgr = new svgedit.history.UndoManager({
+ handleHistoryEvent: function(eventType, cmd) {
+ var EventTypes = svgedit.history.HistoryEventTypes;
+ // TODO: handle setBlurOffsets.
+ if (eventType == EventTypes.BEFORE_UNAPPLY || eventType == EventTypes.BEFORE_APPLY) {
+ canvas.clearSelection();
+ } else if (eventType == EventTypes.AFTER_APPLY || eventType == EventTypes.AFTER_UNAPPLY) {
+ var elems = cmd.elements();
+ canvas.pathActions.clear();
+ call("changed", elems);
+
+ var cmdType = cmd.type();
+ var isApply = (eventType == EventTypes.AFTER_APPLY);
+ if (cmdType == MoveElementCommand.type()) {
+ var parent = isApply ? cmd.newParent : cmd.oldParent;
+ if (parent == svgcontent) {
+ canvas.identifyLayers();
+ }
+ } else if (cmdType == InsertElementCommand.type() ||
+ cmdType == RemoveElementCommand.type()) {
+ if (cmd.parent == svgcontent) {
+ canvas.identifyLayers();
+ }
+ if (cmdType == InsertElementCommand.type()) {
+ if (isApply) restoreRefElems(cmd.elem);
+ } else {
+ if (!isApply) restoreRefElems(cmd.elem);
+ }
+
+ if(cmd.elem.tagName === 'use') {
+ setUseData(cmd.elem);
+ }
+ } else if (cmdType == ChangeElementCommand.type()) {
+ // if we are changing layer names, re-identify all layers
+ if (cmd.elem.tagName == "title" && cmd.elem.parentNode.parentNode == svgcontent) {
+ canvas.identifyLayers();
+ }
+ var values = isApply ? cmd.newValues : cmd.oldValues;
+ // If stdDeviation was changed, update the blur.
+ if (values["stdDeviation"]) {
+ canvas.setBlurOffsets(cmd.elem.parentNode, values["stdDeviation"]);
+ }
+
+ // Remove & Re-add hack for Webkit (issue 775)
+ if(cmd.elem.tagName === 'use' && svgedit.browser.isWebkit()) {
+ var elem = cmd.elem;
+ if(!elem.getAttribute('x') && !elem.getAttribute('y')) {
+ var parent = elem.parentNode;
+ var sib = elem.nextSibling;
+ parent.removeChild(elem);
+ parent.insertBefore(elem, sib);
+ }
+ }
+ }
+ }
+ }
+});
+var addCommandToHistory = function(cmd) {
+ canvas.undoMgr.addCommandToHistory(cmd);
+};
+
+// import from select.js
+svgedit.select.init(curConfig, {
+ createSVGElement: function(jsonMap) { return canvas.addSvgElementFromJson(jsonMap); },
+ svgRoot: function() { return svgroot; },
+ svgContent: function() { return svgcontent; },
+ currentZoom: function() { return current_zoom; },
+ // TODO(codedread): Remove when getStrokedBBox() has been put into svgutils.js.
+ getStrokedBBox: function(elems) { return canvas.getStrokedBBox([elems]); }
+});
+// this object manages selectors for us
+var selectorManager = this.selectorManager = svgedit.select.getSelectorManager();
+
+// Import from path.js
+svgedit.path.init({
+ getCurrentZoom: function() { return current_zoom; },
+ getSVGRoot: function() { return svgroot; }
+});
+
+// Function: snapToGrid
+// round value to for snapping
+// NOTE: This function did not move to svgutils.js since it depends on curConfig.
+svgedit.utilities.snapToGrid = function(value){
+ var stepSize = curConfig.snappingStep;
+ var unit = curConfig.baseUnit;
+ if(unit !== "px") {
+ stepSize *= svgedit.units.getTypeMap()[unit];
+ }
+ value = Math.round(value/stepSize)*stepSize;
+ return value;
+};
+var snapToGrid = svgedit.utilities.snapToGrid;
+
+// Interface strings, usually for title elements
+var uiStrings = {
+ "exportNoBlur": "Blurred elements will appear as un-blurred",
+ "exportNoforeignObject": "foreignObject elements will not appear",
+ "exportNoDashArray": "Strokes will appear filled",
+ "exportNoText": "Text may not appear as expected"
+};
+
+var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use';
+var ref_attrs = ["clip-path", "fill", "filter", "marker-end", "marker-mid", "marker-start", "mask", "stroke"];
+
+var elData = $.data;
+
+// Animation element to change the opacity of any newly created element
+var opac_ani = document.createElementNS(svgns, 'animate');
+$(opac_ani).attr({
+ attributeName: 'opacity',
+ begin: 'indefinite',
+ dur: 1,
+ fill: 'freeze'
+}).appendTo(svgroot);
+
+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];
+ }
+ }
+ }
+
+ var childs = elem.getElementsByTagName('*');
+
+ if(childs.length) {
+ for(var i = 0, l = childs.length; i < l; i++) {
+ restoreRefElems(childs[i]);
+ }
+ }
+};
+
+(function() {
+ // TODO For Issue 208: this is a start on a thumbnail
+ // var svgthumb = svgdoc.createElementNS(svgns, "use");
+ // svgthumb.setAttribute('width', '100');
+ // svgthumb.setAttribute('height', '100');
+ // svgedit.utilities.setHref(svgthumb, '#svgcontent');
+ // svgroot.appendChild(svgthumb);
+
+})();
+
+// Object to contain image data for raster images that were found encodable
+var encodableImages = {},
+
+ // String with image URL of last loadable image
+ last_good_img_url = curConfig.imgPath + 'logo.png',
+
+ // Array with current disabled elements (for in-group editing)
+ disabled_elems = [],
+
+ // Object with save options
+ save_options = {round_digits: 5},
+
+ // Boolean indicating whether or not a draw action has been started
+ started = false,
+
+ // String with an element's initial transform attribute value
+ start_transform = null,
+
+ // String indicating the current editor mode
+ current_mode = "select",
+
+ // String with the current direction in which an element is being resized
+ current_resize_mode = "none",
+
+ // Object with IDs for imported files, to see if one was already added
+ import_ids = {};
+
+// Current text style properties
+var cur_text = all_properties.text,
+
+ // Current general properties
+ cur_properties = cur_shape,
+
+ // Array with selected elements' Bounding box object
+// selectedBBoxes = new Array(1),
+
+ // The DOM element that was just selected
+ justSelected = null,
+
+ // DOM element for selection rectangle drawn by the user
+ rubberBox = null,
+
+ // Array of current BBoxes (still needed?)
+ curBBoxes = [],
+
+ // Object to contain all included extensions
+ extensions = {},
+
+ // Canvas point for the most recent right click
+ lastClickPoint = null,
+
+ // Map of deleted reference elements
+ removedElements = {}
+
+// Clipboard for cut, copy&pasted elements
+canvas.clipBoard = [];
+
+// Should this return an array by default, so extension results aren't overwritten?
+var runExtensions = this.runExtensions = function(action, vars, returnArray) {
+ var result = false;
+ if(returnArray) result = [];
+ $.each(extensions, function(name, opts) {
+ if(action in opts) {
+ if(returnArray) {
+ result.push(opts[action](vars))
+ } else {
+ result = opts[action](vars);
+ }
+ }
+ });
+ return result;
+}
+
+// Function: addExtension
+// Add an extension to the editor
+//
+// Parameters:
+// name - String with the ID of the extension
+// ext_func - Function supplied by the extension with its data
+this.addExtension = function(name, ext_func) {
+ if(!(name in extensions)) {
+ // Provide private vars/funcs here. Is there a better way to do this?
+
+ if($.isFunction(ext_func)) {
+ var ext = ext_func($.extend(canvas.getPrivateMethods(), {
+ svgroot: svgroot,
+ svgcontent: svgcontent,
+ nonce: getCurrentDrawing().getNonce(),
+ selectorManager: selectorManager
+ }));
+ } else {
+ var ext = ext_func;
+ }
+ extensions[name] = ext;
+ call("extension_added", ext);
+ } else {
+ console.log('Cannot add extension "' + name + '", an extension by that name already exists"');
+ }
+};
+
+// This method rounds the incoming value to the nearest value based on the current_zoom
+var round = this.round = function(val) {
+ return parseInt(val*current_zoom)/current_zoom;
+};
+
+// This method sends back an array or a NodeList full of elements that
+// intersect the multi-select rubber-band-box on the current_layer only.
+//
+// Since the only browser that supports the SVG DOM getIntersectionList is Opera,
+// we need to provide an implementation here. We brute-force it for now.
+//
+// Reference:
+// Firefox does not implement getIntersectionList(), see https://bugzilla.mozilla.org/show_bug.cgi?id=501421
+// Webkit does not implement getIntersectionList(), see https://bugs.webkit.org/show_bug.cgi?id=11274
+var getIntersectionList = this.getIntersectionList = function(rect) {
+ if (rubberBox == null) { return null; }
+
+ var parent = current_group || getCurrentDrawing().getCurrentLayer();
+
+ if(!curBBoxes.length) {
+ // Cache all bboxes
+ curBBoxes = getVisibleElementsAndBBoxes(parent);
+ }
+
+ var resultList = null;
+ try {
+ resultList = parent.getIntersectionList(rect, null);
+ } catch(e) { }
+
+ if (resultList == null || typeof(resultList.item) != "function") {
+ resultList = [];
+
+ if(!rect) {
+ var rubberBBox = rubberBox.getBBox();
+ var bb = {};
+
+ for(var o in rubberBBox) {
+ bb[o] = rubberBBox[o] / current_zoom;
+ }
+ rubberBBox = bb;
+
+ } else {
+ var rubberBBox = rect;
+ }
+ var i = curBBoxes.length;
+ while (i--) {
+ if(!rubberBBox.width || !rubberBBox.width) continue;
+ if (svgedit.math.rectsIntersect(rubberBBox, curBBoxes[i].bbox)) {
+ resultList.push(curBBoxes[i].elem);
+ }
+ }
+ }
+ // addToSelection expects an array, but it's ok to pass a NodeList
+ // because using square-bracket notation is allowed:
+ // http://www.w3.org/TR/DOM-Level-2-Core/ecma-script-binding.html
+ return resultList;
+};
+
+// TODO(codedread): Migrate this into svgutils.js
+// Function: getStrokedBBox
+// Get the bounding box for one or more stroked and/or transformed elements
+//
+// Parameters:
+// elems - Array with DOM elements to check
+//
+// Returns:
+// A single bounding box object
+getStrokedBBox = this.getStrokedBBox = function(elems) {
+ if(!elems) elems = getVisibleElements();
+ if(!elems.length) return false;
+ // Make sure the expected BBox is returned if the element is a group
+ var getCheckedBBox = function(elem) {
+
+ try {
+ // TODO: Fix issue with rotated groups. Currently they work
+ // fine in FF, but not in other browsers (same problem mentioned
+ // in Issue 339 comment #2).
+
+ var bb = svgedit.utilities.getBBox(elem);
+
+ var angle = svgedit.utilities.getRotationAngle(elem);
+ if ((angle && angle % 90) ||
+ svgedit.math.hasMatrixTransform(svgedit.transformlist.getTransformList(elem))) {
+ // Accurate way to get BBox of rotated element in Firefox:
+ // Put element in group and get its BBox
+
+ var good_bb = false;
+
+ // Get the BBox from the raw path for these elements
+ var elemNames = ['ellipse','path','line','polyline','polygon'];
+ if(elemNames.indexOf(elem.tagName) >= 0) {
+ bb = good_bb = canvas.convertToPath(elem, true);
+ } else if(elem.tagName == 'rect') {
+ // Look for radius
+ var rx = elem.getAttribute('rx');
+ var ry = elem.getAttribute('ry');
+ if(rx || ry) {
+ bb = good_bb = canvas.convertToPath(elem, true);
+ }
+ }
+
+ if(!good_bb) {
+ // Must use clone else FF freaks out
+ var clone = elem.cloneNode(true);
+ var g = document.createElementNS(svgns, "g");
+ var parent = elem.parentNode;
+ parent.appendChild(g);
+ g.appendChild(clone);
+ bb = svgedit.utilities.bboxToObj(g.getBBox());
+ parent.removeChild(g);
+ }
+
+
+ // Old method: Works by giving the rotated BBox,
+ // this is (unfortunately) what Opera and Safari do
+ // natively when getting the BBox of the parent group
+// var angle = angle * Math.PI / 180.0;
+// var rminx = Number.MAX_VALUE, rminy = Number.MAX_VALUE,
+// rmaxx = Number.MIN_VALUE, rmaxy = Number.MIN_VALUE;
+// var cx = round(bb.x + bb.width/2),
+// cy = round(bb.y + bb.height/2);
+// var pts = [ [bb.x - cx, bb.y - cy],
+// [bb.x + bb.width - cx, bb.y - cy],
+// [bb.x + bb.width - cx, bb.y + bb.height - cy],
+// [bb.x - cx, bb.y + bb.height - cy] ];
+// var j = 4;
+// while (j--) {
+// var x = pts[j][0],
+// y = pts[j][1],
+// r = Math.sqrt( x*x + y*y );
+// var theta = Math.atan2(y,x) + angle;
+// x = round(r * Math.cos(theta) + cx);
+// y = round(r * Math.sin(theta) + cy);
+//
+// // now set the bbox for the shape after it's been rotated
+// if (x < rminx) rminx = x;
+// if (y < rminy) rminy = y;
+// if (x > rmaxx) rmaxx = x;
+// if (y > rmaxy) rmaxy = y;
+// }
+//
+// bb.x = rminx;
+// bb.y = rminy;
+// bb.width = rmaxx - rminx;
+// bb.height = rmaxy - rminy;
+ }
+ return bb;
+ } catch(e) {
+ console.log(elem, e);
+ return null;
+ }
+ };
+
+ var full_bb;
+ $.each(elems, function() {
+ if(full_bb) return;
+ if(!this.parentNode) return;
+ full_bb = getCheckedBBox(this);
+ });
+
+ // This shouldn't ever happen...
+ if(full_bb == null) return null;
+
+ // full_bb doesn't include the stoke, so this does no good!
+// if(elems.length == 1) return full_bb;
+
+ var max_x = full_bb.x + full_bb.width;
+ var max_y = full_bb.y + full_bb.height;
+ var min_x = full_bb.x;
+ var min_y = full_bb.y;
+
+ // FIXME: same re-creation problem with this function as getCheckedBBox() above
+ var getOffset = function(elem) {
+ var sw = elem.getAttribute("stroke-width");
+ var offset = 0;
+ if (elem.getAttribute("stroke") != "none" && !isNaN(sw)) {
+ offset += sw/2;
+ }
+ return offset;
+ }
+ var bboxes = [];
+ $.each(elems, function(i, elem) {
+ var cur_bb = getCheckedBBox(elem);
+ if(cur_bb) {
+ var offset = getOffset(elem);
+ min_x = Math.min(min_x, cur_bb.x - offset);
+ min_y = Math.min(min_y, cur_bb.y - offset);
+ bboxes.push(cur_bb);
+ }
+ });
+
+ full_bb.x = min_x;
+ full_bb.y = min_y;
+
+ $.each(elems, function(i, elem) {
+ var cur_bb = bboxes[i];
+ // ensure that elem is really an element node
+ if (cur_bb && elem.nodeType == 1) {
+ var offset = getOffset(elem);
+ max_x = Math.max(max_x, cur_bb.x + cur_bb.width + offset);
+ max_y = Math.max(max_y, cur_bb.y + cur_bb.height + offset);
+ }
+ });
+
+ full_bb.width = max_x - min_x;
+ full_bb.height = max_y - min_y;
+ return full_bb;
+}
+
+// Function: getVisibleElements
+// Get all elements that have a BBox (excludes <defs>, <title>, etc).
+// Note that 0-opacity, off-screen etc elements are still considered "visible"
+// for this function
+//
+// Parameters:
+// parent - The parent DOM element to search within
+//
+// Returns:
+// An array with all "visible" elements.
+var getVisibleElements = this.getVisibleElements = function(parent) {
+ if(!parent) parent = $(svgcontent).children(); // Prevent layers from being included
+
+ var contentElems = [];
+ $(parent).children().each(function(i, elem) {
+ try {
+ if (elem.getBBox()) {
+ contentElems.push(elem);
+ }
+ } catch(e) {}
+ });
+ return contentElems.reverse();
+};
+
+// Function: getVisibleElementsAndBBoxes
+// Get all elements that have a BBox (excludes <defs>, <title>, etc).
+// Note that 0-opacity, off-screen etc elements are still considered "visible"
+// for this function
+//
+// Parameters:
+// parent - The parent DOM element to search within
+//
+// Returns:
+// An array with objects that include:
+// * elem - The element
+// * bbox - The element's BBox as retrieved from getStrokedBBox
+var getVisibleElementsAndBBoxes = this.getVisibleElementsAndBBoxes = function(parent) {
+ if(!parent) parent = $(svgcontent).children(); // Prevent layers from being included
+
+ var contentElems = [];
+ $(parent).children().each(function(i, elem) {
+ try {
+ if (elem.getBBox()) {
+ contentElems.push({'elem':elem, 'bbox':getStrokedBBox([elem])});
+ }
+ } catch(e) {}
+ });
+ return contentElems.reverse();
+};
+
+// Function: groupSvgElem
+// Wrap an SVG element into a group element, mark the group as 'gsvg'
+//
+// Parameters:
+// elem - SVG element to wrap
+var groupSvgElem = this.groupSvgElem = function(elem) {
+ var g = document.createElementNS(svgns, "g");
+ elem.parentNode.replaceChild(g, elem);
+ $(g).append(elem).data('gsvg', elem)[0].id = getNextId();
+}
+
+// Function: copyElem
+// Create a clone of an element, updating its ID and its children's IDs when needed
+//
+// Parameters:
+// el - DOM element to clone
+//
+// Returns: The cloned element
+var copyElem = function(el) {
+ // manually create a copy of the element
+ var new_el = document.createElementNS(el.namespaceURI, el.nodeName);
+ $.each(el.attributes, function(i, attr) {
+ if (attr.localName != '-moz-math-font-style') {
+ new_el.setAttributeNS(attr.namespaceURI, attr.nodeName, attr.nodeValue);
+ }
+ });
+ // set the copied element's new id
+ new_el.removeAttribute("id");
+ new_el.id = getNextId();
+
+ // Opera's "d" value needs to be reset for Opera/Win/non-EN
+ // Also needed for webkit (else does not keep curved segments on clone)
+ if(svgedit.browser.isWebkit() && el.nodeName == 'path') {
+ var fixed_d = pathActions.convertPath(el);
+ new_el.setAttribute('d', fixed_d);
+ }
+
+ // now create copies of all children
+ $.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;
+ }
+ });
+
+ if($(el).data('gsvg')) {
+ $(new_el).data('gsvg', new_el.firstChild);
+ } else if($(el).data('symbol')) {
+ var ref = $(el).data('symbol');
+ $(new_el).data('ref', ref).data('symbol', ref);
+ }
+
+ else if(new_el.tagName == 'image') {
+ preventClickDefault(new_el);
+ }
+ return new_el;
+};
+
+// Set scope for these functions
+var getId, getNextId, call;
+
+(function(c) {
+
+ // Object to contain editor event names and callback functions
+ var events = {};
+
+ getId = c.getId = function() { return getCurrentDrawing().getId(); };
+ getNextId = c.getNextId = function() { return getCurrentDrawing().getNextId(); };
+
+ // Function: call
+ // Run the callback function associated with the given event
+ //
+ // Parameters:
+ // event - String with the event name
+ // arg - Argument to pass through to the callback function
+ call = c.call = function(event, arg) {
+ if (events[event]) {
+ return events[event](this, arg);
+ }
+ };
+
+ // Function: bind
+ // Attaches a callback function to an event
+ //
+ // Parameters:
+ // event - String indicating the name of the event
+ // f - The callback function to bind to the event
+ //
+ // Return:
+ // The previous event
+ c.bind = function(event, f) {
+ var old = events[event];
+ events[event] = f;
+ return old;
+ };
+
+}(canvas));
+
+// Function: canvas.prepareSvg
+// Runs the SVG Document through the sanitizer and then updates its paths.
+//
+// Parameters:
+// newDoc - The SVG DOM document
+this.prepareSvg = function(newDoc) {
+ this.sanitizeSvg(newDoc.documentElement);
+
+ // convert paths into absolute commands
+ var paths = newDoc.getElementsByTagNameNS(svgns, "path");
+ for (var i = 0, len = paths.length; i < len; ++i) {
+ var path = paths[i];
+ path.setAttribute('d', pathActions.convertPath(path));
+ pathActions.fixEnd(path);
+ }
+};
+
+// Function getRefElem
+// Get the reference element associated with the given attribute value
+//
+// Parameters:
+// attrVal - The attribute value as a string
+var getRefElem = this.getRefElem = function(attrVal) {
+ return getElem(getUrlFromAttr(attrVal).substr(1));
+}
+
+// Function: ffClone
+// Hack for Firefox bugs where text element features aren't updated or get
+// messed up. See issue 136 and issue 137.
+// This function clones the element and re-selects it
+// TODO: Test for this bug on load and add it to "support" object instead of
+// browser sniffing
+//
+// Parameters:
+// elem - The (text) DOM element to clone
+var ffClone = function(elem) {
+ if(!svgedit.browser.isGecko()) return elem;
+ var clone = elem.cloneNode(true)
+ elem.parentNode.insertBefore(clone, elem);
+ elem.parentNode.removeChild(elem);
+ selectorManager.releaseSelector(elem);
+ selectedElements[0] = clone;
+ selectorManager.requestSelector(clone).showGrips(true);
+ return clone;
+}
+
+
+// this.each is deprecated, if any extension used this it can be recreated by doing this:
+// $(canvas.getRootElem()).children().each(...)
+
+// this.each = function(cb) {
+// $(svgroot).children().each(cb);
+// };
+
+
+// Function: setRotationAngle
+// Removes any old rotations if present, prepends a new rotation at the
+// transformed center
+//
+// Parameters:
+// val - The new rotation angle in degrees
+// preventUndo - Boolean indicating whether the action should be undoable or not
+this.setRotationAngle = function(val, preventUndo) {
+ // ensure val is the proper type
+ val = parseFloat(val);
+ var elem = selectedElements[0];
+ var oldTransform = elem.getAttribute("transform");
+ var bbox = svgedit.utilities.getBBox(elem);
+ var cx = bbox.x+bbox.width/2, cy = bbox.y+bbox.height/2;
+ var tlist = getTransformList(elem);
+
+ // only remove the real rotational transform if present (i.e. at index=0)
+ if (tlist.numberOfItems > 0) {
+ var xform = tlist.getItem(0);
+ if (xform.type == 4) {
+ tlist.removeItem(0);
+ }
+ }
+ // find R_nc and insert it
+ if (val != 0) {
+ var center = transformPoint(cx,cy,transformListToTransform(tlist).matrix);
+ var R_nc = svgroot.createSVGTransform();
+ R_nc.setRotate(val, center.x, center.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(R_nc, 0);
+ } else {
+ tlist.appendItem(R_nc);
+ }
+ }
+ else if (tlist.numberOfItems == 0) {
+ elem.removeAttribute("transform");
+ }
+
+ if (!preventUndo) {
+ // we need to undo it, then redo it so it can be undo-able! :)
+ // TODO: figure out how to make changes to transform list undo-able cross-browser?
+ var newTransform = elem.getAttribute("transform");
+ elem.setAttribute("transform", oldTransform);
+ changeSelectedAttribute("transform",newTransform,selectedElements);
+ call("changed", selectedElements);
+ }
+ var pointGripContainer = getElem("pathpointgrip_container");
+// if(elem.nodeName == "path" && pointGripContainer) {
+// pathActions.setPointContainerTransform(elem.getAttribute("transform"));
+// }
+ var selector = selectorManager.requestSelector(selectedElements[0]);
+ selector.resize();
+ selector.updateGripCursors(val);
+};
+
+// Function: recalculateAllSelectedDimensions
+// Runs recalculateDimensions on the selected elements,
+// adding the changes to a single batch command
+var recalculateAllSelectedDimensions = this.recalculateAllSelectedDimensions = function() {
+ var text = (current_resize_mode == "none" ? "position" : "size");
+ var batchCmd = new BatchCommand(text);
+
+ var i = selectedElements.length;
+ while(i--) {
+ var elem = selectedElements[i];
+// if(getRotationAngle(elem) && !hasMatrixTransform(getTransformList(elem))) continue;
+ var cmd = recalculateDimensions(elem);
+ if (cmd) {
+ batchCmd.addSubCommand(cmd);
+ }
+ }
+
+ if (!batchCmd.isEmpty()) {
+ addCommandToHistory(batchCmd);
+ call("changed", selectedElements);
+ }
+};
+
+// this is how we map paths to our preferred relative segment types
+var pathMap = [0, 'z', 'M', 'm', 'L', 'l', 'C', 'c', 'Q', 'q', 'A', 'a',
+ 'H', 'h', 'V', 'v', 'S', 's', 'T', 't'];
+
+// Debug tool to easily see the current matrix in the browser's console
+var logMatrix = function(m) {
+ console.log([m.a,m.b,m.c,m.d,m.e,m.f]);
+};
+
+// Function: remapElement
+// Applies coordinate changes to an element based on the given matrix
+//
+// Parameters:
+// selected - DOM element to be changed
+// changes - Object with changes to be remapped
+// m - Matrix object to use for remapping coordinates
+var remapElement = this.remapElement = function(selected,changes,m) {
+
+ var remap = function(x,y) { return transformPoint(x,y,m); },
+ scalew = function(w) { return m.a*w; },
+ scaleh = function(h) { return m.d*h; },
+ doSnapping = curConfig.gridSnapping && selected.parentNode.parentNode.localName === "svg",
+ finishUp = function() {
+ if(doSnapping) for(var o in changes) changes[o] = snapToGrid(changes[o]);
+ assignAttributes(selected, changes, 1000, true);
+ }
+ box = svgedit.utilities.getBBox(selected);
+
+ for(var i = 0; i < 2; i++) {
+ var type = i === 0 ? 'fill' : 'stroke';
+ var attrVal = selected.getAttribute(type);
+ if(attrVal && attrVal.indexOf('url(') === 0) {
+ if(m.a < 0 || m.d < 0) {
+ var grad = getRefElem(attrVal);
+ var newgrad = grad.cloneNode(true);
+
+ if(m.a < 0) {
+ //flip x
+ var x1 = newgrad.getAttribute('x1');
+ var x2 = newgrad.getAttribute('x2');
+ newgrad.setAttribute('x1', -(x1 - 1));
+ newgrad.setAttribute('x2', -(x2 - 1));
+ }
+
+ if(m.d < 0) {
+ //flip y
+ var y1 = newgrad.getAttribute('y1');
+ var y2 = newgrad.getAttribute('y2');
+ newgrad.setAttribute('y1', -(y1 - 1));
+ newgrad.setAttribute('y2', -(y2 - 1));
+ }
+ newgrad.id = getNextId();
+ findDefs().appendChild(newgrad);
+ selected.setAttribute(type, 'url(#' + newgrad.id + ')');
+ }
+
+ // Not really working :(
+// if(selected.tagName === 'path') {
+// reorientGrads(selected, m);
+// }
+ }
+ }
+
+
+ var elName = selected.tagName;
+ if(elName === "g" || elName === "text" || elName === "use") {
+ // if it was a translate, then just update x,y
+ if (m.a == 1 && m.b == 0 && m.c == 0 && m.d == 1 &&
+ (m.e != 0 || m.f != 0) )
+ {
+ // [T][M] = [M][T']
+ // therefore [T'] = [M_inv][T][M]
+ var existing = transformListToTransform(selected).matrix,
+ t_new = matrixMultiply(existing.inverse(), m, existing);
+ changes.x = parseFloat(changes.x) + t_new.e;
+ changes.y = parseFloat(changes.y) + t_new.f;
+ }
+ else {
+ // we just absorb all matrices into the element and don't do any remapping
+ var chlist = getTransformList(selected);
+ var mt = svgroot.createSVGTransform();
+ mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix,m));
+ chlist.clear();
+ chlist.appendItem(mt);
+ }
+ }
+
+ // now we have a set of changes and an applied reduced transform list
+ // we apply the changes directly to the DOM
+ switch (elName)
+ {
+ case "foreignObject":
+ case "rect":
+ case "image":
+
+ // Allow images to be inverted (give them matrix when flipped)
+ if(elName === 'image' && (m.a < 0 || m.d < 0)) {
+ // Convert to matrix
+ var chlist = getTransformList(selected);
+ var mt = svgroot.createSVGTransform();
+ mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix,m));
+ chlist.clear();
+ chlist.appendItem(mt);
+ } else {
+ var pt1 = remap(changes.x,changes.y);
+
+ changes.width = scalew(changes.width);
+ changes.height = scaleh(changes.height);
+
+ changes.x = pt1.x + Math.min(0,changes.width);
+ changes.y = pt1.y + Math.min(0,changes.height);
+ changes.width = Math.abs(changes.width);
+ changes.height = Math.abs(changes.height);
+ }
+ finishUp();
+ break;
+ case "ellipse":
+ var c = remap(changes.cx,changes.cy);
+ changes.cx = c.x;
+ changes.cy = c.y;
+ changes.rx = scalew(changes.rx);
+ changes.ry = scaleh(changes.ry);
+
+ changes.rx = Math.abs(changes.rx);
+ changes.ry = Math.abs(changes.ry);
+ finishUp();
+ break;
+ case "circle":
+ var c = remap(changes.cx,changes.cy);
+ changes.cx = c.x;
+ changes.cy = c.y;
+ // take the minimum of the new selected box's dimensions for the new circle radius
+ var tbox = svgedit.math.transformBox(box.x, box.y, box.width, box.height, m);
+ var w = tbox.tr.x - tbox.tl.x, h = tbox.bl.y - tbox.tl.y;
+ changes.r = Math.min(w/2, h/2);
+
+ if(changes.r) changes.r = Math.abs(changes.r);
+ finishUp();
+ break;
+ case "line":
+ var pt1 = remap(changes.x1,changes.y1),
+ pt2 = remap(changes.x2,changes.y2);
+ changes.x1 = pt1.x;
+ changes.y1 = pt1.y;
+ changes.x2 = pt2.x;
+ changes.y2 = pt2.y;
+
+ case "text":
+ case "use":
+ finishUp();
+ break;
+ case "g":
+ var gsvg = $(selected).data('gsvg');
+ if(gsvg) {
+ assignAttributes(gsvg, changes, 1000, true);
+ }
+ break;
+ case "polyline":
+ case "polygon":
+ var len = changes.points.length;
+ for (var i = 0; i < len; ++i) {
+ var pt = changes.points[i];
+ pt = remap(pt.x,pt.y);
+ changes.points[i].x = pt.x;
+ changes.points[i].y = pt.y;
+ }
+
+ var len = changes.points.length;
+ var pstr = "";
+ for (var i = 0; i < len; ++i) {
+ var pt = changes.points[i];
+ pstr += pt.x + "," + pt.y + " ";
+ }
+ selected.setAttribute("points", pstr);
+ break;
+ case "path":
+
+ var segList = selected.pathSegList;
+ var len = segList.numberOfItems;
+ changes.d = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ var seg = segList.getItem(i);
+ changes.d[i] = {
+ type: seg.pathSegType,
+ x: seg.x,
+ y: seg.y,
+ x1: seg.x1,
+ y1: seg.y1,
+ x2: seg.x2,
+ y2: seg.y2,
+ r1: seg.r1,
+ r2: seg.r2,
+ angle: seg.angle,
+ largeArcFlag: seg.largeArcFlag,
+ sweepFlag: seg.sweepFlag
+ };
+ }
+
+ var len = changes.d.length,
+ firstseg = changes.d[0],
+ currentpt = remap(firstseg.x,firstseg.y);
+ changes.d[0].x = currentpt.x;
+ changes.d[0].y = currentpt.y;
+ for (var i = 1; i < len; ++i) {
+ var seg = changes.d[i];
+ var type = seg.type;
+ // if absolute or first segment, we want to remap x, y, x1, y1, x2, y2
+ // if relative, we want to scalew, scaleh
+ if (type % 2 == 0) { // absolute
+ var thisx = (seg.x != undefined) ? seg.x : currentpt.x, // for V commands
+ thisy = (seg.y != undefined) ? seg.y : currentpt.y, // for H commands
+ pt = remap(thisx,thisy),
+ pt1 = remap(seg.x1,seg.y1),
+ pt2 = remap(seg.x2,seg.y2);
+ seg.x = pt.x;
+ seg.y = pt.y;
+ seg.x1 = pt1.x;
+ seg.y1 = pt1.y;
+ seg.x2 = pt2.x;
+ seg.y2 = pt2.y;
+ seg.r1 = scalew(seg.r1),
+ seg.r2 = scaleh(seg.r2);
+ }
+ else { // relative
+ seg.x = scalew(seg.x);
+ seg.y = scaleh(seg.y);
+ seg.x1 = scalew(seg.x1);
+ seg.y1 = scaleh(seg.y1);
+ seg.x2 = scalew(seg.x2);
+ seg.y2 = scaleh(seg.y2);
+ seg.r1 = scalew(seg.r1),
+ seg.r2 = scaleh(seg.r2);
+ }
+ } // for each segment
+
+ var dstr = "";
+ var len = changes.d.length;
+ for (var i = 0; i < len; ++i) {
+ var seg = changes.d[i];
+ var type = seg.type;
+ dstr += pathMap[type];
+ switch(type) {
+ case 13: // relative horizontal line (h)
+ case 12: // absolute horizontal line (H)
+ dstr += seg.x + " ";
+ break;
+ case 15: // relative vertical line (v)
+ case 14: // absolute vertical line (V)
+ dstr += seg.y + " ";
+ break;
+ case 3: // relative move (m)
+ case 5: // relative line (l)
+ case 19: // relative smooth quad (t)
+ case 2: // absolute move (M)
+ case 4: // absolute line (L)
+ case 18: // absolute smooth quad (T)
+ dstr += seg.x + "," + seg.y + " ";
+ break;
+ case 7: // relative cubic (c)
+ case 6: // absolute cubic (C)
+ dstr += seg.x1 + "," + seg.y1 + " " + seg.x2 + "," + seg.y2 + " " +
+ seg.x + "," + seg.y + " ";
+ break;
+ case 9: // relative quad (q)
+ case 8: // absolute quad (Q)
+ dstr += seg.x1 + "," + seg.y1 + " " + seg.x + "," + seg.y + " ";
+ break;
+ case 11: // relative elliptical arc (a)
+ case 10: // absolute elliptical arc (A)
+ dstr += seg.r1 + "," + seg.r2 + " " + seg.angle + " " + (+seg.largeArcFlag) +
+ " " + (+seg.sweepFlag) + " " + seg.x + "," + seg.y + " ";
+ break;
+ case 17: // relative smooth cubic (s)
+ case 16: // absolute smooth cubic (S)
+ dstr += seg.x2 + "," + seg.y2 + " " + seg.x + "," + seg.y + " ";
+ break;
+ }
+ }
+
+ selected.setAttribute("d", dstr);
+ break;
+ }
+};
+
+// Function: updateClipPath
+// Updates a <clipPath>s values based on the given translation of an element
+//
+// Parameters:
+// attr - The clip-path attribute value with the clipPath's ID
+// tx - The translation's x value
+// ty - The translation's y value
+var updateClipPath = function(attr, tx, ty) {
+ var path = getRefElem(attr).firstChild;
+
+ var cp_xform = getTransformList(path);
+
+ var newxlate = svgroot.createSVGTransform();
+ newxlate.setTranslate(tx, ty);
+
+ cp_xform.appendItem(newxlate);
+
+ // Update clipPath's dimensions
+ recalculateDimensions(path);
+}
+
+// Function: recalculateDimensions
+// Decides the course of action based on the element's transform list
+//
+// Parameters:
+// selected - The DOM element to recalculate
+//
+// Returns:
+// Undo command object with the resulting change
+var recalculateDimensions = this.recalculateDimensions = function(selected) {
+ if (selected == null) return null;
+
+ var tlist = getTransformList(selected);
+
+ // remove any unnecessary transforms
+ if (tlist && tlist.numberOfItems > 0) {
+ var k = tlist.numberOfItems;
+ while (k--) {
+ var xform = tlist.getItem(k);
+ if (xform.type === 0) {
+ tlist.removeItem(k);
+ }
+ // remove identity matrices
+ else if (xform.type === 1) {
+ if (svgedit.math.isIdentity(xform.matrix)) {
+ tlist.removeItem(k);
+ }
+ }
+ // remove zero-degree rotations
+ else if (xform.type === 4) {
+ if (xform.angle === 0) {
+ tlist.removeItem(k);
+ }
+ }
+ }
+ // End here if all it has is a rotation
+ if(tlist.numberOfItems === 1 && getRotationAngle(selected)) return null;
+ }
+
+ // if this element had no transforms, we are done
+ if (!tlist || tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ return null;
+ }
+
+ // TODO: Make this work for more than 2
+ if (tlist) {
+ var k = tlist.numberOfItems;
+ var mxs = [];
+ while (k--) {
+ var xform = tlist.getItem(k);
+ if (xform.type === 1) {
+ mxs.push([xform.matrix, k]);
+ } else if(mxs.length) {
+ mxs = [];
+ }
+ }
+ if(mxs.length === 2) {
+ var m_new = svgroot.createSVGTransformFromMatrix(matrixMultiply(mxs[1][0], mxs[0][0]));
+ tlist.removeItem(mxs[0][1]);
+ tlist.removeItem(mxs[1][1]);
+ tlist.insertItemBefore(m_new, mxs[1][1]);
+ }
+
+ // combine matrix + translate
+ k = tlist.numberOfItems;
+ if(k >= 2 && tlist.getItem(k-2).type === 1 && tlist.getItem(k-1).type === 2) {
+ var mt = svgroot.createSVGTransform();
+
+ var m = matrixMultiply(
+ tlist.getItem(k-2).matrix,
+ tlist.getItem(k-1).matrix
+ );
+ mt.setMatrix(m);
+ tlist.removeItem(k-2);
+ tlist.removeItem(k-2);
+ tlist.appendItem(mt);
+ }
+ }
+
+ // If it still has a single [M] or [R][M], return null too (prevents BatchCommand from being returned).
+ switch ( selected.tagName ) {
+ // Ignore these elements, as they can absorb the [M]
+ case 'line':
+ case 'polyline':
+ case 'polygon':
+ case 'path':
+ break;
+ default:
+ if(
+ (tlist.numberOfItems === 1 && tlist.getItem(0).type === 1)
+ || (tlist.numberOfItems === 2 && tlist.getItem(0).type === 1 && tlist.getItem(0).type === 4)
+ ) {
+ return null;
+ }
+ }
+
+ // Grouped SVG element
+ var gsvg = $(selected).data('gsvg');
+
+ // we know we have some transforms, so set up return variable
+ var batchCmd = new BatchCommand("Transform");
+
+ // store initial values that will be affected by reducing the transform list
+ var changes = {}, initial = null, attrs = [];
+ switch (selected.tagName)
+ {
+ case "line":
+ attrs = ["x1", "y1", "x2", "y2"];
+ break;
+ case "circle":
+ attrs = ["cx", "cy", "r"];
+ break;
+ case "ellipse":
+ attrs = ["cx", "cy", "rx", "ry"];
+ break;
+ case "foreignObject":
+ case "rect":
+ case "image":
+ attrs = ["width", "height", "x", "y"];
+ break;
+ case "use":
+ case "text":
+ attrs = ["x", "y"];
+ break;
+ case "polygon":
+ case "polyline":
+ initial = {};
+ initial["points"] = selected.getAttribute("points");
+ var list = selected.points;
+ var len = list.numberOfItems;
+ changes["points"] = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ var pt = list.getItem(i);
+ changes["points"][i] = {x:pt.x,y:pt.y};
+ }
+ break;
+ case "path":
+ initial = {};
+ initial["d"] = selected.getAttribute("d");
+ changes["d"] = selected.getAttribute("d");
+ break;
+ } // switch on element type to get initial values
+
+ if(attrs.length) {
+ changes = $(selected).attr(attrs);
+ $.each(changes, function(attr, val) {
+ changes[attr] = convertToNum(attr, val);
+ });
+ } else if(gsvg) {
+ // GSVG exception
+ changes = {
+ x: $(gsvg).attr('x') || 0,
+ y: $(gsvg).attr('y') || 0
+ };
+ }
+
+ // if we haven't created an initial array in polygon/polyline/path, then
+ // make a copy of initial values and include the transform
+ if (initial == null) {
+ initial = $.extend(true, {}, changes);
+ $.each(initial, function(attr, val) {
+ initial[attr] = convertToNum(attr, val);
+ });
+ }
+ // save the start transform value too
+ initial["transform"] = start_transform ? start_transform : "";
+
+ // if it's a regular group, we have special processing to flatten transforms
+ if ((selected.tagName == "g" && !gsvg) || selected.tagName == "a") {
+ var box = svgedit.utilities.getBBox(selected),
+ oldcenter = {x: box.x+box.width/2, y: box.y+box.height/2},
+ newcenter = transformPoint(box.x+box.width/2, box.y+box.height/2,
+ transformListToTransform(tlist).matrix),
+ m = svgroot.createSVGMatrix();
+
+
+ // temporarily strip off the rotate and save the old center
+ var gangle = getRotationAngle(selected);
+ if (gangle) {
+ var a = gangle * Math.PI / 180;
+ if ( Math.abs(a) > (1.0e-10) ) {
+ var s = Math.sin(a)/(1 - Math.cos(a));
+ } else {
+ // FIXME: This blows up if the angle is exactly 0!
+ var s = 2/a;
+ }
+ for (var i = 0; i < tlist.numberOfItems; ++i) {
+ var xform = tlist.getItem(i);
+ if (xform.type == 4) {
+ // extract old center through mystical arts
+ var rm = xform.matrix;
+ oldcenter.y = (s*rm.e + rm.f)/2;
+ oldcenter.x = (rm.e - s*rm.f)/2;
+ tlist.removeItem(i);
+ break;
+ }
+ }
+ }
+ var tx = 0, ty = 0,
+ operation = 0,
+ N = tlist.numberOfItems;
+
+ if(N) {
+ var first_m = tlist.getItem(0).matrix;
+ }
+
+ // first, if it was a scale then the second-last transform will be it
+ if (N >= 3 && tlist.getItem(N-2).type == 3 &&
+ tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
+ {
+ operation = 3; // scale
+
+ // if the children are unrotated, pass the scale down directly
+ // otherwise pass the equivalent matrix() down directly
+ var tm = tlist.getItem(N-3).matrix,
+ sm = tlist.getItem(N-2).matrix,
+ tmn = tlist.getItem(N-1).matrix;
+
+ var children = selected.childNodes;
+ var c = children.length;
+ while (c--) {
+ var child = children.item(c);
+ tx = 0;
+ ty = 0;
+ if (child.nodeType == 1) {
+ var childTlist = getTransformList(child);
+
+ // some children might not have a transform (<metadata>, <defs>, etc)
+ if (!childTlist) continue;
+
+ var m = transformListToTransform(childTlist).matrix;
+
+ // Convert a matrix to a scale if applicable
+// if(hasMatrixTransform(childTlist) && childTlist.numberOfItems == 1) {
+// if(m.b==0 && m.c==0 && m.e==0 && m.f==0) {
+// childTlist.removeItem(0);
+// var translateOrigin = svgroot.createSVGTransform(),
+// scale = svgroot.createSVGTransform(),
+// translateBack = svgroot.createSVGTransform();
+// translateOrigin.setTranslate(0, 0);
+// scale.setScale(m.a, m.d);
+// translateBack.setTranslate(0, 0);
+// childTlist.appendItem(translateBack);
+// childTlist.appendItem(scale);
+// childTlist.appendItem(translateOrigin);
+// }
+// }
+
+ var angle = getRotationAngle(child);
+ var old_start_transform = start_transform;
+ var childxforms = [];
+ start_transform = child.getAttribute("transform");
+ if(angle || hasMatrixTransform(childTlist)) {
+ var e2t = svgroot.createSVGTransform();
+ e2t.setMatrix(matrixMultiply(tm, sm, tmn, m));
+ childTlist.clear();
+ childTlist.appendItem(e2t);
+ childxforms.push(e2t);
+ }
+ // if not rotated or skewed, push the [T][S][-T] down to the child
+ else {
+ // update the transform list with translate,scale,translate
+
+ // slide the [T][S][-T] from the front to the back
+ // [T][S][-T][M] = [M][T2][S2][-T2]
+
+ // (only bringing [-T] to the right of [M])
+ // [T][S][-T][M] = [T][S][M][-T2]
+ // [-T2] = [M_inv][-T][M]
+ var t2n = matrixMultiply(m.inverse(), tmn, m);
+ // [T2] is always negative translation of [-T2]
+ var t2 = svgroot.createSVGMatrix();
+ t2.e = -t2n.e;
+ t2.f = -t2n.f;
+
+ // [T][S][-T][M] = [M][T2][S2][-T2]
+ // [S2] = [T2_inv][M_inv][T][S][-T][M][-T2_inv]
+ var s2 = matrixMultiply(t2.inverse(), m.inverse(), tm, sm, tmn, m, t2n.inverse());
+
+ var translateOrigin = svgroot.createSVGTransform(),
+ scale = svgroot.createSVGTransform(),
+ translateBack = svgroot.createSVGTransform();
+ translateOrigin.setTranslate(t2n.e, t2n.f);
+ scale.setScale(s2.a, s2.d);
+ translateBack.setTranslate(t2.e, t2.f);
+ childTlist.appendItem(translateBack);
+ childTlist.appendItem(scale);
+ childTlist.appendItem(translateOrigin);
+ childxforms.push(translateBack);
+ childxforms.push(scale);
+ childxforms.push(translateOrigin);
+// logMatrix(translateBack.matrix);
+// logMatrix(scale.matrix);
+ } // not rotated
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ // TODO: If any <use> have this group as a parent and are
+ // referencing this child, then we need to impose a reverse
+ // scale on it so that when it won't get double-translated
+// var uses = selected.getElementsByTagNameNS(svgns, "use");
+// var href = "#"+child.id;
+// var u = uses.length;
+// while (u--) {
+// var useElem = uses.item(u);
+// if(href == getHref(useElem)) {
+// var usexlate = svgroot.createSVGTransform();
+// usexlate.setTranslate(-tx,-ty);
+// getTransformList(useElem).insertItemBefore(usexlate,0);
+// batchCmd.addSubCommand( recalculateDimensions(useElem) );
+// }
+// }
+ start_transform = old_start_transform;
+ } // element
+ } // for each child
+ // Remove these transforms from group
+ tlist.removeItem(N-1);
+ tlist.removeItem(N-2);
+ tlist.removeItem(N-3);
+ }
+ else if (N >= 3 && tlist.getItem(N-1).type == 1)
+ {
+ operation = 3; // scale
+ m = transformListToTransform(tlist).matrix;
+ var e2t = svgroot.createSVGTransform();
+ e2t.setMatrix(m);
+ tlist.clear();
+ tlist.appendItem(e2t);
+ }
+ // next, check if the first transform was a translate
+ // if we had [ T1 ] [ M ] we want to transform this into [ M ] [ T2 ]
+ // therefore [ T2 ] = [ M_inv ] [ T1 ] [ M ]
+ else if ( (N == 1 || (N > 1 && tlist.getItem(1).type != 3)) &&
+ tlist.getItem(0).type == 2)
+ {
+ operation = 2; // translate
+ var T_M = transformListToTransform(tlist).matrix;
+ tlist.removeItem(0);
+ var M_inv = transformListToTransform(tlist).matrix.inverse();
+ var M2 = matrixMultiply( M_inv, T_M );
+
+ tx = M2.e;
+ ty = M2.f;
+
+ if (tx != 0 || ty != 0) {
+ // we pass the translates down to the individual children
+ var children = selected.childNodes;
+ var c = children.length;
+
+ var clipPaths_done = [];
+
+ while (c--) {
+ var child = children.item(c);
+ if (child.nodeType == 1) {
+
+ // Check if child has clip-path
+ if(child.getAttribute('clip-path')) {
+ // tx, ty
+ var attr = child.getAttribute('clip-path');
+ if(clipPaths_done.indexOf(attr) === -1) {
+ updateClipPath(attr, tx, ty);
+ clipPaths_done.push(attr);
+ }
+ }
+
+ var old_start_transform = start_transform;
+ start_transform = child.getAttribute("transform");
+
+ var childTlist = getTransformList(child);
+ // some children might not have a transform (<metadata>, <defs>, etc)
+ if (childTlist) {
+ var newxlate = svgroot.createSVGTransform();
+ newxlate.setTranslate(tx,ty);
+ if(childTlist.numberOfItems) {
+ childTlist.insertItemBefore(newxlate, 0);
+ } else {
+ childTlist.appendItem(newxlate);
+ }
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ // If any <use> have this group as a parent and are
+ // referencing this child, then impose a reverse translate on it
+ // so that when it won't get double-translated
+ var uses = selected.getElementsByTagNameNS(svgns, "use");
+ var href = "#"+child.id;
+ var u = uses.length;
+ while (u--) {
+ var useElem = uses.item(u);
+ if(href == getHref(useElem)) {
+ var usexlate = svgroot.createSVGTransform();
+ usexlate.setTranslate(-tx,-ty);
+ getTransformList(useElem).insertItemBefore(usexlate,0);
+ batchCmd.addSubCommand( recalculateDimensions(useElem) );
+ }
+ }
+ start_transform = old_start_transform;
+ }
+ }
+ }
+
+ clipPaths_done = [];
+
+ start_transform = old_start_transform;
+ }
+ }
+ // else, a matrix imposition from a parent group
+ // keep pushing it down to the children
+ else if (N == 1 && tlist.getItem(0).type == 1 && !gangle) {
+ operation = 1;
+ var m = tlist.getItem(0).matrix,
+ children = selected.childNodes,
+ c = children.length;
+ while (c--) {
+ var child = children.item(c);
+ if (child.nodeType == 1) {
+ var old_start_transform = start_transform;
+ start_transform = child.getAttribute("transform");
+ var childTlist = getTransformList(child);
+
+ if (!childTlist) continue;
+
+ var em = matrixMultiply(m, transformListToTransform(childTlist).matrix);
+ var e2m = svgroot.createSVGTransform();
+ e2m.setMatrix(em);
+ childTlist.clear();
+ childTlist.appendItem(e2m,0);
+
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ start_transform = old_start_transform;
+
+ // Convert stroke
+ // TODO: Find out if this should actually happen somewhere else
+ var sw = child.getAttribute("stroke-width");
+ if (child.getAttribute("stroke") !== "none" && !isNaN(sw)) {
+ var avg = (Math.abs(em.a) + Math.abs(em.d)) / 2;
+ child.setAttribute('stroke-width', sw * avg);
+ }
+
+ }
+ }
+ tlist.clear();
+ }
+ // else it was just a rotate
+ else {
+ if (gangle) {
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(gangle,newcenter.x,newcenter.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ if (tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ }
+ return null;
+ }
+
+ // if it was a translate, put back the rotate at the new center
+ if (operation == 2) {
+ if (gangle) {
+ newcenter = {
+ x: oldcenter.x + first_m.e,
+ y: oldcenter.y + first_m.f
+ };
+
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(gangle,newcenter.x,newcenter.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ }
+ // if it was a resize
+ else if (operation == 3) {
+ var m = transformListToTransform(tlist).matrix;
+ var roldt = svgroot.createSVGTransform();
+ roldt.setRotate(gangle, oldcenter.x, oldcenter.y);
+ var rold = roldt.matrix;
+ var rnew = svgroot.createSVGTransform();
+ rnew.setRotate(gangle, newcenter.x, newcenter.y);
+ var rnew_inv = rnew.matrix.inverse(),
+ m_inv = m.inverse(),
+ extrat = matrixMultiply(m_inv, rnew_inv, rold, m);
+
+ tx = extrat.e;
+ ty = extrat.f;
+
+ if (tx != 0 || ty != 0) {
+ // now push this transform down to the children
+ // we pass the translates down to the individual children
+ var children = selected.childNodes;
+ var c = children.length;
+ while (c--) {
+ var child = children.item(c);
+ if (child.nodeType == 1) {
+ var old_start_transform = start_transform;
+ start_transform = child.getAttribute("transform");
+ var childTlist = getTransformList(child);
+ var newxlate = svgroot.createSVGTransform();
+ newxlate.setTranslate(tx,ty);
+ if(childTlist.numberOfItems) {
+ childTlist.insertItemBefore(newxlate, 0);
+ } else {
+ childTlist.appendItem(newxlate);
+ }
+
+ batchCmd.addSubCommand( recalculateDimensions(child) );
+ start_transform = old_start_transform;
+ }
+ }
+ }
+
+ if (gangle) {
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(rnew, 0);
+ } else {
+ tlist.appendItem(rnew);
+ }
+ }
+ }
+ }
+ // else, it's a non-group
+ else {
+
+ // FIXME: box might be null for some elements (<metadata> etc), need to handle this
+ var box = svgedit.utilities.getBBox(selected);
+
+ // Paths (and possbly other shapes) will have no BBox while still in <defs>,
+ // but we still may need to recalculate them (see issue 595).
+ // TODO: Figure out how to get BBox from these elements in case they
+ // have a rotation transform
+
+ if(!box && selected.tagName != 'path') return null;
+
+
+ var m = svgroot.createSVGMatrix(),
+ // temporarily strip off the rotate and save the old center
+ angle = getRotationAngle(selected);
+ if (angle) {
+ var oldcenter = {x: box.x+box.width/2, y: box.y+box.height/2},
+ newcenter = transformPoint(box.x+box.width/2, box.y+box.height/2,
+ transformListToTransform(tlist).matrix);
+
+ var a = angle * Math.PI / 180;
+ if ( Math.abs(a) > (1.0e-10) ) {
+ var s = Math.sin(a)/(1 - Math.cos(a));
+ } else {
+ // FIXME: This blows up if the angle is exactly 0!
+ var s = 2/a;
+ }
+ for (var i = 0; i < tlist.numberOfItems; ++i) {
+ var xform = tlist.getItem(i);
+ if (xform.type == 4) {
+ // extract old center through mystical arts
+ var rm = xform.matrix;
+ oldcenter.y = (s*rm.e + rm.f)/2;
+ oldcenter.x = (rm.e - s*rm.f)/2;
+ tlist.removeItem(i);
+ break;
+ }
+ }
+ }
+
+ // 2 = translate, 3 = scale, 4 = rotate, 1 = matrix imposition
+ var operation = 0;
+ var N = tlist.numberOfItems;
+
+ // Check if it has a gradient with userSpaceOnUse, in which case
+ // adjust it by recalculating the matrix transform.
+ // TODO: Make this work in Webkit using svgedit.transformlist.SVGTransformList
+ if(!svgedit.browser.isWebkit()) {
+ var fill = selected.getAttribute('fill');
+ if(fill && fill.indexOf('url(') === 0) {
+ var paint = getRefElem(fill);
+ var type = 'pattern';
+ if(paint.tagName !== type) type = 'gradient';
+ var attrVal = paint.getAttribute(type + 'Units');
+ if(attrVal === 'userSpaceOnUse') {
+ //Update the userSpaceOnUse element
+ m = transformListToTransform(tlist).matrix;
+ var gtlist = getTransformList(paint);
+ var gmatrix = transformListToTransform(gtlist).matrix;
+ m = matrixMultiply(m, gmatrix);
+ var m_str = "matrix(" + [m.a,m.b,m.c,m.d,m.e,m.f].join(",") + ")";
+ paint.setAttribute(type + 'Transform', m_str);
+ }
+ }
+ }
+
+ // first, if it was a scale of a non-skewed element, then the second-last
+ // transform will be the [S]
+ // if we had [M][T][S][T] we want to extract the matrix equivalent of
+ // [T][S][T] and push it down to the element
+ if (N >= 3 && tlist.getItem(N-2).type == 3 &&
+ tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
+
+ // Removed this so a <use> with a given [T][S][T] would convert to a matrix.
+ // Is that bad?
+ // && selected.nodeName != "use"
+ {
+ operation = 3; // scale
+ m = transformListToTransform(tlist,N-3,N-1).matrix;
+ tlist.removeItem(N-1);
+ tlist.removeItem(N-2);
+ tlist.removeItem(N-3);
+ } // if we had [T][S][-T][M], then this was a skewed element being resized
+ // Thus, we simply combine it all into one matrix
+ else if(N == 4 && tlist.getItem(N-1).type == 1) {
+ operation = 3; // scale
+ m = transformListToTransform(tlist).matrix;
+ var e2t = svgroot.createSVGTransform();
+ e2t.setMatrix(m);
+ tlist.clear();
+ tlist.appendItem(e2t);
+ // reset the matrix so that the element is not re-mapped
+ m = svgroot.createSVGMatrix();
+ } // if we had [R][T][S][-T][M], then this was a rotated matrix-element
+ // if we had [T1][M] we want to transform this into [M][T2]
+ // therefore [ T2 ] = [ M_inv ] [ T1 ] [ M ] and we can push [T2]
+ // down to the element
+ else if ( (N == 1 || (N > 1 && tlist.getItem(1).type != 3)) &&
+ tlist.getItem(0).type == 2)
+ {
+ operation = 2; // translate
+ var oldxlate = tlist.getItem(0).matrix,
+ meq = transformListToTransform(tlist,1).matrix,
+ meq_inv = meq.inverse();
+ m = matrixMultiply( meq_inv, oldxlate, meq );
+ tlist.removeItem(0);
+ }
+ // else if this child now has a matrix imposition (from a parent group)
+ // we might be able to simplify
+ else if (N == 1 && tlist.getItem(0).type == 1 && !angle) {
+ // Remap all point-based elements
+ m = transformListToTransform(tlist).matrix;
+ switch (selected.tagName) {
+ case 'line':
+ changes = $(selected).attr(["x1","y1","x2","y2"]);
+ case 'polyline':
+ case 'polygon':
+ changes.points = selected.getAttribute("points");
+ if(changes.points) {
+ var list = selected.points;
+ var len = list.numberOfItems;
+ changes.points = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ var pt = list.getItem(i);
+ changes.points[i] = {x:pt.x,y:pt.y};
+ }
+ }
+ case 'path':
+ changes.d = selected.getAttribute("d");
+ operation = 1;
+ tlist.clear();
+ break;
+ default:
+ break;
+ }
+ }
+ // if it was a rotation, put the rotate back and return without a command
+ // (this function has zero work to do for a rotate())
+ else {
+ operation = 4; // rotation
+ if (angle) {
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(angle,newcenter.x,newcenter.y);
+
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ if (tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ }
+ return null;
+ }
+
+ // if it was a translate or resize, we need to remap the element and absorb the xform
+ if (operation == 1 || operation == 2 || operation == 3) {
+ remapElement(selected,changes,m);
+ } // if we are remapping
+
+ // if it was a translate, put back the rotate at the new center
+ if (operation == 2) {
+ if (angle) {
+ if(!hasMatrixTransform(tlist)) {
+ newcenter = {
+ x: oldcenter.x + m.e,
+ y: oldcenter.y + m.f
+ };
+ }
+ var newRot = svgroot.createSVGTransform();
+ newRot.setRotate(angle, newcenter.x, newcenter.y);
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(newRot, 0);
+ } else {
+ tlist.appendItem(newRot);
+ }
+ }
+ }
+ // [Rold][M][T][S][-T] became [Rold][M]
+ // we want it to be [Rnew][M][Tr] where Tr is the
+ // translation required to re-center it
+ // Therefore, [Tr] = [M_inv][Rnew_inv][Rold][M]
+ else if (operation == 3 && angle) {
+ var m = transformListToTransform(tlist).matrix;
+ var roldt = svgroot.createSVGTransform();
+ roldt.setRotate(angle, oldcenter.x, oldcenter.y);
+ var rold = roldt.matrix;
+ var rnew = svgroot.createSVGTransform();
+ rnew.setRotate(angle, newcenter.x, newcenter.y);
+ var rnew_inv = rnew.matrix.inverse();
+ var m_inv = m.inverse();
+ var extrat = matrixMultiply(m_inv, rnew_inv, rold, m);
+
+ remapElement(selected,changes,extrat);
+ if (angle) {
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(rnew, 0);
+ } else {
+ tlist.appendItem(rnew);
+ }
+ }
+ }
+ } // a non-group
+
+ // if the transform list has been emptied, remove it
+ if (tlist.numberOfItems == 0) {
+ selected.removeAttribute("transform");
+ }
+
+ batchCmd.addSubCommand(new ChangeElementCommand(selected, initial));
+
+ return batchCmd;
+};
+
+// Root Current Transformation Matrix in user units
+var root_sctm = null;
+
+// Group: Selection
+
+// Function: clearSelection
+// Clears the selection. The 'selected' handler is then called.
+// Parameters:
+// noCall - Optional boolean that when true does not call the "selected" handler
+var clearSelection = this.clearSelection = function(noCall) {
+ if (selectedElements[0] != null) {
+ var len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ var elem = selectedElements[i];
+ if (elem == null) break;
+ selectorManager.releaseSelector(elem);
+ selectedElements[i] = null;
+ }
+// selectedBBoxes[0] = null;
+ }
+ if(!noCall) call("selected", selectedElements);
+};
+
+// TODO: do we need to worry about selectedBBoxes here?
+
+
+// Function: addToSelection
+// Adds a list of elements to the selection. The 'selected' handler is then called.
+//
+// Parameters:
+// elemsToAdd - an array of DOM elements to add to the selection
+// showGrips - a boolean flag indicating whether the resize grips should be shown
+var addToSelection = this.addToSelection = function(elemsToAdd, showGrips) {
+ if (elemsToAdd.length == 0) { return; }
+ // find the first null in our selectedElements array
+ var j = 0;
+
+ while (j < selectedElements.length) {
+ if (selectedElements[j] == null) {
+ break;
+ }
+ ++j;
+ }
+
+ // now add each element consecutively
+ var i = elemsToAdd.length;
+ while (i--) {
+ var elem = elemsToAdd[i];
+ if (!elem || !svgedit.utilities.getBBox(elem)) continue;
+
+ if(elem.tagName === 'a' && elem.childNodes.length === 1) {
+ // Make "a" element's child be the selected element
+ elem = elem.firstChild;
+ }
+
+ // if it's not already there, add it
+ if (selectedElements.indexOf(elem) == -1) {
+
+ selectedElements[j] = elem;
+
+ // only the first selectedBBoxes element is ever used in the codebase these days
+// if (j == 0) selectedBBoxes[0] = svgedit.utilities.getBBox(elem);
+ j++;
+ var sel = selectorManager.requestSelector(elem);
+
+ if (selectedElements.length > 1) {
+ sel.showGrips(false);
+ }
+ }
+ }
+ call("selected", selectedElements);
+
+ if (showGrips || selectedElements.length == 1) {
+ selectorManager.requestSelector(selectedElements[0]).showGrips(true);
+ }
+ else {
+ selectorManager.requestSelector(selectedElements[0]).showGrips(false);
+ }
+
+ // make sure the elements are in the correct order
+ // See: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition
+
+ selectedElements.sort(function(a,b) {
+ if(a && b && a.compareDocumentPosition) {
+ return 3 - (b.compareDocumentPosition(a) & 6);
+ } else if(a == null) {
+ return 1;
+ }
+ });
+
+ // Make sure first elements are not null
+ while(selectedElements[0] == null) selectedElements.shift(0);
+};
+
+// Function: selectOnly()
+// Selects only the given elements, shortcut for clearSelection(); addToSelection()
+//
+// Parameters:
+// elems - an array of DOM elements to be selected
+var selectOnly = this.selectOnly = function(elems, showGrips) {
+ clearSelection(true);
+ addToSelection(elems, showGrips);
+}
+
+// TODO: could use slice here to make this faster?
+// TODO: should the 'selected' handler
+
+// Function: removeFromSelection
+// Removes elements from the selection.
+//
+// Parameters:
+// elemsToRemove - an array of elements to remove from selection
+var removeFromSelection = this.removeFromSelection = function(elemsToRemove) {
+ if (selectedElements[0] == null) { return; }
+ if (elemsToRemove.length == 0) { return; }
+
+ // find every element and remove it from our array copy
+ var newSelectedItems = new Array(selectedElements.length);
+ j = 0,
+ len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ var elem = selectedElements[i];
+ if (elem) {
+ // keep the item
+ if (elemsToRemove.indexOf(elem) == -1) {
+ newSelectedItems[j] = elem;
+ j++;
+ }
+ else { // remove the item and its selector
+ selectorManager.releaseSelector(elem);
+ }
+ }
+ }
+ // the copy becomes the master now
+ selectedElements = newSelectedItems;
+};
+
+// Function: selectAllInCurrentLayer
+// Clears the selection, then adds all elements in the current layer to the selection.
+this.selectAllInCurrentLayer = function() {
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ if (current_layer) {
+ current_mode = "select";
+ selectOnly($(current_group || current_layer).children());
+ }
+};
+
+// Function: getMouseTarget
+// Gets the desired element from a mouse event
+//
+// Parameters:
+// evt - Event object from the mouse event
+//
+// Returns:
+// DOM element we want
+var getMouseTarget = this.getMouseTarget = function(evt) {
+ if (evt == null) {
+ return null;
+ }
+ var mouse_target = evt.target;
+
+ // if it was a <use>, Opera and WebKit return the SVGElementInstance
+ if (mouse_target.correspondingUseElement) mouse_target = mouse_target.correspondingUseElement;
+
+ // for foreign content, go up until we find the foreignObject
+ // WebKit browsers set the mouse target to the svgcanvas div
+ if ([mathns, htmlns].indexOf(mouse_target.namespaceURI) >= 0 &&
+ mouse_target.id != "svgcanvas")
+ {
+ while (mouse_target.nodeName != "foreignObject") {
+ mouse_target = mouse_target.parentNode;
+ if(!mouse_target) return svgroot;
+ }
+ }
+
+ // Get the desired mouse_target with jQuery selector-fu
+ // If it's root-like, select the root
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ if([svgroot, container, svgcontent, current_layer].indexOf(mouse_target) >= 0) {
+ return svgroot;
+ }
+
+ var $target = $(mouse_target);
+
+ // If it's a selection grip, return the grip parent
+ if($target.closest('#selectorParentGroup').length) {
+ // While we could instead have just returned mouse_target,
+ // this makes it easier to indentify as being a selector grip
+ return selectorManager.selectorParentGroup;
+ }
+
+ while (mouse_target.parentNode !== (current_group || current_layer)) {
+ mouse_target = mouse_target.parentNode;
+ }
+
+//
+// // go up until we hit a child of a layer
+// while (mouse_target.parentNode.parentNode.tagName == 'g') {
+// mouse_target = mouse_target.parentNode;
+// }
+ // Webkit bubbles the mouse event all the way up to the div, so we
+ // set the mouse_target to the svgroot like the other browsers
+// if (mouse_target.nodeName.toLowerCase() == "div") {
+// mouse_target = svgroot;
+// }
+
+ return mouse_target;
+};
+
+// Mouse events
+(function() {
+ var d_attr = null,
+ start_x = null,
+ start_y = null,
+ r_start_x = null,
+ r_start_y = null,
+ init_bbox = {},
+ freehand = {
+ minx: null,
+ miny: null,
+ maxx: null,
+ maxy: null
+ };
+
+ // - when we are in a create mode, the element is added to the canvas
+ // but the action is not recorded until mousing up
+ // - when we are in select mode, select the element, remember the position
+ // and do nothing else
+ var mouseDown = function(evt)
+ {
+ if(canvas.spaceKey || evt.button === 1) return;
+
+ var right_click = evt.button === 2;
+
+ if(evt.altKey) { // duplicate when dragging
+ svgCanvas.cloneSelectedElements(0,0);
+ }
+
+ root_sctm = svgcontent.getScreenCTM().inverse();
+
+ var pt = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = pt.x * current_zoom,
+ mouse_y = pt.y * current_zoom;
+
+ evt.preventDefault();
+
+ if(right_click) {
+ current_mode = "select";
+ lastClickPoint = pt;
+ }
+
+ // This would seem to be unnecessary...
+// if(['select', 'resize'].indexOf(current_mode) == -1) {
+// setGradient();
+// }
+
+ var x = mouse_x / current_zoom,
+ y = mouse_y / current_zoom,
+ mouse_target = getMouseTarget(evt);
+
+ if(mouse_target.tagName === 'a' && mouse_target.childNodes.length === 1) {
+ mouse_target = mouse_target.firstChild;
+ }
+
+ // real_x/y ignores grid-snap value
+ var real_x = r_start_x = start_x = x;
+ var real_y = r_start_y = start_y = y;
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ start_x = snapToGrid(start_x);
+ start_y = snapToGrid(start_y);
+ }
+
+ // if it is a selector grip, then it must be a single element selected,
+ // set the mouse_target to that and update the mode to rotate/resize
+
+ if (mouse_target == selectorManager.selectorParentGroup && selectedElements[0] != null) {
+ var grip = evt.target;
+ var griptype = elData(grip, "type");
+ // rotating
+ if (griptype == "rotate") {
+ current_mode = "rotate";
+ }
+ // resizing
+ else if(griptype == "resize") {
+ current_mode = "resize";
+ current_resize_mode = elData(grip, "dir");
+ }
+ mouse_target = selectedElements[0];
+ }
+
+ start_transform = mouse_target.getAttribute("transform");
+ var tlist = getTransformList(mouse_target);
+ switch (current_mode) {
+ case "select":
+ started = true;
+ current_resize_mode = "none";
+ if(right_click) started = false;
+
+ if (mouse_target != svgroot) {
+ // if this element is not yet selected, clear selection and select it
+ if (selectedElements.indexOf(mouse_target) == -1) {
+ // only clear selection if shift is not pressed (otherwise, add
+ // element to selection)
+ if (!evt.shiftKey) {
+ // No need to do the call here as it will be done on addToSelection
+ clearSelection(true);
+ }
+ addToSelection([mouse_target]);
+ justSelected = mouse_target;
+ pathActions.clear();
+ }
+ // else if it's a path, go into pathedit mode in mouseup
+
+ if(!right_click) {
+ // insert a dummy transform so if the element(s) are moved it will have
+ // a transform to use for its translate
+ for (var i = 0; i < selectedElements.length; ++i) {
+ if(selectedElements[i] == null) continue;
+ var slist = getTransformList(selectedElements[i]);
+ if(slist.numberOfItems) {
+ slist.insertItemBefore(svgroot.createSVGTransform(), 0);
+ } else {
+ slist.appendItem(svgroot.createSVGTransform());
+ }
+ }
+ }
+ }
+ else if(!right_click){
+ clearSelection();
+ current_mode = "multiselect";
+ if (rubberBox == null) {
+ rubberBox = selectorManager.getRubberBandBox();
+ }
+ r_start_x *= current_zoom;
+ r_start_y *= current_zoom;
+// console.log('p',[evt.pageX, evt.pageY]);
+// console.log('c',[evt.clientX, evt.clientY]);
+// console.log('o',[evt.offsetX, evt.offsetY]);
+// console.log('s',[start_x, start_y]);
+
+ assignAttributes(rubberBox, {
+ 'x': r_start_x,
+ 'y': r_start_y,
+ 'width': 0,
+ 'height': 0,
+ 'display': 'inline'
+ }, 100);
+ }
+ break;
+ case "zoom":
+ started = true;
+ if (rubberBox == null) {
+ rubberBox = selectorManager.getRubberBandBox();
+ }
+ assignAttributes(rubberBox, {
+ 'x': real_x * current_zoom,
+ 'y': real_x * current_zoom,
+ 'width': 0,
+ 'height': 0,
+ 'display': 'inline'
+ }, 100);
+ break;
+ case "resize":
+ started = true;
+ start_x = x;
+ start_y = y;
+
+ // Getting the BBox from the selection box, since we know we
+ // want to orient around it
+ init_bbox = svgedit.utilities.getBBox($('#selectedBox0')[0]);
+ var bb = {};
+ $.each(init_bbox, function(key, val) {
+ bb[key] = val/current_zoom;
+ });
+ init_bbox = bb;
+
+ // append three dummy transforms to the tlist so that
+ // we can translate,scale,translate in mousemove
+ var pos = getRotationAngle(mouse_target)?1:0;
+
+ if(hasMatrixTransform(tlist)) {
+ tlist.insertItemBefore(svgroot.createSVGTransform(), pos);
+ tlist.insertItemBefore(svgroot.createSVGTransform(), pos);
+ tlist.insertItemBefore(svgroot.createSVGTransform(), pos);
+ } else {
+ tlist.appendItem(svgroot.createSVGTransform());
+ tlist.appendItem(svgroot.createSVGTransform());
+ tlist.appendItem(svgroot.createSVGTransform());
+
+ if(svgedit.browser.supportsNonScalingStroke()) {
+ //Handle crash for newer Chrome + Windows: https://code.google.com/p/svg-edit/issues/detail?id=904
+ // TODO: Remove this workaround (all isChromeWindows blocks) once vendor fixes the issue
+ var isChromeWindows = svgedit.browser.isChrome() && svgedit.browser.isWindows();
+ if(isChromeWindows) {
+ var delayedStroke = function(ele) {
+ var _stroke = ele.getAttributeNS(null, 'stroke');
+ ele.removeAttributeNS(null, 'stroke');
+ //Re-apply stroke after delay. Anything higher than 1 seems to cause flicker
+ setTimeout(function() { ele.setAttributeNS(null, 'stroke', _stroke) }, 1);
+ }
+ }
+ mouse_target.style.vectorEffect = 'non-scaling-stroke';
+ if(isChromeWindows) delayedStroke(mouse_target);
+
+ var all = mouse_target.getElementsByTagName('*'),
+ len = all.length;
+ for(var i = 0; i < len; i++) {
+ all[i].style.vectorEffect = 'non-scaling-stroke';
+ if(isChromeWindows) delayedStroke(all[i]);
+ }
+ }
+ }
+ break;
+ case "fhellipse":
+ case "fhrect":
+ case "fhpath":
+ started = true;
+ d_attr = real_x + "," + real_y + " ";
+ var stroke_w = cur_shape.stroke_width == 0?1:cur_shape.stroke_width;
+ addSvgElementFromJson({
+ "element": "polyline",
+ "curStyles": true,
+ "attr": {
+ "points": d_attr,
+ "id": getNextId(),
+ "fill": "none",
+ "opacity": cur_shape.opacity / 2,
+ "stroke-linecap": "round",
+ "style": "pointer-events:none"
+ }
+ });
+ freehand.minx = real_x;
+ freehand.maxx = real_x;
+ freehand.miny = real_y;
+ freehand.maxy = real_y;
+ break;
+ case "image":
+ started = true;
+ var newImage = addSvgElementFromJson({
+ "element": "image",
+ "attr": {
+ "x": x,
+ "y": y,
+ "width": 0,
+ "height": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2,
+ "style": "pointer-events:inherit"
+ }
+ });
+ setHref(newImage, last_good_img_url);
+ preventClickDefault(newImage);
+ break;
+ case "square":
+ // FIXME: once we create the rect, we lose information that this was a square
+ // (for resizing purposes this could be important)
+ case "rect":
+ started = true;
+ start_x = x;
+ start_y = y;
+ addSvgElementFromJson({
+ "element": "rect",
+ "curStyles": true,
+ "attr": {
+ "x": x,
+ "y": y,
+ "width": 0,
+ "height": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ break;
+ case "line":
+ started = true;
+ var stroke_w = cur_shape.stroke_width == 0?1:cur_shape.stroke_width;
+ addSvgElementFromJson({
+ "element": "line",
+ "curStyles": true,
+ "attr": {
+ "x1": x,
+ "y1": y,
+ "x2": x,
+ "y2": y,
+ "id": getNextId(),
+ "stroke": cur_shape.stroke,
+ "stroke-width": stroke_w,
+ "stroke-dasharray": cur_shape.stroke_dasharray,
+ "stroke-linejoin": cur_shape.stroke_linejoin,
+ "stroke-linecap": cur_shape.stroke_linecap,
+ "stroke-opacity": cur_shape.stroke_opacity,
+ "fill": "none",
+ "opacity": cur_shape.opacity / 2,
+ "style": "pointer-events:none"
+ }
+ });
+ break;
+ case "circle":
+ started = true;
+ addSvgElementFromJson({
+ "element": "circle",
+ "curStyles": true,
+ "attr": {
+ "cx": x,
+ "cy": y,
+ "r": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ break;
+ case "ellipse":
+ started = true;
+ addSvgElementFromJson({
+ "element": "ellipse",
+ "curStyles": true,
+ "attr": {
+ "cx": x,
+ "cy": y,
+ "rx": 0,
+ "ry": 0,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ break;
+ case "text":
+ started = true;
+ var newText = addSvgElementFromJson({
+ "element": "text",
+ "curStyles": true,
+ "attr": {
+ "x": x,
+ "y": y,
+ "id": getNextId(),
+ "fill": cur_text.fill,
+ "stroke-width": cur_text.stroke_width,
+ "font-size": cur_text.font_size,
+ "font-family": cur_text.font_family,
+ "text-anchor": "middle",
+ "xml:space": "preserve",
+ "opacity": cur_shape.opacity
+ }
+ });
+// newText.textContent = "text";
+ break;
+ case "path":
+ // Fall through
+ case "pathedit":
+ start_x *= current_zoom;
+ start_y *= current_zoom;
+ pathActions.mouseDown(evt, mouse_target, start_x, start_y);
+ started = true;
+ break;
+ case "textedit":
+ start_x *= current_zoom;
+ start_y *= current_zoom;
+ textActions.mouseDown(evt, mouse_target, start_x, start_y);
+ started = true;
+ break;
+ case "rotate":
+ started = true;
+ // we are starting an undoable change (a drag-rotation)
+ canvas.undoMgr.beginUndoableChange("transform", selectedElements);
+ break;
+ default:
+ // This could occur in an extension
+ break;
+ }
+
+ var ext_result = runExtensions("mouseDown", {
+ event: evt,
+ start_x: start_x,
+ start_y: start_y,
+ selectedElements: selectedElements
+ }, true);
+
+ $.each(ext_result, function(i, r) {
+ if(r && r.started) {
+ started = true;
+ }
+ });
+ };
+
+ // in this function we do not record any state changes yet (but we do update
+ // any elements that are still being created, moved or resized on the canvas)
+ var mouseMove = function(evt)
+ {
+ if (!started) return;
+ if(evt.button === 1 || canvas.spaceKey) return;
+
+ var selected = selectedElements[0],
+ pt = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = pt.x * current_zoom,
+ mouse_y = pt.y * current_zoom,
+ shape = getElem(getId());
+
+ var real_x = x = mouse_x / current_zoom;
+ var real_y = y = mouse_y / current_zoom;
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ }
+
+ evt.preventDefault();
+
+ switch (current_mode)
+ {
+ case "select":
+ // we temporarily use a translate on the element(s) being dragged
+ // this transform is removed upon mousing up and the element is
+ // relocated to the new location
+ if (selectedElements[0] !== null) {
+ var dx = x - start_x;
+ var dy = y - start_y;
+
+ if(curConfig.gridSnapping){
+ dx = snapToGrid(dx);
+ dy = snapToGrid(dy);
+ }
+
+ 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;
+ for (var i = 0; i < len; ++i) {
+ var selected = selectedElements[i];
+ if (selected == null) break;
+// if (i==0) {
+// var box = svgedit.utilities.getBBox(selected);
+// selectedBBoxes[i].x = box.x + dx;
+// selectedBBoxes[i].y = box.y + dy;
+// }
+
+ // update the dummy transform in our transform list
+ // to be a translate
+ var xform = svgroot.createSVGTransform();
+ var tlist = getTransformList(selected);
+ // Note that if Webkit and there's no ID for this
+ // element, the dummy transform may have gotten lost.
+ // This results in unexpected behaviour
+
+ xform.setTranslate(dx,dy);
+ if(tlist.numberOfItems) {
+ tlist.replaceItem(xform, 0);
+ } else {
+ tlist.appendItem(xform);
+ }
+
+ // update our internal bbox that we're tracking while dragging
+ selectorManager.requestSelector(selected).resize();
+ }
+
+ call("transition", selectedElements);
+ }
+ }
+ break;
+ case "multiselect":
+ real_x *= current_zoom;
+ real_y *= current_zoom;
+ assignAttributes(rubberBox, {
+ 'x': Math.min(r_start_x, real_x),
+ 'y': Math.min(r_start_y, real_y),
+ 'width': Math.abs(real_x - r_start_x),
+ 'height': Math.abs(real_y - r_start_y)
+ },100);
+
+ // for each selected:
+ // - if newList contains selected, do nothing
+ // - if newList doesn't contain selected, remove it from selected
+ // - for any newList that was not in selectedElements, add it to selected
+ var elemsToRemove = [], elemsToAdd = [],
+ newList = getIntersectionList(),
+ len = selectedElements.length;
+
+ for (var i = 0; i < len; ++i) {
+ var ind = newList.indexOf(selectedElements[i]);
+ if (ind == -1) {
+ elemsToRemove.push(selectedElements[i]);
+ }
+ else {
+ newList[ind] = null;
+ }
+ }
+
+ len = newList.length;
+ for (i = 0; i < len; ++i) { if (newList[i]) elemsToAdd.push(newList[i]); }
+
+ if (elemsToRemove.length > 0)
+ canvas.removeFromSelection(elemsToRemove);
+
+ if (elemsToAdd.length > 0)
+ addToSelection(elemsToAdd);
+
+ break;
+ case "resize":
+ // we track the resize bounding box and translate/scale the selected element
+ // while the mouse is down, when mouse goes up, we use this to recalculate
+ // the shape's coordinates
+ var tlist = getTransformList(selected),
+ hasMatrix = hasMatrixTransform(tlist),
+ box = hasMatrix ? init_bbox : svgedit.utilities.getBBox(selected),
+ left=box.x, top=box.y, width=box.width,
+ height=box.height, dx=(x-start_x), dy=(y-start_y);
+
+ if(curConfig.gridSnapping){
+ dx = snapToGrid(dx);
+ dy = snapToGrid(dy);
+ height = snapToGrid(height);
+ width = snapToGrid(width);
+ }
+
+ // if rotated, adjust the dx,dy values
+ var angle = getRotationAngle(selected);
+ if (angle) {
+ var r = Math.sqrt( dx*dx + dy*dy ),
+ theta = Math.atan2(dy,dx) - angle * Math.PI / 180.0;
+ dx = r * Math.cos(theta);
+ dy = r * Math.sin(theta);
+ }
+
+ // if not stretching in y direction, set dy to 0
+ // if not stretching in x direction, set dx to 0
+ if(current_resize_mode.indexOf("n")==-1 && current_resize_mode.indexOf("s")==-1) {
+ dy = 0;
+ }
+ if(current_resize_mode.indexOf("e")==-1 && current_resize_mode.indexOf("w")==-1) {
+ dx = 0;
+ }
+
+ var ts = null,
+ tx = 0, ty = 0,
+ sy = height ? (height+dy)/height : 1,
+ sx = width ? (width+dx)/width : 1;
+ // if we are dragging on the north side, then adjust the scale factor and ty
+ if(current_resize_mode.indexOf("n") >= 0) {
+ sy = height ? (height-dy)/height : 1;
+ ty = height;
+ }
+
+ // if we dragging on the east side, then adjust the scale factor and tx
+ if(current_resize_mode.indexOf("w") >= 0) {
+ sx = width ? (width-dx)/width : 1;
+ tx = width;
+ }
+
+ // update the transform list with translate,scale,translate
+ var translateOrigin = svgroot.createSVGTransform(),
+ scale = svgroot.createSVGTransform(),
+ translateBack = svgroot.createSVGTransform();
+
+ if(curConfig.gridSnapping){
+ left = snapToGrid(left);
+ tx = snapToGrid(tx);
+ top = snapToGrid(top);
+ ty = snapToGrid(ty);
+ }
+
+ translateOrigin.setTranslate(-(left+tx),-(top+ty));
+ if(evt.shiftKey) {
+ if(sx == 1) sx = sy
+ else sy = sx;
+ }
+ scale.setScale(sx,sy);
+
+ translateBack.setTranslate(left+tx,top+ty);
+ if(hasMatrix) {
+ var diff = angle?1:0;
+ tlist.replaceItem(translateOrigin, 2+diff);
+ tlist.replaceItem(scale, 1+diff);
+ tlist.replaceItem(translateBack, 0+diff);
+ } else {
+ var N = tlist.numberOfItems;
+ tlist.replaceItem(translateBack, N-3);
+ tlist.replaceItem(scale, N-2);
+ tlist.replaceItem(translateOrigin, N-1);
+ }
+
+ selectorManager.requestSelector(selected).resize();
+
+ call("transition", selectedElements);
+
+ break;
+ case "zoom":
+ real_x *= current_zoom;
+ real_y *= current_zoom;
+ assignAttributes(rubberBox, {
+ 'x': Math.min(r_start_x*current_zoom, real_x),
+ 'y': Math.min(r_start_y*current_zoom, real_y),
+ 'width': Math.abs(real_x - r_start_x*current_zoom),
+ 'height': Math.abs(real_y - r_start_y*current_zoom)
+ },100);
+ break;
+ case "text":
+ assignAttributes(shape,{
+ 'x': x,
+ 'y': y
+ },1000);
+ break;
+ case "line":
+ // Opera has a problem with suspendRedraw() apparently
+ var handle = null;
+ if (!window.opera) svgroot.suspendRedraw(1000);
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ }
+
+ var x2 = x;
+ var y2 = 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);
+ if (!window.opera) svgroot.unsuspendRedraw(handle);
+ break;
+ case "foreignObject":
+ // fall through
+ case "square":
+ // fall through
+ case "rect":
+ // fall through
+ case "image":
+ var square = (current_mode == 'square') || evt.shiftKey,
+ w = Math.abs(x - start_x),
+ h = Math.abs(y - start_y),
+ new_x, new_y;
+ if(square) {
+ w = h = Math.max(w, h);
+ new_x = start_x < x ? start_x : start_x - w;
+ new_y = start_y < y ? start_y : start_y - h;
+ } else {
+ new_x = Math.min(start_x,x);
+ new_y = Math.min(start_y,y);
+ }
+
+ if(curConfig.gridSnapping){
+ w = snapToGrid(w);
+ h = snapToGrid(h);
+ new_x = snapToGrid(new_x);
+ new_y = snapToGrid(new_y);
+ }
+
+ assignAttributes(shape,{
+ 'width': w,
+ 'height': h,
+ 'x': new_x,
+ 'y': new_y
+ },1000);
+
+ break;
+ case "circle":
+ var c = $(shape).attr(["cx", "cy"]);
+ var cx = c.cx, cy = c.cy,
+ rad = Math.sqrt( (x-cx)*(x-cx) + (y-cy)*(y-cy) );
+ if(curConfig.gridSnapping){
+ rad = snapToGrid(rad);
+ }
+ shape.setAttributeNS(null, "r", rad);
+ break;
+ case "ellipse":
+ var c = $(shape).attr(["cx", "cy"]);
+ var cx = c.cx, cy = c.cy;
+ // Opera has a problem with suspendRedraw() apparently
+ handle = null;
+ if (!window.opera) svgroot.suspendRedraw(1000);
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ cx = snapToGrid(cx);
+ y = snapToGrid(y);
+ cy = snapToGrid(cy);
+ }
+ shape.setAttributeNS(null, "rx", Math.abs(x - cx) );
+ var ry = Math.abs(evt.shiftKey?(x - cx):(y - cy));
+ shape.setAttributeNS(null, "ry", ry );
+ if (!window.opera) svgroot.unsuspendRedraw(handle);
+ break;
+ case "fhellipse":
+ case "fhrect":
+ freehand.minx = Math.min(real_x, freehand.minx);
+ freehand.maxx = Math.max(real_x, freehand.maxx);
+ freehand.miny = Math.min(real_y, freehand.miny);
+ freehand.maxy = Math.max(real_y, freehand.maxy);
+ // break; missing on purpose
+ case "fhpath":
+ d_attr += + real_x + "," + real_y + " ";
+ shape.setAttributeNS(null, "points", d_attr);
+ break;
+ // update path stretch line coordinates
+ case "path":
+ // fall through
+ case "pathedit":
+ x *= current_zoom;
+ y *= current_zoom;
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ start_x = snapToGrid(start_x);
+ start_y = snapToGrid(start_y);
+ }
+ if(evt.shiftKey) {
+ var path = svgedit.path.path;
+ if(path) {
+ var x1 = path.dragging?path.dragging[0]:start_x;
+ var y1 = path.dragging?path.dragging[1]:start_y;
+ } else {
+ var x1 = start_x;
+ var y1 = start_y;
+ }
+ var xya = snapToAngle(x1,y1,x,y);
+ x=xya.x; y=xya.y;
+ }
+
+ if(rubberBox && rubberBox.getAttribute('display') !== 'none') {
+ real_x *= current_zoom;
+ real_y *= current_zoom;
+ assignAttributes(rubberBox, {
+ 'x': Math.min(r_start_x*current_zoom, real_x),
+ 'y': Math.min(r_start_y*current_zoom, real_y),
+ 'width': Math.abs(real_x - r_start_x*current_zoom),
+ 'height': Math.abs(real_y - r_start_y*current_zoom)
+ },100);
+ }
+ pathActions.mouseMove(x, y);
+
+ break;
+ case "textedit":
+ x *= current_zoom;
+ y *= current_zoom;
+// if(rubberBox && rubberBox.getAttribute('display') != 'none') {
+// assignAttributes(rubberBox, {
+// 'x': Math.min(start_x,x),
+// 'y': Math.min(start_y,y),
+// 'width': Math.abs(x-start_x),
+// 'height': Math.abs(y-start_y)
+// },100);
+// }
+
+ textActions.mouseMove(mouse_x, mouse_y);
+
+ break;
+ case "rotate":
+ var box = svgedit.utilities.getBBox(selected),
+ cx = box.x + box.width/2,
+ cy = box.y + box.height/2,
+ m = getMatrix(selected),
+ center = transformPoint(cx,cy,m);
+ cx = center.x;
+ cy = center.y;
+ var angle = ((Math.atan2(cy-y,cx-x) * (180/Math.PI))-90) % 360;
+ if(curConfig.gridSnapping){
+ angle = snapToGrid(angle);
+ }
+ if(evt.shiftKey) { // restrict rotations to nice angles (WRS)
+ var snap = 45;
+ angle= Math.round(angle/snap)*snap;
+ }
+
+ canvas.setRotationAngle(angle<-180?(360+angle):angle, true);
+ call("transition", selectedElements);
+ break;
+ default:
+ break;
+ }
+
+ runExtensions("mouseMove", {
+ event: evt,
+ mouse_x: mouse_x,
+ mouse_y: mouse_y,
+ selected: selected
+ });
+
+ }; // mouseMove()
+
+ // - in create mode, the element's opacity is set properly, we create an InsertElementCommand
+ // and store it on the Undo stack
+ // - in move/resize mode, the element's attributes which were affected by the move/resize are
+ // identified, a ChangeElementCommand is created and stored on the stack for those attrs
+ // this is done in when we recalculate the selected dimensions()
+ var mouseUp = function(evt)
+ {
+ if(evt.button === 2) return;
+ var tempJustSelected = justSelected;
+ justSelected = null;
+ if (!started) return;
+ var pt = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = pt.x * current_zoom,
+ mouse_y = pt.y * current_zoom,
+ x = mouse_x / current_zoom,
+ y = mouse_y / current_zoom,
+ element = getElem(getId()),
+ keep = false;
+
+ var real_x = x;
+ var real_y = y;
+
+ // TODO: Make true when in multi-unit mode
+ var useUnit = false; // (curConfig.baseUnit !== 'px');
+ started = false;
+ switch (current_mode)
+ {
+ // intentionally fall-through to select here
+ case "resize":
+ case "multiselect":
+ if (rubberBox != null) {
+ rubberBox.setAttribute("display", "none");
+ curBBoxes = [];
+ }
+ current_mode = "select";
+ case "select":
+ if (selectedElements[0] != null) {
+ // if we only have one selected element
+ if (selectedElements[1] == null) {
+ // set our current stroke/fill properties to the element's
+ var selected = selectedElements[0];
+ switch ( selected.tagName ) {
+ case "g":
+ case "use":
+ case "image":
+ case "foreignObject":
+ break;
+ default:
+ cur_properties.fill = selected.getAttribute("fill");
+ cur_properties.fill_opacity = selected.getAttribute("fill-opacity");
+ cur_properties.stroke = selected.getAttribute("stroke");
+ cur_properties.stroke_opacity = selected.getAttribute("stroke-opacity");
+ cur_properties.stroke_width = selected.getAttribute("stroke-width");
+ cur_properties.stroke_dasharray = selected.getAttribute("stroke-dasharray");
+ cur_properties.stroke_linejoin = selected.getAttribute("stroke-linejoin");
+ cur_properties.stroke_linecap = selected.getAttribute("stroke-linecap");
+ }
+
+ if (selected.tagName == "text") {
+ cur_text.font_size = selected.getAttribute("font-size");
+ cur_text.font_family = selected.getAttribute("font-family");
+ }
+ selectorManager.requestSelector(selected).showGrips(true);
+
+ // This shouldn't be necessary as it was done on mouseDown...
+// call("selected", [selected]);
+ }
+ // always recalculate dimensions to strip off stray identity transforms
+ recalculateAllSelectedDimensions();
+ // if it was being dragged/resized
+ if (real_x != r_start_x || real_y != r_start_y) {
+ var len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ if (selectedElements[i] == null) break;
+ if(!selectedElements[i].firstChild) {
+ // Not needed for groups (incorrectly resizes elems), possibly not needed at all?
+ selectorManager.requestSelector(selectedElements[i]).resize();
+ }
+ }
+ }
+ // no change in position/size, so maybe we should move to pathedit
+ else {
+ var t = evt.target;
+ if (selectedElements[0].nodeName === "path" && selectedElements[1] == null) {
+ pathActions.select(selectedElements[0]);
+ } // if it was a path
+ // else, if it was selected and this is a shift-click, remove it from selection
+ else if (evt.shiftKey) {
+ if(tempJustSelected != t) {
+ canvas.removeFromSelection([t]);
+ }
+ }
+ } // no change in mouse position
+
+ // Remove non-scaling stroke
+ if(svgedit.browser.supportsNonScalingStroke()) {
+ var elem = selectedElements[0];
+ if (elem) {
+ elem.removeAttribute('style');
+ svgedit.utilities.walkTree(elem, function(elem) {
+ elem.removeAttribute('style');
+ });
+ }
+ }
+
+ }
+ return;
+ break;
+ case "zoom":
+ if (rubberBox != null) {
+ rubberBox.setAttribute("display", "none");
+ }
+ var factor = evt.shiftKey?.5:2;
+ call("zoomed", {
+ 'x': Math.min(r_start_x, real_x),
+ 'y': Math.min(r_start_y, real_y),
+ 'width': Math.abs(real_x - r_start_x),
+ 'height': Math.abs(real_y - r_start_y),
+ 'factor': factor
+ });
+ return;
+ case "fhpath":
+ // Check that the path contains at least 2 points; a degenerate one-point path
+ // causes problems.
+ // Webkit ignores how we set the points attribute with commas and uses space
+ // to separate all coordinates, see https://bugs.webkit.org/show_bug.cgi?id=29870
+ var coords = element.getAttribute('points');
+ var commaIndex = coords.indexOf(',');
+ if (commaIndex >= 0) {
+ keep = coords.indexOf(',', commaIndex+1) >= 0;
+ } else {
+ keep = coords.indexOf(' ', coords.indexOf(' ')+1) >= 0;
+ }
+ if (keep) {
+ element = pathActions.smoothPolylineIntoPath(element);
+ }
+ break;
+ case "line":
+ var attrs = $(element).attr(["x1", "x2", "y1", "y2"]);
+ keep = (attrs.x1 != attrs.x2 || attrs.y1 != attrs.y2);
+ break;
+ case "foreignObject":
+ case "square":
+ case "rect":
+ case "image":
+ var attrs = $(element).attr(["width", "height"]);
+ // Image should be kept regardless of size (use inherit dimensions later)
+ keep = (attrs.width != 0 || attrs.height != 0) || current_mode === "image";
+ break;
+ case "circle":
+ keep = (element.getAttribute('r') != 0);
+ break;
+ case "ellipse":
+ var attrs = $(element).attr(["rx", "ry"]);
+ keep = (attrs.rx != null || attrs.ry != null);
+ break;
+ case "fhellipse":
+ if ((freehand.maxx - freehand.minx) > 0 &&
+ (freehand.maxy - freehand.miny) > 0) {
+ element = addSvgElementFromJson({
+ "element": "ellipse",
+ "curStyles": true,
+ "attr": {
+ "cx": (freehand.minx + freehand.maxx) / 2,
+ "cy": (freehand.miny + freehand.maxy) / 2,
+ "rx": (freehand.maxx - freehand.minx) / 2,
+ "ry": (freehand.maxy - freehand.miny) / 2,
+ "id": getId()
+ }
+ });
+ call("changed",[element]);
+ keep = true;
+ }
+ break;
+ case "fhrect":
+ if ((freehand.maxx - freehand.minx) > 0 &&
+ (freehand.maxy - freehand.miny) > 0) {
+ element = addSvgElementFromJson({
+ "element": "rect",
+ "curStyles": true,
+ "attr": {
+ "x": freehand.minx,
+ "y": freehand.miny,
+ "width": (freehand.maxx - freehand.minx),
+ "height": (freehand.maxy - freehand.miny),
+ "id": getId()
+ }
+ });
+ call("changed",[element]);
+ keep = true;
+ }
+ break;
+ case "text":
+ keep = true;
+ selectOnly([element]);
+ textActions.start(element);
+ break;
+ case "path":
+ // set element to null here so that it is not removed nor finalized
+ element = null;
+ // continue to be set to true so that mouseMove happens
+ started = true;
+
+ var res = pathActions.mouseUp(evt, element, mouse_x, mouse_y);
+ element = res.element
+ keep = res.keep;
+ break;
+ case "pathedit":
+ keep = true;
+ element = null;
+ pathActions.mouseUp(evt);
+ break;
+ case "textedit":
+ keep = false;
+ element = null;
+ textActions.mouseUp(evt, mouse_x, mouse_y);
+ break;
+ case "rotate":
+ keep = true;
+ element = null;
+ current_mode = "select";
+ var batchCmd = canvas.undoMgr.finishUndoableChange();
+ if (!batchCmd.isEmpty()) {
+ addCommandToHistory(batchCmd);
+ }
+ // perform recalculation to weed out any stray identity transforms that might get stuck
+ recalculateAllSelectedDimensions();
+ call("changed", selectedElements);
+ break;
+ default:
+ // This could occur in an extension
+ break;
+ }
+
+ var ext_result = runExtensions("mouseUp", {
+ event: evt,
+ mouse_x: mouse_x,
+ mouse_y: mouse_y
+ }, true);
+
+ $.each(ext_result, function(i, r) {
+ if(r) {
+ keep = r.keep || keep;
+ element = r.element;
+ started = r.started || started;
+ }
+ });
+
+ if (!keep && element != null) {
+ getCurrentDrawing().releaseId(getId());
+ element.parentNode.removeChild(element);
+ element = null;
+
+ var t = evt.target;
+
+ // if this element is in a group, go up until we reach the top-level group
+ // just below the layer groups
+ // TODO: once we implement links, we also would have to check for <a> elements
+ while (t.parentNode.parentNode.tagName == "g") {
+ t = t.parentNode;
+ }
+ // if we are not in the middle of creating a path, and we've clicked on some shape,
+ // then go to Select mode.
+ // WebKit returns <div> when the canvas is clicked, Firefox/Opera return <svg>
+ if ( (current_mode != "path" || !drawn_path) &&
+ t.parentNode.id != "selectorParentGroup" &&
+ t.id != "svgcanvas" && t.id != "svgroot")
+ {
+ // switch into "select" mode if we've clicked on an element
+ canvas.setMode("select");
+ selectOnly([t], true);
+ }
+
+ } else if (element != null) {
+ canvas.addedNew = true;
+
+ if(useUnit) svgedit.units.convertAttrs(element);
+
+ var ani_dur = .2, c_ani;
+ if(opac_ani.beginElement && element.getAttribute('opacity') != cur_shape.opacity) {
+ c_ani = $(opac_ani).clone().attr({
+ to: cur_shape.opacity,
+ dur: ani_dur
+ }).appendTo(element);
+ try {
+ // Fails in FF4 on foreignObject
+ c_ani[0].beginElement();
+ } catch(e){}
+ } else {
+ ani_dur = 0;
+ }
+
+ // Ideally this would be done on the endEvent of the animation,
+ // but that doesn't seem to be supported in Webkit
+ setTimeout(function() {
+ if(c_ani) c_ani.remove();
+ element.setAttribute("opacity", cur_shape.opacity);
+ element.setAttribute("style", "pointer-events:inherit");
+ cleanupElement(element);
+ if(current_mode === "path") {
+ pathActions.toEditMode(element);
+ } else {
+ if(curConfig.selectNew) {
+ selectOnly([element], true);
+ }
+ }
+ // we create the insert command that is stored on the stack
+ // undo means to call cmd.unapply(), redo means to call cmd.apply()
+ addCommandToHistory(new InsertElementCommand(element));
+
+ call("changed",[element]);
+ }, ani_dur * 1000);
+ }
+
+ start_transform = null;
+ };
+
+ var dblClick = function(evt) {
+ var evt_target = evt.target;
+ var parent = evt_target.parentNode;
+
+ // Do nothing if already in current group
+ if(parent === current_group) return;
+
+ var mouse_target = getMouseTarget(evt);
+ var tagName = mouse_target.tagName;
+
+ if(tagName === 'text' && current_mode !== 'textedit') {
+ var pt = transformPoint( evt.pageX, evt.pageY, root_sctm );
+ textActions.select(mouse_target, pt.x, pt.y);
+ }
+
+ if((tagName === "g" || tagName === "a") && getRotationAngle(mouse_target)) {
+ // TODO: Allow method of in-group editing without having to do
+ // this (similar to editing rotated paths)
+
+ // Ungroup and regroup
+ pushGroupProperties(mouse_target);
+ mouse_target = selectedElements[0];
+ clearSelection(true);
+ }
+ // Reset context
+ if(current_group) {
+ leaveContext();
+ }
+
+ if((parent.tagName !== 'g' && parent.tagName !== 'a') ||
+ parent === getCurrentDrawing().getCurrentLayer() ||
+ mouse_target === selectorManager.selectorParentGroup)
+ {
+ // Escape from in-group edit
+ return;
+ }
+ setContext(mouse_target);
+ }
+
+ // prevent links from being followed in the canvas
+ var handleLinkInCanvas = function(e) {
+ e.preventDefault();
+ return false;
+ };
+
+ // Added mouseup to the container here.
+ // TODO(codedread): Figure out why after the Closure compiler, the window mouseup is ignored.
+ $(container).mousedown(mouseDown).mousemove(mouseMove).click(handleLinkInCanvas).dblclick(dblClick).mouseup(mouseUp);
+// $(window).mouseup(mouseUp);
+
+ $(container).bind("mousewheel DOMMouseScroll", function(e){
+ if(!e.shiftKey) return;
+ e.preventDefault();
+
+ root_sctm = svgcontent.getScreenCTM().inverse();
+ var pt = transformPoint( e.pageX, e.pageY, root_sctm );
+ var bbox = {
+ 'x': pt.x,
+ 'y': pt.y,
+ 'width': 0,
+ 'height': 0
+ };
+
+ // Respond to mouse wheel in IE/Webkit/Opera.
+ // (It returns up/dn motion in multiples of 120)
+ if(e.wheelDelta) {
+ if (e.wheelDelta >= 120) {
+ bbox.factor = 2;
+ } else if (e.wheelDelta <= -120) {
+ bbox.factor = .5;
+ }
+ } else if(e.detail) {
+ if (e.detail > 0) {
+ bbox.factor = .5;
+ } else if (e.detail < 0) {
+ bbox.factor = 2;
+ }
+ }
+
+ if(!bbox.factor) return;
+ call("zoomed", bbox);
+ });
+
+}());
+
+// Function: preventClickDefault
+// Prevents default browser click behaviour on the given element
+//
+// Parameters:
+// img - The DOM element to prevent the cilck on
+var preventClickDefault = function(img) {
+ $(img).click(function(e){e.preventDefault()});
+}
+
+// Group: Text edit functions
+// Functions relating to editing text elements
+var textActions = canvas.textActions = function() {
+ var curtext;
+ var textinput;
+ var cursor;
+ var selblock;
+ var blinker;
+ var chardata = [];
+ var textbb, transbb;
+ var matrix;
+ var last_x, last_y;
+ var allow_dbl;
+
+ function setCursor(index) {
+ var empty = (textinput.value === "");
+ $(textinput).focus();
+
+ if(!arguments.length) {
+ if(empty) {
+ index = 0;
+ } else {
+ if(textinput.selectionEnd !== textinput.selectionStart) return;
+ index = textinput.selectionEnd;
+ }
+ }
+
+ var charbb;
+ charbb = chardata[index];
+ if(!empty) {
+ textinput.setSelectionRange(index, index);
+ }
+ cursor = getElem("text_cursor");
+ if (!cursor) {
+ cursor = document.createElementNS(svgns, "line");
+ assignAttributes(cursor, {
+ 'id': "text_cursor",
+ 'stroke': "#333",
+ 'stroke-width': 1
+ });
+ cursor = getElem("selectorParentGroup").appendChild(cursor);
+ }
+
+ if(!blinker) {
+ blinker = setInterval(function() {
+ var show = (cursor.getAttribute('display') === 'none');
+ cursor.setAttribute('display', show?'inline':'none');
+ }, 600);
+
+ }
+
+
+ var start_pt = ptToScreen(charbb.x, textbb.y);
+ var end_pt = ptToScreen(charbb.x, (textbb.y + textbb.height));
+
+ assignAttributes(cursor, {
+ x1: start_pt.x,
+ y1: start_pt.y,
+ x2: end_pt.x,
+ y2: end_pt.y,
+ visibility: 'visible',
+ display: 'inline'
+ });
+
+ if(selblock) selblock.setAttribute('d', '');
+ }
+
+ function setSelection(start, end, skipInput) {
+ if(start === end) {
+ setCursor(end);
+ return;
+ }
+
+ if(!skipInput) {
+ textinput.setSelectionRange(start, end);
+ }
+
+ selblock = getElem("text_selectblock");
+ if (!selblock) {
+
+ selblock = document.createElementNS(svgns, "path");
+ assignAttributes(selblock, {
+ 'id': "text_selectblock",
+ 'fill': "green",
+ 'opacity': .5,
+ 'style': "pointer-events:none"
+ });
+ getElem("selectorParentGroup").appendChild(selblock);
+ }
+
+
+ var startbb = chardata[start];
+
+ var endbb = chardata[end];
+
+ cursor.setAttribute('visibility', 'hidden');
+
+ var tl = ptToScreen(startbb.x, textbb.y),
+ tr = ptToScreen(startbb.x + (endbb.x - startbb.x), textbb.y),
+ bl = ptToScreen(startbb.x, textbb.y + textbb.height),
+ br = ptToScreen(startbb.x + (endbb.x - startbb.x), textbb.y + textbb.height);
+
+
+ var dstr = "M" + tl.x + "," + tl.y
+ + " L" + tr.x + "," + tr.y
+ + " " + br.x + "," + br.y
+ + " " + bl.x + "," + bl.y + "z";
+
+ assignAttributes(selblock, {
+ d: dstr,
+ 'display': 'inline'
+ });
+ }
+
+ function getIndexFromPoint(mouse_x, mouse_y) {
+ // Position cursor here
+ var pt = svgroot.createSVGPoint();
+ pt.x = mouse_x;
+ pt.y = mouse_y;
+
+ // No content, so return 0
+ if(chardata.length == 1) return 0;
+ // Determine if cursor should be on left or right of character
+ var charpos = curtext.getCharNumAtPosition(pt);
+ if(charpos < 0) {
+ // Out of text range, look at mouse coords
+ charpos = chardata.length - 2;
+ if(mouse_x <= chardata[0].x) {
+ charpos = 0;
+ }
+ } else if(charpos >= chardata.length - 2) {
+ charpos = chardata.length - 2;
+ }
+ var charbb = chardata[charpos];
+ var mid = charbb.x + (charbb.width/2);
+ if(mouse_x > mid) {
+ charpos++;
+ }
+ return charpos;
+ }
+
+ function setCursorFromPoint(mouse_x, mouse_y) {
+ setCursor(getIndexFromPoint(mouse_x, mouse_y));
+ }
+
+ function setEndSelectionFromPoint(x, y, apply) {
+ var i1 = textinput.selectionStart;
+ var i2 = getIndexFromPoint(x, y);
+
+ var start = Math.min(i1, i2);
+ var end = Math.max(i1, i2);
+ setSelection(start, end, !apply);
+ }
+
+ function screenToPt(x_in, y_in) {
+ var out = {
+ x: x_in,
+ y: y_in
+ }
+
+ out.x /= current_zoom;
+ out.y /= current_zoom;
+
+ if(matrix) {
+ var pt = transformPoint(out.x, out.y, matrix.inverse());
+ out.x = pt.x;
+ out.y = pt.y;
+ }
+
+ return out;
+ }
+
+ function ptToScreen(x_in, y_in) {
+ var out = {
+ x: x_in,
+ y: y_in
+ }
+
+ if(matrix) {
+ var pt = transformPoint(out.x, out.y, matrix);
+ out.x = pt.x;
+ out.y = pt.y;
+ }
+
+ out.x *= current_zoom;
+ out.y *= current_zoom;
+
+ return out;
+ }
+
+ function hideCursor() {
+ if(cursor) {
+ cursor.setAttribute('visibility', 'hidden');
+ }
+ }
+
+ function selectAll(evt) {
+ setSelection(0, curtext.textContent.length);
+ $(this).unbind(evt);
+ }
+
+ function selectWord(evt) {
+ if(!allow_dbl || !curtext) return;
+
+ var ept = transformPoint( evt.pageX, evt.pageY, root_sctm ),
+ mouse_x = ept.x * current_zoom,
+ mouse_y = ept.y * current_zoom;
+ var pt = screenToPt(mouse_x, mouse_y);
+
+ var index = getIndexFromPoint(pt.x, pt.y);
+ var str = curtext.textContent;
+ var first = str.substr(0, index).replace(/[a-z0-9]+$/i, '').length;
+ var m = str.substr(index).match(/^[a-z0-9]+/i);
+ var last = (m?m[0].length:0) + index;
+ setSelection(first, last);
+
+ // Set tripleclick
+ $(evt.target).click(selectAll);
+ setTimeout(function() {
+ $(evt.target).unbind('click', selectAll);
+ }, 300);
+
+ }
+
+ return {
+ select: function(target, x, y) {
+ curtext = target;
+ textActions.toEditMode(x, y);
+ },
+ start: function(elem) {
+ curtext = elem;
+ textActions.toEditMode();
+ },
+ mouseDown: function(evt, mouse_target, start_x, start_y) {
+ var pt = screenToPt(start_x, start_y);
+
+ textinput.focus();
+ setCursorFromPoint(pt.x, pt.y);
+ last_x = start_x;
+ last_y = start_y;
+
+ // TODO: Find way to block native selection
+ },
+ mouseMove: function(mouse_x, mouse_y) {
+ var pt = screenToPt(mouse_x, mouse_y);
+ setEndSelectionFromPoint(pt.x, pt.y);
+ },
+ mouseUp: function(evt, mouse_x, mouse_y) {
+ var pt = screenToPt(mouse_x, mouse_y);
+
+ setEndSelectionFromPoint(pt.x, pt.y, true);
+
+ // TODO: Find a way to make this work: Use transformed BBox instead of evt.target
+// if(last_x === mouse_x && last_y === mouse_y
+// && !svgedit.math.rectsIntersect(transbb, {x: pt.x, y: pt.y, width:0, height:0})) {
+// textActions.toSelectMode(true);
+// }
+
+ if(
+ evt.target !== curtext
+ && mouse_x < last_x + 2
+ && mouse_x > last_x - 2
+ && mouse_y < last_y + 2
+ && mouse_y > last_y - 2) {
+
+ textActions.toSelectMode(true);
+ }
+
+ },
+ setCursor: setCursor,
+ toEditMode: function(x, y) {
+ allow_dbl = false;
+ current_mode = "textedit";
+ selectorManager.requestSelector(curtext).showGrips(false);
+ // Make selector group accept clicks
+ var sel = selectorManager.requestSelector(curtext).selectorRect;
+
+ textActions.init();
+
+ $(curtext).css('cursor', 'text');
+
+// if(svgedit.browser.supportsEditableText()) {
+// curtext.setAttribute('editable', 'simple');
+// return;
+// }
+
+ if(!arguments.length) {
+ setCursor();
+ } else {
+ var pt = screenToPt(x, y);
+ setCursorFromPoint(pt.x, pt.y);
+ }
+
+ setTimeout(function() {
+ allow_dbl = true;
+ }, 300);
+ },
+ toSelectMode: function(selectElem) {
+ current_mode = "select";
+ clearInterval(blinker);
+ blinker = null;
+ if(selblock) $(selblock).attr('display','none');
+ if(cursor) $(cursor).attr('visibility','hidden');
+ $(curtext).css('cursor', 'move');
+
+ if(selectElem) {
+ clearSelection();
+ $(curtext).css('cursor', 'move');
+
+ call("selected", [curtext]);
+ addToSelection([curtext], true);
+ }
+ if(curtext && !curtext.textContent.length) {
+ // No content, so delete
+ canvas.deleteSelectedElements();
+ }
+
+ $(textinput).blur();
+
+ curtext = false;
+
+// if(svgedit.browser.supportsEditableText()) {
+// curtext.removeAttribute('editable');
+// }
+ },
+ setInputElem: function(elem) {
+ textinput = elem;
+// $(textinput).blur(hideCursor);
+ },
+ clear: function() {
+ if(current_mode == "textedit") {
+ textActions.toSelectMode();
+ }
+ },
+ init: function(inputElem) {
+ if(!curtext) return;
+
+// if(svgedit.browser.supportsEditableText()) {
+// curtext.select();
+// return;
+// }
+
+ if(!curtext.parentNode) {
+ // Result of the ffClone, need to get correct element
+ curtext = selectedElements[0];
+ selectorManager.requestSelector(curtext).showGrips(false);
+ }
+
+ var str = curtext.textContent;
+ var len = str.length;
+
+ var xform = curtext.getAttribute('transform');
+
+ textbb = svgedit.utilities.getBBox(curtext);
+
+ matrix = xform?getMatrix(curtext):null;
+
+ chardata = Array(len);
+ textinput.focus();
+
+ $(curtext).unbind('dblclick', selectWord).dblclick(selectWord);
+
+ if(!len) {
+ var end = {x: textbb.x + (textbb.width/2), width: 0};
+ }
+
+ for(var i=0; i<len; i++) {
+ var start = curtext.getStartPositionOfChar(i);
+ var end = curtext.getEndPositionOfChar(i);
+
+ if(!svgedit.browser.supportsGoodTextCharPos()) {
+ var offset = canvas.contentW * current_zoom;
+ start.x -= offset;
+ end.x -= offset;
+
+ start.x /= current_zoom;
+ end.x /= current_zoom;
+ }
+
+ // Get a "bbox" equivalent for each character. Uses the
+ // bbox data of the actual text for y, height purposes
+
+ // TODO: Decide if y, width and height are actually necessary
+ chardata[i] = {
+ x: start.x,
+ y: textbb.y, // start.y?
+ width: end.x - start.x,
+ height: textbb.height
+ };
+ }
+
+ // Add a last bbox for cursor at end of text
+ chardata.push({
+ x: end.x,
+ width: 0
+ });
+ setSelection(textinput.selectionStart, textinput.selectionEnd, true);
+ }
+ }
+}();
+
+// TODO: Migrate all of this code into path.js
+// Group: Path edit functions
+// Functions relating to editing path elements
+var pathActions = canvas.pathActions = function() {
+
+ var subpath = false;
+ var current_path;
+ var newPoint, firstCtrl;
+
+ function resetD(p) {
+ p.setAttribute("d", pathActions.convertPath(p));
+ }
+
+ // TODO: Move into path.js
+ svgedit.path.Path.prototype.endChanges = function(text) {
+ if(svgedit.browser.isWebkit()) resetD(this.elem);
+ var cmd = new ChangeElementCommand(this.elem, {d: this.last_d}, text);
+ addCommandToHistory(cmd);
+ call("changed", [this.elem]);
+ }
+
+ svgedit.path.Path.prototype.addPtsToSelection = function(indexes) {
+ if(!$.isArray(indexes)) indexes = [indexes];
+ for(var i=0; i< indexes.length; i++) {
+ var index = indexes[i];
+ var seg = this.segs[index];
+ if(seg.ptgrip) {
+ if(this.selected_pts.indexOf(index) == -1 && index >= 0) {
+ this.selected_pts.push(index);
+ }
+ }
+ };
+ this.selected_pts.sort();
+ var i = this.selected_pts.length,
+ grips = new Array(i);
+ // Loop through points to be selected and highlight each
+ while(i--) {
+ var pt = this.selected_pts[i];
+ var seg = this.segs[pt];
+ seg.select(true);
+ grips[i] = seg.ptgrip;
+ }
+ // TODO: Correct this:
+ pathActions.canDeleteNodes = true;
+
+ pathActions.closed_subpath = this.subpathIsClosed(this.selected_pts[0]);
+
+ call("selected", grips);
+ }
+
+ var current_path = null,
+ drawn_path = null,
+ hasMoved = false;
+
+ // This function converts a polyline (created by the fh_path tool) into
+ // a path element and coverts every three line segments into a single bezier
+ // curve in an attempt to smooth out the free-hand
+ var smoothPolylineIntoPath = function(element) {
+ var points = element.points;
+ var N = points.numberOfItems;
+ if (N >= 4) {
+ // loop through every 3 points and convert to a cubic bezier curve segment
+ //
+ // NOTE: this is cheating, it means that every 3 points has the potential to
+ // be a corner instead of treating each point in an equal manner. In general,
+ // this technique does not look that good.
+ //
+ // I am open to better ideas!
+ //
+ // Reading:
+ // - http://www.efg2.com/Lab/Graphics/Jean-YvesQueinecBezierCurves.htm
+ // - http://www.codeproject.com/KB/graphics/BezierSpline.aspx?msg=2956963
+ // - http://www.ian-ko.com/ET_GeoWizards/UserGuide/smooth.htm
+ // - http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-der.html
+ var curpos = points.getItem(0), prevCtlPt = null;
+ var d = [];
+ d.push(["M",curpos.x,",",curpos.y," C"].join(""));
+ for (var i = 1; i <= (N-4); i += 3) {
+ var ct1 = points.getItem(i);
+ var ct2 = points.getItem(i+1);
+ var end = points.getItem(i+2);
+
+ // if the previous segment had a control point, we want to smooth out
+ // the control points on both sides
+ if (prevCtlPt) {
+ var newpts = svgedit.path.smoothControlPoints( prevCtlPt, ct1, curpos );
+ if (newpts && newpts.length == 2) {
+ var prevArr = d[d.length-1].split(',');
+ prevArr[2] = newpts[0].x;
+ prevArr[3] = newpts[0].y;
+ d[d.length-1] = prevArr.join(',');
+ ct1 = newpts[1];
+ }
+ }
+
+ d.push([ct1.x,ct1.y,ct2.x,ct2.y,end.x,end.y].join(','));
+
+ curpos = end;
+ prevCtlPt = ct2;
+ }
+ // handle remaining line segments
+ d.push("L");
+ for(;i < N;++i) {
+ var pt = points.getItem(i);
+ d.push([pt.x,pt.y].join(","));
+ }
+ d = d.join(" ");
+
+ // create new path element
+ element = addSvgElementFromJson({
+ "element": "path",
+ "curStyles": true,
+ "attr": {
+ "id": getId(),
+ "d": d,
+ "fill": "none"
+ }
+ });
+ // No need to call "changed", as this is already done under mouseUp
+ }
+ return element;
+ };
+
+ return {
+ mouseDown: function(evt, mouse_target, start_x, start_y) {
+ if(current_mode === "path") {
+ mouse_x = start_x;
+ mouse_y = start_y;
+
+ var x = mouse_x/current_zoom,
+ y = mouse_y/current_zoom,
+ stretchy = getElem("path_stretch_line");
+ newPoint = [x, y];
+
+ if(curConfig.gridSnapping){
+ x = snapToGrid(x);
+ y = snapToGrid(y);
+ mouse_x = snapToGrid(mouse_x);
+ mouse_y = snapToGrid(mouse_y);
+ }
+
+ if (!stretchy) {
+ stretchy = document.createElementNS(svgns, "path");
+ assignAttributes(stretchy, {
+ 'id': "path_stretch_line",
+ 'stroke': "#22C",
+ 'stroke-width': "0.5",
+ 'fill': 'none'
+ });
+ stretchy = getElem("selectorParentGroup").appendChild(stretchy);
+ }
+ stretchy.setAttribute("display", "inline");
+
+ var keep = null;
+
+ // if pts array is empty, create path element with M at current point
+ if (!drawn_path) {
+ d_attr = "M" + x + "," + y + " ";
+ drawn_path = addSvgElementFromJson({
+ "element": "path",
+ "curStyles": true,
+ "attr": {
+ "d": d_attr,
+ "id": getNextId(),
+ "opacity": cur_shape.opacity / 2
+ }
+ });
+ // set stretchy line to first point
+ stretchy.setAttribute('d', ['M', mouse_x, mouse_y, mouse_x, mouse_y].join(' '));
+ var index = subpath ? svgedit.path.path.segs.length : 0;
+ svgedit.path.addPointGrip(index, mouse_x, mouse_y);
+ }
+ else {
+ // determine if we clicked on an existing point
+ var seglist = drawn_path.pathSegList;
+ var i = seglist.numberOfItems;
+ var FUZZ = 6/current_zoom;
+ var clickOnPoint = false;
+ while(i) {
+ i --;
+ var item = seglist.getItem(i);
+ var px = item.x, py = item.y;
+ // found a matching point
+ if ( x >= (px-FUZZ) && x <= (px+FUZZ) && y >= (py-FUZZ) && y <= (py+FUZZ) ) {
+ clickOnPoint = true;
+ break;
+ }
+ }
+
+ // get path element that we are in the process of creating
+ var id = getId();
+
+ // Remove previous path object if previously created
+ svgedit.path.removePath_(id);
+
+ var newpath = getElem(id);
+
+ var len = seglist.numberOfItems;
+ // if we clicked on an existing point, then we are done this path, commit it
+ // (i,i+1) are the x,y that were clicked on
+ if (clickOnPoint) {
+ // if clicked on any other point but the first OR
+ // the first point was clicked on and there are less than 3 points
+ // then leave the path open
+ // otherwise, close the path
+ if (i <= 1 && len >= 2) {
+ // Create end segment
+ var abs_x = seglist.getItem(0).x;
+ var abs_y = seglist.getItem(0).y;
+
+
+ var s_seg = stretchy.pathSegList.getItem(1);
+ if(s_seg.pathSegType === 4) {
+ var newseg = drawn_path.createSVGPathSegLinetoAbs(abs_x, abs_y);
+ } else {
+ var newseg = drawn_path.createSVGPathSegCurvetoCubicAbs(
+ abs_x,
+ abs_y,
+ s_seg.x1 / current_zoom,
+ s_seg.y1 / current_zoom,
+ abs_x,
+ abs_y
+ );
+ }
+
+ var endseg = drawn_path.createSVGPathSegClosePath();
+ seglist.appendItem(newseg);
+ seglist.appendItem(endseg);
+ } else if(len < 3) {
+ keep = false;
+ return keep;
+ }
+ $(stretchy).remove();
+
+ // this will signal to commit the path
+ element = newpath;
+ drawn_path = null;
+ started = false;
+
+ if(subpath) {
+ if(svgedit.path.path.matrix) {
+ remapElement(newpath, {}, svgedit.path.path.matrix.inverse());
+ }
+
+ var new_d = newpath.getAttribute("d");
+ var orig_d = $(svgedit.path.path.elem).attr("d");
+ $(svgedit.path.path.elem).attr("d", orig_d + new_d);
+ $(newpath).remove();
+ if(svgedit.path.path.matrix) {
+ svgedit.path.recalcRotatedPath();
+ }
+ svgedit.path.path.init();
+ pathActions.toEditMode(svgedit.path.path.elem);
+ svgedit.path.path.selectPt();
+ return false;
+ }
+ }
+ // else, create a new point, update path element
+ else {
+ // Checks if current target or parents are #svgcontent
+ if(!$.contains(container, getMouseTarget(evt))) {
+ // Clicked outside canvas, so don't make point
+ console.log("Clicked outside canvas");
+ return false;
+ }
+
+ var num = drawn_path.pathSegList.numberOfItems;
+ var last = drawn_path.pathSegList.getItem(num -1);
+ var lastx = last.x, lasty = last.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);
+ if(s_seg.pathSegType === 4) {
+ var newseg = drawn_path.createSVGPathSegLinetoAbs(round(x), round(y));
+ } else {
+ var newseg = drawn_path.createSVGPathSegCurvetoCubicAbs(
+ round(x),
+ round(y),
+ s_seg.x1 / current_zoom,
+ s_seg.y1 / current_zoom,
+ s_seg.x2 / current_zoom,
+ s_seg.y2 / current_zoom
+ );
+ }
+
+ drawn_path.pathSegList.appendItem(newseg);
+
+ x *= current_zoom;
+ y *= current_zoom;
+
+ // set stretchy line to latest point
+ stretchy.setAttribute('d', ['M', x, y, x, y].join(' '));
+ var index = num;
+ if(subpath) index += svgedit.path.path.segs.length;
+ svgedit.path.addPointGrip(index, x, y);
+ }
+// keep = true;
+ }
+
+ return;
+ }
+
+ // TODO: Make sure current_path isn't null at this point
+ if(!svgedit.path.path) return;
+
+ svgedit.path.path.storeD();
+
+ var id = evt.target.id;
+ if (id.substr(0,14) == "pathpointgrip_") {
+ // Select this point
+ var cur_pt = svgedit.path.path.cur_pt = parseInt(id.substr(14));
+ svgedit.path.path.dragging = [start_x, start_y];
+ var seg = svgedit.path.path.segs[cur_pt];
+
+ // only clear selection if shift is not pressed (otherwise, add
+ // node to selection)
+ if (!evt.shiftKey) {
+ if(svgedit.path.path.selected_pts.length <= 1 || !seg.selected) {
+ svgedit.path.path.clearSelection();
+ }
+ svgedit.path.path.addPtsToSelection(cur_pt);
+ } else if(seg.selected) {
+ svgedit.path.path.removePtFromSelection(cur_pt);
+ } else {
+ svgedit.path.path.addPtsToSelection(cur_pt);
+ }
+ } else if(id.indexOf("ctrlpointgrip_") == 0) {
+ svgedit.path.path.dragging = [start_x, start_y];
+
+ var parts = id.split('_')[1].split('c');
+ var cur_pt = parts[0]-0;
+ var ctrl_num = parts[1]-0;
+ svgedit.path.path.selectPt(cur_pt, ctrl_num);
+ }
+
+ // Start selection box
+ if(!svgedit.path.path.dragging) {
+ if (rubberBox == null) {
+ rubberBox = selectorManager.getRubberBandBox();
+ }
+ assignAttributes(rubberBox, {
+ 'x': start_x * current_zoom,
+ 'y': start_y * current_zoom,
+ 'width': 0,
+ 'height': 0,
+ 'display': 'inline'
+ }, 100);
+ }
+ },
+ mouseMove: function(mouse_x, mouse_y) {
+ hasMoved = true;
+ if(current_mode === "path") {
+ if(!drawn_path) return;
+ var seglist = drawn_path.pathSegList;
+ var index = seglist.numberOfItems - 1;
+
+ if(newPoint) {
+ // First point
+// if(!index) return;
+
+ // Set control points
+ var pointGrip1 = svgedit.path.addCtrlGrip('1c1');
+ var pointGrip2 = svgedit.path.addCtrlGrip('0c2');
+
+ // dragging pointGrip1
+ pointGrip1.setAttribute('cx', mouse_x);
+ pointGrip1.setAttribute('cy', mouse_y);
+ pointGrip1.setAttribute('display', 'inline');
+
+ var pt_x = newPoint[0];
+ var pt_y = newPoint[1];
+
+ // set curve
+ var seg = seglist.getItem(index);
+ var cur_x = mouse_x / current_zoom;
+ var cur_y = mouse_y / current_zoom;
+ var alt_x = (pt_x + (pt_x - cur_x));
+ var alt_y = (pt_y + (pt_y - cur_y));
+
+ pointGrip2.setAttribute('cx', alt_x * current_zoom);
+ pointGrip2.setAttribute('cy', alt_y * current_zoom);
+ pointGrip2.setAttribute('display', 'inline');
+
+ var ctrlLine = svgedit.path.getCtrlLine(1);
+ assignAttributes(ctrlLine, {
+ x1: mouse_x,
+ y1: mouse_y,
+ x2: alt_x * current_zoom,
+ y2: alt_y * current_zoom,
+ display: 'inline'
+ });
+
+ if(index === 0) {
+ firstCtrl = [mouse_x, mouse_y];
+ } else {
+ var last_x, last_y;
+
+ var last = seglist.getItem(index - 1);
+ var last_x = last.x;
+ var last_y = last.y
+
+ if(last.pathSegType === 6) {
+ last_x += (last_x - last.x2);
+ last_y += (last_y - last.y2);
+ } else if(firstCtrl) {
+ last_x = firstCtrl[0]/current_zoom;
+ last_y = firstCtrl[1]/current_zoom;
+ }
+ svgedit.path.replacePathSeg(6, index, [pt_x, pt_y, last_x, last_y, alt_x, alt_y], drawn_path);
+ }
+ } else {
+ var stretchy = getElem("path_stretch_line");
+ if (stretchy) {
+ var prev = seglist.getItem(index);
+ if(prev.pathSegType === 6) {
+ var prev_x = prev.x + (prev.x - prev.x2);
+ var prev_y = prev.y + (prev.y - prev.y2);
+ svgedit.path.replacePathSeg(6, 1, [mouse_x, mouse_y, prev_x * current_zoom, prev_y * current_zoom, mouse_x, mouse_y], stretchy);
+ } else if(firstCtrl) {
+ svgedit.path.replacePathSeg(6, 1, [mouse_x, mouse_y, firstCtrl[0], firstCtrl[1], mouse_x, mouse_y], stretchy);
+ } else {
+ svgedit.path.replacePathSeg(4, 1, [mouse_x, mouse_y], stretchy);
+ }
+ }
+ }
+ return;
+ }
+ // if we are dragging a point, let's move it
+ if (svgedit.path.path.dragging) {
+ var pt = svgedit.path.getPointFromGrip({
+ x: svgedit.path.path.dragging[0],
+ y: svgedit.path.path.dragging[1]
+ }, svgedit.path.path);
+ var mpt = svgedit.path.getPointFromGrip({
+ x: mouse_x,
+ y: mouse_y
+ }, svgedit.path.path);
+ var diff_x = mpt.x - pt.x;
+ var diff_y = mpt.y - pt.y;
+ svgedit.path.path.dragging = [mouse_x, mouse_y];
+
+ if(svgedit.path.path.dragctrl) {
+ svgedit.path.path.moveCtrl(diff_x, diff_y);
+ } else {
+ svgedit.path.path.movePts(diff_x, diff_y);
+ }
+ } else {
+ svgedit.path.path.selected_pts = [];
+ svgedit.path.path.eachSeg(function(i) {
+ var seg = this;
+ if(!seg.next && !seg.prev) return;
+
+ var item = seg.item;
+ var rbb = rubberBox.getBBox();
+
+ var pt = svgedit.path.getGripPt(seg);
+ var pt_bb = {
+ x: pt.x,
+ y: pt.y,
+ width: 0,
+ height: 0
+ };
+
+ var sel = svgedit.math.rectsIntersect(rbb, pt_bb);
+
+ this.select(sel);
+ //Note that addPtsToSelection is not being run
+ if(sel) svgedit.path.path.selected_pts.push(seg.index);
+ });
+
+ }
+ },
+ mouseUp: function(evt, element, mouse_x, mouse_y) {
+
+ // Create mode
+ if(current_mode === "path") {
+ newPoint = null;
+ if(!drawn_path) {
+ element = getElem(getId());
+ started = false;
+ firstCtrl = null;
+ }
+
+ return {
+ keep: true,
+ element: element
+ }
+ }
+
+ // Edit mode
+
+ if (svgedit.path.path.dragging) {
+ var last_pt = svgedit.path.path.cur_pt;
+
+ svgedit.path.path.dragging = false;
+ svgedit.path.path.dragctrl = false;
+ svgedit.path.path.update();
+
+
+ if(hasMoved) {
+ svgedit.path.path.endChanges("Move path point(s)");
+ }
+
+ if(!evt.shiftKey && !hasMoved) {
+ svgedit.path.path.selectPt(last_pt);
+ }
+ }
+ else if(rubberBox && rubberBox.getAttribute('display') != 'none') {
+ // Done with multi-node-select
+ rubberBox.setAttribute("display", "none");
+
+ if(rubberBox.getAttribute('width') <= 2 && rubberBox.getAttribute('height') <= 2) {
+ pathActions.toSelectMode(evt.target);
+ }
+
+ // else, move back to select mode
+ } else {
+ pathActions.toSelectMode(evt.target);
+ }
+ hasMoved = false;
+ },
+ toEditMode: function(element) {
+ svgedit.path.path = svgedit.path.getPath_(element);
+ current_mode = "pathedit";
+ clearSelection();
+ svgedit.path.path.show(true).update();
+ svgedit.path.path.oldbbox = svgedit.utilities.getBBox(svgedit.path.path.elem);
+ subpath = false;
+ },
+ toSelectMode: function(elem) {
+ var selPath = (elem == svgedit.path.path.elem);
+ current_mode = "select";
+ svgedit.path.path.show(false);
+ current_path = false;
+ clearSelection();
+
+ if(svgedit.path.path.matrix) {
+ // Rotated, so may need to re-calculate the center
+ svgedit.path.recalcRotatedPath();
+ }
+
+ if(selPath) {
+ call("selected", [elem]);
+ addToSelection([elem], true);
+ }
+ },
+ addSubPath: function(on) {
+ if(on) {
+ // Internally we go into "path" mode, but in the UI it will
+ // still appear as if in "pathedit" mode.
+ current_mode = "path";
+ subpath = true;
+ } else {
+ pathActions.clear(true);
+ pathActions.toEditMode(svgedit.path.path.elem);
+ }
+ },
+ select: function(target) {
+ if (current_path === target) {
+ pathActions.toEditMode(target);
+ current_mode = "pathedit";
+ } // going into pathedit mode
+ else {
+ current_path = target;
+ }
+ },
+ reorient: function() {
+ var elem = selectedElements[0];
+ if(!elem) return;
+ var angle = getRotationAngle(elem);
+ if(angle == 0) return;
+
+ var batchCmd = new BatchCommand("Reorient path");
+ var changes = {
+ d: elem.getAttribute('d'),
+ transform: elem.getAttribute('transform')
+ };
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+ clearSelection();
+ this.resetOrientation(elem);
+
+ addCommandToHistory(batchCmd);
+
+ // Set matrix to null
+ svgedit.path.getPath_(elem).show(false).matrix = null;
+
+ this.clear();
+
+ addToSelection([elem], true);
+ call("changed", selectedElements);
+ },
+
+ clear: function(remove) {
+ current_path = null;
+ if (drawn_path) {
+ var elem = getElem(getId());
+ $(getElem("path_stretch_line")).remove();
+ $(elem).remove();
+ $(getElem("pathpointgrip_container")).find('*').attr('display', 'none');
+ drawn_path = firstCtrl = null;
+ started = false;
+ } else if (current_mode == "pathedit") {
+ this.toSelectMode();
+ }
+ if(svgedit.path.path) svgedit.path.path.init().show(false);
+ },
+ resetOrientation: function(path) {
+ if(path == null || path.nodeName != 'path') return false;
+ var tlist = getTransformList(path);
+ var m = transformListToTransform(tlist).matrix;
+ tlist.clear();
+ path.removeAttribute("transform");
+ var segList = path.pathSegList;
+
+ // Opera/win/non-EN throws an error here.
+ // TODO: Find out why!
+ // Presumed fixed in Opera 10.5, so commented out for now
+
+// try {
+ var len = segList.numberOfItems;
+// } catch(err) {
+// var fixed_d = pathActions.convertPath(path);
+// path.setAttribute('d', fixed_d);
+// segList = path.pathSegList;
+// var len = segList.numberOfItems;
+// }
+ var last_x, last_y;
+
+
+ for (var i = 0; i < len; ++i) {
+ var seg = segList.getItem(i);
+ var type = seg.pathSegType;
+ if(type == 1) continue;
+ var pts = [];
+ $.each(['',1,2], function(j, n) {
+ var x = seg['x'+n], y = seg['y'+n];
+ if(x !== undefined && y !== undefined) {
+ var pt = transformPoint(x, y, m);
+ pts.splice(pts.length, 0, pt.x, pt.y);
+ }
+ });
+ svgedit.path.replacePathSeg(type, i, pts, path);
+ }
+
+ reorientGrads(path, m);
+
+
+ },
+ zoomChange: function() {
+ if(current_mode == "pathedit") {
+ svgedit.path.path.update();
+ }
+ },
+ getNodePoint: function() {
+ var sel_pt = svgedit.path.path.selected_pts.length ? svgedit.path.path.selected_pts[0] : 1;
+
+ var seg = svgedit.path.path.segs[sel_pt];
+ return {
+ x: seg.item.x,
+ y: seg.item.y,
+ type: seg.type
+ };
+ },
+ linkControlPoints: function(linkPoints) {
+ svgedit.path.setLinkControlPoints(linkPoints);
+ },
+ clonePathNode: function() {
+ svgedit.path.path.storeD();
+
+ var sel_pts = svgedit.path.path.selected_pts;
+ var segs = svgedit.path.path.segs;
+
+ var i = sel_pts.length;
+ var nums = [];
+
+ while(i--) {
+ var pt = sel_pts[i];
+ svgedit.path.path.addSeg(pt);
+
+ nums.push(pt + i);
+ nums.push(pt + i + 1);
+ }
+ svgedit.path.path.init().addPtsToSelection(nums);
+
+ svgedit.path.path.endChanges("Clone path node(s)");
+ },
+ opencloseSubPath: function() {
+ var sel_pts = svgedit.path.path.selected_pts;
+ // Only allow one selected node for now
+ if(sel_pts.length !== 1) return;
+
+ var elem = svgedit.path.path.elem;
+ var list = elem.pathSegList;
+
+ var len = list.numberOfItems;
+
+ var index = sel_pts[0];
+
+ var open_pt = null;
+ var start_item = null;
+
+ // Check if subpath is already open
+ svgedit.path.path.eachSeg(function(i) {
+ if(this.type === 2 && i <= index) {
+ start_item = this.item;
+ }
+ if(i <= index) return true;
+ if(this.type === 2) {
+ // Found M first, so open
+ open_pt = i;
+ return false;
+ } else if(this.type === 1) {
+ // Found Z first, so closed
+ open_pt = false;
+ return false;
+ }
+ });
+
+ if(open_pt == null) {
+ // Single path, so close last seg
+ open_pt = svgedit.path.path.segs.length - 1;
+ }
+
+ if(open_pt !== false) {
+ // Close this path
+
+ // Create a line going to the previous "M"
+ var newseg = elem.createSVGPathSegLinetoAbs(start_item.x, start_item.y);
+
+ var closer = elem.createSVGPathSegClosePath();
+ if(open_pt == svgedit.path.path.segs.length - 1) {
+ list.appendItem(newseg);
+ list.appendItem(closer);
+ } else {
+ svgedit.path.insertItemBefore(elem, closer, open_pt);
+ svgedit.path.insertItemBefore(elem, newseg, open_pt);
+ }
+
+ svgedit.path.path.init().selectPt(open_pt+1);
+ return;
+ }
+
+
+
+ // M 1,1 L 2,2 L 3,3 L 1,1 z // open at 2,2
+ // M 2,2 L 3,3 L 1,1
+
+ // M 1,1 L 2,2 L 1,1 z M 4,4 L 5,5 L6,6 L 5,5 z
+ // M 1,1 L 2,2 L 1,1 z [M 4,4] L 5,5 L(M)6,6 L 5,5 z
+
+ var seg = svgedit.path.path.segs[index];
+
+ if(seg.mate) {
+ list.removeItem(index); // Removes last "L"
+ list.removeItem(index); // Removes the "Z"
+ svgedit.path.path.init().selectPt(index - 1);
+ return;
+ }
+
+ var last_m, z_seg;
+
+ // Find this sub-path's closing point and remove
+ for(var i=0; i<list.numberOfItems; i++) {
+ var item = list.getItem(i);
+
+ if(item.pathSegType === 2) {
+ // Find the preceding M
+ last_m = i;
+ } else if(i === index) {
+ // Remove it
+ list.removeItem(last_m);
+// index--;
+ } else if(item.pathSegType === 1 && index < i) {
+ // Remove the closing seg of this subpath
+ z_seg = i-1;
+ list.removeItem(i);
+ break;
+ }
+ }
+
+ var num = (index - last_m) - 1;
+
+ while(num--) {
+ svgedit.path.insertItemBefore(elem, list.getItem(last_m), z_seg);
+ }
+
+ var pt = list.getItem(last_m);
+
+ // Make this point the new "M"
+ svgedit.path.replacePathSeg(2, last_m, [pt.x, pt.y]);
+
+ var i = index
+
+ svgedit.path.path.init().selectPt(0);
+ },
+ deletePathNode: function() {
+ if(!pathActions.canDeleteNodes) return;
+ svgedit.path.path.storeD();
+
+ var sel_pts = svgedit.path.path.selected_pts;
+ var i = sel_pts.length;
+
+ while(i--) {
+ var pt = sel_pts[i];
+ svgedit.path.path.deleteSeg(pt);
+ }
+
+ // Cleanup
+ var cleanup = function() {
+ var segList = svgedit.path.path.elem.pathSegList;
+ var len = segList.numberOfItems;
+
+ var remItems = function(pos, count) {
+ while(count--) {
+ segList.removeItem(pos);
+ }
+ }
+
+ if(len <= 1) return true;
+
+ while(len--) {
+ var item = segList.getItem(len);
+ if(item.pathSegType === 1) {
+ var prev = segList.getItem(len-1);
+ var nprev = segList.getItem(len-2);
+ if(prev.pathSegType === 2) {
+ remItems(len-1, 2);
+ cleanup();
+ break;
+ } else if(nprev.pathSegType === 2) {
+ remItems(len-2, 3);
+ cleanup();
+ break;
+ }
+
+ } else if(item.pathSegType === 2) {
+ if(len > 0) {
+ var prev_type = segList.getItem(len-1).pathSegType;
+ // Path has M M
+ if(prev_type === 2) {
+ remItems(len-1, 1);
+ cleanup();
+ break;
+ // Entire path ends with Z M
+ } else if(prev_type === 1 && segList.numberOfItems-1 === len) {
+ remItems(len, 1);
+ cleanup();
+ break;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ cleanup();
+
+ // Completely delete a path with 1 or 0 segments
+ if(svgedit.path.path.elem.pathSegList.numberOfItems <= 1) {
+ pathActions.toSelectMode(svgedit.path.path.elem);
+ canvas.deleteSelectedElements();
+ return;
+ }
+
+ svgedit.path.path.init();
+
+ svgedit.path.path.clearSelection();
+
+ // TODO: Find right way to select point now
+ // path.selectPt(sel_pt);
+ if(window.opera) { // Opera repaints incorrectly
+ var cp = $(svgedit.path.path.elem); cp.attr('d',cp.attr('d'));
+ }
+ svgedit.path.path.endChanges("Delete path node(s)");
+ },
+ smoothPolylineIntoPath: smoothPolylineIntoPath,
+ setSegType: function(v) {
+ svgedit.path.path.setSegType(v);
+ },
+ moveNode: function(attr, newValue) {
+ var sel_pts = svgedit.path.path.selected_pts;
+ if(!sel_pts.length) return;
+
+ svgedit.path.path.storeD();
+
+ // Get first selected point
+ var seg = svgedit.path.path.segs[sel_pts[0]];
+ var diff = {x:0, y:0};
+ diff[attr] = newValue - seg.item[attr];
+
+ seg.move(diff.x, diff.y);
+ svgedit.path.path.endChanges("Move path point");
+ },
+ fixEnd: function(elem) {
+ // Adds an extra segment if the last seg before a Z doesn't end
+ // at its M point
+ // M0,0 L0,100 L100,100 z
+ var segList = elem.pathSegList;
+ var len = segList.numberOfItems;
+ var last_m;
+ for (var i = 0; i < len; ++i) {
+ var item = segList.getItem(i);
+ if(item.pathSegType === 2) {
+ last_m = item;
+ }
+
+ if(item.pathSegType === 1) {
+ var prev = segList.getItem(i-1);
+ if(prev.x != last_m.x || prev.y != last_m.y) {
+ // Add an L segment here
+ var newseg = elem.createSVGPathSegLinetoAbs(last_m.x, last_m.y);
+ svgedit.path.insertItemBefore(elem, newseg, i);
+ // Can this be done better?
+ pathActions.fixEnd(elem);
+ break;
+ }
+
+ }
+ }
+ if(svgedit.browser.isWebkit()) resetD(elem);
+ },
+ // Convert a path to one with only absolute or relative values
+ convertPath: function(path, toRel) {
+ var segList = path.pathSegList;
+ var len = segList.numberOfItems;
+ var curx = 0, cury = 0;
+ var d = "";
+ var last_m = null;
+
+ for (var i = 0; i < len; ++i) {
+ var seg = segList.getItem(i);
+ // if these properties are not in the segment, set them to zero
+ var x = seg.x || 0,
+ y = seg.y || 0,
+ x1 = seg.x1 || 0,
+ y1 = seg.y1 || 0,
+ x2 = seg.x2 || 0,
+ y2 = seg.y2 || 0;
+
+ var type = seg.pathSegType;
+ var letter = pathMap[type]['to'+(toRel?'Lower':'Upper')+'Case']();
+
+ var addToD = function(pnts, more, last) {
+ var str = '';
+ var more = more?' '+more.join(' '):'';
+ var last = last?' '+svgedit.units.shortFloat(last):'';
+ $.each(pnts, function(i, pnt) {
+ pnts[i] = svgedit.units.shortFloat(pnt);
+ });
+ d += letter + pnts.join(' ') + more + last;
+ }
+
+ switch (type) {
+ case 1: // z,Z closepath (Z/z)
+ d += "z";
+ break;
+ case 12: // absolute horizontal line (H)
+ x -= curx;
+ case 13: // relative horizontal line (h)
+ if(toRel) {
+ curx += x;
+ letter = 'l';
+ } else {
+ x += curx;
+ curx = x;
+ letter = 'L';
+ }
+ // Convert to "line" for easier editing
+ addToD([[x, cury]]);
+ break;
+ case 14: // absolute vertical line (V)
+ y -= cury;
+ case 15: // relative vertical line (v)
+ if(toRel) {
+ cury += y;
+ letter = 'l';
+ } else {
+ y += cury;
+ cury = y;
+ letter = 'L';
+ }
+ // Convert to "line" for easier editing
+ addToD([[curx, y]]);
+ break;
+ case 2: // absolute move (M)
+ case 4: // absolute line (L)
+ case 18: // absolute smooth quad (T)
+ x -= curx;
+ y -= cury;
+ case 5: // relative line (l)
+ case 3: // relative move (m)
+ // If the last segment was a "z", this must be relative to
+ if(last_m && segList.getItem(i-1).pathSegType === 1 && !toRel) {
+ curx = last_m[0];
+ cury = last_m[1];
+ }
+
+ case 19: // relative smooth quad (t)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx;
+ y += cury;
+ curx = x;
+ cury = y;
+ }
+ if(type === 3) last_m = [curx, cury];
+
+ addToD([[x,y]]);
+ break;
+ case 6: // absolute cubic (C)
+ x -= curx; x1 -= curx; x2 -= curx;
+ y -= cury; y1 -= cury; y2 -= cury;
+ case 7: // relative cubic (c)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx; x1 += curx; x2 += curx;
+ y += cury; y1 += cury; y2 += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[x1,y1],[x2,y2],[x,y]]);
+ break;
+ case 8: // absolute quad (Q)
+ x -= curx; x1 -= curx;
+ y -= cury; y1 -= cury;
+ case 9: // relative quad (q)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx; x1 += curx;
+ y += cury; y1 += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[x1,y1],[x,y]]);
+ break;
+ case 10: // absolute elliptical arc (A)
+ x -= curx;
+ y -= cury;
+ case 11: // relative elliptical arc (a)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx;
+ y += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[seg.r1,seg.r2]], [
+ seg.angle,
+ (seg.largeArcFlag ? 1 : 0),
+ (seg.sweepFlag ? 1 : 0)
+ ],[x,y]
+ );
+ break;
+ case 16: // absolute smooth cubic (S)
+ x -= curx; x2 -= curx;
+ y -= cury; y2 -= cury;
+ case 17: // relative smooth cubic (s)
+ if(toRel) {
+ curx += x;
+ cury += y;
+ } else {
+ x += curx; x2 += curx;
+ y += cury; y2 += cury;
+ curx = x;
+ cury = y;
+ }
+ addToD([[x2,y2],[x,y]]);
+ break;
+ } // switch on path segment type
+ } // for each segment
+ return d;
+ }
+ }
+}();
+// end pathActions
+
+// Group: Serialization
+
+// Function: removeUnusedDefElems
+// Looks at DOM elements inside the <defs> to see if they are referred to,
+// removes them from the DOM if they are not.
+//
+// Returns:
+// The amount of elements that were removed
+var removeUnusedDefElems = this.removeUnusedDefElems = function() {
+ var defs = svgcontent.getElementsByTagNameNS(svgns, "defs");
+ if(!defs || !defs.length) return 0;
+
+// if(!defs.firstChild) return;
+
+ var defelem_uses = [],
+ numRemoved = 0;
+ var attrs = ['fill', 'stroke', 'filter', 'marker-start', 'marker-mid', 'marker-end'];
+ var alen = attrs.length;
+
+ var all_els = svgcontent.getElementsByTagNameNS(svgns, '*');
+ var all_len = all_els.length;
+
+ for(var i=0; i<all_len; i++) {
+ var el = all_els[i];
+ for(var j = 0; j < alen; j++) {
+ var ref = getUrlFromAttr(el.getAttribute(attrs[j]));
+ if(ref) {
+ defelem_uses.push(ref.substr(1));
+ }
+ }
+
+ // gradients can refer to other gradients
+ var href = getHref(el);
+ if (href && href.indexOf('#') === 0) {
+ defelem_uses.push(href.substr(1));
+ }
+ };
+
+ var defelems = $(svgcontent).find("linearGradient, radialGradient, filter, marker, svg, symbol");
+ defelem_ids = [],
+ i = defelems.length;
+ while (i--) {
+ var defelem = defelems[i];
+ var id = defelem.id;
+ if(defelem_uses.indexOf(id) < 0) {
+ // Not found, so remove (but remember)
+ removedElements[id] = defelem;
+ defelem.parentNode.removeChild(defelem);
+ numRemoved++;
+ }
+ }
+
+ return numRemoved;
+}
+
+// Function: svgCanvasToString
+// Main function to set up the SVG content for output
+//
+// Returns:
+// String containing the SVG image for output
+this.svgCanvasToString = function() {
+ // keep calling it until there are none to remove
+ while (removeUnusedDefElems() > 0) {};
+
+ pathActions.clear(true);
+
+ // Keep SVG-Edit comment on top
+ $.each(svgcontent.childNodes, function(i, node) {
+ if(i && node.nodeType === 8 && node.data.indexOf('Created with') >= 0) {
+ svgcontent.insertBefore(node, svgcontent.firstChild);
+ }
+ });
+
+ // Move out of in-group editing mode
+ if(current_group) {
+ leaveContext();
+ selectOnly([current_group]);
+ }
+
+ var naked_svgs = [];
+
+ // Unwrap gsvg if it has no special attributes (only id and style)
+ $(svgcontent).find('g:data(gsvg)').each(function() {
+ var attrs = this.attributes;
+ var len = attrs.length;
+ for(var i=0; i<len; i++) {
+ if(attrs[i].nodeName == 'id' || attrs[i].nodeName == 'style') {
+ len--;
+ }
+ }
+ // No significant attributes, so ungroup
+ if(len <= 0) {
+ var svg = this.firstChild;
+ naked_svgs.push(svg);
+ $(this).replaceWith(svg);
+ }
+ });
+ var output = this.svgToString(svgcontent, 0);
+
+ // Rewrap gsvg
+ if(naked_svgs.length) {
+ $(naked_svgs).each(function() {
+ groupSvgElem(this);
+ });
+ }
+
+ return output;
+};
+
+// Function: svgToString
+// Sub function ran on each SVG element to convert it to a string as desired
+//
+// Parameters:
+// elem - The SVG element to convert
+// indent - Integer with the amount of spaces to indent this tag
+//
+// Returns:
+// String with the given element as an SVG tag
+this.svgToString = function(elem, indent) {
+ var out = new Array(), toXml = svgedit.utilities.toXml;
+ var unit = curConfig.baseUnit;
+ var unit_re = new RegExp('^-?[\\d\\.]+' + unit + '$');
+
+ if (elem) {
+ cleanupElement(elem);
+ var attrs = elem.attributes,
+ attr,
+ i,
+ childs = elem.childNodes;
+
+ for (var i=0; i<indent; i++) out.push(" ");
+ out.push("<"); out.push(elem.nodeName);
+ if(elem.id === 'svgcontent') {
+ // Process root element separately
+ var res = getResolution();
+
+ var vb = "";
+ // TODO: Allow this by dividing all values by current baseVal
+ // Note that this also means we should properly deal with this on import
+// if(curConfig.baseUnit !== "px") {
+// var unit = curConfig.baseUnit;
+// var unit_m = svgedit.units.getTypeMap()[unit];
+// res.w = svgedit.units.shortFloat(res.w / unit_m)
+// res.h = svgedit.units.shortFloat(res.h / unit_m)
+// vb = ' viewBox="' + [0, 0, res.w, res.h].join(' ') + '"';
+// res.w += unit;
+// res.h += unit;
+// }
+
+ if(unit !== "px") {
+ res.w = svgedit.units.convertUnit(res.w, unit) + unit;
+ res.h = svgedit.units.convertUnit(res.h, unit) + unit;
+ }
+
+ out.push(' width="' + res.w + '" height="' + res.h + '"' + vb + ' xmlns="'+svgns+'"');
+
+ var nsuris = {};
+
+ // Check elements for namespaces, add if found
+ $(elem).find('*').andSelf().each(function() {
+ var el = this;
+ $.each(this.attributes, function(i, attr) {
+ var uri = attr.namespaceURI;
+ if(uri && !nsuris[uri] && nsMap[uri] !== 'xmlns' && nsMap[uri] !== 'xml' ) {
+ nsuris[uri] = true;
+ out.push(" xmlns:" + nsMap[uri] + '="' + uri +'"');
+ }
+ });
+ });
+
+ var i = attrs.length;
+ var attr_names = ['width','height','xmlns','x','y','viewBox','id','overflow'];
+ while (i--) {
+ attr = attrs.item(i);
+ var attrVal = toXml(attr.nodeValue);
+
+ // Namespaces have already been dealt with, so skip
+ if(attr.nodeName.indexOf('xmlns:') === 0) continue;
+
+ // only serialize attributes we don't use internally
+ if (attrVal != "" && attr_names.indexOf(attr.localName) == -1)
+ {
+
+ if(!attr.namespaceURI || nsMap[attr.namespaceURI]) {
+ out.push(' ');
+ out.push(attr.nodeName); out.push("=\"");
+ out.push(attrVal); out.push("\"");
+ }
+ }
+ }
+ } else {
+ // Skip empty defs
+ if(elem.nodeName === 'defs' && !elem.firstChild) return;
+
+ var moz_attrs = ['-moz-math-font-style', '_moz-math-font-style'];
+ for (var i=attrs.length-1; i>=0; i--) {
+ attr = attrs.item(i);
+ var attrVal = toXml(attr.nodeValue);
+ //remove bogus attributes added by Gecko
+ if (moz_attrs.indexOf(attr.localName) >= 0) continue;
+ if (attrVal != "") {
+ if(attrVal.indexOf('pointer-events') === 0) continue;
+ if(attr.localName === "class" && attrVal.indexOf('se_') === 0) continue;
+ out.push(" ");
+ if(attr.localName === 'd') attrVal = pathActions.convertPath(elem, true);
+ if(!isNaN(attrVal)) {
+ attrVal = svgedit.units.shortFloat(attrVal);
+ } else if(unit_re.test(attrVal)) {
+ attrVal = svgedit.units.shortFloat(attrVal) + unit;
+ }
+
+ // Embed images when saving
+ if(save_options.apply
+ && elem.nodeName === 'image'
+ && attr.localName === 'href'
+ && save_options.images
+ && save_options.images === 'embed')
+ {
+ var img = encodableImages[attrVal];
+ if(img) attrVal = img;
+ }
+
+ // map various namespaces to our fixed namespace prefixes
+ // (the default xmlns attribute itself does not get a prefix)
+ if(!attr.namespaceURI || attr.namespaceURI == svgns || nsMap[attr.namespaceURI]) {
+ out.push(attr.nodeName); out.push("=\"");
+ out.push(attrVal); out.push("\"");
+ }
+ }
+ }
+ }
+
+ if (elem.hasChildNodes()) {
+ out.push(">");
+ indent++;
+ var bOneLine = false;
+
+ for (var i=0; i<childs.length; i++)
+ {
+ var child = childs.item(i);
+ switch(child.nodeType) {
+ case 1: // element node
+ out.push("\n");
+ out.push(this.svgToString(childs.item(i), indent));
+ break;
+ case 3: // text node
+ var str = child.nodeValue.replace(/^\s+|\s+$/g, "");
+ if (str != "") {
+ bOneLine = true;
+ out.push(toXml(str) + "");
+ }
+ break;
+ case 4: // cdata node
+ out.push("\n");
+ out.push(new Array(indent+1).join(" "));
+ out.push("<![CDATA[");
+ out.push(child.nodeValue);
+ out.push("]]>");
+ break;
+ case 8: // comment
+ out.push("\n");
+ out.push(new Array(indent+1).join(" "));
+ out.push("<!--");
+ out.push(child.data);
+ out.push("-->");
+ break;
+ } // switch on node type
+ }
+ indent--;
+ if (!bOneLine) {
+ out.push("\n");
+ for (var i=0; i<indent; i++) out.push(" ");
+ }
+ out.push("</"); out.push(elem.nodeName); out.push(">");
+ } else {
+ out.push("/>");
+ }
+ }
+ return out.join('');
+}; // end svgToString()
+
+// Function: embedImage
+// Converts a given image file to a data URL when possible, then runs a given callback
+//
+// Parameters:
+// val - String with the path/URL of the image
+// callback - Optional function to run when image data is found, supplies the
+// result (data URL or false) as first parameter.
+this.embedImage = function(val, callback) {
+
+ // load in the image and once it's loaded, get the dimensions
+ $(new Image()).load(function() {
+ // create a canvas the same size as the raster image
+ var canvas = document.createElement("canvas");
+ canvas.width = this.width;
+ canvas.height = this.height;
+ // load the raster image into the canvas
+ canvas.getContext("2d").drawImage(this,0,0);
+ // retrieve the data: URL
+ try {
+ var urldata = ';svgedit_url=' + encodeURIComponent(val);
+ urldata = canvas.toDataURL().replace(';base64',urldata+';base64');
+ encodableImages[val] = urldata;
+ } catch(e) {
+ encodableImages[val] = false;
+ }
+ last_good_img_url = val;
+ if(callback) callback(encodableImages[val]);
+ }).attr('src',val);
+}
+
+// Function: setGoodImage
+// Sets a given URL to be a "last good image" URL
+this.setGoodImage = function(val) {
+ last_good_img_url = val;
+}
+
+this.open = function() {
+ // Nothing by default, handled by optional widget/extension
+};
+
+// Function: save
+// Serializes the current drawing into SVG XML text and returns it to the 'saved' handler.
+// This function also includes the XML prolog. Clients of the SvgCanvas bind their save
+// function to the 'saved' event.
+//
+// Returns:
+// Nothing
+this.save = function(opts) {
+ // remove the selected outline before serializing
+ clearSelection();
+ // Update save options if provided
+ if(opts) $.extend(save_options, opts);
+ save_options.apply = true;
+
+ // no need for doctype, see http://jwatt.org/svg/authoring/#doctype-declaration
+ var str = this.svgCanvasToString();
+ call("saved", str);
+};
+
+// Function: rasterExport
+// Generates a PNG Data URL based on the current image, then calls "exported"
+// with an object including the string and any issues found
+this.rasterExport = function() {
+ // remove the selected outline before serializing
+ clearSelection();
+
+ // Check for known CanVG issues
+ var issues = [];
+
+ // Selector and notice
+ var issue_list = {
+ 'feGaussianBlur': uiStrings.exportNoBlur,
+ 'foreignObject': uiStrings.exportNoforeignObject,
+ '[stroke-dasharray]': uiStrings.exportNoDashArray
+ };
+ var content = $(svgcontent);
+
+ // Add font/text check if Canvas Text API is not implemented
+ if(!("font" in $('<canvas>')[0].getContext('2d'))) {
+ issue_list['text'] = uiStrings.exportNoText;
+ }
+
+ $.each(issue_list, function(sel, descr) {
+ if(content.find(sel).length) {
+ issues.push(descr);
+ }
+ });
+
+ var str = this.svgCanvasToString();
+ call("exported", {svg: str, issues: issues});
+};
+
+// Function: getSvgString
+// Returns the current drawing as raw SVG XML text.
+//
+// Returns:
+// The current drawing as raw SVG XML text.
+this.getSvgString = function() {
+ save_options.apply = false;
+ return this.svgCanvasToString();
+};
+
+// Function: randomizeIds
+// This function determines whether to use a nonce in the prefix, when
+// generating IDs for future documents in SVG-Edit.
+//
+// Parameters:
+// an opional boolean, which, if true, adds a nonce to the prefix. Thus
+// svgCanvas.randomizeIds() <==> svgCanvas.randomizeIds(true)
+//
+// if you're controlling SVG-Edit externally, and want randomized IDs, call
+// this BEFORE calling svgCanvas.setSvgString
+//
+this.randomizeIds = function() {
+ if (arguments.length > 0 && arguments[0] == false) {
+ svgedit.draw.randomizeIds(false, getCurrentDrawing());
+ } else {
+ svgedit.draw.randomizeIds(true, getCurrentDrawing());
+ }
+};
+
+// Function: uniquifyElems
+// Ensure each element has a unique ID
+//
+// Parameters:
+// g - The parent element of the tree to give unique IDs
+var uniquifyElems = this.uniquifyElems = function(g) {
+ var ids = {};
+ // TODO: Handle markers and connectors. These are not yet re-identified properly
+ // as their referring elements do not get remapped.
+ //
+ // <marker id='se_marker_end_svg_7'/>
+ // <polyline id='svg_7' se:connector='svg_1 svg_6' marker-end='url(#se_marker_end_svg_7)'/>
+ //
+ // Problem #1: if svg_1 gets renamed, we do not update the polyline's se:connector attribute
+ // Problem #2: if the polyline svg_7 gets renamed, we do not update the marker id nor the polyline's marker-end attribute
+ var ref_elems = ["filter", "linearGradient", "pattern", "radialGradient", "symbol", "textPath", "use"];
+
+ svgedit.utilities.walkTree(g, function(n) {
+ // if it's an element node
+ if (n.nodeType == 1) {
+ // and the element has an ID
+ if (n.id) {
+ // and we haven't tracked this ID yet
+ if (!(n.id in ids)) {
+ // add this id to our map
+ ids[n.id] = {elem:null, attrs:[], hrefs:[]};
+ }
+ ids[n.id]["elem"] = n;
+ }
+
+ // now search for all attributes on this element that might refer
+ // to other elements
+ $.each(ref_attrs,function(i,attr) {
+ var attrnode = n.getAttributeNode(attr);
+ if (attrnode) {
+ // the incoming file has been sanitized, so we should be able to safely just strip off the leading #
+ var url = svgedit.utilities.getUrlFromAttr(attrnode.value),
+ refid = url ? url.substr(1) : null;
+ if (refid) {
+ if (!(refid in ids)) {
+ // add this id to our map
+ ids[refid] = {elem:null, attrs:[], hrefs:[]};
+ }
+ ids[refid]["attrs"].push(attrnode);
+ }
+ }
+ });
+
+ // check xlink:href now
+ var href = svgedit.utilities.getHref(n);
+ // TODO: what if an <image> or <a> element refers to an element internally?
+ if(href && ref_elems.indexOf(n.nodeName) >= 0)
+ {
+ var refid = href.substr(1);
+ if (refid) {
+ if (!(refid in ids)) {
+ // add this id to our map
+ ids[refid] = {elem:null, attrs:[], hrefs:[]};
+ }
+ ids[refid]["hrefs"].push(n);
+ }
+ }
+ }
+ });
+
+ // in ids, we now have a map of ids, elements and attributes, let's re-identify
+ for (var oldid in ids) {
+ if (!oldid) continue;
+ var elem = ids[oldid]["elem"];
+ if (elem) {
+ var newid = getNextId();
+
+ // assign element its new id
+ elem.id = newid;
+
+ // remap all url() attributes
+ var attrs = ids[oldid]["attrs"];
+ var j = attrs.length;
+ while (j--) {
+ var attr = attrs[j];
+ attr.ownerElement.setAttribute(attr.name, "url(#" + newid + ")");
+ }
+
+ // remap all href attributes
+ var hreffers = ids[oldid]["hrefs"];
+ var k = hreffers.length;
+ while (k--) {
+ var hreffer = hreffers[k];
+ svgedit.utilities.setHref(hreffer, "#"+newid);
+ }
+ }
+ }
+}
+
+// Function setUseData
+// Assigns reference data for each use element
+var setUseData = this.setUseData = function(parent) {
+ var elems = $(parent);
+
+ if(parent.tagName !== 'use') {
+ elems = elems.find('use');
+ }
+
+ elems.each(function() {
+ var id = getHref(this).substr(1);
+ var ref_elem = getElem(id);
+ if(!ref_elem) return;
+ $(this).data('ref', ref_elem);
+ if(ref_elem.tagName == 'symbol' || ref_elem.tagName == 'svg') {
+ $(this).data('symbol', ref_elem).data('ref', ref_elem);
+ }
+ });
+}
+
+// Function convertGradients
+// Converts gradients from userSpaceOnUse to objectBoundingBox
+var convertGradients = this.convertGradients = function(elem) {
+ var elems = $(elem).find('linearGradient, radialGradient');
+ if(!elems.length && svgedit.browser.isWebkit()) {
+ // Bug in webkit prevents regular *Gradient selector search
+ elems = $(elem).find('*').filter(function() {
+ return (this.tagName.indexOf('Gradient') >= 0);
+ });
+ }
+
+ elems.each(function() {
+ var grad = this;
+ if($(grad).attr('gradientUnits') === 'userSpaceOnUse') {
+ // TODO: Support more than one element with this ref by duplicating parent grad
+ var elems = $(svgcontent).find('[fill=url(#' + grad.id + ')],[stroke=url(#' + grad.id + ')]');
+ if(!elems.length) return;
+
+ // get object's bounding box
+ var bb = svgedit.utilities.getBBox(elems[0]);
+
+ // This will occur if the element is inside a <defs> or a <symbol>,
+ // in which we shouldn't need to convert anyway.
+ if(!bb) return;
+
+ if(grad.tagName === 'linearGradient') {
+ var g_coords = $(grad).attr(['x1', 'y1', 'x2', 'y2']);
+
+ // If has transform, convert
+ var tlist = grad.gradientTransform.baseVal;
+ if(tlist && tlist.numberOfItems > 0) {
+ var m = transformListToTransform(tlist).matrix;
+ var pt1 = transformPoint(g_coords.x1, g_coords.y1, m);
+ var pt2 = transformPoint(g_coords.x2, g_coords.y2, m);
+
+ g_coords.x1 = pt1.x;
+ g_coords.y1 = pt1.y;
+ g_coords.x2 = pt2.x;
+ g_coords.y2 = pt2.y;
+ grad.removeAttribute('gradientTransform');
+ }
+
+ $(grad).attr({
+ x1: (g_coords.x1 - bb.x) / bb.width,
+ y1: (g_coords.y1 - bb.y) / bb.height,
+ x2: (g_coords.x2 - bb.x) / bb.width,
+ y2: (g_coords.y2 - bb.y) / bb.height
+ });
+ grad.removeAttribute('gradientUnits');
+ } else {
+ // Note: radialGradient elements cannot be easily converted
+ // because userSpaceOnUse will keep circular gradients, while
+ // objectBoundingBox will x/y scale the gradient according to
+ // its bbox.
+
+ // For now we'll do nothing, though we should probably have
+ // the gradient be updated as the element is moved, as
+ // inkscape/illustrator do.
+
+// var g_coords = $(grad).attr(['cx', 'cy', 'r']);
+//
+// $(grad).attr({
+// cx: (g_coords.cx - bb.x) / bb.width,
+// cy: (g_coords.cy - bb.y) / bb.height,
+// r: g_coords.r
+// });
+//
+// grad.removeAttribute('gradientUnits');
+ }
+
+
+ }
+ });
+}
+
+// Function: convertToGroup
+// Converts selected/given <use> or child SVG element to a group
+var convertToGroup = this.convertToGroup = function(elem) {
+ if(!elem) {
+ elem = selectedElements[0];
+ }
+ var $elem = $(elem);
+
+ var batchCmd = new BatchCommand();
+
+ var ts;
+
+ if($elem.data('gsvg')) {
+ // Use the gsvg as the new group
+ var svg = elem.firstChild;
+ var pt = $(svg).attr(['x', 'y']);
+
+ $(elem.firstChild.firstChild).unwrap();
+ $(elem).removeData('gsvg');
+
+ var tlist = getTransformList(elem);
+ var xform = svgroot.createSVGTransform();
+ xform.setTranslate(pt.x, pt.y);
+ tlist.appendItem(xform);
+ recalculateDimensions(elem);
+ call("selected", [elem]);
+ } else if($elem.data('symbol')) {
+ elem = $elem.data('symbol');
+
+ ts = $elem.attr('transform');
+ var pos = $elem.attr(['x','y']);
+
+ var vb = elem.getAttribute('viewBox');
+
+ if(vb) {
+ var nums = vb.split(' ');
+ pos.x -= +nums[0];
+ pos.y -= +nums[1];
+ }
+
+ // Not ideal, but works
+ ts += " translate(" + (pos.x || 0) + "," + (pos.y || 0) + ")";
+
+ var prev = $elem.prev();
+
+ // Remove <use> element
+ batchCmd.addSubCommand(new RemoveElementCommand($elem[0], $elem[0].nextSibling, $elem[0].parentNode));
+ $elem.remove();
+
+ // See if other elements reference this symbol
+ var has_more = $(svgcontent).find('use:data(symbol)').length;
+
+ var g = svgdoc.createElementNS(svgns, "g");
+ var childs = elem.childNodes;
+
+ for(var i = 0; i < childs.length; i++) {
+ g.appendChild(childs[i].cloneNode(true));
+ }
+
+ // Duplicate the gradients for Gecko, since they weren't included in the <symbol>
+ if(svgedit.browser.isGecko()) {
+ var dupeGrads = $(findDefs()).children('linearGradient,radialGradient,pattern').clone();
+ $(g).append(dupeGrads);
+ }
+
+ if (ts) {
+ g.setAttribute("transform", ts);
+ }
+
+ var parent = elem.parentNode;
+
+ uniquifyElems(g);
+
+ // Put the dupe gradients back into <defs> (after uniquifying them)
+ if(svgedit.browser.isGecko()) {
+ $(findDefs()).append( $(g).find('linearGradient,radialGradient,pattern') );
+ }
+
+ // now give the g itself a new id
+ g.id = getNextId();
+
+ prev.after(g);
+
+ if(parent) {
+ if(!has_more) {
+ // remove symbol/svg element
+ var nextSibling = elem.nextSibling;
+ parent.removeChild(elem);
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ }
+ batchCmd.addSubCommand(new InsertElementCommand(g));
+ }
+
+ setUseData(g);
+
+ if(svgedit.browser.isGecko()) {
+ convertGradients(findDefs());
+ } else {
+ convertGradients(g);
+ }
+
+ // recalculate dimensions on the top-level children so that unnecessary transforms
+ // are removed
+ svgedit.utilities.walkTreePost(g, function(n){try{recalculateDimensions(n)}catch(e){console.log(e)}});
+
+ // Give ID for any visible element missing one
+ $(g).find(visElems).each(function() {
+ if(!this.id) this.id = getNextId();
+ });
+
+ selectOnly([g]);
+
+ var cm = pushGroupProperties(g, true);
+ if(cm) {
+ batchCmd.addSubCommand(cm);
+ }
+
+ addCommandToHistory(batchCmd);
+
+ } else {
+ console.log('Unexpected element to ungroup:', elem);
+ }
+}
+
+//
+// Function: setSvgString
+// This function sets the current drawing as the input SVG XML.
+//
+// Parameters:
+// xmlString - The SVG as XML text.
+//
+// Returns:
+// This function returns false if the set was unsuccessful, true otherwise.
+this.setSvgString = function(xmlString) {
+ try {
+ // convert string into XML document
+ var newDoc = svgedit.utilities.text2xml(xmlString);
+
+ this.prepareSvg(newDoc);
+
+ var batchCmd = new BatchCommand("Change Source");
+
+ // remove old svg document
+ var nextSibling = svgcontent.nextSibling;
+ var oldzoom = svgroot.removeChild(svgcontent);
+ batchCmd.addSubCommand(new RemoveElementCommand(oldzoom, nextSibling, svgroot));
+
+ // set new svg document
+ // If DOM3 adoptNode() available, use it. Otherwise fall back to DOM2 importNode()
+ if(svgdoc.adoptNode) {
+ svgcontent = svgdoc.adoptNode(newDoc.documentElement);
+ }
+ else {
+ svgcontent = svgdoc.importNode(newDoc.documentElement, true);
+ }
+
+ svgroot.appendChild(svgcontent);
+ var content = $(svgcontent);
+
+ canvas.current_drawing_ = new svgedit.draw.Drawing(svgcontent, idprefix);
+
+ // retrieve or set the nonce
+ var nonce = getCurrentDrawing().getNonce();
+ if (nonce) {
+ call("setnonce", nonce);
+ } else {
+ call("unsetnonce");
+ }
+
+ // change image href vals if possible
+ content.find('image').each(function() {
+ var image = this;
+ preventClickDefault(image);
+ var val = getHref(this);
+ if(val.indexOf('data:') === 0) {
+ // Check if an SVG-edit data URI
+ var m = val.match(/svgedit_url=(.*?);/);
+ if(m) {
+ var url = decodeURIComponent(m[1]);
+ $(new Image()).load(function() {
+ image.setAttributeNS(xlinkns,'xlink:href',url);
+ }).attr('src',url);
+ }
+ }
+ // Add to encodableImages if it loads
+ canvas.embedImage(val);
+ });
+
+ // Wrap child SVGs in group elements
+ content.find('svg').each(function() {
+ // Skip if it's in a <defs>
+ if($(this).closest('defs').length) return;
+
+ uniquifyElems(this);
+
+ // Check if it already has a gsvg group
+ var pa = this.parentNode;
+ if(pa.childNodes.length === 1 && pa.nodeName === 'g') {
+ $(pa).data('gsvg', this);
+ pa.id = pa.id || getNextId();
+ } else {
+ groupSvgElem(this);
+ }
+ });
+
+ // For Firefox: Put all paint elems in defs
+ if(svgedit.browser.isGecko()) {
+ content.find('linearGradient, radialGradient, pattern').appendTo(findDefs());
+ }
+
+
+ // Set ref element for <use> elements
+
+ // TODO: This should also be done if the object is re-added through "redo"
+ setUseData(content);
+
+ convertGradients(content[0]);
+
+ // recalculate dimensions on the top-level children so that unnecessary transforms
+ // are removed
+ svgedit.utilities.walkTreePost(svgcontent, function(n){try{recalculateDimensions(n)}catch(e){console.log(e)}});
+
+ var attrs = {
+ id: 'svgcontent',
+ overflow: curConfig.show_outside_canvas?'visible':'hidden'
+ };
+
+ var percs = false;
+
+ // determine proper size
+ if (content.attr("viewBox")) {
+ var vb = content.attr("viewBox").split(' ');
+ attrs.width = vb[2];
+ attrs.height = vb[3];
+ }
+ // handle content that doesn't have a viewBox
+ else {
+ $.each(['width', 'height'], function(i, dim) {
+ // Set to 100 if not given
+ var val = content.attr(dim);
+
+ if(!val) val = '100%';
+
+ if((val+'').substr(-1) === "%") {
+ // Use user units if percentage given
+ percs = true;
+ } else {
+ attrs[dim] = convertToNum(dim, val);
+ }
+ });
+ }
+
+ // identify layers
+ identifyLayers();
+
+ // Give ID for any visible layer children missing one
+ content.children().find(visElems).each(function() {
+ if(!this.id) this.id = getNextId();
+ });
+
+ // Percentage width/height, so let's base it on visible elements
+ if(percs) {
+ var bb = getStrokedBBox();
+ attrs.width = bb.width + bb.x;
+ attrs.height = bb.height + bb.y;
+ }
+
+ // Just in case negative numbers are given or
+ // result from the percs calculation
+ if(attrs.width <= 0) attrs.width = 100;
+ if(attrs.height <= 0) attrs.height = 100;
+
+ content.attr(attrs);
+ this.contentW = attrs['width'];
+ this.contentH = attrs['height'];
+
+ batchCmd.addSubCommand(new InsertElementCommand(svgcontent));
+ // update root to the correct size
+ var changes = content.attr(["width", "height"]);
+ batchCmd.addSubCommand(new ChangeElementCommand(svgroot, changes));
+
+ // reset zoom
+ current_zoom = 1;
+
+ // reset transform lists
+ svgedit.transformlist.resetListMap();
+ clearSelection();
+ svgedit.path.clearData();
+ svgroot.appendChild(selectorManager.selectorParentGroup);
+
+ addCommandToHistory(batchCmd);
+ call("changed", [svgcontent]);
+ } catch(e) {
+ console.log(e);
+ return false;
+ }
+
+ return true;
+};
+
+// Function: importSvgString
+// This function imports the input SVG XML as a <symbol> in the <defs>, then adds a
+// <use> to the current layer.
+//
+// Parameters:
+// xmlString - The SVG as XML text.
+//
+// Returns:
+// This function returns false if the import was unsuccessful, true otherwise.
+// TODO:
+// * properly handle if namespace is introduced by imported content (must add to svgcontent
+// and update all prefixes in the imported node)
+// * properly handle recalculating dimensions, recalculateDimensions() doesn't handle
+// arbitrary transform lists, but makes some assumptions about how the transform list
+// was obtained
+// * import should happen in top-left of current zoomed viewport
+this.importSvgString = function(xmlString) {
+
+ try {
+ // Get unique ID
+ var uid = svgedit.utilities.encode64(xmlString.length + xmlString).substr(0,32);
+
+ var useExisting = false;
+
+ // Look for symbol and make sure symbol exists in image
+ if(import_ids[uid]) {
+ if( $(import_ids[uid].symbol).parents('#svgroot').length ) {
+ useExisting = true;
+ }
+ }
+
+ var batchCmd = new BatchCommand("Import SVG");
+
+ if(useExisting) {
+ var symbol = import_ids[uid].symbol;
+ var ts = import_ids[uid].xform;
+ } else {
+ // convert string into XML document
+ var newDoc = svgedit.utilities.text2xml(xmlString);
+
+ this.prepareSvg(newDoc);
+
+ // import new svg document into our document
+ var svg;
+ // If DOM3 adoptNode() available, use it. Otherwise fall back to DOM2 importNode()
+ if(svgdoc.adoptNode) {
+ svg = svgdoc.adoptNode(newDoc.documentElement);
+ }
+ else {
+ svg = svgdoc.importNode(newDoc.documentElement, true);
+ }
+
+ uniquifyElems(svg);
+
+ var innerw = convertToNum('width', svg.getAttribute("width")),
+ innerh = convertToNum('height', svg.getAttribute("height")),
+ innervb = svg.getAttribute("viewBox"),
+ // if no explicit viewbox, create one out of the width and height
+ vb = innervb ? innervb.split(" ") : [0,0,innerw,innerh];
+ for (var j = 0; j < 4; ++j)
+ vb[j] = +(vb[j]);
+
+ // TODO: properly handle preserveAspectRatio
+ var canvasw = +svgcontent.getAttribute("width"),
+ canvash = +svgcontent.getAttribute("height");
+ // imported content should be 1/3 of the canvas on its largest dimension
+
+ if (innerh > innerw) {
+ var ts = "scale(" + (canvash/3)/vb[3] + ")";
+ }
+ else {
+ var ts = "scale(" + (canvash/3)/vb[2] + ")";
+ }
+
+ // Hack to make recalculateDimensions understand how to scale
+ ts = "translate(0) " + ts + " translate(0)";
+
+ var symbol = svgdoc.createElementNS(svgns, "symbol");
+ var defs = findDefs();
+
+ if(svgedit.browser.isGecko()) {
+ // Move all gradients into root for Firefox, workaround for this bug:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=353575
+ // TODO: Make this properly undo-able.
+ $(svg).find('linearGradient, radialGradient, pattern').appendTo(defs);
+ }
+
+ while (svg.firstChild) {
+ var first = svg.firstChild;
+ symbol.appendChild(first);
+ }
+ var attrs = svg.attributes;
+ for(var i=0; i < attrs.length; i++) {
+ var attr = attrs[i];
+ symbol.setAttribute(attr.nodeName, attr.nodeValue);
+ }
+ symbol.id = getNextId();
+
+ // Store data
+ import_ids[uid] = {
+ symbol: symbol,
+ xform: ts
+ }
+
+ findDefs().appendChild(symbol);
+ batchCmd.addSubCommand(new InsertElementCommand(symbol));
+ }
+
+
+ var use_el = svgdoc.createElementNS(svgns, "use");
+ use_el.id = getNextId();
+ setHref(use_el, "#" + symbol.id);
+
+ (current_group || getCurrentDrawing().getCurrentLayer()).appendChild(use_el);
+ batchCmd.addSubCommand(new InsertElementCommand(use_el));
+ clearSelection();
+
+ use_el.setAttribute("transform", ts);
+ recalculateDimensions(use_el);
+ $(use_el).data('symbol', symbol).data('ref', symbol);
+ addToSelection([use_el]);
+
+ // TODO: Find way to add this in a recalculateDimensions-parsable way
+// if (vb[0] != 0 || vb[1] != 0)
+// ts = "translate(" + (-vb[0]) + "," + (-vb[1]) + ") " + ts;
+ addCommandToHistory(batchCmd);
+ call("changed", [svgcontent]);
+
+ } catch(e) {
+ console.log(e);
+ return false;
+ }
+
+ return true;
+};
+
+// TODO(codedread): Move all layer/context functions in draw.js
+// Layer API Functions
+
+// Group: Layers
+
+// Function: identifyLayers
+// Updates layer system
+var identifyLayers = canvas.identifyLayers = function() {
+ leaveContext();
+ getCurrentDrawing().identifyLayers();
+};
+
+// Function: createLayer
+// Creates a new top-level layer in the drawing with the given name, sets the current layer
+// to it, and then clears the selection This function then calls the 'changed' handler.
+// This is an undoable action.
+//
+// Parameters:
+// name - The given name
+this.createLayer = function(name) {
+ var batchCmd = new BatchCommand("Create Layer");
+ var new_layer = getCurrentDrawing().createLayer(name);
+ batchCmd.addSubCommand(new InsertElementCommand(new_layer));
+ addCommandToHistory(batchCmd);
+ clearSelection();
+ call("changed", [new_layer]);
+};
+
+// Function: cloneLayer
+// Creates a new top-level layer in the drawing with the given name, copies all the current layer's contents
+// to it, and then clears the selection This function then calls the 'changed' handler.
+// This is an undoable action.
+//
+// Parameters:
+// name - The given name
+this.cloneLayer = function(name) {
+ var batchCmd = new BatchCommand("Duplicate Layer");
+ var new_layer = svgdoc.createElementNS(svgns, "g");
+ var layer_title = svgdoc.createElementNS(svgns, "title");
+ layer_title.textContent = name;
+ new_layer.appendChild(layer_title);
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ $(current_layer).after(new_layer);
+ var childs = current_layer.childNodes;
+ for(var i = 0; i < childs.length; i++) {
+ var ch = childs[i];
+ if(ch.localName == 'title') continue;
+ new_layer.appendChild(copyElem(ch));
+ }
+
+ clearSelection();
+ identifyLayers();
+
+ batchCmd.addSubCommand(new InsertElementCommand(new_layer));
+ addCommandToHistory(batchCmd);
+ canvas.setCurrentLayer(name);
+ call("changed", [new_layer]);
+};
+
+// Function: deleteCurrentLayer
+// Deletes the current layer from the drawing and then clears the selection. This function
+// then calls the 'changed' handler. This is an undoable action.
+this.deleteCurrentLayer = function() {
+ var current_layer = getCurrentDrawing().getCurrentLayer();
+ var nextSibling = current_layer.nextSibling;
+ var parent = current_layer.parentNode;
+ current_layer = getCurrentDrawing().deleteCurrentLayer();
+ if (current_layer) {
+ var batchCmd = new BatchCommand("Delete Layer");
+ // store in our Undo History
+ batchCmd.addSubCommand(new RemoveElementCommand(current_layer, nextSibling, parent));
+ addCommandToHistory(batchCmd);
+ clearSelection();
+ call("changed", [parent]);
+ return true;
+ }
+ return false;
+};
+
+// Function: setCurrentLayer
+// Sets the current layer. If the name is not a valid layer name, then this function returns
+// false. Otherwise it returns true. This is not an undo-able action.
+//
+// Parameters:
+// name - the name of the layer you want to switch to.
+//
+// Returns:
+// true if the current layer was switched, otherwise false
+this.setCurrentLayer = function(name) {
+ var result = getCurrentDrawing().setCurrentLayer(svgedit.utilities.toXml(name));
+ if (result) {
+ clearSelection();
+ }
+ return result;
+};
+
+// Function: renameCurrentLayer
+// Renames the current layer. If the layer name is not valid (i.e. unique), then this function
+// does nothing and returns false, otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// newname - the new name you want to give the current layer. This name must be unique
+// among all layer names.
+//
+// Returns:
+// true if the rename succeeded, false otherwise.
+this.renameCurrentLayer = function(newname) {
+ var drawing = getCurrentDrawing();
+ if (drawing.current_layer) {
+ var oldLayer = drawing.current_layer;
+ // setCurrentLayer will return false if the name doesn't already exist
+ // this means we are free to rename our oldLayer
+ if (!canvas.setCurrentLayer(newname)) {
+ var batchCmd = new BatchCommand("Rename Layer");
+ // find the index of the layer
+ for (var i = 0; i < drawing.getNumLayers(); ++i) {
+ if (drawing.all_layers[i][1] == oldLayer) break;
+ }
+ var oldname = drawing.getLayerName(i);
+ drawing.all_layers[i][0] = svgedit.utilities.toXml(newname);
+
+ // now change the underlying title element contents
+ var len = oldLayer.childNodes.length;
+ for (var i = 0; i < len; ++i) {
+ var child = oldLayer.childNodes.item(i);
+ // found the <title> element, now append all the
+ if (child && child.tagName == "title") {
+ // wipe out old name
+ while (child.firstChild) { child.removeChild(child.firstChild); }
+ child.textContent = newname;
+
+ batchCmd.addSubCommand(new ChangeElementCommand(child, {"#text":oldname}));
+ addCommandToHistory(batchCmd);
+ call("changed", [oldLayer]);
+ return true;
+ }
+ }
+ }
+ drawing.current_layer = oldLayer;
+ }
+ return false;
+};
+
+// Function: setCurrentLayerPosition
+// Changes the position of the current layer to the new value. If the new index is not valid,
+// this function does nothing and returns false, otherwise it returns true. This is an
+// undo-able action.
+//
+// Parameters:
+// newpos - The zero-based index of the new position of the layer. This should be between
+// 0 and (number of layers - 1)
+//
+// Returns:
+// true if the current layer position was changed, false otherwise.
+this.setCurrentLayerPosition = function(newpos) {
+ var drawing = getCurrentDrawing();
+ if (drawing.current_layer && newpos >= 0 && newpos < drawing.getNumLayers()) {
+ for (var oldpos = 0; oldpos < drawing.getNumLayers(); ++oldpos) {
+ if (drawing.all_layers[oldpos][1] == drawing.current_layer) break;
+ }
+ // some unknown error condition (current_layer not in all_layers)
+ if (oldpos == drawing.getNumLayers()) { return false; }
+
+ if (oldpos != newpos) {
+ // if our new position is below us, we need to insert before the node after newpos
+ var refLayer = null;
+ var oldNextSibling = drawing.current_layer.nextSibling;
+ if (newpos > oldpos ) {
+ if (newpos < drawing.getNumLayers()-1) {
+ refLayer = drawing.all_layers[newpos+1][1];
+ }
+ }
+ // if our new position is above us, we need to insert before the node at newpos
+ else {
+ refLayer = drawing.all_layers[newpos][1];
+ }
+ svgcontent.insertBefore(drawing.current_layer, refLayer);
+ addCommandToHistory(new MoveElementCommand(drawing.current_layer, oldNextSibling, svgcontent));
+
+ identifyLayers();
+ canvas.setCurrentLayer(drawing.getLayerName(newpos));
+
+ return true;
+ }
+ }
+
+ return false;
+};
+
+// Function: setLayerVisibility
+// Sets the visibility of the layer. If the layer name is not valid, this function return
+// false, otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// layername - the name of the layer to change the visibility
+// bVisible - true/false, whether the layer should be visible
+//
+// Returns:
+// true if the layer's visibility was set, false otherwise
+this.setLayerVisibility = function(layername, bVisible) {
+ var drawing = getCurrentDrawing();
+ var prevVisibility = drawing.getLayerVisibility(layername);
+ var layer = drawing.setLayerVisibility(layername, bVisible);
+ if (layer) {
+ var oldDisplay = prevVisibility ? 'inline' : 'none';
+ addCommandToHistory(new ChangeElementCommand(layer, {'display':oldDisplay}, 'Layer Visibility'));
+ } else {
+ return false;
+ }
+
+ if (layer == drawing.getCurrentLayer()) {
+ clearSelection();
+ pathActions.clear();
+ }
+// call("changed", [selected]);
+ return true;
+};
+
+// Function: moveSelectedToLayer
+// Moves the selected elements to layername. If the name is not a valid layer name, then false
+// is returned. Otherwise it returns true. This is an undo-able action.
+//
+// Parameters:
+// layername - the name of the layer you want to which you want to move the selected elements
+//
+// Returns:
+// true if the selected elements were moved to the layer, false otherwise.
+this.moveSelectedToLayer = function(layername) {
+ // find the layer
+ var layer = null;
+ var drawing = getCurrentDrawing();
+ for (var i = 0; i < drawing.getNumLayers(); ++i) {
+ if (drawing.getLayerName(i) == layername) {
+ layer = drawing.all_layers[i][1];
+ break;
+ }
+ }
+ if (!layer) return false;
+
+ var batchCmd = new BatchCommand("Move Elements to Layer");
+
+ // loop for each selected element and move it
+ var selElems = selectedElements;
+ var i = selElems.length;
+ while (i--) {
+ var elem = selElems[i];
+ if (!elem) continue;
+ var oldNextSibling = elem.nextSibling;
+ // TODO: this is pretty brittle!
+ var oldLayer = elem.parentNode;
+ layer.appendChild(elem);
+ batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldLayer));
+ }
+
+ addCommandToHistory(batchCmd);
+
+ return true;
+};
+
+this.mergeLayer = function(skipHistory) {
+ var batchCmd = new BatchCommand("Merge Layer");
+ var drawing = getCurrentDrawing();
+ var prev = $(drawing.current_layer).prev()[0];
+ if(!prev) return;
+ var childs = drawing.current_layer.childNodes;
+ var len = childs.length;
+ var layerNextSibling = drawing.current_layer.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(drawing.current_layer, layerNextSibling, svgcontent));
+
+ while(drawing.current_layer.firstChild) {
+ var ch = drawing.current_layer.firstChild;
+ if(ch.localName == 'title') {
+ var chNextSibling = ch.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(ch, chNextSibling, drawing.current_layer));
+ drawing.current_layer.removeChild(ch);
+ continue;
+ }
+ var oldNextSibling = ch.nextSibling;
+ prev.appendChild(ch);
+ batchCmd.addSubCommand(new MoveElementCommand(ch, oldNextSibling, drawing.current_layer));
+ }
+
+ // Remove current layer
+ svgcontent.removeChild(drawing.current_layer);
+
+ if(!skipHistory) {
+ clearSelection();
+ identifyLayers();
+
+ call("changed", [svgcontent]);
+
+ addCommandToHistory(batchCmd);
+ }
+
+ drawing.current_layer = prev;
+ return batchCmd;
+}
+
+this.mergeAllLayers = function() {
+ var batchCmd = new BatchCommand("Merge all Layers");
+ var drawing = getCurrentDrawing();
+ drawing.current_layer = drawing.all_layers[drawing.getNumLayers()-1][1];
+ while($(svgcontent).children('g').length > 1) {
+ batchCmd.addSubCommand(canvas.mergeLayer(true));
+ }
+
+ clearSelection();
+ identifyLayers();
+ call("changed", [svgcontent]);
+ addCommandToHistory(batchCmd);
+}
+
+// Function: leaveContext
+// Return from a group context to the regular kind, make any previously
+// disabled elements enabled again
+var leaveContext = this.leaveContext = function() {
+ var len = disabled_elems.length;
+ if(len) {
+ for(var i = 0; i < len; i++) {
+ var elem = disabled_elems[i];
+
+ var orig = elData(elem, 'orig_opac');
+ if(orig !== 1) {
+ elem.setAttribute('opacity', orig);
+ } else {
+ elem.removeAttribute('opacity');
+ }
+ elem.setAttribute('style', 'pointer-events: inherit');
+ }
+ disabled_elems = [];
+ clearSelection(true);
+ call("contextset", null);
+ }
+ current_group = null;
+}
+
+// Function: setContext
+// Set the current context (for in-group editing)
+var setContext = this.setContext = function(elem) {
+ leaveContext();
+ if(typeof elem === 'string') {
+ elem = getElem(elem);
+ }
+
+ // Edit inside this group
+ current_group = elem;
+
+ // Disable other elements
+ $(elem).parentsUntil('#svgcontent').andSelf().siblings().each(function() {
+ var opac = this.getAttribute('opacity') || 1;
+ // Store the original's opacity
+ elData(this, 'orig_opac', opac);
+ this.setAttribute('opacity', opac * .33);
+ this.setAttribute('style', 'pointer-events: none');
+ disabled_elems.push(this);
+ });
+
+ clearSelection();
+ call("contextset", current_group);
+}
+
+// Group: Document functions
+
+// Function: clear
+// Clears the current document. This is not an undoable action.
+this.clear = function() {
+ pathActions.clear();
+
+ clearSelection();
+
+ // clear the svgcontent node
+ canvas.clearSvgContentElement();
+
+ // create new document
+ canvas.current_drawing_ = new svgedit.draw.Drawing(svgcontent);
+
+ // create empty first layer
+ canvas.createLayer("Layer 1");
+
+ // clear the undo stack
+ canvas.undoMgr.resetUndoStack();
+
+ // reset the selector manager
+ selectorManager.initGroup();
+
+ // reset the rubber band box
+ rubberBox = selectorManager.getRubberBandBox();
+
+ call("cleared");
+};
+
+// Function: linkControlPoints
+// Alias function
+this.linkControlPoints = pathActions.linkControlPoints;
+
+// Function: getContentElem
+// Returns the content DOM element
+this.getContentElem = function() { return svgcontent; };
+
+// Function: getRootElem
+// Returns the root DOM element
+this.getRootElem = function() { return svgroot; };
+
+// Function: getSelectedElems
+// Returns the array with selected DOM elements
+this.getSelectedElems = function() { return selectedElements; };
+
+// Function: getResolution
+// Returns the current dimensions and zoom level in an object
+var getResolution = this.getResolution = function() {
+// var vb = svgcontent.getAttribute("viewBox").split(' ');
+// return {'w':vb[2], 'h':vb[3], 'zoom': current_zoom};
+
+ var width = svgcontent.getAttribute("width")/current_zoom;
+ var height = svgcontent.getAttribute("height")/current_zoom;
+
+ return {
+ 'w': width,
+ 'h': height,
+ 'zoom': current_zoom
+ };
+};
+
+// Function: getZoom
+// Returns the current zoom level
+this.getZoom = function(){return current_zoom;};
+
+// Function: getVersion
+// Returns a string which describes the revision number of SvgCanvas.
+this.getVersion = function() {
+ return "svgcanvas.js ($Rev: 2066 $)";
+};
+
+// Function: setUiStrings
+// Update interface strings with given values
+//
+// Parameters:
+// strs - Object with strings (see uiStrings for examples)
+this.setUiStrings = function(strs) {
+ $.extend(uiStrings, strs.notification);
+}
+
+// Function: setConfig
+// Update configuration options with given values
+//
+// Parameters:
+// opts - Object with options (see curConfig for examples)
+this.setConfig = function(opts) {
+ $.extend(curConfig, opts);
+}
+
+// Function: getTitle
+// Returns the current group/SVG's title contents
+this.getTitle = function(elem) {
+ elem = elem || selectedElements[0];
+ if(!elem) return;
+ elem = $(elem).data('gsvg') || $(elem).data('symbol') || elem;
+ var childs = elem.childNodes;
+ for (var i=0; i<childs.length; i++) {
+ if(childs[i].nodeName == 'title') {
+ return childs[i].textContent;
+ }
+ }
+ return '';
+}
+
+// Function: setGroupTitle
+// Sets the group/SVG's title content
+// TODO: Combine this with setDocumentTitle
+this.setGroupTitle = function(val) {
+ var elem = selectedElements[0];
+ elem = $(elem).data('gsvg') || elem;
+
+ var ts = $(elem).children('title');
+
+ var batchCmd = new BatchCommand("Set Label");
+
+ if(!val.length) {
+ // Remove title element
+ var tsNextSibling = ts.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(ts[0], tsNextSibling, elem));
+ ts.remove();
+ } else if(ts.length) {
+ // Change title contents
+ var title = ts[0];
+ batchCmd.addSubCommand(new ChangeElementCommand(title, {'#text': title.textContent}));
+ title.textContent = val;
+ } else {
+ // Add title element
+ title = svgdoc.createElementNS(svgns, "title");
+ title.textContent = val;
+ $(elem).prepend(title);
+ batchCmd.addSubCommand(new InsertElementCommand(title));
+ }
+
+ addCommandToHistory(batchCmd);
+}
+
+// Function: getDocumentTitle
+// Returns the current document title or an empty string if not found
+this.getDocumentTitle = function() {
+ return canvas.getTitle(svgcontent);
+}
+
+// Function: setDocumentTitle
+// Adds/updates a title element for the document with the given name.
+// This is an undoable action
+//
+// Parameters:
+// newtitle - String with the new title
+this.setDocumentTitle = function(newtitle) {
+ var childs = svgcontent.childNodes, doc_title = false, old_title = '';
+
+ var batchCmd = new BatchCommand("Change Image Title");
+
+ for (var i=0; i<childs.length; i++) {
+ if(childs[i].nodeName == 'title') {
+ doc_title = childs[i];
+ old_title = doc_title.textContent;
+ break;
+ }
+ }
+ if(!doc_title) {
+ doc_title = svgdoc.createElementNS(svgns, "title");
+ svgcontent.insertBefore(doc_title, svgcontent.firstChild);
+ }
+
+ if(newtitle.length) {
+ doc_title.textContent = newtitle;
+ } else {
+ // No title given, so element is not necessary
+ doc_title.parentNode.removeChild(doc_title);
+ }
+ batchCmd.addSubCommand(new ChangeElementCommand(doc_title, {'#text': old_title}));
+ addCommandToHistory(batchCmd);
+}
+
+// Function: getEditorNS
+// Returns the editor's namespace URL, optionally adds it to root element
+//
+// Parameters:
+// add - Boolean to indicate whether or not to add the namespace value
+this.getEditorNS = function(add) {
+ if(add) {
+ svgcontent.setAttribute('xmlns:se', se_ns);
+ }
+ return se_ns;
+}
+
+// Function: setResolution
+// Changes the document's dimensions to the given size
+//
+// Parameters:
+// x - Number with the width of the new dimensions in user units.
+// Can also be the string "fit" to indicate "fit to content"
+// y - Number with the height of the new dimensions in user units.
+//
+// Returns:
+// Boolean to indicate if resolution change was succesful.
+// It will fail on "fit to content" option with no content to fit to.
+this.setResolution = function(x, y) {
+ var res = getResolution();
+ var w = res.w, h = res.h;
+ var batchCmd;
+
+ if(x == 'fit') {
+ // Get bounding box
+ var bbox = getStrokedBBox();
+
+ if(bbox) {
+ batchCmd = new BatchCommand("Fit Canvas to Content");
+ var visEls = getVisibleElements();
+ addToSelection(visEls);
+ var dx = [], dy = [];
+ $.each(visEls, function(i, item) {
+ dx.push(bbox.x*-1);
+ dy.push(bbox.y*-1);
+ });
+
+ var cmd = canvas.moveSelectedElements(dx, dy, true);
+ batchCmd.addSubCommand(cmd);
+ clearSelection();
+
+ x = Math.round(bbox.width);
+ y = Math.round(bbox.height);
+ } else {
+ return false;
+ }
+ }
+ if (x != w || y != h) {
+ var handle = svgroot.suspendRedraw(1000);
+ if(!batchCmd) {
+ batchCmd = new BatchCommand("Change Image Dimensions");
+ }
+
+ x = convertToNum('width', x);
+ y = convertToNum('height', y);
+
+ svgcontent.setAttribute('width', x);
+ svgcontent.setAttribute('height', y);
+
+ this.contentW = x;
+ this.contentH = y;
+ batchCmd.addSubCommand(new ChangeElementCommand(svgcontent, {"width":w, "height":h}));
+
+ svgcontent.setAttribute("viewBox", [0, 0, x/current_zoom, y/current_zoom].join(' '));
+ batchCmd.addSubCommand(new ChangeElementCommand(svgcontent, {"viewBox": ["0 0", w, h].join(' ')}));
+
+ addCommandToHistory(batchCmd);
+ svgroot.unsuspendRedraw(handle);
+ call("changed", [svgcontent]);
+ }
+ return true;
+};
+
+// Function: getOffset
+// Returns an object with x, y values indicating the svgcontent element's
+// position in the editor's canvas.
+this.getOffset = function() {
+ return $(svgcontent).attr(['x', 'y']);
+}
+
+// Function: setBBoxZoom
+// Sets the zoom level on the canvas-side based on the given value
+//
+// Parameters:
+// val - Bounding box object to zoom to or string indicating zoom option
+// editor_w - Integer with the editor's workarea box's width
+// editor_h - Integer with the editor's workarea box's height
+this.setBBoxZoom = function(val, editor_w, editor_h) {
+ var spacer = .85;
+ var bb;
+ var calcZoom = function(bb) {
+ if(!bb) return false;
+ var w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
+ var h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
+ var zoomlevel = Math.min(w_zoom,h_zoom);
+ canvas.setZoom(zoomlevel);
+ return {'zoom': zoomlevel, 'bbox': bb};
+ }
+
+ if(typeof val == 'object') {
+ bb = val;
+ if(bb.width == 0 || bb.height == 0) {
+ var newzoom = bb.zoom?bb.zoom:current_zoom * bb.factor;
+ canvas.setZoom(newzoom);
+ return {'zoom': current_zoom, 'bbox': bb};
+ }
+ return calcZoom(bb);
+ }
+
+ switch (val) {
+ case 'selection':
+ if(!selectedElements[0]) return;
+ var sel_elems = $.map(selectedElements, function(n){ if(n) return n; });
+ bb = getStrokedBBox(sel_elems);
+ break;
+ case 'canvas':
+ var res = getResolution();
+ spacer = .95;
+ bb = {width:res.w, height:res.h ,x:0, y:0};
+ break;
+ case 'content':
+ bb = getStrokedBBox();
+ break;
+ case 'layer':
+ bb = getStrokedBBox(getVisibleElements(getCurrentDrawing().getCurrentLayer()));
+ break;
+ default:
+ return;
+ }
+ return calcZoom(bb);
+}
+
+// Function: setZoom
+// Sets the zoom to the given level
+//
+// Parameters:
+// zoomlevel - Float indicating the zoom level to change to
+this.setZoom = function(zoomlevel) {
+ var res = getResolution();
+ svgcontent.setAttribute("viewBox", "0 0 " + res.w/zoomlevel + " " + res.h/zoomlevel);
+ current_zoom = zoomlevel;
+ $.each(selectedElements, function(i, elem) {
+ if(!elem) return;
+ selectorManager.requestSelector(elem).resize();
+ });
+ pathActions.zoomChange();
+ runExtensions("zoomChanged", zoomlevel);
+}
+
+// Function: getMode
+// Returns the current editor mode string
+this.getMode = function() {
+ return current_mode;
+};
+
+// Function: setMode
+// Sets the editor's mode to the given string
+//
+// Parameters:
+// name - String with the new mode to change to
+this.setMode = function(name) {
+ pathActions.clear(true);
+ textActions.clear();
+ cur_properties = (selectedElements[0] && selectedElements[0].nodeName == 'text') ? cur_text : cur_shape;
+ current_mode = name;
+};
+
+// Group: Element Styling
+
+// Function: getColor
+// Returns the current fill/stroke option
+this.getColor = function(type) {
+ return cur_properties[type];
+};
+
+// Function: setColor
+// Change the current stroke/fill color/gradient value
+//
+// Parameters:
+// type - String indicating fill or stroke
+// val - The value to set the stroke attribute to
+// preventUndo - Boolean indicating whether or not this should be and undoable option
+this.setColor = function(type, val, preventUndo) {
+ cur_shape[type] = val;
+ cur_properties[type + '_paint'] = {type:"solidColor"};
+ var elems = [];
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem) {
+ if (elem.tagName == "g")
+ svgedit.utilities.walkTree(elem, function(e){if(e.nodeName!="g") elems.push(e);});
+ else {
+ if(type == 'fill') {
+ if(elem.tagName != "polyline" && elem.tagName != "line") {
+ elems.push(elem);
+ }
+ } else {
+ elems.push(elem);
+ }
+ }
+ }
+ }
+ if (elems.length > 0) {
+ if (!preventUndo) {
+ changeSelectedAttribute(type, val, elems);
+ call("changed", elems);
+ } else
+ changeSelectedAttributeNoUndo(type, val, elems);
+ }
+}
+
+
+// Function: findDefs
+// Return the document's <defs> element, create it first if necessary
+var findDefs = function() {
+ var defs = svgcontent.getElementsByTagNameNS(svgns, "defs");
+ if (defs.length > 0) {
+ defs = defs[0];
+ }
+ else {
+ defs = svgdoc.createElementNS(svgns, "defs" );
+ if(svgcontent.firstChild) {
+ // first child is a comment, so call nextSibling
+ svgcontent.insertBefore( defs, svgcontent.firstChild.nextSibling);
+ } else {
+ svgcontent.appendChild(defs);
+ }
+ }
+ return defs;
+};
+
+// Function: setGradient
+// Apply the current gradient to selected element's fill or stroke
+//
+// Parameters
+// type - String indicating "fill" or "stroke" to apply to an element
+var setGradient = this.setGradient = function(type) {
+ if(!cur_properties[type + '_paint'] || cur_properties[type + '_paint'].type == "solidColor") return;
+ var grad = canvas[type + 'Grad'];
+ // find out if there is a duplicate gradient already in the defs
+ var duplicate_grad = findDuplicateGradient(grad);
+ 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) );
+ // get next id and set it on the grad
+ grad.id = getNextId();
+ }
+ else { // use existing gradient
+ grad = duplicate_grad;
+ }
+ canvas.setColor(type, "url(#" + grad.id + ")");
+}
+
+// Function: findDuplicateGradient
+// Check if exact gradient already exists
+//
+// Parameters:
+// grad - The gradient DOM element to compare to others
+//
+// Returns:
+// The existing gradient if found, null if not
+var findDuplicateGradient = function(grad) {
+ var defs = findDefs();
+ var existing_grads = $(defs).find("linearGradient, radialGradient");
+ var i = existing_grads.length;
+ var rad_attrs = ['r','cx','cy','fx','fy'];
+ while (i--) {
+ var og = existing_grads[i];
+ if(grad.tagName == "linearGradient") {
+ if (grad.getAttribute('x1') != og.getAttribute('x1') ||
+ grad.getAttribute('y1') != og.getAttribute('y1') ||
+ grad.getAttribute('x2') != og.getAttribute('x2') ||
+ grad.getAttribute('y2') != og.getAttribute('y2'))
+ {
+ continue;
+ }
+ } else {
+ var grad_attrs = $(grad).attr(rad_attrs);
+ var og_attrs = $(og).attr(rad_attrs);
+
+ var diff = false;
+ $.each(rad_attrs, function(i, attr) {
+ if(grad_attrs[attr] != og_attrs[attr]) diff = true;
+ });
+
+ if(diff) continue;
+ }
+
+ // else could be a duplicate, iterate through stops
+ var stops = grad.getElementsByTagNameNS(svgns, "stop");
+ var ostops = og.getElementsByTagNameNS(svgns, "stop");
+
+ if (stops.length != ostops.length) {
+ continue;
+ }
+
+ var j = stops.length;
+ while(j--) {
+ var stop = stops[j];
+ var ostop = ostops[j];
+
+ if (stop.getAttribute('offset') != ostop.getAttribute('offset') ||
+ stop.getAttribute('stop-opacity') != ostop.getAttribute('stop-opacity') ||
+ stop.getAttribute('stop-color') != ostop.getAttribute('stop-color'))
+ {
+ break;
+ }
+ }
+
+ if (j == -1) {
+ return og;
+ }
+ } // for each gradient in defs
+
+ return null;
+};
+
+function reorientGrads(elem, m) {
+ var bb = svgedit.utilities.getBBox(elem);
+ for(var i = 0; i < 2; i++) {
+ var type = i === 0 ? 'fill' : 'stroke';
+ var attrVal = elem.getAttribute(type);
+ if(attrVal && attrVal.indexOf('url(') === 0) {
+ var grad = getRefElem(attrVal);
+ if(grad.tagName === 'linearGradient') {
+ var x1 = grad.getAttribute('x1') || 0;
+ var y1 = grad.getAttribute('y1') || 0;
+ var x2 = grad.getAttribute('x2') || 1;
+ var y2 = grad.getAttribute('y2') || 0;
+
+ // Convert to USOU points
+ x1 = (bb.width * x1) + bb.x;
+ y1 = (bb.height * y1) + bb.y;
+ x2 = (bb.width * x2) + bb.x;
+ y2 = (bb.height * y2) + bb.y;
+
+ // Transform those points
+ var pt1 = transformPoint(x1, y1, m);
+ var pt2 = transformPoint(x2, y2, m);
+
+ // Convert back to BB points
+ var g_coords = {};
+
+ g_coords.x1 = (pt1.x - bb.x) / bb.width;
+ g_coords.y1 = (pt1.y - bb.y) / bb.height;
+ g_coords.x2 = (pt2.x - bb.x) / bb.width;
+ g_coords.y2 = (pt2.y - bb.y) / bb.height;
+
+ var newgrad = grad.cloneNode(true);
+ $(newgrad).attr(g_coords);
+
+ newgrad.id = getNextId();
+ findDefs().appendChild(newgrad);
+ elem.setAttribute(type, 'url(#' + newgrad.id + ')');
+ }
+ }
+ }
+}
+
+// Function: setPaint
+// Set a color/gradient to a fill/stroke
+//
+// Parameters:
+// type - String with "fill" or "stroke"
+// paint - The jGraduate paint object to apply
+this.setPaint = function(type, paint) {
+ // make a copy
+ var p = new $.jGraduate.Paint(paint);
+ this.setPaintOpacity(type, p.alpha/100, true);
+
+ // now set the current paint object
+ cur_properties[type + '_paint'] = p;
+ switch ( p.type ) {
+ case "solidColor":
+ this.setColor(type, p.solidColor != "none" ? "#"+p.solidColor : "none");;
+ break;
+ case "linearGradient":
+ case "radialGradient":
+ canvas[type + 'Grad'] = p[p.type];
+ setGradient(type);
+ break;
+ default:
+// console.log("none!");
+ }
+};
+
+
+// this.setStrokePaint = function(p) {
+// // make a copy
+// var p = new $.jGraduate.Paint(p);
+// this.setStrokeOpacity(p.alpha/100);
+//
+// // now set the current paint object
+// cur_properties.stroke_paint = p;
+// switch ( p.type ) {
+// case "solidColor":
+// this.setColor('stroke', p.solidColor != "none" ? "#"+p.solidColor : "none");;
+// break;
+// case "linearGradient"
+// case "radialGradient"
+// canvas.strokeGrad = p[p.type];
+// setGradient(type);
+// default:
+// // console.log("none!");
+// }
+// };
+//
+// this.setFillPaint = function(p, addGrad) {
+// // make a copy
+// var p = new $.jGraduate.Paint(p);
+// this.setFillOpacity(p.alpha/100, true);
+//
+// // now set the current paint object
+// cur_properties.fill_paint = p;
+// if (p.type == "solidColor") {
+// this.setColor('fill', p.solidColor != "none" ? "#"+p.solidColor : "none");
+// }
+// else if(p.type == "linearGradient") {
+// canvas.fillGrad = p.linearGradient;
+// if(addGrad) setGradient();
+// }
+// else if(p.type == "radialGradient") {
+// canvas.fillGrad = p.radialGradient;
+// if(addGrad) setGradient();
+// }
+// else {
+// // console.log("none!");
+// }
+// };
+
+// Function: getStrokeWidth
+// Returns the current stroke-width value
+this.getStrokeWidth = function() {
+ return cur_properties.stroke_width;
+};
+
+// Function: setStrokeWidth
+// Sets the stroke width for the current selected elements
+// When attempting to set a line's width to 0, this changes it to 1 instead
+//
+// Parameters:
+// val - A Float indicating the new stroke width value
+this.setStrokeWidth = function(val) {
+ if(val == 0 && ['line', 'path'].indexOf(current_mode) >= 0) {
+ canvas.setStrokeWidth(1);
+ return;
+ }
+ cur_properties.stroke_width = val;
+
+ var elems = [];
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem) {
+ if (elem.tagName == "g")
+ svgedit.utilities.walkTree(elem, function(e){if(e.nodeName!="g") elems.push(e);});
+ else
+ elems.push(elem);
+ }
+ }
+ if (elems.length > 0) {
+ changeSelectedAttribute("stroke-width", val, elems);
+ call("changed", selectedElements);
+ }
+};
+
+// Function: setStrokeAttr
+// Set the given stroke-related attribute the given value for selected elements
+//
+// Parameters:
+// attr - String with the attribute name
+// val - String or number with the attribute value
+this.setStrokeAttr = function(attr, val) {
+ cur_shape[attr.replace('-','_')] = val;
+ var elems = [];
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem) {
+ if (elem.tagName == "g")
+ svgedit.utilities.walkTree(elem, function(e){if(e.nodeName!="g") elems.push(e);});
+ else
+ elems.push(elem);
+ }
+ }
+ if (elems.length > 0) {
+ changeSelectedAttribute(attr, val, elems);
+ call("changed", selectedElements);
+ }
+};
+
+// Function: getStyle
+// Returns current style options
+this.getStyle = function() {
+ return cur_shape;
+}
+
+// Function: getOpacity
+// Returns the current opacity
+this.getOpacity = function() {
+ return cur_shape.opacity;
+};
+
+// Function: setOpacity
+// Sets the given opacity to the current selected elements
+this.setOpacity = function(val) {
+ cur_shape.opacity = val;
+ changeSelectedAttribute("opacity", val);
+};
+
+// Function: getOpacity
+// Returns the current fill opacity
+this.getFillOpacity = function() {
+ return cur_shape.fill_opacity;
+};
+
+// Function: getStrokeOpacity
+// Returns the current stroke opacity
+this.getStrokeOpacity = function() {
+ return cur_shape.stroke_opacity;
+};
+
+// Function: setPaintOpacity
+// Sets the current fill/stroke opacity
+//
+// Parameters:
+// type - String with "fill" or "stroke"
+// val - Float with the new opacity value
+// preventUndo - Boolean indicating whether or not this should be an undoable action
+this.setPaintOpacity = function(type, val, preventUndo) {
+ cur_shape[type + '_opacity'] = val;
+ if (!preventUndo)
+ changeSelectedAttribute(type + "-opacity", val);
+ else
+ changeSelectedAttributeNoUndo(type + "-opacity", val);
+};
+
+// Function: getBlur
+// Gets the stdDeviation blur value of the given element
+//
+// Parameters:
+// elem - The element to check the blur value for
+this.getBlur = function(elem) {
+ var val = 0;
+// var elem = selectedElements[0];
+
+ if(elem) {
+ var filter_url = elem.getAttribute('filter');
+ if(filter_url) {
+ var blur = getElem(elem.id + '_blur');
+ if(blur) {
+ val = blur.firstChild.getAttribute('stdDeviation');
+ }
+ }
+ }
+ return val;
+};
+
+(function() {
+ var cur_command = null;
+ var filter = null;
+ var filterHidden = false;
+
+ // Function: setBlurNoUndo
+ // Sets the stdDeviation blur value on the selected element without being undoable
+ //
+ // Parameters:
+ // val - The new stdDeviation value
+ canvas.setBlurNoUndo = function(val) {
+ if(!filter) {
+ canvas.setBlur(val);
+ return;
+ }
+ if(val === 0) {
+ // Don't change the StdDev, as that will hide the element.
+ // Instead, just remove the value for "filter"
+ changeSelectedAttributeNoUndo("filter", "");
+ filterHidden = true;
+ } else {
+ var elem = selectedElements[0];
+ if(filterHidden) {
+ changeSelectedAttributeNoUndo("filter", 'url(#' + elem.id + '_blur)');
+ }
+ if(svgedit.browser.isWebkit()) {
+ console.log('e', elem);
+ elem.removeAttribute('filter');
+ elem.setAttribute('filter', 'url(#' + elem.id + '_blur)');
+ }
+ changeSelectedAttributeNoUndo("stdDeviation", val, [filter.firstChild]);
+ canvas.setBlurOffsets(filter, val);
+ }
+ }
+
+ function finishChange() {
+ var bCmd = canvas.undoMgr.finishUndoableChange();
+ cur_command.addSubCommand(bCmd);
+ addCommandToHistory(cur_command);
+ cur_command = null;
+ filter = null;
+ }
+
+ // Function: setBlurOffsets
+ // Sets the x, y, with, height values of the filter element in order to
+ // make the blur not be clipped. Removes them if not neeeded
+ //
+ // Parameters:
+ // filter - The filter DOM element to update
+ // stdDev - The standard deviation value on which to base the offset size
+ canvas.setBlurOffsets = function(filter, stdDev) {
+ if(stdDev > 3) {
+ // TODO: Create algorithm here where size is based on expected blur
+ assignAttributes(filter, {
+ x: '-50%',
+ y: '-50%',
+ width: '200%',
+ height: '200%'
+ }, 100);
+ } else {
+ // Removing these attributes hides text in Chrome (see Issue 579)
+ if(!svgedit.browser.isWebkit()) {
+ filter.removeAttribute('x');
+ filter.removeAttribute('y');
+ filter.removeAttribute('width');
+ filter.removeAttribute('height');
+ }
+ }
+ }
+
+ // Function: setBlur
+ // Adds/updates the blur filter to the selected element
+ //
+ // Parameters:
+ // val - Float with the new stdDeviation blur value
+ // complete - Boolean indicating whether or not the action should be completed (to add to the undo manager)
+ canvas.setBlur = function(val, complete) {
+ if(cur_command) {
+ finishChange();
+ return;
+ }
+
+ // Looks for associated blur, creates one if not found
+ var elem = selectedElements[0];
+ var elem_id = elem.id;
+ filter = getElem(elem_id + '_blur');
+
+ val -= 0;
+
+ var batchCmd = new BatchCommand();
+
+ // Blur found!
+ if(filter) {
+ if(val === 0) {
+ filter = null;
+ }
+ } else {
+ // Not found, so create
+ var newblur = addSvgElementFromJson({ "element": "feGaussianBlur",
+ "attr": {
+ "in": 'SourceGraphic',
+ "stdDeviation": val
+ }
+ });
+
+ filter = addSvgElementFromJson({ "element": "filter",
+ "attr": {
+ "id": elem_id + '_blur'
+ }
+ });
+
+ filter.appendChild(newblur);
+ findDefs().appendChild(filter);
+
+ batchCmd.addSubCommand(new InsertElementCommand(filter));
+ }
+
+ var changes = {filter: elem.getAttribute('filter')};
+
+ if(val === 0) {
+ elem.removeAttribute("filter");
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+ return;
+ } else {
+ changeSelectedAttribute("filter", 'url(#' + elem_id + '_blur)');
+
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+
+ canvas.setBlurOffsets(filter, val);
+ }
+
+ cur_command = batchCmd;
+ canvas.undoMgr.beginUndoableChange("stdDeviation", [filter?filter.firstChild:null]);
+ if(complete) {
+ canvas.setBlurNoUndo(val);
+ finishChange();
+ }
+ };
+}());
+
+// Function: getBold
+// Check whether selected element is bold or not
+//
+// Returns:
+// Boolean indicating whether or not element is bold
+this.getBold = function() {
+ // should only have one element selected
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ return (selected.getAttribute("font-weight") == "bold");
+ }
+ return false;
+};
+
+// Function: setBold
+// Make the selected element bold or normal
+//
+// Parameters:
+// b - Boolean indicating bold (true) or normal (false)
+this.setBold = function(b) {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ changeSelectedAttribute("font-weight", b ? "bold" : "normal");
+ }
+ if(!selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+// Function: getItalic
+// Check whether selected element is italic or not
+//
+// Returns:
+// Boolean indicating whether or not element is italic
+this.getItalic = function() {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ return (selected.getAttribute("font-style") == "italic");
+ }
+ return false;
+};
+
+// Function: setItalic
+// Make the selected element italic or normal
+//
+// Parameters:
+// b - Boolean indicating italic (true) or normal (false)
+this.setItalic = function(i) {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "text" &&
+ selectedElements[1] == null)
+ {
+ changeSelectedAttribute("font-style", i ? "italic" : "normal");
+ }
+ if(!selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+// Function: getFontFamily
+// Returns the current font family
+this.getFontFamily = function() {
+ return cur_text.font_family;
+};
+
+// Function: setFontFamily
+// Set the new font family
+//
+// Parameters:
+// val - String with the new font family
+this.setFontFamily = function(val) {
+ cur_text.font_family = val;
+ changeSelectedAttribute("font-family", val);
+ if(selectedElements[0] && !selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+
+// Function: setFontColor
+// Set the new font color
+//
+// Parameters:
+// val - String with the new font color
+this.setFontColor = function(val) {
+ cur_text.fill = val;
+ changeSelectedAttribute("fill", val);
+};
+
+// Function: getFontColor
+// Returns the current font color
+this.getFontSize = function() {
+ return cur_text.fill;
+};
+
+// Function: getFontSize
+// Returns the current font size
+this.getFontSize = function() {
+ return cur_text.font_size;
+};
+
+// Function: setFontSize
+// Applies the given font size to the selected element
+//
+// Parameters:
+// val - Float with the new font size
+this.setFontSize = function(val) {
+ cur_text.font_size = val;
+ changeSelectedAttribute("font-size", val);
+ if(!selectedElements[0].textContent) {
+ textActions.setCursor();
+ }
+};
+
+// Function: getText
+// Returns the current text (textContent) of the selected element
+this.getText = function() {
+ var selected = selectedElements[0];
+ if (selected == null) { return ""; }
+ return selected.textContent;
+};
+
+// Function: setTextContent
+// Updates the text element with the given string
+//
+// Parameters:
+// val - String with the new text
+this.setTextContent = function(val) {
+ changeSelectedAttribute("#text", val);
+ textActions.init(val);
+ textActions.setCursor();
+};
+
+// Function: setImageURL
+// Sets the new image URL for the selected image element. Updates its size if
+// a new URL is given
+//
+// Parameters:
+// val - String with the image URL/path
+this.setImageURL = function(val) {
+ var elem = selectedElements[0];
+ if(!elem) return;
+
+ var attrs = $(elem).attr(['width', 'height']);
+ var setsize = (!attrs.width || !attrs.height);
+
+ var cur_href = getHref(elem);
+
+ // Do nothing if no URL change or size change
+ if(cur_href !== val) {
+ setsize = true;
+ } else if(!setsize) return;
+
+ var batchCmd = new BatchCommand("Change Image URL");
+
+ setHref(elem, val);
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, {
+ "#href": cur_href
+ }));
+
+ if(setsize) {
+ $(new Image()).load(function() {
+ var changes = $(elem).attr(['width', 'height']);
+
+ $(elem).attr({
+ width: this.width,
+ height: this.height
+ });
+
+ selectorManager.requestSelector(elem).resize();
+
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, changes));
+ addCommandToHistory(batchCmd);
+ call("changed", [elem]);
+ }).attr('src',val);
+ } else {
+ addCommandToHistory(batchCmd);
+ }
+};
+
+// Function: setLinkURL
+// Sets the new link URL for the selected anchor element.
+//
+// Parameters:
+// val - String with the link URL/path
+this.setLinkURL = function(val) {
+ var elem = selectedElements[0];
+ if(!elem) return;
+ if(elem.tagName !== 'a') {
+ // See if parent is an anchor
+ var parents_a = $(elem).parents('a');
+ if(parents_a.length) {
+ elem = parents_a[0];
+ } else {
+ return;
+ }
+ }
+
+ var cur_href = getHref(elem);
+
+ if(cur_href === val) return;
+
+ var batchCmd = new BatchCommand("Change Link URL");
+
+ setHref(elem, val);
+ batchCmd.addSubCommand(new ChangeElementCommand(elem, {
+ "#href": cur_href
+ }));
+
+ addCommandToHistory(batchCmd);
+};
+
+
+// Function: setRectRadius
+// Sets the rx & ry values to the selected rect element to change its corner radius
+//
+// Parameters:
+// val - The new radius
+this.setRectRadius = function(val) {
+ var selected = selectedElements[0];
+ if (selected != null && selected.tagName == "rect") {
+ var r = selected.getAttribute("rx");
+ if (r != val) {
+ selected.setAttribute("rx", val);
+ selected.setAttribute("ry", val);
+ addCommandToHistory(new ChangeElementCommand(selected, {"rx":r, "ry":r}, "Radius"));
+ call("changed", [selected]);
+ }
+ }
+};
+
+// Function: makeHyperlink
+// Wraps the selected element(s) in an anchor element or converts group to one
+this.makeHyperlink = function(url) {
+ canvas.groupSelectedElements('a', url);
+
+ // TODO: If element is a single "g", convert to "a"
+ // if(selectedElements.length > 1 && selectedElements[1]) {
+
+}
+
+// Function: removeHyperlink
+this.removeHyperlink = function() {
+ canvas.ungroupSelectedElement();
+}
+
+// Group: Element manipulation
+
+// Function: setSegType
+// Sets the new segment type to the selected segment(s).
+//
+// Parameters:
+// new_type - Integer with the new segment type
+// See http://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathSeg for list
+this.setSegType = function(new_type) {
+ pathActions.setSegType(new_type);
+}
+
+// TODO(codedread): Remove the getBBox argument and split this function into two.
+// Function: convertToPath
+// Convert selected element to a path, or get the BBox of an element-as-path
+//
+// Parameters:
+// elem - The DOM element to be converted
+// getBBox - Boolean on whether or not to only return the path's BBox
+//
+// Returns:
+// If the getBBox flag is true, the resulting path's bounding box object.
+// Otherwise the resulting path element is returned.
+this.convertToPath = function(elem, getBBox) {
+ if(elem == null) {
+ var elems = selectedElements;
+ $.each(selectedElements, function(i, elem) {
+ if(elem) canvas.convertToPath(elem);
+ });
+ return;
+ }
+
+ if(!getBBox) {
+ var batchCmd = new BatchCommand("Convert element to Path");
+ }
+
+ var attrs = getBBox?{}:{
+ "fill": cur_shape.fill,
+ "fill-opacity": cur_shape.fill_opacity,
+ "stroke": cur_shape.stroke,
+ "stroke-width": cur_shape.stroke_width,
+ "stroke-dasharray": cur_shape.stroke_dasharray,
+ "stroke-linejoin": cur_shape.stroke_linejoin,
+ "stroke-linecap": cur_shape.stroke_linecap,
+ "stroke-opacity": cur_shape.stroke_opacity,
+ "opacity": cur_shape.opacity,
+ "visibility":"hidden"
+ };
+
+ // any attribute on the element not covered by the above
+ // TODO: make this list global so that we can properly maintain it
+ // TODO: what about @transform, @clip-rule, @fill-rule, etc?
+ $.each(['marker-start', 'marker-end', 'marker-mid', 'filter', 'clip-path'], function() {
+ if (elem.getAttribute(this)) {
+ attrs[this] = elem.getAttribute(this);
+ }
+ });
+
+ var path = addSvgElementFromJson({
+ "element": "path",
+ "attr": attrs
+ });
+
+ var eltrans = elem.getAttribute("transform");
+ if(eltrans) {
+ path.setAttribute("transform",eltrans);
+ }
+
+ var id = elem.id;
+ var parent = elem.parentNode;
+ if(elem.nextSibling) {
+ parent.insertBefore(path, elem);
+ } else {
+ parent.appendChild(path);
+ }
+
+ var d = '';
+
+ var joinSegs = function(segs) {
+ $.each(segs, function(j, seg) {
+ var l = seg[0], pts = seg[1];
+ d += l;
+ for(var i=0; i < pts.length; i+=2) {
+ d += (pts[i] +','+pts[i+1]) + ' ';
+ }
+ });
+ }
+
+ // Possibly the cubed root of 6, but 1.81 works best
+ var num = 1.81;
+
+ switch (elem.tagName) {
+ case 'ellipse':
+ case 'circle':
+ var a = $(elem).attr(['rx', 'ry', 'cx', 'cy']);
+ var cx = a.cx, cy = a.cy, rx = a.rx, ry = a.ry;
+ if(elem.tagName == 'circle') {
+ rx = ry = $(elem).attr('r');
+ }
+
+ joinSegs([
+ ['M',[(cx-rx),(cy)]],
+ ['C',[(cx-rx),(cy-ry/num), (cx-rx/num),(cy-ry), (cx),(cy-ry)]],
+ ['C',[(cx+rx/num),(cy-ry), (cx+rx),(cy-ry/num), (cx+rx),(cy)]],
+ ['C',[(cx+rx),(cy+ry/num), (cx+rx/num),(cy+ry), (cx),(cy+ry)]],
+ ['C',[(cx-rx/num),(cy+ry), (cx-rx),(cy+ry/num), (cx-rx),(cy)]],
+ ['Z',[]]
+ ]);
+ break;
+ case 'path':
+ d = elem.getAttribute('d');
+ break;
+ case 'line':
+ var a = $(elem).attr(["x1", "y1", "x2", "y2"]);
+ d = "M"+a.x1+","+a.y1+"L"+a.x2+","+a.y2;
+ break;
+ case 'polyline':
+ case 'polygon':
+ d = "M" + elem.getAttribute('points');
+ break;
+ case 'rect':
+ var r = $(elem).attr(['rx', 'ry']);
+ var rx = r.rx, ry = r.ry;
+ var b = elem.getBBox();
+ var x = b.x, y = b.y, w = b.width, h = b.height;
+ var num = 4-num; // Why? Because!
+
+ if(!rx && !ry) {
+ // Regular rect
+ joinSegs([
+ ['M',[x, y]],
+ ['L',[x+w, y]],
+ ['L',[x+w, y+h]],
+ ['L',[x, y+h]],
+ ['L',[x, y]],
+ ['Z',[]]
+ ]);
+ } else {
+ joinSegs([
+ ['M',[x, y+ry]],
+ ['C',[x,y+ry/num, x+rx/num,y, x+rx,y]],
+ ['L',[x+w-rx, y]],
+ ['C',[x+w-rx/num,y, x+w,y+ry/num, x+w,y+ry]],
+ ['L',[x+w, y+h-ry]],
+ ['C',[x+w, y+h-ry/num, x+w-rx/num,y+h, x+w-rx,y+h]],
+ ['L',[x+rx, y+h]],
+ ['C',[x+rx/num, y+h, x,y+h-ry/num, x,y+h-ry]],
+ ['L',[x, y+ry]],
+ ['Z',[]]
+ ]);
+ }
+ break;
+ default:
+ path.parentNode.removeChild(path);
+ break;
+ }
+
+ if(d) {
+ path.setAttribute('d',d);
+ }
+
+ if(!getBBox) {
+ // Replace the current element with the converted one
+
+ // Reorient if it has a matrix
+ if(eltrans) {
+ var tlist = getTransformList(path);
+ if(hasMatrixTransform(tlist)) {
+ pathActions.resetOrientation(path);
+ }
+ }
+
+ var nextSibling = elem.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ batchCmd.addSubCommand(new InsertElementCommand(path));
+
+ clearSelection();
+ elem.parentNode.removeChild(elem)
+ path.setAttribute('id', id);
+ path.removeAttribute("visibility");
+ addToSelection([path], true);
+
+ addCommandToHistory(batchCmd);
+
+ } else {
+ // Get the correct BBox of the new path, then discard it
+ pathActions.resetOrientation(path);
+ var bb = false;
+ try {
+ bb = path.getBBox();
+ } catch(e) {
+ // Firefox fails
+ }
+ path.parentNode.removeChild(path);
+ return bb;
+ }
+};
+
+
+// Function: changeSelectedAttributeNoUndo
+// This function makes the changes to the elements. It does not add the change
+// to the history stack.
+//
+// Parameters:
+// attr - String with the attribute name
+// newValue - String or number with the new attribute value
+// elems - The DOM elements to apply the change to
+var changeSelectedAttributeNoUndo = function(attr, newValue, elems) {
+ var handle = svgroot.suspendRedraw(1000);
+ if(current_mode == 'pathedit') {
+ // Editing node
+ pathActions.moveNode(attr, newValue);
+ }
+ var elems = elems || selectedElements;
+ var i = elems.length;
+ var no_xy_elems = ['g', 'polyline', 'path'];
+ var good_g_attrs = ['transform', 'opacity', 'filter'];
+
+ while (i--) {
+ var elem = elems[i];
+ if (elem == null) continue;
+
+ // Go into "select" mode for text changes
+ if(current_mode === "textedit" && attr !== "#text" && elem.textContent.length) {
+ textActions.toSelectMode(elem);
+ }
+
+ // Set x,y vals on elements that don't have them
+ if((attr === 'x' || attr === 'y') && no_xy_elems.indexOf(elem.tagName) >= 0) {
+ var bbox = getStrokedBBox([elem]);
+ var diff_x = attr === 'x' ? newValue - bbox.x : 0;
+ var diff_y = attr === 'y' ? newValue - bbox.y : 0;
+ canvas.moveSelectedElements(diff_x*current_zoom, diff_y*current_zoom, true);
+ continue;
+ }
+
+ // only allow the transform/opacity/filter attribute to change on <g> elements, slightly hacky
+ // TODO: FIXME: This doesn't seem right. Where's the body of this if statement?
+ if (elem.tagName === "g" && good_g_attrs.indexOf(attr) >= 0);
+ var oldval = attr === "#text" ? elem.textContent : elem.getAttribute(attr);
+ if (oldval == null) oldval = "";
+ if (oldval !== String(newValue)) {
+ if (attr == "#text") {
+ var old_w = svgedit.utilities.getBBox(elem).width;
+ elem.textContent = newValue;
+
+ // FF bug occurs on on rotated elements
+ if(/rotate/.test(elem.getAttribute('transform'))) {
+ elem = ffClone(elem);
+ }
+
+ // Hoped to solve the issue of moving text with text-anchor="start",
+ // but this doesn't actually fix it. Hopefully on the right track, though. -Fyrd
+
+// var box=getBBox(elem), left=box.x, top=box.y, width=box.width,
+// height=box.height, dx = width - old_w, dy=0;
+// var angle = getRotationAngle(elem, true);
+// if (angle) {
+// var r = Math.sqrt( dx*dx + dy*dy );
+// var theta = Math.atan2(dy,dx) - angle;
+// dx = r * Math.cos(theta);
+// dy = r * Math.sin(theta);
+//
+// elem.setAttribute('x', elem.getAttribute('x')-dx);
+// elem.setAttribute('y', elem.getAttribute('y')-dy);
+// }
+
+ } else if (attr == "#href") {
+ setHref(elem, newValue);
+ }
+ else elem.setAttribute(attr, newValue);
+// if (i==0)
+// selectedBBoxes[0] = svgedit.utilities.getBBox(elem);
+ // Use the Firefox ffClone hack for text elements with gradients or
+ // where other text attributes are changed.
+ if(svgedit.browser.isGecko() && elem.nodeName === 'text' && /rotate/.test(elem.getAttribute('transform'))) {
+ if((newValue+'').indexOf('url') === 0 || ['font-size','font-family','x','y'].indexOf(attr) >= 0 && elem.textContent) {
+ elem = ffClone(elem);
+ }
+ }
+ // Timeout needed for Opera & Firefox
+ // codedread: it is now possible for this function to be called with elements
+ // that are not in the selectedElements array, we need to only request a
+ // selector if the element is in that array
+ if (selectedElements.indexOf(elem) >= 0) {
+ setTimeout(function() {
+ // Due to element replacement, this element may no longer
+ // be part of the DOM
+ if(!elem.parentNode) return;
+ selectorManager.requestSelector(elem).resize();
+ },0);
+ }
+ // if this element was rotated, and we changed the position of this element
+ // we need to update the rotational transform attribute
+ var angle = getRotationAngle(elem);
+ if (angle != 0 && attr != "transform") {
+ var tlist = getTransformList(elem);
+ var n = tlist.numberOfItems;
+ while (n--) {
+ var xform = tlist.getItem(n);
+ if (xform.type == 4) {
+ // remove old rotate
+ tlist.removeItem(n);
+
+ var box = svgedit.utilities.getBBox(elem);
+ var center = transformPoint(box.x+box.width/2, box.y+box.height/2, transformListToTransform(tlist).matrix);
+ var cx = center.x,
+ cy = center.y;
+ var newrot = svgroot.createSVGTransform();
+ newrot.setRotate(angle, cx, cy);
+ tlist.insertItemBefore(newrot, n);
+ break;
+ }
+ }
+ }
+ } // if oldValue != newValue
+ } // for each elem
+ svgroot.unsuspendRedraw(handle);
+};
+
+// Function: changeSelectedAttribute
+// Change the given/selected element and add the original value to the history stack
+// If you want to change all selectedElements, ignore the elems argument.
+// If you want to change only a subset of selectedElements, then send the
+// subset to this function in the elems argument.
+//
+// Parameters:
+// attr - String with the attribute name
+// newValue - String or number with the new attribute value
+// elems - The DOM elements to apply the change to
+var changeSelectedAttribute = this.changeSelectedAttribute = function(attr, val, elems) {
+ var elems = elems || selectedElements;
+ canvas.undoMgr.beginUndoableChange(attr, elems);
+ var i = elems.length;
+
+ changeSelectedAttributeNoUndo(attr, val, elems);
+
+ var batchCmd = canvas.undoMgr.finishUndoableChange();
+ if (!batchCmd.isEmpty()) {
+ addCommandToHistory(batchCmd);
+ }
+};
+
+// Function: deleteSelectedElements
+// Removes all selected elements from the DOM and adds the change to the
+// history stack
+this.deleteSelectedElements = function() {
+ var batchCmd = new BatchCommand("Delete Elements");
+ var len = selectedElements.length;
+ var selectedCopy = []; //selectedElements is being deleted
+ for (var i = 0; i < len; ++i) {
+ var selected = selectedElements[i];
+ if (selected == null) break;
+
+ var parent = selected.parentNode;
+ var t = selected;
+
+ // this will unselect the element and remove the selectedOutline
+ selectorManager.releaseSelector(t);
+
+ // Remove the path if present.
+ svgedit.path.removePath_(t.id);
+
+ // Get the parent if it's a single-child anchor
+ if(parent.tagName === 'a' && parent.childNodes.length === 1) {
+ t = parent;
+ parent = parent.parentNode;
+ }
+
+ var nextSibling = t.nextSibling;
+ var elem = parent.removeChild(t);
+ selectedCopy.push(selected); //for the copy
+ selectedElements[i] = null;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ }
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+ call("changed", selectedCopy);
+ clearSelection();
+};
+
+// Function: cutSelectedElements
+// Removes all selected elements from the DOM and adds the change to the
+// history stack. Remembers removed elements on the clipboard
+
+// TODO: Combine similar code with deleteSelectedElements
+this.cutSelectedElements = function() {
+ var batchCmd = new BatchCommand("Cut Elements");
+ var len = selectedElements.length;
+ var selectedCopy = []; //selectedElements is being deleted
+ for (var i = 0; i < len; ++i) {
+ var selected = selectedElements[i];
+ if (selected == null) break;
+
+ var parent = selected.parentNode;
+ var t = selected;
+
+ // this will unselect the element and remove the selectedOutline
+ selectorManager.releaseSelector(t);
+
+ // Remove the path if present.
+ svgedit.path.removePath_(t.id);
+
+ var nextSibling = t.nextSibling;
+ var elem = parent.removeChild(t);
+ selectedCopy.push(selected); //for the copy
+ selectedElements[i] = null;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, parent));
+ }
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+ call("changed", selectedCopy);
+ clearSelection();
+
+ canvas.clipBoard = selectedCopy;
+};
+
+// Function: copySelectedElements
+// Remembers the current selected elements on the clipboard
+this.copySelectedElements = function() {
+ canvas.clipBoard = $.merge([], selectedElements);
+};
+
+this.pasteElements = function(type, x, y) {
+ var cb = canvas.clipBoard;
+ var len = cb.length;
+ if(!len) return;
+
+ var pasted = [];
+ var batchCmd = new BatchCommand('Paste elements');
+
+ // Move elements to lastClickPoint
+
+ while (len--) {
+ var elem = cb[len];
+ if(!elem) continue;
+ var copy = copyElem(elem);
+
+ // See if elem with elem ID is in the DOM already
+ if(!getElem(elem.id)) copy.id = elem.id;
+
+ pasted.push(copy);
+ (current_group || getCurrentDrawing().getCurrentLayer()).appendChild(copy);
+ batchCmd.addSubCommand(new InsertElementCommand(copy));
+ }
+
+ selectOnly(pasted);
+
+ if(type !== 'in_place') {
+
+ var ctr_x, ctr_y;
+
+ if(!type) {
+ ctr_x = lastClickPoint.x;
+ ctr_y = lastClickPoint.y;
+ } else if(type === 'point') {
+ ctr_x = x;
+ ctr_y = y;
+ }
+
+ var bbox = getStrokedBBox(pasted);
+ var cx = ctr_x - (bbox.x + bbox.width/2),
+ cy = ctr_y - (bbox.y + bbox.height/2),
+ dx = [],
+ dy = [];
+
+ $.each(pasted, function(i, item) {
+ dx.push(cx);
+ dy.push(cy);
+ });
+
+ var cmd = canvas.moveSelectedElements(dx, dy, false);
+ batchCmd.addSubCommand(cmd);
+ }
+
+
+
+ addCommandToHistory(batchCmd);
+ call("changed", pasted);
+}
+
+// Function: groupSelectedElements
+// Wraps all the selected elements in a group (g) element
+
+// Parameters:
+// type - type of element to group into, defaults to <g>
+this.groupSelectedElements = function(type) {
+ if(!type) type = 'g';
+ var cmd_str = '';
+
+ switch ( type ) {
+ case "a":
+ cmd_str = "Make hyperlink";
+ var url = '';
+ if(arguments.length > 1) {
+ url = arguments[1];
+ }
+ break;
+ default:
+ type = 'g';
+ cmd_str = "Group Elements";
+ break;
+ }
+
+ var batchCmd = new BatchCommand(cmd_str);
+
+ // create and insert the group element
+ var g = addSvgElementFromJson({
+ "element": type,
+ "attr": {
+ "id": getNextId()
+ }
+ });
+ if(type === 'a') {
+ setHref(g, url);
+ }
+ batchCmd.addSubCommand(new InsertElementCommand(g));
+
+ // now move all children into the group
+ var i = selectedElements.length;
+ while (i--) {
+ var elem = selectedElements[i];
+ if (elem == null) continue;
+
+ if (elem.parentNode.tagName === 'a' && elem.parentNode.childNodes.length === 1) {
+ elem = elem.parentNode;
+ }
+
+ var oldNextSibling = elem.nextSibling;
+ var oldParent = elem.parentNode;
+ g.appendChild(elem);
+ batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));
+ }
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+
+ // update selection
+ selectOnly([g], true);
+};
+
+
+// Function: pushGroupProperties
+// Pushes all appropriate parent group properties down to its children, then
+// removes them from the group
+var pushGroupProperties = this.pushGroupProperties = function(g, undoable) {
+
+ var children = g.childNodes;
+ var len = children.length;
+ var xform = g.getAttribute("transform");
+
+ var glist = getTransformList(g);
+ var m = transformListToTransform(glist).matrix;
+
+ var batchCmd = new BatchCommand("Push group properties");
+
+ // TODO: get all fill/stroke properties from the group that we are about to destroy
+ // "fill", "fill-opacity", "fill-rule", "stroke", "stroke-dasharray", "stroke-dashoffset",
+ // "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity",
+ // "stroke-width"
+ // and then for each child, if they do not have the attribute (or the value is 'inherit')
+ // then set the child's attribute
+
+ var i = 0;
+ var gangle = getRotationAngle(g);
+
+ var gattrs = $(g).attr(['filter', 'opacity']);
+ var gfilter, gblur;
+
+ for(var i = 0; i < len; i++) {
+ var elem = children[i];
+
+ if(elem.nodeType !== 1) continue;
+
+ if(gattrs.opacity !== null && gattrs.opacity !== 1) {
+ var c_opac = elem.getAttribute('opacity') || 1;
+ var new_opac = Math.round((elem.getAttribute('opacity') || 1) * gattrs.opacity * 100)/100;
+ changeSelectedAttribute('opacity', new_opac, [elem]);
+ }
+
+ if(gattrs.filter) {
+ var cblur = this.getBlur(elem);
+ var orig_cblur = cblur;
+ if(!gblur) gblur = this.getBlur(g);
+ if(cblur) {
+ // Is this formula correct?
+ cblur = (gblur-0) + (cblur-0);
+ } else if(cblur === 0) {
+ cblur = gblur;
+ }
+
+ // If child has no current filter, get group's filter or clone it.
+ if(!orig_cblur) {
+ // Set group's filter to use first child's ID
+ if(!gfilter) {
+ gfilter = getRefElem(gattrs.filter);
+ } else {
+ // Clone the group's filter
+ gfilter = copyElem(gfilter);
+ findDefs().appendChild(gfilter);
+ }
+ } else {
+ gfilter = getRefElem(elem.getAttribute('filter'));
+ }
+
+ // Change this in future for different filters
+ var suffix = (gfilter.firstChild.tagName === 'feGaussianBlur')?'blur':'filter';
+ gfilter.id = elem.id + '_' + suffix;
+ changeSelectedAttribute('filter', 'url(#' + gfilter.id + ')', [elem]);
+
+ // Update blur value
+ if(cblur) {
+ changeSelectedAttribute('stdDeviation', cblur, [gfilter.firstChild]);
+ canvas.setBlurOffsets(gfilter, cblur);
+ }
+ }
+
+ var chtlist = getTransformList(elem);
+
+ // Don't process gradient transforms
+ if(~elem.tagName.indexOf('Gradient')) chtlist = null;
+
+ // Hopefully not a problem to add this. Necessary for elements like <desc/>
+ if(!chtlist) continue;
+
+ // Apparently <defs> can get get a transformlist, but we don't want it to have one!
+ if(elem.tagName === 'defs') continue;
+
+ if (glist.numberOfItems) {
+ // TODO: if the group's transform is just a rotate, we can always transfer the
+ // rotate() down to the children (collapsing consecutive rotates and factoring
+ // out any translates)
+ if (gangle && glist.numberOfItems == 1) {
+ // [Rg] [Rc] [Mc]
+ // we want [Tr] [Rc2] [Mc] where:
+ // - [Rc2] is at the child's current center but has the
+ // sum of the group and child's rotation angles
+ // - [Tr] is the equivalent translation that this child
+ // undergoes if the group wasn't there
+
+ // [Tr] = [Rg] [Rc] [Rc2_inv]
+
+ // get group's rotation matrix (Rg)
+ var rgm = glist.getItem(0).matrix;
+
+ // get child's rotation matrix (Rc)
+ var rcm = svgroot.createSVGMatrix();
+ var cangle = getRotationAngle(elem);
+ if (cangle) {
+ rcm = chtlist.getItem(0).matrix;
+ }
+
+ // get child's old center of rotation
+ var cbox = svgedit.utilities.getBBox(elem);
+ var ceqm = transformListToTransform(chtlist).matrix;
+ var coldc = transformPoint(cbox.x+cbox.width/2, cbox.y+cbox.height/2,ceqm);
+
+ // sum group and child's angles
+ var sangle = gangle + cangle;
+
+ // get child's rotation at the old center (Rc2_inv)
+ var r2 = svgroot.createSVGTransform();
+ r2.setRotate(sangle, coldc.x, coldc.y);
+
+ // calculate equivalent translate
+ var trm = matrixMultiply(rgm, rcm, r2.matrix.inverse());
+
+ // set up tlist
+ if (cangle) {
+ chtlist.removeItem(0);
+ }
+
+ if (sangle) {
+ if(chtlist.numberOfItems) {
+ chtlist.insertItemBefore(r2, 0);
+ } else {
+ chtlist.appendItem(r2);
+ }
+ }
+
+ if (trm.e || trm.f) {
+ var tr = svgroot.createSVGTransform();
+ tr.setTranslate(trm.e, trm.f);
+ if(chtlist.numberOfItems) {
+ chtlist.insertItemBefore(tr, 0);
+ } else {
+ chtlist.appendItem(tr);
+ }
+ }
+ }
+ else { // more complicated than just a rotate
+
+ // transfer the group's transform down to each child and then
+ // call recalculateDimensions()
+ var oldxform = elem.getAttribute("transform");
+ var changes = {};
+ changes["transform"] = oldxform ? oldxform : "";
+
+ var newxform = svgroot.createSVGTransform();
+
+ // [ gm ] [ chm ] = [ chm ] [ gm' ]
+ // [ gm' ] = [ chm_inv ] [ gm ] [ chm ]
+ var chm = transformListToTransform(chtlist).matrix,
+ chm_inv = chm.inverse();
+ var gm = matrixMultiply( chm_inv, m, chm );
+ newxform.setMatrix(gm);
+ chtlist.appendItem(newxform);
+ }
+ var cmd = recalculateDimensions(elem);
+ if(cmd) batchCmd.addSubCommand(cmd);
+ }
+ }
+
+
+ // remove transform and make it undo-able
+ if (xform) {
+ var changes = {};
+ changes["transform"] = xform;
+ g.setAttribute("transform", "");
+ g.removeAttribute("transform");
+ batchCmd.addSubCommand(new ChangeElementCommand(g, changes));
+ }
+
+ if (undoable && !batchCmd.isEmpty()) {
+ return batchCmd;
+ }
+}
+
+
+// Function: ungroupSelectedElement
+// Unwraps all the elements in a selected group (g) element. This requires
+// significant recalculations to apply group's transforms, etc to its children
+this.ungroupSelectedElement = function() {
+ var g = selectedElements[0];
+ if($(g).data('gsvg') || $(g).data('symbol')) {
+ // Is svg, so actually convert to group
+
+ convertToGroup(g);
+ return;
+ } else if(g.tagName === 'use') {
+ // Somehow doesn't have data set, so retrieve
+ var symbol = getElem(getHref(g).substr(1));
+ $(g).data('symbol', symbol).data('ref', symbol);
+ convertToGroup(g);
+ return;
+ }
+ var parents_a = $(g).parents('a');
+ if(parents_a.length) {
+ g = parents_a[0];
+ }
+
+ // Look for parent "a"
+ if (g.tagName === "g" || g.tagName === "a") {
+
+ var batchCmd = new BatchCommand("Ungroup Elements");
+ var cmd = pushGroupProperties(g, true);
+ if(cmd) batchCmd.addSubCommand(cmd);
+
+ var parent = g.parentNode;
+ var anchor = g.nextSibling;
+ var children = new Array(g.childNodes.length);
+
+ var i = 0;
+
+ while (g.firstChild) {
+ var elem = g.firstChild;
+ var oldNextSibling = elem.nextSibling;
+ var oldParent = elem.parentNode;
+
+ // Remove child title elements
+ if(elem.tagName === 'title') {
+ var nextSibling = elem.nextSibling;
+ batchCmd.addSubCommand(new RemoveElementCommand(elem, nextSibling, oldParent));
+ oldParent.removeChild(elem);
+ continue;
+ }
+
+ children[i++] = elem = parent.insertBefore(elem, anchor);
+ batchCmd.addSubCommand(new MoveElementCommand(elem, oldNextSibling, oldParent));
+ }
+
+ // remove the group from the selection
+ clearSelection();
+
+ // delete the group element (but make undo-able)
+ var gNextSibling = g.nextSibling;
+ g = parent.removeChild(g);
+ batchCmd.addSubCommand(new RemoveElementCommand(g, gNextSibling, parent));
+
+ if (!batchCmd.isEmpty()) addCommandToHistory(batchCmd);
+
+ // update selection
+ addToSelection(children);
+ }
+};
+
+// Function: moveToTopSelectedElement
+// Repositions the selected element to the bottom in the DOM to appear on top of
+// other elements
+this.moveToTopSelectedElement = function() {
+ var selected = selectedElements[0];
+ if (selected != null) {
+ var t = selected;
+ var oldParent = t.parentNode;
+ var oldNextSibling = t.nextSibling;
+ t = t.parentNode.appendChild(t);
+ // If the element actually moved position, add the command and fire the changed
+ // event handler.
+ if (oldNextSibling != t.nextSibling) {
+ addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "top"));
+ call("changed", [t]);
+ }
+ }
+};
+
+// Function: moveToBottomSelectedElement
+// Repositions the selected element to the top in the DOM to appear under
+// other elements
+this.moveToBottomSelectedElement = function() {
+ var selected = selectedElements[0];
+ if (selected != null) {
+ var t = selected;
+ var oldParent = t.parentNode;
+ var oldNextSibling = t.nextSibling;
+ var firstChild = t.parentNode.firstChild;
+ if (firstChild.tagName == 'title') {
+ firstChild = firstChild.nextSibling;
+ }
+ // This can probably be removed, as the defs should not ever apppear
+ // inside a layer group
+ if (firstChild.tagName == 'defs') {
+ firstChild = firstChild.nextSibling;
+ }
+ t = t.parentNode.insertBefore(t, firstChild);
+ // If the element actually moved position, add the command and fire the changed
+ // event handler.
+ if (oldNextSibling != t.nextSibling) {
+ addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "bottom"));
+ call("changed", [t]);
+ }
+ }
+};
+
+// Function: moveUpDownSelected
+// Moves the select element up or down the stack, based on the visibly
+// intersecting elements
+//
+// Parameters:
+// dir - String that's either 'Up' or 'Down'
+this.moveUpDownSelected = function(dir) {
+ var selected = selectedElements[0];
+ if (!selected) return;
+
+ curBBoxes = [];
+ var closest, found_cur;
+ // jQuery sorts this list
+ var list = $(getIntersectionList(getStrokedBBox([selected]))).toArray();
+ if(dir == 'Down') list.reverse();
+
+ $.each(list, function() {
+ if(!found_cur) {
+ if(this == selected) {
+ found_cur = true;
+ }
+ return;
+ }
+ closest = this;
+ return false;
+ });
+ if(!closest) return;
+
+ var t = selected;
+ var oldParent = t.parentNode;
+ var oldNextSibling = t.nextSibling;
+ $(closest)[dir == 'Down'?'before':'after'](t);
+ // If the element actually moved position, add the command and fire the changed
+ // event handler.
+ if (oldNextSibling != t.nextSibling) {
+ addCommandToHistory(new MoveElementCommand(t, oldNextSibling, oldParent, "Move " + dir));
+ call("changed", [t]);
+ }
+};
+
+// Function: moveSelectedElements
+// Moves selected elements on the X/Y axis
+//
+// Parameters:
+// dx - Float with the distance to move on the x-axis
+// dy - Float with the distance to move on the y-axis
+// undoable - Boolean indicating whether or not the action should be undoable
+//
+// Returns:
+// Batch command for the move
+this.moveSelectedElements = function(dx, dy, undoable) {
+ // if undoable is not sent, default to true
+ // if single values, scale them to the zoom
+ if (dx.constructor != Array) {
+ dx /= current_zoom;
+ dy /= current_zoom;
+ }
+ var undoable = undoable || true;
+ var batchCmd = new BatchCommand("position");
+ var i = selectedElements.length;
+ while (i--) {
+ var selected = selectedElements[i];
+ if (selected != null) {
+// if (i==0)
+// selectedBBoxes[0] = svgedit.utilities.getBBox(selected);
+
+// var b = {};
+// for(var j in selectedBBoxes[i]) b[j] = selectedBBoxes[i][j];
+// selectedBBoxes[i] = b;
+
+ var xform = svgroot.createSVGTransform();
+ var tlist = getTransformList(selected);
+
+ // dx and dy could be arrays
+ if (dx.constructor == Array) {
+// if (i==0) {
+// selectedBBoxes[0].x += dx[0];
+// selectedBBoxes[0].y += dy[0];
+// }
+ xform.setTranslate(dx[i],dy[i]);
+ } else {
+// if (i==0) {
+// selectedBBoxes[0].x += dx;
+// selectedBBoxes[0].y += dy;
+// }
+ xform.setTranslate(dx,dy);
+ }
+
+ if(tlist.numberOfItems) {
+ tlist.insertItemBefore(xform, 0);
+ } else {
+ tlist.appendItem(xform);
+ }
+
+ var cmd = recalculateDimensions(selected);
+ if (cmd) {
+ batchCmd.addSubCommand(cmd);
+ }
+
+ selectorManager.requestSelector(selected).resize();
+ }
+ }
+ if (!batchCmd.isEmpty()) {
+ if (undoable)
+ addCommandToHistory(batchCmd);
+ call("changed", selectedElements);
+ return batchCmd;
+ }
+};
+
+// Function: cloneSelectedElements
+// Create deep DOM copies (clones) of all selected elements and move them slightly
+// from their originals
+this.cloneSelectedElements = function(x,y) {
+ var batchCmd = new BatchCommand("Clone Elements");
+ // find all the elements selected (stop at first null)
+ var len = selectedElements.length;
+ for (var i = 0; i < len; ++i) {
+ var elem = selectedElements[i];
+ if (elem == null) break;
+ }
+ // use slice to quickly get the subset of elements we need
+ var copiedElements = selectedElements.slice(0,i);
+ this.clearSelection(true);
+ // note that we loop in the reverse way because of the way elements are added
+ // to the selectedElements array (top-first)
+ var i = copiedElements.length;
+ while (i--) {
+ // clone each element and replace it within copiedElements
+ var elem = copiedElements[i] = copyElem(copiedElements[i]);
+ (current_group || getCurrentDrawing().getCurrentLayer()).appendChild(elem);
+ batchCmd.addSubCommand(new InsertElementCommand(elem));
+ }
+
+ if (!batchCmd.isEmpty()) {
+ addToSelection(copiedElements.reverse()); // Need to reverse for correct selection-adding
+ this.moveSelectedElements(x,y,false);
+ addCommandToHistory(batchCmd);
+ }
+};
+
+// Function: alignSelectedElements
+// Aligns selected elements
+//
+// Parameters:
+// type - String with single character indicating the alignment type
+// relative_to - String that must be one of the following:
+// "selected", "largest", "smallest", "page"
+this.alignSelectedElements = function(type, relative_to) {
+ var bboxes = [], angles = [];
+ var minx = Number.MAX_VALUE, maxx = Number.MIN_VALUE, miny = Number.MAX_VALUE, maxy = Number.MIN_VALUE;
+ var curwidth = Number.MIN_VALUE, curheight = Number.MIN_VALUE;
+ var len = selectedElements.length;
+ if (!len) return;
+ for (var i = 0; i < len; ++i) {
+ if (selectedElements[i] == null) break;
+ var elem = selectedElements[i];
+ bboxes[i] = getStrokedBBox([elem]);
+
+ // now bbox is axis-aligned and handles rotation
+ switch (relative_to) {
+ case 'smallest':
+ if ( (type == 'l' || type == 'c' || type == 'r') && (curwidth == Number.MIN_VALUE || curwidth > bboxes[i].width) ||
+ (type == 't' || type == 'm' || type == 'b') && (curheight == Number.MIN_VALUE || curheight > bboxes[i].height) ) {
+ minx = bboxes[i].x;
+ miny = bboxes[i].y;
+ maxx = bboxes[i].x + bboxes[i].width;
+ maxy = bboxes[i].y + bboxes[i].height;
+ curwidth = bboxes[i].width;
+ curheight = bboxes[i].height;
+ }
+ break;
+ case 'largest':
+ if ( (type == 'l' || type == 'c' || type == 'r') && (curwidth == Number.MIN_VALUE || curwidth < bboxes[i].width) ||
+ (type == 't' || type == 'm' || type == 'b') && (curheight == Number.MIN_VALUE || curheight < bboxes[i].height) ) {
+ minx = bboxes[i].x;
+ miny = bboxes[i].y;
+ maxx = bboxes[i].x + bboxes[i].width;
+ maxy = bboxes[i].y + bboxes[i].height;
+ curwidth = bboxes[i].width;
+ curheight = bboxes[i].height;
+ }
+ break;
+ default: // 'selected'
+ if (bboxes[i].x < minx) minx = bboxes[i].x;
+ if (bboxes[i].y < miny) miny = bboxes[i].y;
+ if (bboxes[i].x + bboxes[i].width > maxx) maxx = bboxes[i].x + bboxes[i].width;
+ if (bboxes[i].y + bboxes[i].height > maxy) maxy = bboxes[i].y + bboxes[i].height;
+ break;
+ }
+ } // loop for each element to find the bbox and adjust min/max
+
+ if (relative_to == 'page') {
+ minx = 0;
+ miny = 0;
+ maxx = canvas.contentW;
+ maxy = canvas.contentH;
+ }
+
+ var dx = new Array(len);
+ var dy = new Array(len);
+ for (var i = 0; i < len; ++i) {
+ if (selectedElements[i] == null) break;
+ var elem = selectedElements[i];
+ var bbox = bboxes[i];
+ dx[i] = 0;
+ dy[i] = 0;
+ switch (type) {
+ case 'l': // left (horizontal)
+ dx[i] = minx - bbox.x;
+ break;
+ case 'c': // center (horizontal)
+ dx[i] = (minx+maxx)/2 - (bbox.x + bbox.width/2);
+ break;
+ case 'r': // right (horizontal)
+ dx[i] = maxx - (bbox.x + bbox.width);
+ break;
+ case 't': // top (vertical)
+ dy[i] = miny - bbox.y;
+ break;
+ case 'm': // middle (vertical)
+ dy[i] = (miny+maxy)/2 - (bbox.y + bbox.height/2);
+ break;
+ case 'b': // bottom (vertical)
+ dy[i] = maxy - (bbox.y + bbox.height);
+ break;
+ }
+ }
+ this.moveSelectedElements(dx,dy);
+};
+
+// Group: Additional editor tools
+
+this.contentW = getResolution().w;
+this.contentH = getResolution().h;
+
+// Function: updateCanvas
+// Updates the editor canvas width/height/position after a zoom has occurred
+//
+// Parameters:
+// w - Float with the new width
+// h - Float with the new height
+//
+// Returns:
+// Object with the following values:
+// * x - The canvas' new x coordinate
+// * y - The canvas' new y coordinate
+// * old_x - The canvas' old x coordinate
+// * old_y - The canvas' old y coordinate
+// * d_x - The x position difference
+// * d_y - The y position difference
+this.updateCanvas = function(w, h) {
+ svgroot.setAttribute("width", w);
+ svgroot.setAttribute("height", h);
+ var bg = $('#canvasBackground')[0];
+ var old_x = svgcontent.getAttribute('x');
+ var old_y = svgcontent.getAttribute('y');
+ var x = (w/2 - this.contentW*current_zoom/2);
+ var y = (h/2 - this.contentH*current_zoom/2);
+
+ assignAttributes(svgcontent, {
+ width: this.contentW*current_zoom,
+ height: this.contentH*current_zoom,
+ 'x': x,
+ 'y': y,
+ "viewBox" : "0 0 " + this.contentW + " " + this.contentH
+ });
+
+ assignAttributes(bg, {
+ width: svgcontent.getAttribute('width'),
+ height: svgcontent.getAttribute('height'),
+ x: x,
+ y: y
+ });
+
+ var bg_img = getElem('background_image');
+ if (bg_img) {
+ assignAttributes(bg_img, {
+ 'width': '100%',
+ 'height': '100%'
+ });
+ }
+
+ selectorManager.selectorParentGroup.setAttribute("transform","translate(" + x + "," + y + ")");
+
+ return {x:x, y:y, old_x:old_x, old_y:old_y, d_x:x - old_x, d_y:y - old_y};
+}
+
+// Function: setBackground
+// Set the background of the editor (NOT the actual document)
+//
+// Parameters:
+// color - String with fill color to apply
+// url - URL or path to image to use
+this.setBackground = function(color, url) {
+ var bg = getElem('canvasBackground');
+ var border = $(bg).find('rect')[0];
+ var bg_img = getElem('background_image');
+ border.setAttribute('fill',color);
+ if(url) {
+ if(!bg_img) {
+ bg_img = svgdoc.createElementNS(svgns, "image");
+ assignAttributes(bg_img, {
+ 'id': 'background_image',
+ 'width': '100%',
+ 'height': '100%',
+ 'preserveAspectRatio': 'xMinYMin',
+ 'style':'pointer-events:none'
+ });
+ }
+ setHref(bg_img, url);
+ bg.appendChild(bg_img);
+ } else if(bg_img) {
+ bg_img.parentNode.removeChild(bg_img);
+ }
+}
+
+// Function: cycleElement
+// Select the next/previous element within the current layer
+//
+// Parameters:
+// next - Boolean where true = next and false = previous element
+this.cycleElement = function(next) {
+ var cur_elem = selectedElements[0];
+ var elem = false;
+ var all_elems = getVisibleElements(current_group || getCurrentDrawing().getCurrentLayer());
+ if(!all_elems.length) return;
+ if (cur_elem == null) {
+ var num = next?all_elems.length-1:0;
+ elem = all_elems[num];
+ } else {
+ var i = all_elems.length;
+ while(i--) {
+ if(all_elems[i] == cur_elem) {
+ var num = next?i-1:i+1;
+ if(num >= all_elems.length) {
+ num = 0;
+ } else if(num < 0) {
+ num = all_elems.length-1;
+ }
+ elem = all_elems[num];
+ break;
+ }
+ }
+ }
+ selectOnly([elem], true);
+ call("selected", selectedElements);
+}
+
+this.clear();
+
+
+// DEPRECATED: getPrivateMethods
+// Since all methods are/should be public somehow, this function should be removed
+
+// Being able to access private methods publicly seems wrong somehow,
+// but currently appears to be the best way to allow testing and provide
+// access to them to plugins.
+this.getPrivateMethods = function() {
+ var obj = {
+ addCommandToHistory: addCommandToHistory,
+ setGradient: setGradient,
+ addSvgElementFromJson: addSvgElementFromJson,
+ assignAttributes: assignAttributes,
+ BatchCommand: BatchCommand,
+ call: call,
+ ChangeElementCommand: ChangeElementCommand,
+ copyElem: copyElem,
+ ffClone: ffClone,
+ findDefs: findDefs,
+ findDuplicateGradient: findDuplicateGradient,
+ getElem: getElem,
+ getId: getId,
+ getIntersectionList: getIntersectionList,
+ getMouseTarget: getMouseTarget,
+ getNextId: getNextId,
+ getPathBBox: getPathBBox,
+ getUrlFromAttr: getUrlFromAttr,
+ hasMatrixTransform: hasMatrixTransform,
+ identifyLayers: identifyLayers,
+ InsertElementCommand: InsertElementCommand,
+ isIdentity: svgedit.math.isIdentity,
+ logMatrix: logMatrix,
+ matrixMultiply: matrixMultiply,
+ MoveElementCommand: MoveElementCommand,
+ preventClickDefault: preventClickDefault,
+ recalculateAllSelectedDimensions: recalculateAllSelectedDimensions,
+ recalculateDimensions: recalculateDimensions,
+ remapElement: remapElement,
+ RemoveElementCommand: RemoveElementCommand,
+ removeUnusedDefElems: removeUnusedDefElems,
+ round: round,
+ runExtensions: runExtensions,
+ sanitizeSvg: sanitizeSvg,
+ SVGEditTransformList: svgedit.transformlist.SVGTransformList,
+ toString: toString,
+ transformBox: svgedit.math.transformBox,
+ transformListToTransform: transformListToTransform,
+ transformPoint: transformPoint,
+ walkTree: svgedit.utilities.walkTree
+ }
+ return obj;
+};
+
+}
diff --git a/files_svgedit/svg-edit/svgicons/.svn/all-wcprops b/files_svgedit/svg-edit/svgicons/.svn/all-wcprops
new file mode 100644
index 000000000..8e18c6aea
--- /dev/null
+++ b/files_svgedit/svg-edit/svgicons/.svn/all-wcprops
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 40
+/svn/!svn/ver/2052/trunk/editor/svgicons
+END
+jquery.svgicons.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/2052/trunk/editor/svgicons/jquery.svgicons.js
+END
diff --git a/files_svgedit/svg-edit/svgicons/.svn/entries b/files_svgedit/svg-edit/svgicons/.svn/entries
new file mode 100644
index 000000000..f5e12a18e
--- /dev/null
+++ b/files_svgedit/svg-edit/svgicons/.svn/entries
@@ -0,0 +1,62 @@
+10
+
+dir
+2067
+http://svg-edit.googlecode.com/svn/trunk/editor/svgicons
+http://svg-edit.googlecode.com/svn
+
+
+
+2012-02-23T02:48:21.539764Z
+2052
+codedread
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+eee81c28-f429-11dd-99c0-75d572ba1ddd
+
+jquery.svgicons.js
+file
+
+
+
+
+2012-03-25T18:41:39.648317Z
+bcb8ab066ee9a4ebec1e47236c7ea803
+2012-02-23T02:48:21.539764Z
+2052
+codedread
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+14258
+
diff --git a/files_svgedit/svg-edit/svgicons/.svn/prop-base/jquery.svgicons.js.svn-base b/files_svgedit/svg-edit/svgicons/.svn/prop-base/jquery.svgicons.js.svn-base
new file mode 100644
index 000000000..530636b99
--- /dev/null
+++ b/files_svgedit/svg-edit/svgicons/.svn/prop-base/jquery.svgicons.js.svn-base
@@ -0,0 +1,5 @@
+K 13
+svn:mime-type
+V 15
+text/javascript
+END
diff --git a/files_svgedit/svg-edit/svgicons/.svn/text-base/jquery.svgicons.js.svn-base b/files_svgedit/svg-edit/svgicons/.svn/text-base/jquery.svgicons.js.svn-base
new file mode 100644
index 000000000..8a7050965
--- /dev/null
+++ b/files_svgedit/svg-edit/svgicons/.svn/text-base/jquery.svgicons.js.svn-base
@@ -0,0 +1,486 @@
+/*
+ * SVG Icon Loader 2.0
+ *
+ * jQuery Plugin for loading SVG icons from a single file
+ *
+ * Copyright (c) 2009 Alexis Deveria
+ * http://a.deveria.com
+ *
+ * Apache 2 License
+
+How to use:
+
+1. Create the SVG master file that includes all icons:
+
+The master SVG icon-containing file is an SVG file that contains
+<g> elements. Each <g> element should contain the markup of an SVG
+icon. The <g> element has an ID that should
+correspond with the ID of the HTML element used on the page that should contain
+or optionally be replaced by the icon. Additionally, one empty element should be
+added at the end with id "svg_eof".
+
+2. Optionally create fallback raster images for each SVG icon.
+
+3. Include the jQuery and the SVG Icon Loader scripts on your page.
+
+4. Run $.svgIcons() when the document is ready:
+
+$.svgIcons( file [string], options [object literal]);
+
+File is the location of a local SVG or SVGz file.
+
+All options are optional and can include:
+
+- 'w (number)': The icon widths
+
+- 'h (number)': The icon heights
+
+- 'fallback (object literal)': List of raster images with each
+ key being the SVG icon ID to replace, and the value the image file name.
+
+- 'fallback_path (string)': The path to use for all images
+ listed under "fallback"
+
+- 'replace (boolean)': If set to true, HTML elements will be replaced by,
+ rather than include the SVG icon.
+
+- 'placement (object literal)': List with selectors for keys and SVG icon ids
+ as values. This provides a custom method of adding icons.
+
+- 'resize (object literal)': List with selectors for keys and numbers
+ as values. This allows an easy way to resize specific icons.
+
+- 'callback (function)': A function to call when all icons have been loaded.
+ Includes an object literal as its argument with as keys all icon IDs and the
+ icon as a jQuery object as its value.
+
+- 'id_match (boolean)': Automatically attempt to match SVG icon ids with
+ corresponding HTML id (default: true)
+
+- 'no_img (boolean)': Prevent attempting to convert the icon into an <img>
+ element (may be faster, help for browser consistency)
+
+- 'svgz (boolean)': Indicate that the file is an SVGZ file, and thus not to
+ parse as XML. SVGZ files add compression benefits, but getting data from
+ them fails in Firefox 2 and older.
+
+5. To access an icon at a later point without using the callback, use this:
+ $.getSvgIcon(id (string));
+
+This will return the icon (as jQuery object) with a given ID.
+
+6. To resize icons at a later point without using the callback, use this:
+ $.resizeSvgIcons(resizeOptions) (use the same way as the "resize" parameter)
+
+
+Example usage #1:
+
+$(function() {
+ $.svgIcons('my_icon_set.svg'); // The SVG file that contains all icons
+ // No options have been set, so all icons will automatically be inserted
+ // into HTML elements that match the same IDs.
+});
+
+Example usage #2:
+
+$(function() {
+ $.svgIcons('my_icon_set.svg', { // The SVG file that contains all icons
+ callback: function(icons) { // Custom callback function that sets click
+ // events for each icon
+ $.each(icons, function(id, icon) {
+ icon.click(function() {
+ alert('You clicked on the icon with id ' + id);
+ });
+ });
+ }
+ }); //The SVG file that contains all icons
+});
+
+Example usage #3:
+
+$(function() {
+ $.svgIcons('my_icon_set.svgz', { // The SVGZ file that contains all icons
+ w: 32, // All icons will be 32px wide
+ h: 32, // All icons will be 32px high
+ fallback_path: 'icons/', // All fallback files can be found here
+ fallback: {
+ '#open_icon': 'open.png', // The "open.png" will be appended to the
+ // HTML element with ID "open_icon"
+ '#close_icon': 'close.png',
+ '#save_icon': 'save.png'
+ },
+ placement: {'.open_icon','open'}, // The "open" icon will be added
+ // to all elements with class "open_icon"
+ resize: function() {
+ '#save_icon .svg_icon': 64 // The "save" icon will be resized to 64 x 64px
+ },
+
+ callback: function(icons) { // Sets background color for "close" icon
+ icons['close'].css('background','red');
+ },
+
+ svgz: true // Indicates that an SVGZ file is being used
+
+ })
+});
+
+*/
+
+
+(function($) {
+ var svg_icons = {}, fixIDs;
+
+ $.svgIcons = function(file, opts) {
+ var svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ icon_w = opts.w?opts.w : 24,
+ icon_h = opts.h?opts.h : 24,
+ elems, svgdoc, testImg,
+ icons_made = false, data_loaded = false, load_attempts = 0,
+ ua = navigator.userAgent, isOpera = !!window.opera, isSafari = (ua.indexOf('Safari/') > -1 && ua.indexOf('Chrome/')==-1),
+ data_pre = 'data:image/svg+xml;charset=utf-8;base64,';
+
+ if(opts.svgz) {
+ var data_el = $('<object data="' + file + '" type=image/svg+xml>').appendTo('body').hide();
+ try {
+ svgdoc = data_el[0].contentDocument;
+ data_el.load(getIcons);
+ getIcons(0, true); // Opera will not run "load" event if file is already cached
+ } catch(err1) {
+ useFallback();
+ }
+ } else {
+ var parser = new DOMParser();
+ $.ajax({
+ url: file,
+ dataType: 'string',
+ success: function(data) {
+ if(!data) {
+ $(useFallback);
+ return;
+ }
+ svgdoc = parser.parseFromString(data, "text/xml");
+ $(function() {
+ getIcons('ajax');
+ });
+ },
+ error: function(err) {
+ // TODO: Fix Opera widget icon bug
+ if(window.opera) {
+ $(function() {
+ useFallback();
+ });
+ } else {
+ if(err.responseText) {
+ svgdoc = parser.parseFromString(err.responseText, "text/xml");
+
+ if(!svgdoc.childNodes.length) {
+ $(useFallback);
+ }
+ $(function() {
+ getIcons('ajax');
+ });
+ } else {
+ $(useFallback);
+ }
+ }
+ }
+ });
+ }
+
+ function getIcons(evt, no_wait) {
+ if(evt !== 'ajax') {
+ if(data_loaded) return;
+ // Webkit sometimes says svgdoc is undefined, other times
+ // it fails to load all nodes. Thus we must make sure the "eof"
+ // element is loaded.
+ svgdoc = data_el[0].contentDocument; // Needed again for Webkit
+ var isReady = (svgdoc && svgdoc.getElementById('svg_eof'));
+ if(!isReady && !(no_wait && isReady)) {
+ load_attempts++;
+ if(load_attempts < 50) {
+ setTimeout(getIcons, 20);
+ } else {
+ useFallback();
+ data_loaded = true;
+ }
+ return;
+ }
+ data_loaded = true;
+ }
+
+ elems = $(svgdoc.firstChild).children(); //.getElementsByTagName('foreignContent');
+
+ if(!opts.no_img) {
+ var testSrc = data_pre + 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D';
+
+ testImg = $(new Image()).attr({
+ src: testSrc,
+ width: 0,
+ height: 0
+ }).appendTo('body')
+ .load(function () {
+ // Safari 4 crashes, Opera and Chrome don't
+ makeIcons(true);
+ }).error(function () {
+ makeIcons();
+ });
+ } else {
+ setTimeout(function() {
+ if(!icons_made) makeIcons();
+ },500);
+ }
+ }
+
+ var setIcon = function(target, icon, id, setID) {
+ if(isOpera) icon.css('visibility','hidden');
+ if(opts.replace) {
+ if(setID) icon.attr('id',id);
+ var cl = target.attr('class');
+ if(cl) icon.attr('class','svg_icon '+cl);
+ target.replaceWith(icon);
+ } else {
+
+ target.append(icon);
+ }
+ if(isOpera) {
+ setTimeout(function() {
+ icon.removeAttr('style');
+ },1);
+ }
+ }
+
+ var addIcon = function(icon, id) {
+ if(opts.id_match === undefined || opts.id_match !== false) {
+ setIcon(holder, icon, id, true);
+ }
+ svg_icons[id] = icon;
+ }
+
+ function makeIcons(toImage, fallback) {
+ if(icons_made) return;
+ if(opts.no_img) toImage = false;
+ var holder;
+
+ if(toImage) {
+ var temp_holder = $(document.createElement('div'));
+ temp_holder.hide().appendTo('body');
+ }
+ if(fallback) {
+ var path = opts.fallback_path?opts.fallback_path:'';
+ $.each(fallback, function(id, imgsrc) {
+ holder = $('#' + id);
+ var icon = $(new Image())
+ .attr({
+ 'class':'svg_icon',
+ src: path + imgsrc,
+ 'width': icon_w,
+ 'height': icon_h,
+ 'alt': 'icon'
+ });
+
+ addIcon(icon, id);
+ });
+ } else {
+ var len = elems.length;
+ for(var i = 0; i < len; i++) {
+ var elem = elems[i];
+ var id = elem.id;
+ if(id === 'svg_eof') break;
+ holder = $('#' + id);
+ var svg = elem.getElementsByTagNameNS(svgns, 'svg')[0];
+ var svgroot = document.createElementNS(svgns, "svg");
+ svgroot.setAttributeNS(svgns, 'viewBox', [0,0,icon_w,icon_h].join(' '));
+
+ // Make flexible by converting width/height to viewBox
+ var w = svg.getAttribute('width');
+ var h = svg.getAttribute('height');
+ svg.removeAttribute('width');
+ svg.removeAttribute('height');
+
+ var vb = svg.getAttribute('viewBox');
+ if(!vb) {
+ svg.setAttribute('viewBox', [0,0,w,h].join(' '));
+ }
+
+ // Not using jQuery to be a bit faster
+ svgroot.setAttribute('xmlns', svgns);
+ svgroot.setAttribute('width', icon_w);
+ svgroot.setAttribute('height', icon_h);
+ svgroot.setAttribute("xmlns:xlink", xlinkns);
+ svgroot.setAttribute("class", 'svg_icon');
+
+ // Without cloning, Firefox will make another GET request.
+ // With cloning, causes issue in Opera/Win/Non-EN
+ if(!isOpera) svg = svg.cloneNode(true);
+
+ svgroot.appendChild(svg);
+
+ if(toImage) {
+ // Without cloning, Safari will crash
+ // With cloning, causes issue in Opera/Win/Non-EN
+ var svgcontent = isOpera?svgroot:svgroot.cloneNode(true);
+ temp_holder.empty().append(svgroot);
+ var str = data_pre + encode64(temp_holder.html());
+ var icon = $(new Image())
+ .attr({'class':'svg_icon', src:str});
+ } else {
+ var icon = fixIDs($(svgroot), i);
+ }
+ addIcon(icon, id);
+ }
+
+ }
+
+ if(opts.placement) {
+ $.each(opts.placement, function(sel, id) {
+ if(!svg_icons[id]) return;
+ $(sel).each(function(i) {
+ var copy = svg_icons[id].clone();
+ if(i > 0 && !toImage) copy = fixIDs(copy, i, true);
+ setIcon($(this), copy, id);
+ })
+ });
+ }
+ if(!fallback) {
+ if(toImage) temp_holder.remove();
+ if(data_el) data_el.remove();
+ if(testImg) testImg.remove();
+ }
+ if(opts.resize) $.resizeSvgIcons(opts.resize);
+ icons_made = true;
+
+ if(opts.callback) opts.callback(svg_icons);
+ }
+
+ fixIDs = function(svg_el, svg_num, force) {
+ var defs = svg_el.find('defs');
+ if(!defs.length) return svg_el;
+
+ if(isOpera) {
+ var id_elems = defs.find('*').filter(function() {
+ return !!this.id;
+ });
+ } else {
+ var id_elems = defs.find('[id]');
+ }
+
+ var all_elems = svg_el[0].getElementsByTagName('*'), len = all_elems.length;
+
+ id_elems.each(function(i) {
+ var id = this.id;
+ var no_dupes = ($(svgdoc).find('#' + id).length <= 1);
+ if(isOpera) no_dupes = false; // Opera didn't clone svg_el, so not reliable
+ // if(!force && no_dupes) return;
+ var new_id = 'x' + id + svg_num + i;
+ this.id = new_id;
+
+ var old_val = 'url(#' + id + ')';
+ var new_val = 'url(#' + new_id + ')';
+
+ // Selector method, possibly faster but fails in Opera / jQuery 1.4.3
+// svg_el.find('[fill="url(#' + id + ')"]').each(function() {
+// this.setAttribute('fill', 'url(#' + new_id + ')');
+// }).end().find('[stroke="url(#' + id + ')"]').each(function() {
+// this.setAttribute('stroke', 'url(#' + new_id + ')');
+// }).end().find('use').each(function() {
+// if(this.getAttribute('xlink:href') == '#' + id) {
+// this.setAttributeNS(xlinkns,'href','#' + new_id);
+// }
+// }).end().find('[filter="url(#' + id + ')"]').each(function() {
+// this.setAttribute('filter', 'url(#' + new_id + ')');
+// });
+
+ for(var i = 0; i < len; i++) {
+ var elem = all_elems[i];
+ if(elem.getAttribute('fill') === old_val) {
+ elem.setAttribute('fill', new_val);
+ }
+ if(elem.getAttribute('stroke') === old_val) {
+ elem.setAttribute('stroke', new_val);
+ }
+ if(elem.getAttribute('filter') === old_val) {
+ elem.setAttribute('filter', new_val);
+ }
+ }
+ });
+ return svg_el;
+ }
+
+ function useFallback() {
+ if(file.indexOf('.svgz') != -1) {
+ var reg_file = file.replace('.svgz','.svg');
+ if(window.console) {
+ console.log('.svgz failed, trying with .svg');
+ }
+ $.svgIcons(reg_file, opts);
+ } else if(opts.fallback) {
+ makeIcons(false, opts.fallback);
+ }
+ }
+
+ function encode64(input) {
+ // base64 strings are 4/3 larger than the original string
+ if(window.btoa) return window.btoa(input);
+ var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ var output = new Array( Math.floor( (input.length + 2) / 3 ) * 4 );
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0, p = 0;
+
+ do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ 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('');
+ }
+ }
+
+ $.getSvgIcon = function(id, uniqueClone) {
+ var icon = svg_icons[id];
+ if(uniqueClone && icon) {
+ icon = fixIDs(icon, 0, true).clone(true);
+ }
+ return icon;
+ }
+
+ $.resizeSvgIcons = function(obj) {
+ // FF2 and older don't detect .svg_icon, so we change it detect svg elems instead
+ var change_sel = !$('.svg_icon:first').length;
+ $.each(obj, function(sel, size) {
+ var arr = $.isArray(size);
+ var w = arr?size[0]:size,
+ h = arr?size[1]:size;
+ if(change_sel) {
+ sel = sel.replace(/\.svg_icon/g,'svg');
+ }
+ $(sel).each(function() {
+ this.setAttribute('width', w);
+ this.setAttribute('height', h);
+ if(window.opera && window.widget) {
+ this.parentNode.style.width = w + 'px';
+ this.parentNode.style.height = h + 'px';
+ }
+ });
+ });
+ }
+
+})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/svgicons/jquery.svgicons.js b/files_svgedit/svg-edit/svgicons/jquery.svgicons.js
new file mode 100644
index 000000000..8a7050965
--- /dev/null
+++ b/files_svgedit/svg-edit/svgicons/jquery.svgicons.js
@@ -0,0 +1,486 @@
+/*
+ * SVG Icon Loader 2.0
+ *
+ * jQuery Plugin for loading SVG icons from a single file
+ *
+ * Copyright (c) 2009 Alexis Deveria
+ * http://a.deveria.com
+ *
+ * Apache 2 License
+
+How to use:
+
+1. Create the SVG master file that includes all icons:
+
+The master SVG icon-containing file is an SVG file that contains
+<g> elements. Each <g> element should contain the markup of an SVG
+icon. The <g> element has an ID that should
+correspond with the ID of the HTML element used on the page that should contain
+or optionally be replaced by the icon. Additionally, one empty element should be
+added at the end with id "svg_eof".
+
+2. Optionally create fallback raster images for each SVG icon.
+
+3. Include the jQuery and the SVG Icon Loader scripts on your page.
+
+4. Run $.svgIcons() when the document is ready:
+
+$.svgIcons( file [string], options [object literal]);
+
+File is the location of a local SVG or SVGz file.
+
+All options are optional and can include:
+
+- 'w (number)': The icon widths
+
+- 'h (number)': The icon heights
+
+- 'fallback (object literal)': List of raster images with each
+ key being the SVG icon ID to replace, and the value the image file name.
+
+- 'fallback_path (string)': The path to use for all images
+ listed under "fallback"
+
+- 'replace (boolean)': If set to true, HTML elements will be replaced by,
+ rather than include the SVG icon.
+
+- 'placement (object literal)': List with selectors for keys and SVG icon ids
+ as values. This provides a custom method of adding icons.
+
+- 'resize (object literal)': List with selectors for keys and numbers
+ as values. This allows an easy way to resize specific icons.
+
+- 'callback (function)': A function to call when all icons have been loaded.
+ Includes an object literal as its argument with as keys all icon IDs and the
+ icon as a jQuery object as its value.
+
+- 'id_match (boolean)': Automatically attempt to match SVG icon ids with
+ corresponding HTML id (default: true)
+
+- 'no_img (boolean)': Prevent attempting to convert the icon into an <img>
+ element (may be faster, help for browser consistency)
+
+- 'svgz (boolean)': Indicate that the file is an SVGZ file, and thus not to
+ parse as XML. SVGZ files add compression benefits, but getting data from
+ them fails in Firefox 2 and older.
+
+5. To access an icon at a later point without using the callback, use this:
+ $.getSvgIcon(id (string));
+
+This will return the icon (as jQuery object) with a given ID.
+
+6. To resize icons at a later point without using the callback, use this:
+ $.resizeSvgIcons(resizeOptions) (use the same way as the "resize" parameter)
+
+
+Example usage #1:
+
+$(function() {
+ $.svgIcons('my_icon_set.svg'); // The SVG file that contains all icons
+ // No options have been set, so all icons will automatically be inserted
+ // into HTML elements that match the same IDs.
+});
+
+Example usage #2:
+
+$(function() {
+ $.svgIcons('my_icon_set.svg', { // The SVG file that contains all icons
+ callback: function(icons) { // Custom callback function that sets click
+ // events for each icon
+ $.each(icons, function(id, icon) {
+ icon.click(function() {
+ alert('You clicked on the icon with id ' + id);
+ });
+ });
+ }
+ }); //The SVG file that contains all icons
+});
+
+Example usage #3:
+
+$(function() {
+ $.svgIcons('my_icon_set.svgz', { // The SVGZ file that contains all icons
+ w: 32, // All icons will be 32px wide
+ h: 32, // All icons will be 32px high
+ fallback_path: 'icons/', // All fallback files can be found here
+ fallback: {
+ '#open_icon': 'open.png', // The "open.png" will be appended to the
+ // HTML element with ID "open_icon"
+ '#close_icon': 'close.png',
+ '#save_icon': 'save.png'
+ },
+ placement: {'.open_icon','open'}, // The "open" icon will be added
+ // to all elements with class "open_icon"
+ resize: function() {
+ '#save_icon .svg_icon': 64 // The "save" icon will be resized to 64 x 64px
+ },
+
+ callback: function(icons) { // Sets background color for "close" icon
+ icons['close'].css('background','red');
+ },
+
+ svgz: true // Indicates that an SVGZ file is being used
+
+ })
+});
+
+*/
+
+
+(function($) {
+ var svg_icons = {}, fixIDs;
+
+ $.svgIcons = function(file, opts) {
+ var svgns = "http://www.w3.org/2000/svg",
+ xlinkns = "http://www.w3.org/1999/xlink",
+ icon_w = opts.w?opts.w : 24,
+ icon_h = opts.h?opts.h : 24,
+ elems, svgdoc, testImg,
+ icons_made = false, data_loaded = false, load_attempts = 0,
+ ua = navigator.userAgent, isOpera = !!window.opera, isSafari = (ua.indexOf('Safari/') > -1 && ua.indexOf('Chrome/')==-1),
+ data_pre = 'data:image/svg+xml;charset=utf-8;base64,';
+
+ if(opts.svgz) {
+ var data_el = $('<object data="' + file + '" type=image/svg+xml>').appendTo('body').hide();
+ try {
+ svgdoc = data_el[0].contentDocument;
+ data_el.load(getIcons);
+ getIcons(0, true); // Opera will not run "load" event if file is already cached
+ } catch(err1) {
+ useFallback();
+ }
+ } else {
+ var parser = new DOMParser();
+ $.ajax({
+ url: file,
+ dataType: 'string',
+ success: function(data) {
+ if(!data) {
+ $(useFallback);
+ return;
+ }
+ svgdoc = parser.parseFromString(data, "text/xml");
+ $(function() {
+ getIcons('ajax');
+ });
+ },
+ error: function(err) {
+ // TODO: Fix Opera widget icon bug
+ if(window.opera) {
+ $(function() {
+ useFallback();
+ });
+ } else {
+ if(err.responseText) {
+ svgdoc = parser.parseFromString(err.responseText, "text/xml");
+
+ if(!svgdoc.childNodes.length) {
+ $(useFallback);
+ }
+ $(function() {
+ getIcons('ajax');
+ });
+ } else {
+ $(useFallback);
+ }
+ }
+ }
+ });
+ }
+
+ function getIcons(evt, no_wait) {
+ if(evt !== 'ajax') {
+ if(data_loaded) return;
+ // Webkit sometimes says svgdoc is undefined, other times
+ // it fails to load all nodes. Thus we must make sure the "eof"
+ // element is loaded.
+ svgdoc = data_el[0].contentDocument; // Needed again for Webkit
+ var isReady = (svgdoc && svgdoc.getElementById('svg_eof'));
+ if(!isReady && !(no_wait && isReady)) {
+ load_attempts++;
+ if(load_attempts < 50) {
+ setTimeout(getIcons, 20);
+ } else {
+ useFallback();
+ data_loaded = true;
+ }
+ return;
+ }
+ data_loaded = true;
+ }
+
+ elems = $(svgdoc.firstChild).children(); //.getElementsByTagName('foreignContent');
+
+ if(!opts.no_img) {
+ var testSrc = data_pre + 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D';
+
+ testImg = $(new Image()).attr({
+ src: testSrc,
+ width: 0,
+ height: 0
+ }).appendTo('body')
+ .load(function () {
+ // Safari 4 crashes, Opera and Chrome don't
+ makeIcons(true);
+ }).error(function () {
+ makeIcons();
+ });
+ } else {
+ setTimeout(function() {
+ if(!icons_made) makeIcons();
+ },500);
+ }
+ }
+
+ var setIcon = function(target, icon, id, setID) {
+ if(isOpera) icon.css('visibility','hidden');
+ if(opts.replace) {
+ if(setID) icon.attr('id',id);
+ var cl = target.attr('class');
+ if(cl) icon.attr('class','svg_icon '+cl);
+ target.replaceWith(icon);
+ } else {
+
+ target.append(icon);
+ }
+ if(isOpera) {
+ setTimeout(function() {
+ icon.removeAttr('style');
+ },1);
+ }
+ }
+
+ var addIcon = function(icon, id) {
+ if(opts.id_match === undefined || opts.id_match !== false) {
+ setIcon(holder, icon, id, true);
+ }
+ svg_icons[id] = icon;
+ }
+
+ function makeIcons(toImage, fallback) {
+ if(icons_made) return;
+ if(opts.no_img) toImage = false;
+ var holder;
+
+ if(toImage) {
+ var temp_holder = $(document.createElement('div'));
+ temp_holder.hide().appendTo('body');
+ }
+ if(fallback) {
+ var path = opts.fallback_path?opts.fallback_path:'';
+ $.each(fallback, function(id, imgsrc) {
+ holder = $('#' + id);
+ var icon = $(new Image())
+ .attr({
+ 'class':'svg_icon',
+ src: path + imgsrc,
+ 'width': icon_w,
+ 'height': icon_h,
+ 'alt': 'icon'
+ });
+
+ addIcon(icon, id);
+ });
+ } else {
+ var len = elems.length;
+ for(var i = 0; i < len; i++) {
+ var elem = elems[i];
+ var id = elem.id;
+ if(id === 'svg_eof') break;
+ holder = $('#' + id);
+ var svg = elem.getElementsByTagNameNS(svgns, 'svg')[0];
+ var svgroot = document.createElementNS(svgns, "svg");
+ svgroot.setAttributeNS(svgns, 'viewBox', [0,0,icon_w,icon_h].join(' '));
+
+ // Make flexible by converting width/height to viewBox
+ var w = svg.getAttribute('width');
+ var h = svg.getAttribute('height');
+ svg.removeAttribute('width');
+ svg.removeAttribute('height');
+
+ var vb = svg.getAttribute('viewBox');
+ if(!vb) {
+ svg.setAttribute('viewBox', [0,0,w,h].join(' '));
+ }
+
+ // Not using jQuery to be a bit faster
+ svgroot.setAttribute('xmlns', svgns);
+ svgroot.setAttribute('width', icon_w);
+ svgroot.setAttribute('height', icon_h);
+ svgroot.setAttribute("xmlns:xlink", xlinkns);
+ svgroot.setAttribute("class", 'svg_icon');
+
+ // Without cloning, Firefox will make another GET request.
+ // With cloning, causes issue in Opera/Win/Non-EN
+ if(!isOpera) svg = svg.cloneNode(true);
+
+ svgroot.appendChild(svg);
+
+ if(toImage) {
+ // Without cloning, Safari will crash
+ // With cloning, causes issue in Opera/Win/Non-EN
+ var svgcontent = isOpera?svgroot:svgroot.cloneNode(true);
+ temp_holder.empty().append(svgroot);
+ var str = data_pre + encode64(temp_holder.html());
+ var icon = $(new Image())
+ .attr({'class':'svg_icon', src:str});
+ } else {
+ var icon = fixIDs($(svgroot), i);
+ }
+ addIcon(icon, id);
+ }
+
+ }
+
+ if(opts.placement) {
+ $.each(opts.placement, function(sel, id) {
+ if(!svg_icons[id]) return;
+ $(sel).each(function(i) {
+ var copy = svg_icons[id].clone();
+ if(i > 0 && !toImage) copy = fixIDs(copy, i, true);
+ setIcon($(this), copy, id);
+ })
+ });
+ }
+ if(!fallback) {
+ if(toImage) temp_holder.remove();
+ if(data_el) data_el.remove();
+ if(testImg) testImg.remove();
+ }
+ if(opts.resize) $.resizeSvgIcons(opts.resize);
+ icons_made = true;
+
+ if(opts.callback) opts.callback(svg_icons);
+ }
+
+ fixIDs = function(svg_el, svg_num, force) {
+ var defs = svg_el.find('defs');
+ if(!defs.length) return svg_el;
+
+ if(isOpera) {
+ var id_elems = defs.find('*').filter(function() {
+ return !!this.id;
+ });
+ } else {
+ var id_elems = defs.find('[id]');
+ }
+
+ var all_elems = svg_el[0].getElementsByTagName('*'), len = all_elems.length;
+
+ id_elems.each(function(i) {
+ var id = this.id;
+ var no_dupes = ($(svgdoc).find('#' + id).length <= 1);
+ if(isOpera) no_dupes = false; // Opera didn't clone svg_el, so not reliable
+ // if(!force && no_dupes) return;
+ var new_id = 'x' + id + svg_num + i;
+ this.id = new_id;
+
+ var old_val = 'url(#' + id + ')';
+ var new_val = 'url(#' + new_id + ')';
+
+ // Selector method, possibly faster but fails in Opera / jQuery 1.4.3
+// svg_el.find('[fill="url(#' + id + ')"]').each(function() {
+// this.setAttribute('fill', 'url(#' + new_id + ')');
+// }).end().find('[stroke="url(#' + id + ')"]').each(function() {
+// this.setAttribute('stroke', 'url(#' + new_id + ')');
+// }).end().find('use').each(function() {
+// if(this.getAttribute('xlink:href') == '#' + id) {
+// this.setAttributeNS(xlinkns,'href','#' + new_id);
+// }
+// }).end().find('[filter="url(#' + id + ')"]').each(function() {
+// this.setAttribute('filter', 'url(#' + new_id + ')');
+// });
+
+ for(var i = 0; i < len; i++) {
+ var elem = all_elems[i];
+ if(elem.getAttribute('fill') === old_val) {
+ elem.setAttribute('fill', new_val);
+ }
+ if(elem.getAttribute('stroke') === old_val) {
+ elem.setAttribute('stroke', new_val);
+ }
+ if(elem.getAttribute('filter') === old_val) {
+ elem.setAttribute('filter', new_val);
+ }
+ }
+ });
+ return svg_el;
+ }
+
+ function useFallback() {
+ if(file.indexOf('.svgz') != -1) {
+ var reg_file = file.replace('.svgz','.svg');
+ if(window.console) {
+ console.log('.svgz failed, trying with .svg');
+ }
+ $.svgIcons(reg_file, opts);
+ } else if(opts.fallback) {
+ makeIcons(false, opts.fallback);
+ }
+ }
+
+ function encode64(input) {
+ // base64 strings are 4/3 larger than the original string
+ if(window.btoa) return window.btoa(input);
+ var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ var output = new Array( Math.floor( (input.length + 2) / 3 ) * 4 );
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0, p = 0;
+
+ do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ 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('');
+ }
+ }
+
+ $.getSvgIcon = function(id, uniqueClone) {
+ var icon = svg_icons[id];
+ if(uniqueClone && icon) {
+ icon = fixIDs(icon, 0, true).clone(true);
+ }
+ return icon;
+ }
+
+ $.resizeSvgIcons = function(obj) {
+ // FF2 and older don't detect .svg_icon, so we change it detect svg elems instead
+ var change_sel = !$('.svg_icon:first').length;
+ $.each(obj, function(sel, size) {
+ var arr = $.isArray(size);
+ var w = arr?size[0]:size,
+ h = arr?size[1]:size;
+ if(change_sel) {
+ sel = sel.replace(/\.svg_icon/g,'svg');
+ }
+ $(sel).each(function() {
+ this.setAttribute('width', w);
+ this.setAttribute('height', h);
+ if(window.opera && window.widget) {
+ this.parentNode.style.width = w + 'px';
+ this.parentNode.style.height = h + 'px';
+ }
+ });
+ });
+ }
+
+})(jQuery); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/svgtransformlist.js b/files_svgedit/svg-edit/svgtransformlist.js
new file mode 100644
index 000000000..5c291ca79
--- /dev/null
+++ b/files_svgedit/svg-edit/svgtransformlist.js
@@ -0,0 +1,291 @@
+/**
+ * SVGTransformList
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) browser.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.transformlist) {
+ svgedit.transformlist = {};
+}
+
+var svgroot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+
+// Helper function.
+function transformToString(xform) {
+ var m = xform.matrix,
+ text = "";
+ switch(xform.type) {
+ case 1: // MATRIX
+ text = "matrix(" + [m.a,m.b,m.c,m.d,m.e,m.f].join(",") + ")";
+ break;
+ case 2: // TRANSLATE
+ text = "translate(" + m.e + "," + m.f + ")";
+ break;
+ case 3: // SCALE
+ if (m.a == m.d) text = "scale(" + m.a + ")";
+ else text = "scale(" + m.a + "," + m.d + ")";
+ break;
+ case 4: // ROTATE
+ var cx = 0, cy = 0;
+ // this prevents divide by zero
+ if (xform.angle != 0) {
+ var K = 1 - m.a;
+ cy = ( K * m.f + m.b*m.e ) / ( K*K + m.b*m.b );
+ cx = ( m.e - m.b * cy ) / K;
+ }
+ text = "rotate(" + xform.angle + " " + cx + "," + cy + ")";
+ break;
+ }
+ return text;
+};
+
+
+/**
+ * Map of SVGTransformList objects.
+ */
+var listMap_ = {};
+
+
+// **************************************************************************************
+// SVGTransformList implementation for Webkit
+// These methods do not currently raise any exceptions.
+// These methods also do not check that transforms are being inserted. This is basically
+// implementing as much of SVGTransformList that we need to get the job done.
+//
+// interface SVGEditTransformList {
+// attribute unsigned long numberOfItems;
+// void clear ( )
+// SVGTransform initialize ( in SVGTransform newItem )
+// SVGTransform getItem ( in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform insertItemBefore ( in SVGTransform newItem, in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform replaceItem ( in SVGTransform newItem, in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform removeItem ( in unsigned long index ) (DOES NOT THROW DOMException, INDEX_SIZE_ERR)
+// SVGTransform appendItem ( in SVGTransform newItem )
+// NOT IMPLEMENTED: SVGTransform createSVGTransformFromMatrix ( in SVGMatrix matrix );
+// NOT IMPLEMENTED: SVGTransform consolidate ( );
+// }
+// **************************************************************************************
+svgedit.transformlist.SVGTransformList = function(elem) {
+ this._elem = elem || null;
+ this._xforms = [];
+ // TODO: how do we capture the undo-ability in the changed transform list?
+ this._update = function() {
+ var tstr = "";
+ var concatMatrix = svgroot.createSVGMatrix();
+ for (var i = 0; i < this.numberOfItems; ++i) {
+ var xform = this._list.getItem(i);
+ tstr += transformToString(xform) + " ";
+ }
+ this._elem.setAttribute("transform", tstr);
+ };
+ this._list = this;
+ this._init = function() {
+ // Transform attribute parser
+ var str = this._elem.getAttribute("transform");
+ if(!str) return;
+
+ // TODO: Add skew support in future
+ var re = /\s*((scale|matrix|rotate|translate)\s*\(.*?\))\s*,?\s*/;
+ var arr = [];
+ var m = true;
+ while(m) {
+ m = str.match(re);
+ str = str.replace(re,'');
+ if(m && m[1]) {
+ var x = m[1];
+ var bits = x.split(/\s*\(/);
+ var name = bits[0];
+ var val_bits = bits[1].match(/\s*(.*?)\s*\)/);
+ val_bits[1] = val_bits[1].replace(/(\d)-/g, "$1 -");
+ var val_arr = val_bits[1].split(/[, ]+/);
+ var letters = 'abcdef'.split('');
+ var mtx = svgroot.createSVGMatrix();
+ $.each(val_arr, function(i, item) {
+ val_arr[i] = parseFloat(item);
+ if(name == 'matrix') {
+ mtx[letters[i]] = val_arr[i];
+ }
+ });
+ var xform = svgroot.createSVGTransform();
+ var fname = 'set' + name.charAt(0).toUpperCase() + name.slice(1);
+ var values = name=='matrix'?[mtx]:val_arr;
+
+ if (name == 'scale' && values.length == 1) {
+ values.push(values[0]);
+ } else if (name == 'translate' && values.length == 1) {
+ values.push(0);
+ } else if (name == 'rotate' && values.length == 1) {
+ values.push(0);
+ values.push(0);
+ }
+ xform[fname].apply(xform, values);
+ this._list.appendItem(xform);
+ }
+ }
+ };
+ this._removeFromOtherLists = function(item) {
+ if (item) {
+ // Check if this transform is already in a transformlist, and
+ // remove it if so.
+ var found = false;
+ for (var id in listMap_) {
+ var tl = listMap_[id];
+ for (var i = 0, len = tl._xforms.length; i < len; ++i) {
+ if(tl._xforms[i] == item) {
+ found = true;
+ tl.removeItem(i);
+ break;
+ }
+ }
+ if (found) {
+ break;
+ }
+ }
+ }
+ };
+
+ this.numberOfItems = 0;
+ this.clear = function() {
+ this.numberOfItems = 0;
+ this._xforms = [];
+ };
+
+ this.initialize = function(newItem) {
+ this.numberOfItems = 1;
+ this._removeFromOtherLists(newItem);
+ this._xforms = [newItem];
+ };
+
+ this.getItem = function(index) {
+ if (index < this.numberOfItems && index >= 0) {
+ return this._xforms[index];
+ }
+ throw {code: 1}; // DOMException with code=INDEX_SIZE_ERR
+ };
+
+ this.insertItemBefore = function(newItem, index) {
+ var retValue = null;
+ if (index >= 0) {
+ if (index < this.numberOfItems) {
+ this._removeFromOtherLists(newItem);
+ var newxforms = new Array(this.numberOfItems + 1);
+ // TODO: use array copying and slicing
+ for ( var i = 0; i < index; ++i) {
+ newxforms[i] = this._xforms[i];
+ }
+ newxforms[i] = newItem;
+ for ( var j = i+1; i < this.numberOfItems; ++j, ++i) {
+ newxforms[j] = this._xforms[i];
+ }
+ this.numberOfItems++;
+ this._xforms = newxforms;
+ retValue = newItem;
+ this._list._update();
+ }
+ else {
+ retValue = this._list.appendItem(newItem);
+ }
+ }
+ return retValue;
+ };
+
+ this.replaceItem = function(newItem, index) {
+ var retValue = null;
+ if (index < this.numberOfItems && index >= 0) {
+ this._removeFromOtherLists(newItem);
+ this._xforms[index] = newItem;
+ retValue = newItem;
+ this._list._update();
+ }
+ return retValue;
+ };
+
+ this.removeItem = function(index) {
+ if (index < this.numberOfItems && index >= 0) {
+ var retValue = this._xforms[index];
+ var newxforms = new Array(this.numberOfItems - 1);
+ for (var i = 0; i < index; ++i) {
+ newxforms[i] = this._xforms[i];
+ }
+ for (var j = i; j < this.numberOfItems-1; ++j, ++i) {
+ newxforms[j] = this._xforms[i+1];
+ }
+ this.numberOfItems--;
+ this._xforms = newxforms;
+ this._list._update();
+ return retValue;
+ } else {
+ throw {code: 1}; // DOMException with code=INDEX_SIZE_ERR
+ }
+ };
+
+ this.appendItem = function(newItem) {
+ this._removeFromOtherLists(newItem);
+ this._xforms.push(newItem);
+ this.numberOfItems++;
+ this._list._update();
+ return newItem;
+ };
+};
+
+
+svgedit.transformlist.resetListMap = function() {
+ listMap_ = {};
+};
+
+/**
+ * Removes transforms of the given element from the map.
+ * Parameters:
+ * elem - a DOM Element
+ */
+svgedit.transformlist.removeElementFromListMap = function(elem) {
+ if (elem.id && listMap_[elem.id]) {
+ delete listMap_[elem.id];
+ }
+};
+
+// Function: getTransformList
+// Returns an object that behaves like a SVGTransformList for the given DOM element
+//
+// Parameters:
+// elem - DOM element to get a transformlist from
+svgedit.transformlist.getTransformList = function(elem) {
+ if (!svgedit.browser.supportsNativeTransformLists()) {
+ var id = elem.id;
+ if(!id) {
+ // Get unique ID for temporary element
+ id = 'temp';
+ }
+ var t = listMap_[id];
+ if (!t || id == 'temp') {
+ listMap_[id] = new svgedit.transformlist.SVGTransformList(elem);
+ listMap_[id]._init();
+ t = listMap_[id];
+ }
+ return t;
+ }
+ else if (elem.transform) {
+ return elem.transform.baseVal;
+ }
+ else if (elem.gradientTransform) {
+ return elem.gradientTransform.baseVal;
+ }
+ else if (elem.patternTransform) {
+ return elem.patternTransform.baseVal;
+ }
+
+ return null;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/svgutils.js b/files_svgedit/svg-edit/svgutils.js
new file mode 100644
index 000000000..931fb334b
--- /dev/null
+++ b/files_svgedit/svg-edit/svgutils.js
@@ -0,0 +1,647 @@
+/**
+ * Package: svgedit.utilities
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+// 2) browser.js
+// 3) svgtransformlist.js
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.utilities) {
+ svgedit.utilities = {};
+}
+
+// Constants
+
+// String used to encode base64.
+var KEYSTR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+var SVGNS = 'http://www.w3.org/2000/svg';
+var XLINKNS = 'http://www.w3.org/1999/xlink';
+var XMLNS = "http://www.w3.org/XML/1998/namespace";
+
+// Much faster than running getBBox() every time
+var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use';
+var visElems_arr = visElems.split(',');
+//var hidElems = 'clipPath,defs,desc,feGaussianBlur,filter,linearGradient,marker,mask,metadata,pattern,radialGradient,stop,switch,symbol,title,textPath';
+
+var editorContext_ = null;
+var domdoc_ = null;
+var domcontainer_ = null;
+var svgroot_ = null;
+
+svgedit.utilities.init = function(editorContext) {
+ editorContext_ = editorContext;
+ domdoc_ = editorContext.getDOMDocument();
+ domcontainer_ = editorContext.getDOMContainer();
+ svgroot_ = editorContext.getSVGRoot();
+};
+
+// Function: svgedit.utilities.toXml
+// Converts characters in a string to XML-friendly entities.
+//
+// Example: "&" becomes "&amp;"
+//
+// Parameters:
+// str - The string to be converted
+//
+// Returns:
+// The converted string
+svgedit.utilities.toXml = function(str) {
+ return $('<p/>').text(str).html();
+};
+
+// Function: svgedit.utilities.fromXml
+// Converts XML entities in a string to single characters.
+// Example: "&amp;" becomes "&"
+//
+// Parameters:
+// str - The string to be converted
+//
+// Returns:
+// The converted string
+svgedit.utilities.fromXml = function(str) {
+ return $('<p/>').html(str).text();
+};
+
+// This code was written by Tyler Akins and has been placed in the
+// public domain. It would be nice if you left this header intact.
+// Base64 code from Tyler Akins -- http://rumkin.com
+
+// schiller: Removed string concatenation in favour of Array.join() optimization,
+// also precalculate the size of the array needed.
+
+// Function: svgedit.utilities.encode64
+// Converts a string to base64
+svgedit.utilities.encode64 = function(input) {
+ // base64 strings are 4/3 larger than the original string
+// 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 output = new Array( Math.floor( (input.length + 2) / 3 ) * 4 );
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0, p = 0;
+
+ do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ 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('');
+};
+
+// Function: svgedit.utilities.decode64
+// Converts a string from base64
+svgedit.utilities.decode64 = function(input) {
+ if(window.atob) return window.atob(input);
+ var output = "";
+ var chr1, chr2, chr3 = "";
+ var enc1, enc2, enc3, enc4 = "";
+ var i = 0;
+
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+ 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++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+
+ chr1 = chr2 = chr3 = "";
+ enc1 = enc2 = enc3 = enc4 = "";
+
+ } while (i < input.length);
+ return unescape(output);
+};
+
+// Currently not being used, so commented out for now
+// based on http://phpjs.org/functions/utf8_encode:577
+// codedread:does not seem to work with webkit-based browsers on OSX
+// "encodeUTF8": function(input) {
+// //return unescape(encodeURIComponent(input)); //may or may not work
+// var output = '';
+// for (var n = 0; n < input.length; n++){
+// var c = input.charCodeAt(n);
+// if (c < 128) {
+// output += input[n];
+// }
+// else if (c > 127) {
+// if (c < 2048){
+// output += String.fromCharCode((c >> 6) | 192);
+// }
+// else {
+// output += String.fromCharCode((c >> 12) | 224) + String.fromCharCode((c >> 6) & 63 | 128);
+// }
+// output += String.fromCharCode((c & 63) | 128);
+// }
+// }
+// return output;
+// },
+
+// Function: svgedit.utilities.convertToXMLReferences
+// Converts a string to use XML references
+svgedit.utilities.convertToXMLReferences = function(input) {
+ var output = '';
+ for (var n = 0; n < input.length; n++){
+ var c = input.charCodeAt(n);
+ if (c < 128) {
+ output += input[n];
+ } else if(c > 127) {
+ output += ("&#" + c + ";");
+ }
+ }
+ return output;
+};
+
+// Function: svgedit.utilities.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
+svgedit.utilities.text2xml = function(sXML) {
+ if(sXML.indexOf('<svg:svg') >= 0) {
+ sXML = sXML.replace(/<(\/?)svg:/g, '<$1').replace('xmlns:svg', 'xmlns');
+ }
+
+ var out;
+ try{
+ var dXML = (window.DOMParser)?new DOMParser():new ActiveXObject("Microsoft.XMLDOM");
+ dXML.async = false;
+ } catch(e){
+ throw new Error("XML Parser could not be instantiated");
+ };
+ try{
+ if(dXML.loadXML) out = (dXML.loadXML(sXML))?dXML:false;
+ else out = dXML.parseFromString(sXML, "text/xml");
+ }
+ catch(e){ throw new Error("Error parsing XML string"); };
+ return out;
+};
+
+// Function: svgedit.utilities.bboxToObj
+// Converts a SVGRect into an object.
+//
+// Parameters:
+// bbox - a SVGRect
+//
+// Returns:
+// An object with properties names x, y, width, height.
+svgedit.utilities.bboxToObj = function(bbox) {
+ return {
+ x: bbox.x,
+ y: bbox.y,
+ width: bbox.width,
+ height: bbox.height
+ }
+};
+
+// Function: svgedit.utilities.walkTree
+// Walks the tree and executes the callback on each element in a top-down fashion
+//
+// Parameters:
+// elem - DOM element to traverse
+// cbFn - Callback function to run on each element
+svgedit.utilities.walkTree = function(elem, cbFn){
+ if (elem && elem.nodeType == 1) {
+ cbFn(elem);
+ var i = elem.childNodes.length;
+ while (i--) {
+ svgedit.utilities.walkTree(elem.childNodes.item(i), cbFn);
+ }
+ }
+};
+
+// Function: svgedit.utilities.walkTreePost
+// Walks the tree and executes the callback on each element in a depth-first fashion
+// TODO: FIXME: Shouldn't this be calling walkTreePost?
+//
+// Parameters:
+// elem - DOM element to traverse
+// cbFn - Callback function to run on each element
+svgedit.utilities.walkTreePost = function(elem, cbFn) {
+ if (elem && elem.nodeType == 1) {
+ var i = elem.childNodes.length;
+ while (i--) {
+ svgedit.utilities.walkTree(elem.childNodes.item(i), cbFn);
+ }
+ cbFn(elem);
+ }
+};
+
+// Function: svgedit.utilities.getUrlFromAttr
+// Extracts the URL from the url(...) syntax of some attributes.
+// Three variants:
+// * <circle fill="url(someFile.svg#foo)" />
+// * <circle fill="url('someFile.svg#foo')" />
+// * <circle fill='url("someFile.svg#foo")' />
+//
+// Parameters:
+// attrVal - The attribute value as a string
+//
+// Returns:
+// String with just the URL, like someFile.svg#foo
+svgedit.utilities.getUrlFromAttr = function(attrVal) {
+ if (attrVal) {
+ // url("#somegrad")
+ if (attrVal.indexOf('url("') === 0) {
+ return attrVal.substring(5,attrVal.indexOf('"',6));
+ }
+ // url('#somegrad')
+ else if (attrVal.indexOf("url('") === 0) {
+ return attrVal.substring(5,attrVal.indexOf("'",6));
+ }
+ else if (attrVal.indexOf("url(") === 0) {
+ return attrVal.substring(4,attrVal.indexOf(')'));
+ }
+ }
+ return null;
+};
+
+// Function: svgedit.utilities.getHref
+// Returns the given element's xlink:href value
+svgedit.utilities.getHref = function(elem) {
+ 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);
+}
+
+// Function: findDefs
+// Parameters:
+// svgElement - The <svg> element.
+//
+// Returns:
+// The document's <defs> element, create it first if necessary
+svgedit.utilities.findDefs = function(svgElement) {
+ var svgElement = editorContext_.getSVGContent().documentElement;
+ var defs = svgElement.getElementsByTagNameNS(SVGNS, "defs");
+ if (defs.length > 0) {
+ defs = defs[0];
+ }
+ else {
+ // first child is a comment, so call nextSibling
+ defs = svgElement.insertBefore( svgElement.ownerDocument.createElementNS(SVGNS, "defs" ), svgElement.firstChild.nextSibling);
+ }
+ return defs;
+};
+
+// TODO(codedread): Consider moving the next to functions to bbox.js
+
+// Function: svgedit.utilities.getPathBBox
+// Get correct BBox for a path in Webkit
+// Converted from code found here:
+// http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
+//
+// Parameters:
+// path - The path DOM element to get the BBox for
+//
+// Returns:
+// A BBox-like object
+svgedit.utilities.getPathBBox = function(path) {
+ var seglist = path.pathSegList;
+ var tot = seglist.numberOfItems;
+
+ var bounds = [[], []];
+ var start = seglist.getItem(0);
+ var P0 = [start.x, start.y];
+
+ for(var i=0; i < tot; i++) {
+ var seg = seglist.getItem(i);
+ if(!seg.x) continue;
+
+ // Add actual points to limits
+ bounds[0].push(P0[0]);
+ bounds[1].push(P0[1]);
+
+ if(seg.x1) {
+ var P1 = [seg.x1, seg.y1],
+ P2 = [seg.x2, seg.y2],
+ P3 = [seg.x, seg.y];
+
+ for(var j=0; j < 2; j++) {
+
+ var calc = function(t) {
+ return Math.pow(1-t,3) * P0[j]
+ + 3 * Math.pow(1-t,2) * t * P1[j]
+ + 3 * (1-t) * Math.pow(t,2) * P2[j]
+ + Math.pow(t,3) * P3[j];
+ };
+
+ var b = 6 * P0[j] - 12 * P1[j] + 6 * P2[j];
+ var a = -3 * P0[j] + 9 * P1[j] - 9 * P2[j] + 3 * P3[j];
+ var c = 3 * P1[j] - 3 * P0[j];
+
+ if(a == 0) {
+ if(b == 0) {
+ continue;
+ }
+ var t = -c / b;
+ if(0 < t && t < 1) {
+ bounds[j].push(calc(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) bounds[j].push(calc(t1));
+ var t2 = (-b - Math.sqrt(b2ac))/(2 * a);
+ if(0 < t2 && t2 < 1) bounds[j].push(calc(t2));
+ }
+ P0 = P3;
+ } else {
+ bounds[0].push(seg.x);
+ bounds[1].push(seg.y);
+ }
+ }
+
+ var x = Math.min.apply(null, bounds[0]);
+ var w = Math.max.apply(null, bounds[0]) - x;
+ var y = Math.min.apply(null, bounds[1]);
+ var h = Math.max.apply(null, bounds[1]) - y;
+ return {
+ 'x': x,
+ 'y': y,
+ 'width': w,
+ 'height': h
+ };
+};
+
+// Function: groupBBFix
+// Get the given/selected element's bounding box object, checking for
+// horizontal/vertical lines (see issue 717)
+// Note that performance is currently terrible, so some way to improve would
+// be great.
+//
+// Parameters:
+// selected - Container or <use> DOM element
+function groupBBFix(selected) {
+ if(svgedit.browser.supportsHVLineContainerBBox()) {
+ try { return selected.getBBox();} catch(e){}
+ }
+ var ref = $.data(selected, 'ref');
+ var matched = null;
+
+ if(ref) {
+ var copy = $(ref).children().clone().attr('visibility', 'hidden');
+ $(svgroot_).append(copy);
+ matched = copy.filter('line, path');
+ } else {
+ matched = $(selected).find('line, path');
+ }
+
+ var issue = false;
+ if(matched.length) {
+ matched.each(function() {
+ var bb = this.getBBox();
+ if(!bb.width || !bb.height) {
+ issue = true;
+ }
+ });
+ if(issue) {
+ var elems = ref ? copy : $(selected).children();
+ ret = getStrokedBBox(elems);
+ } else {
+ ret = selected.getBBox();
+ }
+ } else {
+ ret = selected.getBBox();
+ }
+ if(ref) {
+ copy.remove();
+ }
+ return ret;
+}
+
+// Function: svgedit.utilities.getBBox
+// Get the given/selected element's bounding box object, convert it to be more
+// usable when necessary
+//
+// Parameters:
+// elem - Optional DOM element to get the BBox for
+svgedit.utilities.getBBox = function(elem) {
+ var selected = elem || editorContext_.geSelectedElements()[0];
+ if (elem.nodeType != 1) return null;
+ var ret = null;
+ var elname = selected.nodeName;
+
+ switch ( elname ) {
+ case 'text':
+ if(selected.textContent === '') {
+ selected.textContent = 'a'; // Some character needed for the selector to use.
+ ret = selected.getBBox();
+ selected.textContent = '';
+ } else {
+ try { ret = selected.getBBox();} catch(e){}
+ }
+ break;
+ case 'path':
+ if(!svgedit.browser.supportsPathBBox()) {
+ ret = svgedit.utilities.getPathBBox(selected);
+ } else {
+ try { ret = selected.getBBox();} catch(e){}
+ }
+ break;
+ case 'g':
+ case 'a':
+ ret = groupBBFix(selected);
+ break;
+ default:
+
+ if(elname === 'use') {
+ ret = groupBBFix(selected, true);
+ }
+
+ if(elname === 'use' || elname === 'foreignObject') {
+ if(!ret) ret = selected.getBBox();
+ if(!svgedit.browser.isWebkit()) {
+ var bb = {};
+ bb.width = ret.width;
+ bb.height = ret.height;
+ bb.x = ret.x + parseFloat(selected.getAttribute('x')||0);
+ bb.y = ret.y + parseFloat(selected.getAttribute('y')||0);
+ ret = bb;
+ }
+ } else if(~visElems_arr.indexOf(elname)) {
+ try { ret = selected.getBBox();}
+ catch(e) {
+ // Check if element is child of a foreignObject
+ var fo = $(selected).closest("foreignObject");
+ if(fo.length) {
+ try {
+ ret = fo[0].getBBox();
+ } catch(e) {
+ ret = null;
+ }
+ } else {
+ ret = null;
+ }
+ }
+ }
+ }
+
+ if(ret) {
+ ret = svgedit.utilities.bboxToObj(ret);
+ }
+
+ // get the bounding box from the DOM (which is in that element's coordinate system)
+ return ret;
+};
+
+// Function: svgedit.utilities.getRotationAngle
+// Get the rotation angle of the given/selected DOM element
+//
+// Parameters:
+// elem - Optional DOM element to get the angle for
+// to_rad - Boolean that when true returns the value in radians rather than degrees
+//
+// Returns:
+// Float with the angle in degrees or radians
+svgedit.utilities.getRotationAngle = function(elem, to_rad) {
+ var selected = elem || editorContext_.getSelectedElements()[0];
+ // find the rotation transform (if any) and set it
+ var tlist = svgedit.transformlist.getTransformList(selected);
+ if(!tlist) return 0; // <svg> elements have no tlist
+ var N = tlist.numberOfItems;
+ for (var i = 0; i < N; ++i) {
+ var xform = tlist.getItem(i);
+ if (xform.type == 4) {
+ return to_rad ? xform.angle * Math.PI / 180.0 : xform.angle;
+ }
+ }
+ return 0.0;
+};
+
+// Function: getElem
+// Get a DOM element by ID within the SVG root element.
+//
+// Parameters:
+// id - String with the element's new ID
+if (svgedit.browser.supportsSelectors()) {
+ svgedit.utilities.getElem = function(id) {
+ // querySelector lookup
+ return svgroot_.querySelector('#'+id);
+ };
+} else if (svgedit.browser.supportsXpath()) {
+ svgedit.utilities.getElem = function(id) {
+ // xpath lookup
+ return domdoc_.evaluate(
+ 'svg:svg[@id="svgroot"]//svg:*[@id="'+id+'"]',
+ domcontainer_,
+ function() { return "http://www.w3.org/2000/svg"; },
+ 9,
+ null).singleNodeValue;
+ };
+} else {
+ svgedit.utilities.getElem = function(id) {
+ // jQuery lookup: twice as slow as xpath in FF
+ return $(svgroot_).find('[id=' + id + ']')[0];
+ };
+}
+
+// Function: assignAttributes
+// Assigns multiple attributes to an element.
+//
+// Parameters:
+// node - DOM element to apply new attribute values to
+// attrs - Object with attribute keys/values
+// suspendLength - Optional integer of milliseconds to suspend redraw
+// unitCheck - Boolean to indicate the need to use svgedit.units.setUnitAttr
+svgedit.utilities.assignAttributes = function(node, attrs, suspendLength, unitCheck) {
+ if(!suspendLength) suspendLength = 0;
+ // Opera has a problem with suspendRedraw() apparently
+ var handle = null;
+ if (!svgedit.browser.isOpera()) svgroot_.suspendRedraw(suspendLength);
+
+ for (var i in attrs) {
+ var ns = (i.substr(0,4) === "xml:" ? XMLNS :
+ i.substr(0,6) === "xlink:" ? XLINKNS : null);
+
+ if(ns) {
+ node.setAttributeNS(ns, i, attrs[i]);
+ } else if(!unitCheck) {
+ node.setAttribute(i, attrs[i]);
+ } else {
+ svgedit.units.setUnitAttr(node, i, attrs[i]);
+ }
+
+ }
+
+ if (!svgedit.browser.isOpera()) svgroot_.unsuspendRedraw(handle);
+};
+
+// Function: cleanupElement
+// Remove unneeded (default) attributes, makes resulting SVG smaller
+//
+// Parameters:
+// element - DOM element to clean up
+svgedit.utilities.cleanupElement = function(element) {
+ var handle = svgroot_.suspendRedraw(60);
+ var defaults = {
+ 'fill-opacity':1,
+ 'stop-opacity':1,
+ 'opacity':1,
+ 'stroke':'none',
+ 'stroke-dasharray':'none',
+ 'stroke-linejoin':'miter',
+ 'stroke-linecap':'butt',
+ 'stroke-opacity':1,
+ 'stroke-width':1,
+ 'rx':0,
+ 'ry':0
+ }
+
+ for(var attr in defaults) {
+ var val = defaults[attr];
+ if(element.getAttribute(attr) == val) {
+ element.removeAttribute(attr);
+ }
+ }
+
+ svgroot_.unsuspendRedraw(handle);
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/svg-edit/units.js b/files_svgedit/svg-edit/units.js
new file mode 100644
index 000000000..8be858cb2
--- /dev/null
+++ b/files_svgedit/svg-edit/units.js
@@ -0,0 +1,281 @@
+/**
+ * Package: svgedit.units
+ *
+ * Licensed under the Apache License, Version 2
+ *
+ * Copyright(c) 2010 Alexis Deveria
+ * Copyright(c) 2010 Jeff Schiller
+ */
+
+// Dependencies:
+// 1) jQuery
+
+var svgedit = svgedit || {};
+
+(function() {
+
+if (!svgedit.units) {
+ svgedit.units = {};
+}
+
+var w_attrs = ['x', 'x1', 'cx', 'rx', 'width'];
+var h_attrs = ['y', 'y1', 'cy', 'ry', 'height'];
+var unit_attrs = $.merge(['r','radius'], w_attrs);
+
+var unitNumMap = {
+ '%': 2,
+ 'em': 3,
+ 'ex': 4,
+ 'px': 5,
+ 'cm': 6,
+ 'mm': 7,
+ 'in': 8,
+ 'pt': 9,
+ 'pc': 10
+};
+
+$.merge(unit_attrs, h_attrs);
+
+// Container of elements.
+var elementContainer_;
+
+/**
+ * Stores mapping of unit type to user coordinates.
+ */
+var typeMap_ = {px: 1};
+
+/**
+ * ElementContainer interface
+ *
+ * function getBaseUnit() - returns a string of the base unit type of the container ("em")
+ * function getElement() - returns an element in the container given an id
+ * function getHeight() - returns the container's height
+ * function getWidth() - returns the container's width
+ * function getRoundDigits() - returns the number of digits number should be rounded to
+ */
+
+/**
+ * Function: svgedit.units.init()
+ * Initializes this module.
+ *
+ * Parameters:
+ * elementContainer - an object implementing the ElementContainer interface.
+ */
+svgedit.units.init = function(elementContainer) {
+ elementContainer_ = elementContainer;
+
+ var svgns = 'http://www.w3.org/2000/svg';
+
+ // Get correct em/ex values by creating a temporary SVG.
+ var svg = document.createElementNS(svgns, 'svg');
+ document.body.appendChild(svg);
+ var rect = document.createElementNS(svgns,'rect');
+ rect.setAttribute('width',"1em");
+ rect.setAttribute('height',"1ex");
+ rect.setAttribute('x',"1in");
+ svg.appendChild(rect);
+ var bb = rect.getBBox();
+ document.body.removeChild(svg);
+
+ var inch = bb.x;
+ typeMap_['em'] = bb.width;
+ typeMap_['ex'] = bb.height;
+ typeMap_['in'] = inch;
+ typeMap_['cm'] = inch / 2.54;
+ typeMap_['mm'] = inch / 25.4;
+ typeMap_['pt'] = inch / 72;
+ typeMap_['pc'] = inch / 6;
+ typeMap_['%'] = 0;
+};
+
+// Group: Unit conversion functions
+
+// Function: svgedit.units.getTypeMap
+// Returns the unit object with values for each unit
+svgedit.units.getTypeMap = function() {
+ return typeMap_;
+};
+
+// Function: svgedit.units.shortFloat
+// Rounds a given value to a float with number of digits defined in save_options
+//
+// Parameters:
+// val - The value as a String, Number or Array of two numbers to be rounded
+//
+// Returns:
+// If a string/number was given, returns a Float. If an array, return a string
+// with comma-seperated floats
+svgedit.units.shortFloat = function(val) {
+ var digits = elementContainer_.getRoundDigits();
+ if(!isNaN(val)) {
+ // Note that + converts to Number
+ return +((+val).toFixed(digits));
+ } else if($.isArray(val)) {
+ return svgedit.units.shortFloat(val[0]) + ',' + svgedit.units.shortFloat(val[1]);
+ }
+ return parseFloat(val).toFixed(digits) - 0;
+};
+
+// Function: svgedit.units.convertUnit
+// Converts the number to given unit or baseUnit
+svgedit.units.convertUnit = function(val, unit) {
+ unit = unit || elementContainer_.getBaseUnit();
+// baseVal.convertToSpecifiedUnits(unitNumMap[unit]);
+// var val = baseVal.valueInSpecifiedUnits;
+// baseVal.convertToSpecifiedUnits(1);
+ return svgedit.unit.shortFloat(val / typeMap_[unit]);
+};
+
+// Function: svgedit.units.setUnitAttr
+// Sets an element's attribute based on the unit in its current value.
+//
+// Parameters:
+// elem - DOM element to be changed
+// attr - String with the name of the attribute associated with the value
+// val - String with the attribute value to convert
+svgedit.units.setUnitAttr = function(elem, attr, val) {
+ if(!isNaN(val)) {
+ // New value is a number, so check currently used unit
+ var old_val = elem.getAttribute(attr);
+
+ // Enable this for alternate mode
+// if(old_val !== null && (isNaN(old_val) || elementContainer_.getBaseUnit() !== 'px')) {
+// // Old value was a number, so get unit, then convert
+// var unit;
+// if(old_val.substr(-1) === '%') {
+// var res = getResolution();
+// unit = '%';
+// val *= 100;
+// if(w_attrs.indexOf(attr) >= 0) {
+// val = val / res.w;
+// } else if(h_attrs.indexOf(attr) >= 0) {
+// val = val / res.h;
+// } else {
+// return val / Math.sqrt((res.w*res.w) + (res.h*res.h))/Math.sqrt(2);
+// }
+// } else {
+// if(elementContainer_.getBaseUnit() !== 'px') {
+// unit = elementContainer_.getBaseUnit();
+// } else {
+// unit = old_val.substr(-2);
+// }
+// val = val / typeMap_[unit];
+// }
+//
+// val += unit;
+// }
+ }
+ elem.setAttribute(attr, val);
+};
+
+var attrsToConvert = {
+ "line": ['x1', 'x2', 'y1', 'y2'],
+ "circle": ['cx', 'cy', 'r'],
+ "ellipse": ['cx', 'cy', 'rx', 'ry'],
+ "foreignObject": ['x', 'y', 'width', 'height'],
+ "rect": ['x', 'y', 'width', 'height'],
+ "image": ['x', 'y', 'width', 'height'],
+ "use": ['x', 'y', 'width', 'height'],
+ "text": ['x', 'y']
+};
+
+// Function: svgedit.units.convertAttrs
+// Converts all applicable attributes to the configured baseUnit
+//
+// Parameters:
+// element - a DOM element whose attributes should be converted
+svgedit.units.convertAttrs = function(element) {
+ var elName = element.tagName;
+ var unit = elementContainer_.getBaseUnit();
+ var attrs = attrsToConvert[elName];
+ if(!attrs) return;
+ var len = attrs.length
+ for(var i = 0; i < len; i++) {
+ var attr = attrs[i];
+ var cur = element.getAttribute(attr);
+ if(cur) {
+ if(!isNaN(cur)) {
+ element.setAttribute(attr, (cur / typeMap_[unit]) + unit);
+ } else {
+ // Convert existing?
+ }
+ }
+ }
+};
+
+// Function: svgedit.units.convertToNum
+// Converts given values to numbers. Attributes must be supplied in
+// case a percentage is given
+//
+// Parameters:
+// attr - String with the name of the attribute associated with the value
+// val - String with the attribute value to convert
+svgedit.units.convertToNum = function(attr, val) {
+ // Return a number if that's what it already is
+ if(!isNaN(val)) return val-0;
+
+ if(val.substr(-1) === '%') {
+ // Deal with percentage, depends on attribute
+ var num = val.substr(0, val.length-1)/100;
+ var width = elementContainer_.getWidth();
+ var height = elementContainer_.getHeight();
+
+ if(w_attrs.indexOf(attr) >= 0) {
+ return num * width;
+ } else if(h_attrs.indexOf(attr) >= 0) {
+ return num * height;
+ } else {
+ return num * Math.sqrt((width*width) + (height*height))/Math.sqrt(2);
+ }
+ } else {
+ var unit = val.substr(-2);
+ var num = val.substr(0, val.length-2);
+ // Note that this multiplication turns the string into a number
+ return num * typeMap_[unit];
+ }
+};
+
+// Function: svgedit.units.isValidUnit
+// Check if an attribute's value is in a valid format
+//
+// Parameters:
+// attr - String with the name of the attribute associated with the value
+// val - String with the attribute value to check
+svgedit.units.isValidUnit = function(attr, val) {
+ var valid = false;
+ if(unit_attrs.indexOf(attr) >= 0) {
+ // True if it's just a number
+ if(!isNaN(val)) {
+ valid = true;
+ } else {
+ // Not a number, check if it has a valid unit
+ val = val.toLowerCase();
+ $.each(typeMap_, function(unit) {
+ if(valid) return;
+ var re = new RegExp('^-?[\\d\\.]+' + unit + '$');
+ if(re.test(val)) valid = true;
+ });
+ }
+ } else if (attr == "id") {
+ // if we're trying to change the id, make sure it's not already present in the doc
+ // and the id value is valid.
+
+ var result = false;
+ // because getElem() can throw an exception in the case of an invalid id
+ // (according to http://www.w3.org/TR/xml-id/ IDs must be a NCName)
+ // we wrap it in an exception and only return true if the ID was valid and
+ // not already present
+ try {
+ var elem = elementContainer_.getElement(val);
+ result = (elem == null);
+ } catch(e) {}
+ return result;
+ } else {
+ valid = true;
+ }
+
+ return valid;
+};
+
+
+})(); \ No newline at end of file
diff --git a/files_svgedit/templates/editor.php b/files_svgedit/templates/editor.php
new file mode 100644
index 000000000..f2e49e12f
--- /dev/null
+++ b/files_svgedit/templates/editor.php
@@ -0,0 +1,18 @@
+<script type="text/javascript">
+<!--
+var ocsvgFile = {
+ path: <?php echo $_['filePath']; ?>,
+ mtime: <?php echo $_['filemTime']; ?>,
+ contents: <?php echo $_['fileContents']; ?>
+};
+//-->
+</script>
+<div id="controls">
+ <input type="button" id="ocsvgBtnSave" value="<?php echo $l->t('Save'); ?>" />
+ <input type="button" id="ocsvgBtnExport" value="<?php echo $l->t('Export PNG'); ?>" />
+ <input type="button" id="ocsvgBtnPrefs" value="<?php echo $l->t('Preferences'); ?>" />
+ <input type="button" id="ocsvgBtnClose" value="<?php echo $l->t('Close'); ?>" />
+</div>
+<div id="svgEditor">
+ <iframe src="<?php echo OC_Helper::linkTo('files_svgedit', 'svg-edit/svg-editor.html'); ?>" id="svgedit"></iframe>
+</div>