From 864cfc019d5bb81ca4d401420a38c2fe23a64878 Mon Sep 17 00:00:00 2001 From: Mark MacKay Date: Sat, 14 Jul 2012 01:09:23 -0500 Subject: [PATCH] removing unnecesary files and updating readme --- .svn/all-wcprops | 35 - .svn/dir-prop-base | 6 - .svn/entries | 234 - .svn/text-base/AUTHORS.svn-base | 22 - .svn/text-base/CHANGES.svn-base | 97 - .svn/text-base/LICENSE.svn-base | 19 - .svn/text-base/Makefile.svn-base | 97 - .svn/text-base/README.svn-base | 21 - README | 34 +- build/.svn/all-wcprops | 5 - build/.svn/entries | 31 - build/tools/.svn/all-wcprops | 35 - build/tools/.svn/entries | 198 - .../prop-base/closure-compiler.jar.svn-base | 5 - build/tools/.svn/prop-base/ship.py.svn-base | 5 - .../.svn/prop-base/yuicompressor.jar.svn-base | 5 - build/tools/.svn/text-base/COPYING.svn-base | 202 - build/tools/.svn/text-base/README.svn-base | 289 - .../text-base/closure-compiler.jar.svn-base | Bin 3939454 -> 0 bytes build/tools/.svn/text-base/ship.py.svn-base | 155 - .../.svn/text-base/yuicompressor.jar.svn-base | Bin 851359 -> 0 bytes chrome-app/.svn/all-wcprops | 17 - chrome-app/.svn/entries | 96 - .../.svn/prop-base/icon_128.png.svn-base | 5 - .../.svn/text-base/icon_128.png.svn-base | Bin 7756 -> 0 bytes .../.svn/text-base/manifest.json.svn-base | 20 - chrome-app/icon_128.png | Bin 7756 -> 0 bytes chrome-app/manifest.json | 20 - clipart/.svn/all-wcprops | 23 - clipart/.svn/entries | 130 - clipart/.svn/prop-base/moon.svg.svn-base | 5 - clipart/.svn/prop-base/star.svg.svn-base | 5 - clipart/.svn/prop-base/sun.svg.svn-base | 5 - clipart/.svn/text-base/moon.svg.svn-base | 13 - clipart/.svn/text-base/star.svg.svn-base | 4 - clipart/.svn/text-base/sun.svg.svn-base | 3 - clipart/moon.svg | 13 - clipart/star.svg | 4 - clipart/sun.svg | 3 - docs/.svn/all-wcprops | 11 - docs/.svn/entries | 77 - docs/.svn/prop-base/index.html.svn-base | 5 - docs/.svn/text-base/index.html.svn-base | 1 - docs/files/.svn/all-wcprops | 11 - docs/files/.svn/entries | 62 - .../.svn/prop-base/svgcanvas-js.html.svn-base | 5 - .../.svn/text-base/svgcanvas-js.html.svn-base | 426 - docs/index/.svn/all-wcprops | 23 - docs/index/.svn/entries | 130 - docs/index/.svn/prop-base/Files.html.svn-base | 5 - .../.svn/prop-base/Functions.html.svn-base | 5 - .../.svn/prop-base/General.html.svn-base | 5 - docs/index/.svn/text-base/Files.html.svn-base | 37 - .../.svn/text-base/Functions.html.svn-base | 53 - .../.svn/text-base/General.html.svn-base | 53 - docs/javascript/.svn/all-wcprops | 17 - docs/javascript/.svn/entries | 96 - .../.svn/prop-base/main.js.svn-base | 5 - .../.svn/prop-base/searchdata.js.svn-base | 5 - .../.svn/text-base/main.js.svn-base | 836 -- .../.svn/text-base/searchdata.js.svn-base | 122 - docs/search/.svn/all-wcprops | 125 - docs/search/.svn/entries | 708 -- .../.svn/prop-base/FilesS.html.svn-base | 5 - .../.svn/prop-base/FunctionsC.html.svn-base | 5 - .../.svn/prop-base/FunctionsD.html.svn-base | 5 - .../.svn/prop-base/FunctionsG.html.svn-base | 5 - .../.svn/prop-base/FunctionsS.html.svn-base | 5 - .../.svn/prop-base/GeneralC.html.svn-base | 5 - .../.svn/prop-base/GeneralD.html.svn-base | 5 - .../.svn/prop-base/GeneralF.html.svn-base | 5 - .../.svn/prop-base/GeneralG.html.svn-base | 5 - .../.svn/prop-base/GeneralS.html.svn-base | 5 - .../.svn/prop-base/NoResults.html.svn-base | 5 - .../.svn/text-base/FilesS.html.svn-base | 20 - .../.svn/text-base/FunctionsA.html.svn-base | 20 - .../.svn/text-base/FunctionsC.html.svn-base | 20 - .../.svn/text-base/FunctionsD.html.svn-base | 20 - .../.svn/text-base/FunctionsG.html.svn-base | 20 - .../.svn/text-base/FunctionsM.html.svn-base | 20 - .../.svn/text-base/FunctionsO.html.svn-base | 20 - .../.svn/text-base/FunctionsR.html.svn-base | 20 - .../.svn/text-base/FunctionsS.html.svn-base | 20 - .../.svn/text-base/GeneralA.html.svn-base | 20 - .../.svn/text-base/GeneralC.html.svn-base | 20 - .../.svn/text-base/GeneralD.html.svn-base | 20 - .../.svn/text-base/GeneralF.html.svn-base | 20 - .../.svn/text-base/GeneralG.html.svn-base | 20 - .../.svn/text-base/GeneralL.html.svn-base | 20 - .../.svn/text-base/GeneralM.html.svn-base | 20 - .../.svn/text-base/GeneralO.html.svn-base | 20 - .../.svn/text-base/GeneralR.html.svn-base | 20 - .../.svn/text-base/GeneralS.html.svn-base | 20 - .../.svn/text-base/NoResults.html.svn-base | 15 - docs/styles/.svn/all-wcprops | 11 - docs/styles/.svn/entries | 62 - docs/styles/.svn/prop-base/main.css.svn-base | 5 - docs/styles/.svn/text-base/main.css.svn-base | 767 -- editor/.svn/all-wcprops | 125 - editor/.svn/entries | 678 -- .../browser-not-supported.html.svn-base | 5 - editor/.svn/prop-base/browser.js.svn-base | 5 - editor/.svn/prop-base/draw.js.svn-base | 5 - editor/.svn/prop-base/embedapi.html.svn-base | 5 - editor/.svn/prop-base/embedapi.js.svn-base | 5 - editor/.svn/prop-base/history.js.svn-base | 5 - editor/.svn/prop-base/jquery.js.svn-base | 5 - editor/.svn/prop-base/math.js.svn-base | 5 - editor/.svn/prop-base/path.js.svn-base | 5 - editor/.svn/prop-base/sanitize.js.svn-base | 5 - editor/.svn/prop-base/select.js.svn-base | 5 - editor/.svn/prop-base/svg-editor.css.svn-base | 5 - .../.svn/prop-base/svg-editor.html.svn-base | 5 - editor/.svn/prop-base/svg-editor.js.svn-base | 9 - .../prop-base/svg-editor.manifest.svn-base | 5 - editor/.svn/prop-base/svgcanvas.js.svn-base | 9 - .../prop-base/svgtransformlist.js.svn-base | 5 - editor/.svn/prop-base/svgutils.js.svn-base | 5 - editor/.svn/prop-base/units.js.svn-base | 5 - .../browser-not-supported.html.svn-base | 27 - editor/.svn/text-base/browser.js.svn-base | 178 - editor/.svn/text-base/contextmenu.js.svn-base | 67 - editor/.svn/text-base/draw.js.svn-base | 528 - editor/.svn/text-base/embedapi.html.svn-base | 56 - editor/.svn/text-base/embedapi.js.svn-base | 173 - editor/.svn/text-base/history.js.svn-base | 601 -- editor/.svn/text-base/jquery.js.svn-base | 4 - editor/.svn/text-base/math.js.svn-base | 246 - editor/.svn/text-base/path.js.svn-base | 980 -- editor/.svn/text-base/sanitize.js.svn-base | 273 - editor/.svn/text-base/select.js.svn-base | 529 - editor/.svn/text-base/svg-editor.css.svn-base | 1419 --- .../.svn/text-base/svg-editor.html.svn-base | 790 -- editor/.svn/text-base/svg-editor.js.svn-base | 4882 --------- .../text-base/svg-editor.manifest.svn-base | 121 - editor/.svn/text-base/svgcanvas.js.svn-base | 8771 ---------------- .../text-base/svgtransformlist.js.svn-base | 291 - editor/.svn/text-base/svgutils.js.svn-base | 648 -- editor/.svn/text-base/units.js.svn-base | 281 - editor/.svn/tmp/svg-editor.js.tmp | 4889 --------- editor/.svn/tmp/svgcanvas.js.2.tmp | 8802 ----------------- editor/.svn/tmp/svgcanvas.js.tmp | 8789 ---------------- editor/.svn/tmp/svn-5Pzou7 | 4888 --------- editor/.svn/tmp/svn-B2AVSt | 8788 ---------------- editor/.svn/tmp/svn-cIIsFs | 8802 ----------------- editor/.svn/tmp/svn-y17CBr | 281 - editor/.svn/tmp/units.js.tmp | 285 - editor/canvg/.svn/all-wcprops | 17 - editor/canvg/.svn/entries | 96 - editor/canvg/.svn/text-base/canvg.js.svn-base | 2620 ----- .../canvg/.svn/text-base/rgbcolor.js.svn-base | 287 - editor/contextmenu/.svn/all-wcprops | 11 - editor/contextmenu/.svn/entries | 62 - .../prop-base/jquery.contextMenu.js.svn-base | 9 - .../text-base/jquery.contextMenu.js.svn-base | 203 - editor/extensions/.svn/all-wcprops | 143 - editor/extensions/.svn/entries | 816 -- .../prop-base/closepath_icons.svg.svn-base | 5 - .../.svn/prop-base/ext-imagelib.xml.svn-base | 5 - .../.svn/prop-base/ext-shapes.xml.svn-base | 5 - .../prop-base/eyedropper-icon.xml.svn-base | 5 - .../.svn/prop-base/eyedropper.png.svn-base | 5 - .../foreignobject-icons.xml.svn-base | 5 - .../.svn/prop-base/grid-icon.xml.svn-base | 5 - .../prop-base/helloworld-icon.xml.svn-base | 5 - .../.svn/prop-base/markers-icons.xml.svn-base | 5 - .../text-base/closepath_icons.svg.svn-base | 41 - .../.svn/text-base/ext-arrows.js.svn-base | 298 - .../.svn/text-base/ext-closepath.js.svn-base | 92 - .../.svn/text-base/ext-connector.js.svn-base | 587 -- .../.svn/text-base/ext-eyedropper.js.svn-base | 109 - .../text-base/ext-foreignobject.js.svn-base | 277 - .../.svn/text-base/ext-grid.js.svn-base | 184 - .../.svn/text-base/ext-helloworld.js.svn-base | 78 - .../.svn/text-base/ext-imagelib.js.svn-base | 444 - .../.svn/text-base/ext-imagelib.xml.svn-base | 14 - .../.svn/text-base/ext-markers.js.svn-base | 572 -- .../text-base/ext-server_moinsave.js.svn-base | 56 - .../text-base/ext-server_opensave.js.svn-base | 180 - .../.svn/text-base/ext-shapes.js.svn-base | 387 - .../.svn/text-base/ext-shapes.xml.svn-base | 10 - .../text-base/eyedropper-icon.xml.svn-base | 34 - .../.svn/text-base/eyedropper.png.svn-base | Bin 718 -> 0 bytes .../.svn/text-base/fileopen.php.svn-base | 31 - .../.svn/text-base/filesave.php.svn-base | 44 - .../foreignobject-icons.xml.svn-base | 96 - .../.svn/text-base/grid-icon.xml.svn-base | 30 - .../text-base/helloworld-icon.xml.svn-base | 21 - .../.svn/text-base/markers-icons.xml.svn-base | 115 - editor/extensions/imagelib/.svn/all-wcprops | 17 - editor/extensions/imagelib/.svn/entries | 96 - .../.svn/prop-base/index.html.svn-base | 5 - .../.svn/prop-base/smiley.svg.svn-base | 5 - .../.svn/text-base/index.html.svn-base | 64 - .../.svn/text-base/smiley.svg.svn-base | 12 - editor/extensions/shapelib/.svn/all-wcprops | 89 - editor/extensions/shapelib/.svn/entries | 504 - .../.svn/text-base/animal.json.svn-base | 21 - .../.svn/text-base/arrow.json.svn-base | 28 - .../text-base/dialog_balloon.json.svn-base | 9 - .../.svn/text-base/electronics.json.svn-base | 20 - .../.svn/text-base/flowchart.json.svn-base | 25 - .../.svn/text-base/game.json.svn-base | 13 - .../.svn/text-base/math.json.svn-base | 9 - .../.svn/text-base/misc.json.svn-base | 37 - .../.svn/text-base/music.json.svn-base | 21 - .../.svn/text-base/object.json.svn-base | 19 - .../.svn/text-base/raphael.txt.svn-base | 12 - .../.svn/text-base/raphael_1.json.svn-base | 67 - .../.svn/text-base/raphael_2.json.svn-base | 64 - .../.svn/text-base/symbol.json.svn-base | 28 - editor/fonts.css | 63 + editor/images/.svn/all-wcprops | 437 - editor/images/.svn/entries | 2476 ----- .../.svn/prop-base/align-bottom.png.svn-base | 5 - .../.svn/prop-base/align-bottom.svg.svn-base | 5 - .../.svn/prop-base/align-center.png.svn-base | 5 - .../.svn/prop-base/align-center.svg.svn-base | 5 - .../.svn/prop-base/align-left.png.svn-base | 5 - .../.svn/prop-base/align-left.svg.svn-base | 5 - .../.svn/prop-base/align-middle.png.svn-base | 5 - .../.svn/prop-base/align-middle.svg.svn-base | 5 - .../.svn/prop-base/align-right.png.svn-base | 5 - .../.svn/prop-base/align-right.svg.svn-base | 5 - .../.svn/prop-base/align-top.png.svn-base | 5 - .../.svn/prop-base/align-top.svg.svn-base | 5 - .../images/.svn/prop-base/bold.png.svn-base | 9 - .../images/.svn/prop-base/cancel.png.svn-base | 5 - .../images/.svn/prop-base/circle.png.svn-base | 5 - .../images/.svn/prop-base/clear.png.svn-base | 5 - .../images/.svn/prop-base/clone.png.svn-base | 5 - .../images/.svn/prop-base/conn.svg.svn-base | 5 - .../images/.svn/prop-base/copy.png.svn-base | 5 - editor/images/.svn/prop-base/cut.png.svn-base | 5 - .../images/.svn/prop-base/delete.png.svn-base | 5 - .../document-properties.png.svn-base | 5 - .../.svn/prop-base/dropdown.gif.svn-base | 5 - .../.svn/prop-base/ellipse.png.svn-base | 5 - editor/images/.svn/prop-base/eye.png.svn-base | 5 - .../images/.svn/prop-base/fhpath.png.svn-base | 5 - .../.svn/prop-base/flyouth.png.svn-base | 5 - .../images/.svn/prop-base/flyup.gif.svn-base | 5 - .../prop-base/freehand-circle.png.svn-base | 5 - .../prop-base/freehand-square.png.svn-base | 5 - .../.svn/prop-base/go-down.png.svn-base | 5 - .../images/.svn/prop-base/go-up.png.svn-base | 5 - .../images/.svn/prop-base/image.png.svn-base | 5 - .../images/.svn/prop-base/italic.png.svn-base | 9 - .../images/.svn/prop-base/line.png.svn-base | 5 - .../.svn/prop-base/link_controls.png.svn-base | 5 - .../images/.svn/prop-base/logo.png.svn-base | 5 - .../images/.svn/prop-base/logo.svg.svn-base | 5 - .../.svn/prop-base/move_bottom.png.svn-base | 5 - .../.svn/prop-base/move_top.png.svn-base | 5 - .../.svn/prop-base/node_clone.png.svn-base | 9 - .../.svn/prop-base/node_delete.png.svn-base | 9 - .../images/.svn/prop-base/none.png.svn-base | 5 - .../images/.svn/prop-base/open.png.svn-base | 5 - .../images/.svn/prop-base/paste.png.svn-base | 5 - .../images/.svn/prop-base/path.png.svn-base | 5 - .../.svn/prop-base/polygon.png.svn-base | 5 - .../.svn/prop-base/polygon.svg.svn-base | 5 - .../images/.svn/prop-base/rect.png.svn-base | 5 - .../images/.svn/prop-base/redo.png.svn-base | 5 - .../.svn/prop-base/reorient.png.svn-base | 5 - .../images/.svn/prop-base/rotate.png.svn-base | 5 - .../images/.svn/prop-base/save.png.svn-base | 5 - .../images/.svn/prop-base/select.png.svn-base | 5 - .../.svn/prop-base/select_node.png.svn-base | 5 - editor/images/.svn/prop-base/sep.png.svn-base | 5 - .../.svn/prop-base/shape_group.png.svn-base | 5 - .../.svn/prop-base/shape_ungroup.png.svn-base | 5 - .../images/.svn/prop-base/source.png.svn-base | 5 - .../prop-base/spinbtn_updn_big.png.svn-base | 5 - .../images/.svn/prop-base/square.png.svn-base | 5 - .../prop-base/svg_edit_icons.svg.svn-base | 5 - .../prop-base/svg_edit_icons.svgz.svn-base | 5 - .../images/.svn/prop-base/text.png.svn-base | 5 - .../images/.svn/prop-base/text.svg.svn-base | 5 - .../.svn/prop-base/to_path.png.svn-base | 5 - .../images/.svn/prop-base/undo.png.svn-base | 5 - .../.svn/prop-base/view-refresh.png.svn-base | 5 - .../images/.svn/prop-base/wave.png.svn-base | 5 - .../.svn/prop-base/wireframe.png.svn-base | 5 - .../images/.svn/prop-base/zoom.png.svn-base | 5 - .../images/.svn/text-base/README.txt.svn-base | 61 - .../.svn/text-base/align-bottom.png.svn-base | Bin 291 -> 0 bytes .../.svn/text-base/align-bottom.svg.svn-base | 277 - .../.svn/text-base/align-center.png.svn-base | Bin 449 -> 0 bytes .../.svn/text-base/align-center.svg.svn-base | 252 - .../.svn/text-base/align-left.png.svn-base | Bin 305 -> 0 bytes .../.svn/text-base/align-left.svg.svn-base | 235 - .../.svn/text-base/align-middle.png.svn-base | Bin 459 -> 0 bytes .../.svn/text-base/align-middle.svg.svn-base | 250 - .../.svn/text-base/align-right.png.svn-base | Bin 339 -> 0 bytes .../.svn/text-base/align-right.svg.svn-base | 233 - .../.svn/text-base/align-top.png.svn-base | Bin 287 -> 0 bytes .../.svn/text-base/align-top.svg.svn-base | 233 - .../images/.svn/text-base/bold.png.svn-base | Bin 2976 -> 0 bytes .../images/.svn/text-base/cancel.png.svn-base | Bin 1389 -> 0 bytes .../images/.svn/text-base/circle.png.svn-base | Bin 1040 -> 0 bytes .../images/.svn/text-base/clear.png.svn-base | Bin 812 -> 0 bytes .../images/.svn/text-base/clone.png.svn-base | Bin 715 -> 0 bytes .../images/.svn/text-base/conn.svg.svn-base | 29 - .../images/.svn/text-base/copy.png.svn-base | Bin 852 -> 0 bytes editor/images/.svn/text-base/cut.png.svn-base | Bin 1294 -> 0 bytes .../images/.svn/text-base/delete.png.svn-base | Bin 663 -> 0 bytes .../document-properties.png.svn-base | Bin 688 -> 0 bytes .../.svn/text-base/dropdown.gif.svn-base | Bin 49 -> 0 bytes .../.svn/text-base/ellipse.png.svn-base | Bin 811 -> 0 bytes editor/images/.svn/text-base/eye.png.svn-base | Bin 750 -> 0 bytes .../images/.svn/text-base/fhpath.png.svn-base | Bin 1218 -> 0 bytes .../.svn/text-base/flyouth.png.svn-base | Bin 109 -> 0 bytes .../images/.svn/text-base/flyup.gif.svn-base | Bin 48 -> 0 bytes .../text-base/freehand-circle.png.svn-base | Bin 1257 -> 0 bytes .../text-base/freehand-square.png.svn-base | Bin 903 -> 0 bytes .../.svn/text-base/go-down.png.svn-base | Bin 683 -> 0 bytes .../images/.svn/text-base/go-up.png.svn-base | Bin 652 -> 0 bytes .../images/.svn/text-base/image.png.svn-base | Bin 900 -> 0 bytes .../images/.svn/text-base/italic.png.svn-base | Bin 2972 -> 0 bytes .../images/.svn/text-base/line.png.svn-base | Bin 1026 -> 0 bytes .../.svn/text-base/link_controls.png.svn-base | Bin 919 -> 0 bytes .../images/.svn/text-base/logo.png.svn-base | Bin 3983 -> 0 bytes .../images/.svn/text-base/logo.svg.svn-base | 32 - .../.svn/text-base/move_bottom.png.svn-base | Bin 737 -> 0 bytes .../.svn/text-base/move_top.png.svn-base | Bin 663 -> 0 bytes .../.svn/text-base/node_clone.png.svn-base | Bin 571 -> 0 bytes .../.svn/text-base/node_delete.png.svn-base | Bin 589 -> 0 bytes .../images/.svn/text-base/none.png.svn-base | Bin 136 -> 0 bytes .../images/.svn/text-base/open.png.svn-base | Bin 919 -> 0 bytes .../images/.svn/text-base/paste.png.svn-base | Bin 906 -> 0 bytes .../images/.svn/text-base/path.png.svn-base | Bin 854 -> 0 bytes .../.svn/text-base/polygon.png.svn-base | Bin 881 -> 0 bytes .../.svn/text-base/polygon.svg.svn-base | 219 - .../images/.svn/text-base/rect.png.svn-base | Bin 404 -> 0 bytes .../images/.svn/text-base/redo.png.svn-base | Bin 921 -> 0 bytes .../.svn/text-base/reorient.png.svn-base | Bin 980 -> 0 bytes .../images/.svn/text-base/rotate.png.svn-base | Bin 1500 -> 0 bytes .../images/.svn/text-base/save.png.svn-base | Bin 1272 -> 0 bytes .../images/.svn/text-base/select.png.svn-base | Bin 712 -> 0 bytes .../.svn/text-base/select_node.png.svn-base | Bin 828 -> 0 bytes editor/images/.svn/text-base/sep.png.svn-base | Bin 93 -> 0 bytes .../.svn/text-base/shape_group.png.svn-base | Bin 553 -> 0 bytes .../.svn/text-base/shape_ungroup.png.svn-base | Bin 666 -> 0 bytes .../images/.svn/text-base/source.png.svn-base | Bin 1110 -> 0 bytes .../text-base/spinbtn_updn_big.png.svn-base | Bin 2049 -> 0 bytes .../images/.svn/text-base/square.png.svn-base | Bin 422 -> 0 bytes .../text-base/svg_edit_icons.svg.svn-base | 1034 -- .../text-base/svg_edit_icons.svgz.svn-base | Bin 5493 -> 0 bytes .../images/.svn/text-base/text.png.svn-base | Bin 1032 -> 0 bytes .../images/.svn/text-base/text.svg.svn-base | 157 - .../.svn/text-base/to_path.png.svn-base | Bin 1153 -> 0 bytes .../images/.svn/text-base/undo.png.svn-base | Bin 1122 -> 0 bytes .../.svn/text-base/view-refresh.png.svn-base | Bin 912 -> 0 bytes .../images/.svn/text-base/wave.png.svn-base | Bin 2005 -> 0 bytes .../.svn/text-base/wireframe.png.svn-base | Bin 466 -> 0 bytes .../images/.svn/text-base/zoom.png.svn-base | Bin 1197 -> 0 bytes editor/jgraduate/.svn/all-wcprops | 35 - editor/jgraduate/.svn/entries | 204 - .../.svn/prop-base/jpicker.min.js.svn-base | 5 - .../prop-base/jquery.jgraduate.js.svn-base | 5 - .../jquery.jgraduate.min.js.svn-base | 5 - .../jgraduate/.svn/text-base/LICENSE.svn-base | 202 - .../jgraduate/.svn/text-base/README.svn-base | 3 - .../.svn/text-base/jpicker.min.js.svn-base | 1 - .../text-base/jquery.jgraduate.js.svn-base | 1175 --- .../jquery.jgraduate.min.js.svn-base | 37 - editor/jgraduate/css/.svn/all-wcprops | 17 - editor/jgraduate/css/.svn/entries | 96 - .../css/.svn/prop-base/jPicker.css.svn-base | 5 - .../css/.svn/prop-base/jgraduate.css.svn-base | 5 - .../css/.svn/text-base/jPicker.css.svn-base | 1 - .../css/.svn/text-base/jgraduate.css.svn-base | 351 - editor/jgraduate/images/.svn/all-wcprops | 83 - editor/jgraduate/images/.svn/entries | 470 - .../.svn/prop-base/AlphaBar.png.svn-base | 5 - .../images/.svn/prop-base/Bars.png.svn-base | 5 - .../images/.svn/prop-base/Maps.png.svn-base | 5 - .../.svn/prop-base/NoColor.png.svn-base | 5 - .../.svn/prop-base/bar-opacity.png.svn-base | 5 - .../.svn/prop-base/map-opacity.png.svn-base | 5 - .../.svn/prop-base/mappoint.gif.svn-base | 5 - .../.svn/prop-base/mappoint_c.png.svn-base | 5 - .../.svn/prop-base/mappoint_f.png.svn-base | 5 - .../images/.svn/prop-base/picker.gif.svn-base | 5 - .../prop-base/preview-opacity.png.svn-base | 5 - .../.svn/prop-base/rangearrows.gif.svn-base | 5 - .../.svn/prop-base/rangearrows2.gif.svn-base | 5 - .../.svn/text-base/AlphaBar.png.svn-base | Bin 2195 -> 0 bytes .../images/.svn/text-base/Bars.png.svn-base | Bin 382 -> 0 bytes .../images/.svn/text-base/Maps.png.svn-base | Bin 78245 -> 0 bytes .../.svn/text-base/NoColor.png.svn-base | Bin 552 -> 0 bytes .../.svn/text-base/bar-opacity.png.svn-base | Bin 134 -> 0 bytes .../.svn/text-base/map-opacity.png.svn-base | Bin 139 -> 0 bytes .../.svn/text-base/mappoint.gif.svn-base | Bin 93 -> 0 bytes .../.svn/text-base/mappoint_c.png.svn-base | Bin 252 -> 0 bytes .../.svn/text-base/mappoint_f.png.svn-base | Bin 255 -> 0 bytes .../images/.svn/text-base/picker.gif.svn-base | Bin 146 -> 0 bytes .../text-base/preview-opacity.png.svn-base | Bin 135 -> 0 bytes .../.svn/text-base/rangearrows.gif.svn-base | Bin 76 -> 0 bytes .../.svn/text-base/rangearrows2.gif.svn-base | Bin 93 -> 0 bytes editor/jquery-ui/.svn/all-wcprops | 17 - editor/jquery-ui/.svn/entries | 96 - .../jquery-ui-1.8.custom.min.js.svn-base | 9 - .../jquery-ui-1.8.17.custom.min.js.svn-base | 54 - .../jquery-ui-1.8.custom.min.js.svn-base | 84 - editor/jquerybbq/.svn/all-wcprops | 11 - editor/jquerybbq/.svn/entries | 62 - .../.svn/prop-base/jquery.bbq.min.js.svn-base | 5 - .../.svn/text-base/jquery.bbq.min.js.svn-base | 18 - editor/js-hotkeys/.svn/all-wcprops | 17 - editor/js-hotkeys/.svn/entries | 96 - .../prop-base/jquery.hotkeys.min.js.svn-base | 5 - .../.svn/text-base/README.md.svn-base | 45 - .../text-base/jquery.hotkeys.min.js.svn-base | 15 - editor/locale/.svn/all-wcprops | 365 - editor/locale/.svn/dir-prop-base | 6 - editor/locale/.svn/entries | 2068 ---- .../locale/.svn/prop-base/lang.af.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ar.js.svn-base | 5 - .../locale/.svn/prop-base/lang.az.js.svn-base | 5 - .../locale/.svn/prop-base/lang.be.js.svn-base | 5 - .../locale/.svn/prop-base/lang.bg.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ca.js.svn-base | 5 - .../locale/.svn/prop-base/lang.cs.js.svn-base | 5 - .../locale/.svn/prop-base/lang.cy.js.svn-base | 5 - .../locale/.svn/prop-base/lang.da.js.svn-base | 5 - .../locale/.svn/prop-base/lang.de.js.svn-base | 5 - .../locale/.svn/prop-base/lang.el.js.svn-base | 5 - .../locale/.svn/prop-base/lang.en.js.svn-base | 5 - .../locale/.svn/prop-base/lang.es.js.svn-base | 5 - .../locale/.svn/prop-base/lang.et.js.svn-base | 5 - .../locale/.svn/prop-base/lang.fa.js.svn-base | 5 - .../locale/.svn/prop-base/lang.fi.js.svn-base | 5 - .../locale/.svn/prop-base/lang.fr.js.svn-base | 5 - .../locale/.svn/prop-base/lang.fy.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ga.js.svn-base | 5 - .../locale/.svn/prop-base/lang.gl.js.svn-base | 5 - .../locale/.svn/prop-base/lang.he.js.svn-base | 9 - .../locale/.svn/prop-base/lang.hi.js.svn-base | 5 - .../locale/.svn/prop-base/lang.hr.js.svn-base | 5 - .../locale/.svn/prop-base/lang.hu.js.svn-base | 5 - .../locale/.svn/prop-base/lang.hy.js.svn-base | 5 - .../locale/.svn/prop-base/lang.id.js.svn-base | 5 - .../locale/.svn/prop-base/lang.is.js.svn-base | 5 - .../locale/.svn/prop-base/lang.it.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ja.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ko.js.svn-base | 5 - .../locale/.svn/prop-base/lang.lt.js.svn-base | 5 - .../locale/.svn/prop-base/lang.lv.js.svn-base | 5 - .../locale/.svn/prop-base/lang.mk.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ms.js.svn-base | 5 - .../locale/.svn/prop-base/lang.mt.js.svn-base | 5 - .../locale/.svn/prop-base/lang.nl.js.svn-base | 5 - .../locale/.svn/prop-base/lang.no.js.svn-base | 5 - .../locale/.svn/prop-base/lang.pl.js.svn-base | 5 - .../.svn/prop-base/lang.pt-BR.js.svn-base | 5 - .../.svn/prop-base/lang.pt-PT.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ro.js.svn-base | 5 - .../locale/.svn/prop-base/lang.ru.js.svn-base | 5 - .../locale/.svn/prop-base/lang.sk.js.svn-base | 5 - .../locale/.svn/prop-base/lang.sl.js.svn-base | 5 - .../locale/.svn/prop-base/lang.sq.js.svn-base | 5 - .../locale/.svn/prop-base/lang.sr.js.svn-base | 5 - .../locale/.svn/prop-base/lang.sv.js.svn-base | 5 - .../locale/.svn/prop-base/lang.sw.js.svn-base | 5 - .../.svn/prop-base/lang.test.js.svn-base | 5 - .../locale/.svn/prop-base/lang.th.js.svn-base | 5 - .../locale/.svn/prop-base/lang.tl.js.svn-base | 5 - .../locale/.svn/prop-base/lang.tr.js.svn-base | 5 - .../locale/.svn/prop-base/lang.uk.js.svn-base | 5 - .../locale/.svn/prop-base/lang.vi.js.svn-base | 5 - .../locale/.svn/prop-base/lang.yi.js.svn-base | 5 - .../.svn/prop-base/lang.zh-CN.js.svn-base | 5 - .../.svn/prop-base/lang.zh-HK.js.svn-base | 5 - .../.svn/prop-base/lang.zh-TW.js.svn-base | 5 - .../locale/.svn/prop-base/locale.js.svn-base | 5 - .../locale/.svn/text-base/README.txt.svn-base | 17 - .../locale/.svn/text-base/lang.af.js.svn-base | 234 - .../locale/.svn/text-base/lang.ar.js.svn-base | 234 - .../locale/.svn/text-base/lang.az.js.svn-base | 234 - .../locale/.svn/text-base/lang.be.js.svn-base | 234 - .../locale/.svn/text-base/lang.bg.js.svn-base | 234 - .../locale/.svn/text-base/lang.ca.js.svn-base | 234 - .../locale/.svn/text-base/lang.cs.js.svn-base | 234 - .../locale/.svn/text-base/lang.cy.js.svn-base | 234 - .../locale/.svn/text-base/lang.da.js.svn-base | 234 - .../locale/.svn/text-base/lang.de.js.svn-base | 234 - .../locale/.svn/text-base/lang.el.js.svn-base | 234 - .../locale/.svn/text-base/lang.en.js.svn-base | 234 - .../locale/.svn/text-base/lang.es.js.svn-base | 234 - .../locale/.svn/text-base/lang.et.js.svn-base | 234 - .../locale/.svn/text-base/lang.fa.js.svn-base | 234 - .../locale/.svn/text-base/lang.fi.js.svn-base | 234 - .../locale/.svn/text-base/lang.fr.js.svn-base | 234 - .../locale/.svn/text-base/lang.fy.js.svn-base | 234 - .../locale/.svn/text-base/lang.ga.js.svn-base | 234 - .../locale/.svn/text-base/lang.gl.js.svn-base | 234 - .../locale/.svn/text-base/lang.he.js.svn-base | 234 - .../locale/.svn/text-base/lang.hi.js.svn-base | 234 - .../locale/.svn/text-base/lang.hr.js.svn-base | 234 - .../locale/.svn/text-base/lang.hu.js.svn-base | 234 - .../locale/.svn/text-base/lang.hy.js.svn-base | 234 - .../locale/.svn/text-base/lang.id.js.svn-base | 234 - .../locale/.svn/text-base/lang.is.js.svn-base | 234 - .../locale/.svn/text-base/lang.it.js.svn-base | 234 - .../locale/.svn/text-base/lang.ja.js.svn-base | 234 - .../locale/.svn/text-base/lang.ko.js.svn-base | 234 - .../locale/.svn/text-base/lang.lt.js.svn-base | 234 - .../locale/.svn/text-base/lang.lv.js.svn-base | 234 - .../locale/.svn/text-base/lang.mk.js.svn-base | 234 - .../locale/.svn/text-base/lang.ms.js.svn-base | 234 - .../locale/.svn/text-base/lang.mt.js.svn-base | 234 - .../locale/.svn/text-base/lang.nl.js.svn-base | 234 - .../locale/.svn/text-base/lang.no.js.svn-base | 234 - .../locale/.svn/text-base/lang.pl.js.svn-base | 234 - .../.svn/text-base/lang.pt-BR.js.svn-base | 234 - .../.svn/text-base/lang.pt-PT.js.svn-base | 234 - .../locale/.svn/text-base/lang.ro.js.svn-base | 234 - .../locale/.svn/text-base/lang.ru.js.svn-base | 234 - .../locale/.svn/text-base/lang.sk.js.svn-base | 234 - .../locale/.svn/text-base/lang.sl.js.svn-base | 234 - .../locale/.svn/text-base/lang.sq.js.svn-base | 234 - .../locale/.svn/text-base/lang.sr.js.svn-base | 234 - .../locale/.svn/text-base/lang.sv.js.svn-base | 234 - .../locale/.svn/text-base/lang.sw.js.svn-base | 234 - .../.svn/text-base/lang.test.js.svn-base | 234 - .../locale/.svn/text-base/lang.th.js.svn-base | 234 - .../locale/.svn/text-base/lang.tl.js.svn-base | 234 - .../locale/.svn/text-base/lang.tr.js.svn-base | 234 - .../locale/.svn/text-base/lang.uk.js.svn-base | 234 - .../locale/.svn/text-base/lang.vi.js.svn-base | 234 - .../locale/.svn/text-base/lang.yi.js.svn-base | 234 - .../.svn/text-base/lang.zh-CN.js.svn-base | 234 - .../.svn/text-base/lang.zh-HK.js.svn-base | 234 - .../.svn/text-base/lang.zh-TW.js.svn-base | 234 - .../locale/.svn/text-base/locale.js.svn-base | 320 - editor/spinbtn/.svn/all-wcprops | 29 - editor/spinbtn/.svn/entries | 164 - .../.svn/prop-base/JQuerySpinBtn.css.svn-base | 5 - .../.svn/prop-base/JQuerySpinBtn.js.svn-base | 5 - .../prop-base/JQuerySpinBtn.min.js.svn-base | 5 - .../.svn/prop-base/spinbtn_updn.png.svn-base | 5 - .../.svn/text-base/JQuerySpinBtn.css.svn-base | 41 - .../.svn/text-base/JQuerySpinBtn.js.svn-base | 266 - .../text-base/JQuerySpinBtn.min.js.svn-base | 7 - .../.svn/text-base/spinbtn_updn.png.svn-base | Bin 666 -> 0 bytes editor/svg-editor.html | 1 + editor/svgcanvas.js | 2 +- editor/svgicons/.svn/all-wcprops | 11 - editor/svgicons/.svn/entries | 62 - .../prop-base/jquery.svgicons.js.svn-base | 5 - .../text-base/jquery.svgicons.js.svn-base | 486 - examples/.svn/all-wcprops | 17 - examples/.svn/entries | 96 - examples/.svn/prop-base/arbelos.svg.svn-base | 5 - examples/.svn/prop-base/mickey.svg.svn-base | 5 - examples/.svn/text-base/arbelos.svg.svn-base | 197 - examples/.svn/text-base/mickey.svg.svn-base | 141 - examples/arbelos.svg | 197 - examples/mickey.svg | 141 - extras/.svn/all-wcprops | 23 - extras/.svn/entries | 133 - .../.svn/prop-base/update-langs.py.svn-base | 5 - extras/.svn/text-base/tojson.py.svn-base | 52 - extras/.svn/text-base/topo.py.svn-base | 39 - .../.svn/text-base/update-langs.py.svn-base | 88 - extras/server-save/.svn/all-wcprops | 23 - extras/server-save/.svn/entries | 130 - .../.svn/text-base/README.svn-base | 8 - .../text-base/svg-editor-save.js.svn-base | 3 - .../text-base/svg-editor-save.php.svn-base | 8 - extras/server-save/README | 8 - extras/server-save/svg-editor-save.js | 3 - extras/server-save/svg-editor-save.php | 8 - extras/tojson.py | 52 - extras/topo.py | 39 - extras/update-langs.py | 88 - firefox-extension/.DS_Store | Bin 6148 -> 0 bytes firefox-extension/.svn/all-wcprops | 23 - firefox-extension/.svn/entries | 133 - .../.svn/text-base/chrome.manifest.svn-base | 2 - .../.svn/text-base/handlers.js.svn-base | 55 - .../.svn/text-base/install.rdf.svn-base | 21 - firefox-extension/chrome.manifest | 2 - firefox-extension/content/.svn/all-wcprops | 23 - firefox-extension/content/.svn/entries | 130 - .../text-base/svg-edit-overlay.css.svn-base | 21 - .../text-base/svg-edit-overlay.js.svn-base | 4 - .../text-base/svg-edit-overlay.xul.svn-base | 25 - .../content/svg-edit-overlay.css | 21 - firefox-extension/content/svg-edit-overlay.js | 4 - .../content/svg-edit-overlay.xul | 25 - firefox-extension/handlers.js | 55 - firefox-extension/install.rdf | 21 - opera-widget/.svn/all-wcprops | 29 - opera-widget/.svn/entries | 164 - .../.svn/prop-base/style.css.svn-base | 5 - .../.svn/text-base/config.xml.svn-base | 17 - .../.svn/text-base/handlers.js.svn-base | 62 - .../.svn/text-base/index.html.svn-base | 24 - .../.svn/text-base/style.css.svn-base | 2 - opera-widget/config.xml | 17 - opera-widget/handlers.js | 62 - opera-widget/index.html | 24 - opera-widget/style.css | 2 - screencasts/.svn/all-wcprops | 23 - screencasts/.svn/entries | 133 - .../svgedit-screencast-1.txt.svn-base | 27 - .../svgedit-screencast-2.txt.svn-base | 23 - .../svgedit-screencast-3.txt.svn-base | 50 - screencasts/svgedit-screencast-1.txt | 27 - screencasts/svgedit-screencast-2.txt | 23 - screencasts/svgedit-screencast-3.txt | 50 - screencasts/svgopen2010/.svn/all-wcprops | 29 - screencasts/svgopen2010/.svn/entries | 164 - .../.svn/prop-base/index.html.svn-base | 5 - .../.svn/prop-base/logo.svg.svn-base | 5 - .../.svn/prop-base/script.js.svn-base | 5 - .../.svn/prop-base/style.css.svn-base | 5 - .../.svn/text-base/index.html.svn-base | 297 - .../.svn/text-base/logo.svg.svn-base | 32 - .../.svn/text-base/script.js.svn-base | 390 - .../.svn/text-base/style.css.svn-base | 395 - screencasts/svgopen2010/index.html | 297 - screencasts/svgopen2010/logo.svg | 32 - screencasts/svgopen2010/script.js | 390 - screencasts/svgopen2010/style.css | 395 - test/.svn/all-wcprops | 71 - test/.svn/entries | 405 - test/.svn/prop-base/all_tests.html.svn-base | 5 - .../prop-base/contextmenu_test.html.svn-base | 5 - test/.svn/prop-base/draw_test.html.svn-base | 5 - .../.svn/prop-base/history_test.html.svn-base | 5 - test/.svn/prop-base/math_test.html.svn-base | 5 - test/.svn/prop-base/path_test.html.svn-base | 5 - test/.svn/prop-base/select_test.html.svn-base | 5 - .../svgtransformlist_test.html.svn-base | 5 - .../prop-base/svgutils_test.html.svn-base | 5 - test/.svn/prop-base/test1.html.svn-base | 5 - test/.svn/prop-base/units_test.html.svn-base | 5 - test/.svn/text-base/all_tests.html.svn-base | 28 - .../text-base/contextmenu_test.html.svn-base | 83 - test/.svn/text-base/draw_test.html.svn-base | 539 - .../.svn/text-base/history_test.html.svn-base | 591 -- test/.svn/text-base/math_test.html.svn-base | 114 - test/.svn/text-base/path_test.html.svn-base | 29 - test/.svn/text-base/select_test.html.svn-base | 152 - .../svgtransformlist_test.html.svn-base | 418 - .../text-base/svgutils_test.html.svn-base | 134 - test/.svn/text-base/test1.html.svn-base | 283 - test/.svn/text-base/units_test.html.svn-base | 95 - test/qunit/.svn/all-wcprops | 17 - test/qunit/.svn/entries | 96 - test/qunit/.svn/prop-base/qunit.css.svn-base | 5 - test/qunit/.svn/text-base/qunit.css.svn-base | 197 - test/qunit/.svn/text-base/qunit.js.svn-base | 1415 --- wave/.svn/all-wcprops | 29 - wave/.svn/entries | 164 - wave/.svn/prop-base/svg-edit.xml.svn-base | 5 - wave/.svn/text-base/json2.js.svn-base | 481 - wave/.svn/text-base/manifest.xml.svn-base | 7 - wave/.svn/text-base/svg-edit.xml.svn-base | 484 - wave/.svn/text-base/wave.js.svn-base | 147 - wave/json2.js | 481 - wave/manifest.xml | 7 - wave/svg-edit.xml | 484 - wave/wave.js | 147 - 668 files changed, 81 insertions(+), 122208 deletions(-) delete mode 100644 .svn/all-wcprops delete mode 100644 .svn/dir-prop-base delete mode 100644 .svn/entries delete mode 100644 .svn/text-base/AUTHORS.svn-base delete mode 100644 .svn/text-base/CHANGES.svn-base delete mode 100644 .svn/text-base/LICENSE.svn-base delete mode 100644 .svn/text-base/Makefile.svn-base delete mode 100644 .svn/text-base/README.svn-base delete mode 100644 build/.svn/all-wcprops delete mode 100644 build/.svn/entries delete mode 100644 build/tools/.svn/all-wcprops delete mode 100644 build/tools/.svn/entries delete mode 100644 build/tools/.svn/prop-base/closure-compiler.jar.svn-base delete mode 100644 build/tools/.svn/prop-base/ship.py.svn-base delete mode 100644 build/tools/.svn/prop-base/yuicompressor.jar.svn-base delete mode 100644 build/tools/.svn/text-base/COPYING.svn-base delete mode 100644 build/tools/.svn/text-base/README.svn-base delete mode 100644 build/tools/.svn/text-base/closure-compiler.jar.svn-base delete mode 100644 build/tools/.svn/text-base/ship.py.svn-base delete mode 100644 build/tools/.svn/text-base/yuicompressor.jar.svn-base delete mode 100644 chrome-app/.svn/all-wcprops delete mode 100644 chrome-app/.svn/entries delete mode 100644 chrome-app/.svn/prop-base/icon_128.png.svn-base delete mode 100644 chrome-app/.svn/text-base/icon_128.png.svn-base delete mode 100644 chrome-app/.svn/text-base/manifest.json.svn-base delete mode 100644 chrome-app/icon_128.png delete mode 100644 chrome-app/manifest.json delete mode 100644 clipart/.svn/all-wcprops delete mode 100644 clipart/.svn/entries delete mode 100644 clipart/.svn/prop-base/moon.svg.svn-base delete mode 100644 clipart/.svn/prop-base/star.svg.svn-base delete mode 100644 clipart/.svn/prop-base/sun.svg.svn-base delete mode 100644 clipart/.svn/text-base/moon.svg.svn-base delete mode 100644 clipart/.svn/text-base/star.svg.svn-base delete mode 100644 clipart/.svn/text-base/sun.svg.svn-base delete mode 100644 clipart/moon.svg delete mode 100644 clipart/star.svg delete mode 100644 clipart/sun.svg delete mode 100644 docs/.svn/all-wcprops delete mode 100644 docs/.svn/entries delete mode 100644 docs/.svn/prop-base/index.html.svn-base delete mode 100644 docs/.svn/text-base/index.html.svn-base delete mode 100644 docs/files/.svn/all-wcprops delete mode 100644 docs/files/.svn/entries delete mode 100644 docs/files/.svn/prop-base/svgcanvas-js.html.svn-base delete mode 100644 docs/files/.svn/text-base/svgcanvas-js.html.svn-base delete mode 100644 docs/index/.svn/all-wcprops delete mode 100644 docs/index/.svn/entries delete mode 100644 docs/index/.svn/prop-base/Files.html.svn-base delete mode 100644 docs/index/.svn/prop-base/Functions.html.svn-base delete mode 100644 docs/index/.svn/prop-base/General.html.svn-base delete mode 100644 docs/index/.svn/text-base/Files.html.svn-base delete mode 100644 docs/index/.svn/text-base/Functions.html.svn-base delete mode 100644 docs/index/.svn/text-base/General.html.svn-base delete mode 100644 docs/javascript/.svn/all-wcprops delete mode 100644 docs/javascript/.svn/entries delete mode 100644 docs/javascript/.svn/prop-base/main.js.svn-base delete mode 100644 docs/javascript/.svn/prop-base/searchdata.js.svn-base delete mode 100644 docs/javascript/.svn/text-base/main.js.svn-base delete mode 100644 docs/javascript/.svn/text-base/searchdata.js.svn-base delete mode 100644 docs/search/.svn/all-wcprops delete mode 100644 docs/search/.svn/entries delete mode 100644 docs/search/.svn/prop-base/FilesS.html.svn-base delete mode 100644 docs/search/.svn/prop-base/FunctionsC.html.svn-base delete mode 100644 docs/search/.svn/prop-base/FunctionsD.html.svn-base delete mode 100644 docs/search/.svn/prop-base/FunctionsG.html.svn-base delete mode 100644 docs/search/.svn/prop-base/FunctionsS.html.svn-base delete mode 100644 docs/search/.svn/prop-base/GeneralC.html.svn-base delete mode 100644 docs/search/.svn/prop-base/GeneralD.html.svn-base delete mode 100644 docs/search/.svn/prop-base/GeneralF.html.svn-base delete mode 100644 docs/search/.svn/prop-base/GeneralG.html.svn-base delete mode 100644 docs/search/.svn/prop-base/GeneralS.html.svn-base delete mode 100644 docs/search/.svn/prop-base/NoResults.html.svn-base delete mode 100644 docs/search/.svn/text-base/FilesS.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsA.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsC.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsD.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsG.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsM.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsO.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsR.html.svn-base delete mode 100644 docs/search/.svn/text-base/FunctionsS.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralA.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralC.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralD.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralF.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralG.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralL.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralM.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralO.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralR.html.svn-base delete mode 100644 docs/search/.svn/text-base/GeneralS.html.svn-base delete mode 100644 docs/search/.svn/text-base/NoResults.html.svn-base delete mode 100644 docs/styles/.svn/all-wcprops delete mode 100644 docs/styles/.svn/entries delete mode 100644 docs/styles/.svn/prop-base/main.css.svn-base delete mode 100644 docs/styles/.svn/text-base/main.css.svn-base delete mode 100644 editor/.svn/all-wcprops delete mode 100644 editor/.svn/entries delete mode 100644 editor/.svn/prop-base/browser-not-supported.html.svn-base delete mode 100644 editor/.svn/prop-base/browser.js.svn-base delete mode 100644 editor/.svn/prop-base/draw.js.svn-base delete mode 100644 editor/.svn/prop-base/embedapi.html.svn-base delete mode 100644 editor/.svn/prop-base/embedapi.js.svn-base delete mode 100644 editor/.svn/prop-base/history.js.svn-base delete mode 100644 editor/.svn/prop-base/jquery.js.svn-base delete mode 100644 editor/.svn/prop-base/math.js.svn-base delete mode 100644 editor/.svn/prop-base/path.js.svn-base delete mode 100644 editor/.svn/prop-base/sanitize.js.svn-base delete mode 100644 editor/.svn/prop-base/select.js.svn-base delete mode 100644 editor/.svn/prop-base/svg-editor.css.svn-base delete mode 100644 editor/.svn/prop-base/svg-editor.html.svn-base delete mode 100644 editor/.svn/prop-base/svg-editor.js.svn-base delete mode 100644 editor/.svn/prop-base/svg-editor.manifest.svn-base delete mode 100644 editor/.svn/prop-base/svgcanvas.js.svn-base delete mode 100644 editor/.svn/prop-base/svgtransformlist.js.svn-base delete mode 100644 editor/.svn/prop-base/svgutils.js.svn-base delete mode 100644 editor/.svn/prop-base/units.js.svn-base delete mode 100644 editor/.svn/text-base/browser-not-supported.html.svn-base delete mode 100644 editor/.svn/text-base/browser.js.svn-base delete mode 100644 editor/.svn/text-base/contextmenu.js.svn-base delete mode 100644 editor/.svn/text-base/draw.js.svn-base delete mode 100644 editor/.svn/text-base/embedapi.html.svn-base delete mode 100644 editor/.svn/text-base/embedapi.js.svn-base delete mode 100644 editor/.svn/text-base/history.js.svn-base delete mode 100644 editor/.svn/text-base/jquery.js.svn-base delete mode 100644 editor/.svn/text-base/math.js.svn-base delete mode 100644 editor/.svn/text-base/path.js.svn-base delete mode 100644 editor/.svn/text-base/sanitize.js.svn-base delete mode 100644 editor/.svn/text-base/select.js.svn-base delete mode 100644 editor/.svn/text-base/svg-editor.css.svn-base delete mode 100644 editor/.svn/text-base/svg-editor.html.svn-base delete mode 100644 editor/.svn/text-base/svg-editor.js.svn-base delete mode 100644 editor/.svn/text-base/svg-editor.manifest.svn-base delete mode 100644 editor/.svn/text-base/svgcanvas.js.svn-base delete mode 100644 editor/.svn/text-base/svgtransformlist.js.svn-base delete mode 100644 editor/.svn/text-base/svgutils.js.svn-base delete mode 100644 editor/.svn/text-base/units.js.svn-base delete mode 100644 editor/.svn/tmp/svg-editor.js.tmp delete mode 100644 editor/.svn/tmp/svgcanvas.js.2.tmp delete mode 100644 editor/.svn/tmp/svgcanvas.js.tmp delete mode 100644 editor/.svn/tmp/svn-5Pzou7 delete mode 100644 editor/.svn/tmp/svn-B2AVSt delete mode 100644 editor/.svn/tmp/svn-cIIsFs delete mode 100644 editor/.svn/tmp/svn-y17CBr delete mode 100644 editor/.svn/tmp/units.js.tmp delete mode 100644 editor/canvg/.svn/all-wcprops delete mode 100644 editor/canvg/.svn/entries delete mode 100644 editor/canvg/.svn/text-base/canvg.js.svn-base delete mode 100644 editor/canvg/.svn/text-base/rgbcolor.js.svn-base delete mode 100644 editor/contextmenu/.svn/all-wcprops delete mode 100644 editor/contextmenu/.svn/entries delete mode 100644 editor/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base delete mode 100644 editor/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base delete mode 100644 editor/extensions/.svn/all-wcprops delete mode 100644 editor/extensions/.svn/entries delete mode 100644 editor/extensions/.svn/prop-base/closepath_icons.svg.svn-base delete mode 100644 editor/extensions/.svn/prop-base/ext-imagelib.xml.svn-base delete mode 100644 editor/extensions/.svn/prop-base/ext-shapes.xml.svn-base delete mode 100644 editor/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base delete mode 100644 editor/extensions/.svn/prop-base/eyedropper.png.svn-base delete mode 100644 editor/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base delete mode 100644 editor/extensions/.svn/prop-base/grid-icon.xml.svn-base delete mode 100644 editor/extensions/.svn/prop-base/helloworld-icon.xml.svn-base delete mode 100644 editor/extensions/.svn/prop-base/markers-icons.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/closepath_icons.svg.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-arrows.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-closepath.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-connector.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-eyedropper.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-foreignobject.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-grid.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-helloworld.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-imagelib.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-imagelib.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-markers.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-server_moinsave.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-server_opensave.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-shapes.js.svn-base delete mode 100644 editor/extensions/.svn/text-base/ext-shapes.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/eyedropper-icon.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/eyedropper.png.svn-base delete mode 100644 editor/extensions/.svn/text-base/fileopen.php.svn-base delete mode 100644 editor/extensions/.svn/text-base/filesave.php.svn-base delete mode 100644 editor/extensions/.svn/text-base/foreignobject-icons.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/grid-icon.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/helloworld-icon.xml.svn-base delete mode 100644 editor/extensions/.svn/text-base/markers-icons.xml.svn-base delete mode 100644 editor/extensions/imagelib/.svn/all-wcprops delete mode 100644 editor/extensions/imagelib/.svn/entries delete mode 100644 editor/extensions/imagelib/.svn/prop-base/index.html.svn-base delete mode 100644 editor/extensions/imagelib/.svn/prop-base/smiley.svg.svn-base delete mode 100644 editor/extensions/imagelib/.svn/text-base/index.html.svn-base delete mode 100644 editor/extensions/imagelib/.svn/text-base/smiley.svg.svn-base delete mode 100644 editor/extensions/shapelib/.svn/all-wcprops delete mode 100644 editor/extensions/shapelib/.svn/entries delete mode 100644 editor/extensions/shapelib/.svn/text-base/animal.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/arrow.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/dialog_balloon.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/electronics.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/flowchart.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/game.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/math.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/misc.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/music.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/object.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/raphael.txt.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/raphael_1.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/raphael_2.json.svn-base delete mode 100644 editor/extensions/shapelib/.svn/text-base/symbol.json.svn-base create mode 100644 editor/fonts.css delete mode 100644 editor/images/.svn/all-wcprops delete mode 100644 editor/images/.svn/entries delete mode 100644 editor/images/.svn/prop-base/align-bottom.png.svn-base delete mode 100644 editor/images/.svn/prop-base/align-bottom.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/align-center.png.svn-base delete mode 100644 editor/images/.svn/prop-base/align-center.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/align-left.png.svn-base delete mode 100644 editor/images/.svn/prop-base/align-left.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/align-middle.png.svn-base delete mode 100644 editor/images/.svn/prop-base/align-middle.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/align-right.png.svn-base delete mode 100644 editor/images/.svn/prop-base/align-right.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/align-top.png.svn-base delete mode 100644 editor/images/.svn/prop-base/align-top.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/bold.png.svn-base delete mode 100644 editor/images/.svn/prop-base/cancel.png.svn-base delete mode 100644 editor/images/.svn/prop-base/circle.png.svn-base delete mode 100644 editor/images/.svn/prop-base/clear.png.svn-base delete mode 100644 editor/images/.svn/prop-base/clone.png.svn-base delete mode 100644 editor/images/.svn/prop-base/conn.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/copy.png.svn-base delete mode 100644 editor/images/.svn/prop-base/cut.png.svn-base delete mode 100644 editor/images/.svn/prop-base/delete.png.svn-base delete mode 100644 editor/images/.svn/prop-base/document-properties.png.svn-base delete mode 100644 editor/images/.svn/prop-base/dropdown.gif.svn-base delete mode 100644 editor/images/.svn/prop-base/ellipse.png.svn-base delete mode 100644 editor/images/.svn/prop-base/eye.png.svn-base delete mode 100644 editor/images/.svn/prop-base/fhpath.png.svn-base delete mode 100644 editor/images/.svn/prop-base/flyouth.png.svn-base delete mode 100644 editor/images/.svn/prop-base/flyup.gif.svn-base delete mode 100644 editor/images/.svn/prop-base/freehand-circle.png.svn-base delete mode 100644 editor/images/.svn/prop-base/freehand-square.png.svn-base delete mode 100644 editor/images/.svn/prop-base/go-down.png.svn-base delete mode 100644 editor/images/.svn/prop-base/go-up.png.svn-base delete mode 100644 editor/images/.svn/prop-base/image.png.svn-base delete mode 100644 editor/images/.svn/prop-base/italic.png.svn-base delete mode 100644 editor/images/.svn/prop-base/line.png.svn-base delete mode 100644 editor/images/.svn/prop-base/link_controls.png.svn-base delete mode 100644 editor/images/.svn/prop-base/logo.png.svn-base delete mode 100644 editor/images/.svn/prop-base/logo.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/move_bottom.png.svn-base delete mode 100644 editor/images/.svn/prop-base/move_top.png.svn-base delete mode 100644 editor/images/.svn/prop-base/node_clone.png.svn-base delete mode 100644 editor/images/.svn/prop-base/node_delete.png.svn-base delete mode 100644 editor/images/.svn/prop-base/none.png.svn-base delete mode 100644 editor/images/.svn/prop-base/open.png.svn-base delete mode 100644 editor/images/.svn/prop-base/paste.png.svn-base delete mode 100644 editor/images/.svn/prop-base/path.png.svn-base delete mode 100644 editor/images/.svn/prop-base/polygon.png.svn-base delete mode 100644 editor/images/.svn/prop-base/polygon.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/rect.png.svn-base delete mode 100644 editor/images/.svn/prop-base/redo.png.svn-base delete mode 100644 editor/images/.svn/prop-base/reorient.png.svn-base delete mode 100644 editor/images/.svn/prop-base/rotate.png.svn-base delete mode 100644 editor/images/.svn/prop-base/save.png.svn-base delete mode 100644 editor/images/.svn/prop-base/select.png.svn-base delete mode 100644 editor/images/.svn/prop-base/select_node.png.svn-base delete mode 100644 editor/images/.svn/prop-base/sep.png.svn-base delete mode 100644 editor/images/.svn/prop-base/shape_group.png.svn-base delete mode 100644 editor/images/.svn/prop-base/shape_ungroup.png.svn-base delete mode 100644 editor/images/.svn/prop-base/source.png.svn-base delete mode 100644 editor/images/.svn/prop-base/spinbtn_updn_big.png.svn-base delete mode 100644 editor/images/.svn/prop-base/square.png.svn-base delete mode 100644 editor/images/.svn/prop-base/svg_edit_icons.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/svg_edit_icons.svgz.svn-base delete mode 100644 editor/images/.svn/prop-base/text.png.svn-base delete mode 100644 editor/images/.svn/prop-base/text.svg.svn-base delete mode 100644 editor/images/.svn/prop-base/to_path.png.svn-base delete mode 100644 editor/images/.svn/prop-base/undo.png.svn-base delete mode 100644 editor/images/.svn/prop-base/view-refresh.png.svn-base delete mode 100644 editor/images/.svn/prop-base/wave.png.svn-base delete mode 100644 editor/images/.svn/prop-base/wireframe.png.svn-base delete mode 100644 editor/images/.svn/prop-base/zoom.png.svn-base delete mode 100644 editor/images/.svn/text-base/README.txt.svn-base delete mode 100644 editor/images/.svn/text-base/align-bottom.png.svn-base delete mode 100644 editor/images/.svn/text-base/align-bottom.svg.svn-base delete mode 100644 editor/images/.svn/text-base/align-center.png.svn-base delete mode 100644 editor/images/.svn/text-base/align-center.svg.svn-base delete mode 100644 editor/images/.svn/text-base/align-left.png.svn-base delete mode 100644 editor/images/.svn/text-base/align-left.svg.svn-base delete mode 100644 editor/images/.svn/text-base/align-middle.png.svn-base delete mode 100644 editor/images/.svn/text-base/align-middle.svg.svn-base delete mode 100644 editor/images/.svn/text-base/align-right.png.svn-base delete mode 100644 editor/images/.svn/text-base/align-right.svg.svn-base delete mode 100644 editor/images/.svn/text-base/align-top.png.svn-base delete mode 100644 editor/images/.svn/text-base/align-top.svg.svn-base delete mode 100644 editor/images/.svn/text-base/bold.png.svn-base delete mode 100644 editor/images/.svn/text-base/cancel.png.svn-base delete mode 100644 editor/images/.svn/text-base/circle.png.svn-base delete mode 100644 editor/images/.svn/text-base/clear.png.svn-base delete mode 100644 editor/images/.svn/text-base/clone.png.svn-base delete mode 100644 editor/images/.svn/text-base/conn.svg.svn-base delete mode 100644 editor/images/.svn/text-base/copy.png.svn-base delete mode 100644 editor/images/.svn/text-base/cut.png.svn-base delete mode 100644 editor/images/.svn/text-base/delete.png.svn-base delete mode 100644 editor/images/.svn/text-base/document-properties.png.svn-base delete mode 100644 editor/images/.svn/text-base/dropdown.gif.svn-base delete mode 100644 editor/images/.svn/text-base/ellipse.png.svn-base delete mode 100644 editor/images/.svn/text-base/eye.png.svn-base delete mode 100644 editor/images/.svn/text-base/fhpath.png.svn-base delete mode 100644 editor/images/.svn/text-base/flyouth.png.svn-base delete mode 100644 editor/images/.svn/text-base/flyup.gif.svn-base delete mode 100644 editor/images/.svn/text-base/freehand-circle.png.svn-base delete mode 100644 editor/images/.svn/text-base/freehand-square.png.svn-base delete mode 100644 editor/images/.svn/text-base/go-down.png.svn-base delete mode 100644 editor/images/.svn/text-base/go-up.png.svn-base delete mode 100644 editor/images/.svn/text-base/image.png.svn-base delete mode 100644 editor/images/.svn/text-base/italic.png.svn-base delete mode 100644 editor/images/.svn/text-base/line.png.svn-base delete mode 100644 editor/images/.svn/text-base/link_controls.png.svn-base delete mode 100644 editor/images/.svn/text-base/logo.png.svn-base delete mode 100644 editor/images/.svn/text-base/logo.svg.svn-base delete mode 100644 editor/images/.svn/text-base/move_bottom.png.svn-base delete mode 100644 editor/images/.svn/text-base/move_top.png.svn-base delete mode 100644 editor/images/.svn/text-base/node_clone.png.svn-base delete mode 100644 editor/images/.svn/text-base/node_delete.png.svn-base delete mode 100644 editor/images/.svn/text-base/none.png.svn-base delete mode 100644 editor/images/.svn/text-base/open.png.svn-base delete mode 100644 editor/images/.svn/text-base/paste.png.svn-base delete mode 100644 editor/images/.svn/text-base/path.png.svn-base delete mode 100644 editor/images/.svn/text-base/polygon.png.svn-base delete mode 100644 editor/images/.svn/text-base/polygon.svg.svn-base delete mode 100644 editor/images/.svn/text-base/rect.png.svn-base delete mode 100644 editor/images/.svn/text-base/redo.png.svn-base delete mode 100644 editor/images/.svn/text-base/reorient.png.svn-base delete mode 100644 editor/images/.svn/text-base/rotate.png.svn-base delete mode 100644 editor/images/.svn/text-base/save.png.svn-base delete mode 100644 editor/images/.svn/text-base/select.png.svn-base delete mode 100644 editor/images/.svn/text-base/select_node.png.svn-base delete mode 100644 editor/images/.svn/text-base/sep.png.svn-base delete mode 100644 editor/images/.svn/text-base/shape_group.png.svn-base delete mode 100644 editor/images/.svn/text-base/shape_ungroup.png.svn-base delete mode 100644 editor/images/.svn/text-base/source.png.svn-base delete mode 100644 editor/images/.svn/text-base/spinbtn_updn_big.png.svn-base delete mode 100644 editor/images/.svn/text-base/square.png.svn-base delete mode 100644 editor/images/.svn/text-base/svg_edit_icons.svg.svn-base delete mode 100644 editor/images/.svn/text-base/svg_edit_icons.svgz.svn-base delete mode 100644 editor/images/.svn/text-base/text.png.svn-base delete mode 100644 editor/images/.svn/text-base/text.svg.svn-base delete mode 100644 editor/images/.svn/text-base/to_path.png.svn-base delete mode 100644 editor/images/.svn/text-base/undo.png.svn-base delete mode 100644 editor/images/.svn/text-base/view-refresh.png.svn-base delete mode 100644 editor/images/.svn/text-base/wave.png.svn-base delete mode 100644 editor/images/.svn/text-base/wireframe.png.svn-base delete mode 100644 editor/images/.svn/text-base/zoom.png.svn-base delete mode 100644 editor/jgraduate/.svn/all-wcprops delete mode 100644 editor/jgraduate/.svn/entries delete mode 100644 editor/jgraduate/.svn/prop-base/jpicker.min.js.svn-base delete mode 100644 editor/jgraduate/.svn/prop-base/jquery.jgraduate.js.svn-base delete mode 100644 editor/jgraduate/.svn/prop-base/jquery.jgraduate.min.js.svn-base delete mode 100644 editor/jgraduate/.svn/text-base/LICENSE.svn-base delete mode 100644 editor/jgraduate/.svn/text-base/README.svn-base delete mode 100644 editor/jgraduate/.svn/text-base/jpicker.min.js.svn-base delete mode 100644 editor/jgraduate/.svn/text-base/jquery.jgraduate.js.svn-base delete mode 100644 editor/jgraduate/.svn/text-base/jquery.jgraduate.min.js.svn-base delete mode 100644 editor/jgraduate/css/.svn/all-wcprops delete mode 100644 editor/jgraduate/css/.svn/entries delete mode 100644 editor/jgraduate/css/.svn/prop-base/jPicker.css.svn-base delete mode 100644 editor/jgraduate/css/.svn/prop-base/jgraduate.css.svn-base delete mode 100644 editor/jgraduate/css/.svn/text-base/jPicker.css.svn-base delete mode 100644 editor/jgraduate/css/.svn/text-base/jgraduate.css.svn-base delete mode 100644 editor/jgraduate/images/.svn/all-wcprops delete mode 100644 editor/jgraduate/images/.svn/entries delete mode 100644 editor/jgraduate/images/.svn/prop-base/AlphaBar.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/Bars.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/Maps.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/NoColor.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/bar-opacity.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/map-opacity.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/mappoint.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/mappoint_c.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/mappoint_f.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/picker.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/preview-opacity.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/rangearrows.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/prop-base/rangearrows2.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/AlphaBar.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/Bars.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/Maps.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/NoColor.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/bar-opacity.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/map-opacity.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/mappoint.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/mappoint_c.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/mappoint_f.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/picker.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/preview-opacity.png.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/rangearrows.gif.svn-base delete mode 100644 editor/jgraduate/images/.svn/text-base/rangearrows2.gif.svn-base delete mode 100644 editor/jquery-ui/.svn/all-wcprops delete mode 100644 editor/jquery-ui/.svn/entries delete mode 100644 editor/jquery-ui/.svn/prop-base/jquery-ui-1.8.custom.min.js.svn-base delete mode 100644 editor/jquery-ui/.svn/text-base/jquery-ui-1.8.17.custom.min.js.svn-base delete mode 100644 editor/jquery-ui/.svn/text-base/jquery-ui-1.8.custom.min.js.svn-base delete mode 100644 editor/jquerybbq/.svn/all-wcprops delete mode 100644 editor/jquerybbq/.svn/entries delete mode 100644 editor/jquerybbq/.svn/prop-base/jquery.bbq.min.js.svn-base delete mode 100644 editor/jquerybbq/.svn/text-base/jquery.bbq.min.js.svn-base delete mode 100644 editor/js-hotkeys/.svn/all-wcprops delete mode 100644 editor/js-hotkeys/.svn/entries delete mode 100644 editor/js-hotkeys/.svn/prop-base/jquery.hotkeys.min.js.svn-base delete mode 100644 editor/js-hotkeys/.svn/text-base/README.md.svn-base delete mode 100644 editor/js-hotkeys/.svn/text-base/jquery.hotkeys.min.js.svn-base delete mode 100644 editor/locale/.svn/all-wcprops delete mode 100644 editor/locale/.svn/dir-prop-base delete mode 100644 editor/locale/.svn/entries delete mode 100644 editor/locale/.svn/prop-base/lang.af.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ar.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.az.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.be.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.bg.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ca.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.cs.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.cy.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.da.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.de.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.el.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.en.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.es.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.et.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.fa.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.fi.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.fr.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.fy.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ga.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.gl.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.he.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.hi.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.hr.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.hu.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.hy.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.id.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.is.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.it.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ja.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ko.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.lt.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.lv.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.mk.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ms.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.mt.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.nl.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.no.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.pl.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.pt-BR.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.pt-PT.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ro.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.ru.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.sk.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.sl.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.sq.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.sr.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.sv.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.sw.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.test.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.th.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.tl.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.tr.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.uk.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.vi.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.yi.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.zh-CN.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.zh-HK.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/lang.zh-TW.js.svn-base delete mode 100644 editor/locale/.svn/prop-base/locale.js.svn-base delete mode 100644 editor/locale/.svn/text-base/README.txt.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.af.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ar.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.az.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.be.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.bg.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ca.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.cs.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.cy.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.da.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.de.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.el.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.en.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.es.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.et.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.fa.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.fi.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.fr.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.fy.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ga.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.gl.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.he.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.hi.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.hr.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.hu.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.hy.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.id.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.is.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.it.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ja.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ko.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.lt.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.lv.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.mk.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ms.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.mt.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.nl.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.no.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.pl.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.pt-BR.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.pt-PT.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ro.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.ru.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.sk.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.sl.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.sq.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.sr.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.sv.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.sw.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.test.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.th.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.tl.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.tr.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.uk.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.vi.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.yi.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.zh-CN.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.zh-HK.js.svn-base delete mode 100644 editor/locale/.svn/text-base/lang.zh-TW.js.svn-base delete mode 100644 editor/locale/.svn/text-base/locale.js.svn-base delete mode 100644 editor/spinbtn/.svn/all-wcprops delete mode 100644 editor/spinbtn/.svn/entries delete mode 100644 editor/spinbtn/.svn/prop-base/JQuerySpinBtn.css.svn-base delete mode 100644 editor/spinbtn/.svn/prop-base/JQuerySpinBtn.js.svn-base delete mode 100644 editor/spinbtn/.svn/prop-base/JQuerySpinBtn.min.js.svn-base delete mode 100644 editor/spinbtn/.svn/prop-base/spinbtn_updn.png.svn-base delete mode 100644 editor/spinbtn/.svn/text-base/JQuerySpinBtn.css.svn-base delete mode 100644 editor/spinbtn/.svn/text-base/JQuerySpinBtn.js.svn-base delete mode 100644 editor/spinbtn/.svn/text-base/JQuerySpinBtn.min.js.svn-base delete mode 100644 editor/spinbtn/.svn/text-base/spinbtn_updn.png.svn-base delete mode 100644 editor/svgicons/.svn/all-wcprops delete mode 100644 editor/svgicons/.svn/entries delete mode 100644 editor/svgicons/.svn/prop-base/jquery.svgicons.js.svn-base delete mode 100644 editor/svgicons/.svn/text-base/jquery.svgicons.js.svn-base delete mode 100644 examples/.svn/all-wcprops delete mode 100644 examples/.svn/entries delete mode 100644 examples/.svn/prop-base/arbelos.svg.svn-base delete mode 100644 examples/.svn/prop-base/mickey.svg.svn-base delete mode 100644 examples/.svn/text-base/arbelos.svg.svn-base delete mode 100644 examples/.svn/text-base/mickey.svg.svn-base delete mode 100644 examples/arbelos.svg delete mode 100644 examples/mickey.svg delete mode 100644 extras/.svn/all-wcprops delete mode 100644 extras/.svn/entries delete mode 100644 extras/.svn/prop-base/update-langs.py.svn-base delete mode 100644 extras/.svn/text-base/tojson.py.svn-base delete mode 100644 extras/.svn/text-base/topo.py.svn-base delete mode 100644 extras/.svn/text-base/update-langs.py.svn-base delete mode 100644 extras/server-save/.svn/all-wcprops delete mode 100644 extras/server-save/.svn/entries delete mode 100644 extras/server-save/.svn/text-base/README.svn-base delete mode 100644 extras/server-save/.svn/text-base/svg-editor-save.js.svn-base delete mode 100644 extras/server-save/.svn/text-base/svg-editor-save.php.svn-base delete mode 100644 extras/server-save/README delete mode 100644 extras/server-save/svg-editor-save.js delete mode 100644 extras/server-save/svg-editor-save.php delete mode 100644 extras/tojson.py delete mode 100644 extras/topo.py delete mode 100755 extras/update-langs.py delete mode 100644 firefox-extension/.DS_Store delete mode 100644 firefox-extension/.svn/all-wcprops delete mode 100644 firefox-extension/.svn/entries delete mode 100644 firefox-extension/.svn/text-base/chrome.manifest.svn-base delete mode 100644 firefox-extension/.svn/text-base/handlers.js.svn-base delete mode 100644 firefox-extension/.svn/text-base/install.rdf.svn-base delete mode 100644 firefox-extension/chrome.manifest delete mode 100644 firefox-extension/content/.svn/all-wcprops delete mode 100644 firefox-extension/content/.svn/entries delete mode 100644 firefox-extension/content/.svn/text-base/svg-edit-overlay.css.svn-base delete mode 100644 firefox-extension/content/.svn/text-base/svg-edit-overlay.js.svn-base delete mode 100644 firefox-extension/content/.svn/text-base/svg-edit-overlay.xul.svn-base delete mode 100644 firefox-extension/content/svg-edit-overlay.css delete mode 100644 firefox-extension/content/svg-edit-overlay.js delete mode 100644 firefox-extension/content/svg-edit-overlay.xul delete mode 100644 firefox-extension/handlers.js delete mode 100644 firefox-extension/install.rdf delete mode 100644 opera-widget/.svn/all-wcprops delete mode 100644 opera-widget/.svn/entries delete mode 100644 opera-widget/.svn/prop-base/style.css.svn-base delete mode 100644 opera-widget/.svn/text-base/config.xml.svn-base delete mode 100644 opera-widget/.svn/text-base/handlers.js.svn-base delete mode 100644 opera-widget/.svn/text-base/index.html.svn-base delete mode 100644 opera-widget/.svn/text-base/style.css.svn-base delete mode 100644 opera-widget/config.xml delete mode 100644 opera-widget/handlers.js delete mode 100644 opera-widget/index.html delete mode 100644 opera-widget/style.css delete mode 100644 screencasts/.svn/all-wcprops delete mode 100644 screencasts/.svn/entries delete mode 100644 screencasts/.svn/text-base/svgedit-screencast-1.txt.svn-base delete mode 100644 screencasts/.svn/text-base/svgedit-screencast-2.txt.svn-base delete mode 100644 screencasts/.svn/text-base/svgedit-screencast-3.txt.svn-base delete mode 100644 screencasts/svgedit-screencast-1.txt delete mode 100644 screencasts/svgedit-screencast-2.txt delete mode 100644 screencasts/svgedit-screencast-3.txt delete mode 100644 screencasts/svgopen2010/.svn/all-wcprops delete mode 100644 screencasts/svgopen2010/.svn/entries delete mode 100644 screencasts/svgopen2010/.svn/prop-base/index.html.svn-base delete mode 100644 screencasts/svgopen2010/.svn/prop-base/logo.svg.svn-base delete mode 100644 screencasts/svgopen2010/.svn/prop-base/script.js.svn-base delete mode 100644 screencasts/svgopen2010/.svn/prop-base/style.css.svn-base delete mode 100644 screencasts/svgopen2010/.svn/text-base/index.html.svn-base delete mode 100644 screencasts/svgopen2010/.svn/text-base/logo.svg.svn-base delete mode 100644 screencasts/svgopen2010/.svn/text-base/script.js.svn-base delete mode 100644 screencasts/svgopen2010/.svn/text-base/style.css.svn-base delete mode 100644 screencasts/svgopen2010/index.html delete mode 100644 screencasts/svgopen2010/logo.svg delete mode 100644 screencasts/svgopen2010/script.js delete mode 100644 screencasts/svgopen2010/style.css delete mode 100644 test/.svn/all-wcprops delete mode 100644 test/.svn/entries delete mode 100644 test/.svn/prop-base/all_tests.html.svn-base delete mode 100644 test/.svn/prop-base/contextmenu_test.html.svn-base delete mode 100644 test/.svn/prop-base/draw_test.html.svn-base delete mode 100644 test/.svn/prop-base/history_test.html.svn-base delete mode 100644 test/.svn/prop-base/math_test.html.svn-base delete mode 100644 test/.svn/prop-base/path_test.html.svn-base delete mode 100644 test/.svn/prop-base/select_test.html.svn-base delete mode 100644 test/.svn/prop-base/svgtransformlist_test.html.svn-base delete mode 100644 test/.svn/prop-base/svgutils_test.html.svn-base delete mode 100644 test/.svn/prop-base/test1.html.svn-base delete mode 100644 test/.svn/prop-base/units_test.html.svn-base delete mode 100644 test/.svn/text-base/all_tests.html.svn-base delete mode 100644 test/.svn/text-base/contextmenu_test.html.svn-base delete mode 100644 test/.svn/text-base/draw_test.html.svn-base delete mode 100644 test/.svn/text-base/history_test.html.svn-base delete mode 100644 test/.svn/text-base/math_test.html.svn-base delete mode 100644 test/.svn/text-base/path_test.html.svn-base delete mode 100644 test/.svn/text-base/select_test.html.svn-base delete mode 100644 test/.svn/text-base/svgtransformlist_test.html.svn-base delete mode 100644 test/.svn/text-base/svgutils_test.html.svn-base delete mode 100644 test/.svn/text-base/test1.html.svn-base delete mode 100644 test/.svn/text-base/units_test.html.svn-base delete mode 100644 test/qunit/.svn/all-wcprops delete mode 100644 test/qunit/.svn/entries delete mode 100644 test/qunit/.svn/prop-base/qunit.css.svn-base delete mode 100644 test/qunit/.svn/text-base/qunit.css.svn-base delete mode 100644 test/qunit/.svn/text-base/qunit.js.svn-base delete mode 100644 wave/.svn/all-wcprops delete mode 100644 wave/.svn/entries delete mode 100644 wave/.svn/prop-base/svg-edit.xml.svn-base delete mode 100644 wave/.svn/text-base/json2.js.svn-base delete mode 100644 wave/.svn/text-base/manifest.xml.svn-base delete mode 100644 wave/.svn/text-base/svg-edit.xml.svn-base delete mode 100644 wave/.svn/text-base/wave.js.svn-base delete mode 100644 wave/json2.js delete mode 100644 wave/manifest.xml delete mode 100644 wave/svg-edit.xml delete mode 100644 wave/wave.js diff --git a/.svn/all-wcprops b/.svn/all-wcprops deleted file mode 100644 index 533dc0d..0000000 --- a/.svn/all-wcprops +++ /dev/null @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 24 -/svn/!svn/ver/2083/trunk -END -LICENSE -K 25 -svn:wc:ra_dav:version-url -V 32 -/svn/!svn/ver/2044/trunk/LICENSE -END -AUTHORS -K 25 -svn:wc:ra_dav:version-url -V 32 -/svn/!svn/ver/1563/trunk/AUTHORS -END -CHANGES -K 25 -svn:wc:ra_dav:version-url -V 32 -/svn/!svn/ver/2044/trunk/CHANGES -END -README -K 25 -svn:wc:ra_dav:version-url -V 30 -/svn/!svn/ver/143/trunk/README -END -Makefile -K 25 -svn:wc:ra_dav:version-url -V 33 -/svn/!svn/ver/2060/trunk/Makefile -END diff --git a/.svn/dir-prop-base b/.svn/dir-prop-base deleted file mode 100644 index 45ec68c..0000000 --- a/.svn/dir-prop-base +++ /dev/null @@ -1,6 +0,0 @@ -K 13 -svn:mergeinfo -V 64 -/branches/fixtransforms:992-1070 -/branches/transformlist:897-933 -END diff --git a/.svn/entries b/.svn/entries deleted file mode 100644 index 23174aa..0000000 --- a/.svn/entries +++ /dev/null @@ -1,234 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk -http://svg-edit.googlecode.com/svn - - - -2012-05-25T04:04:22.765892Z -2083 -asyazwan@gmail.com -has-props - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -test -dir - -LICENSE -file - - - - -2012-03-23T10:42:16.000000Z -2de10bee5aba2997d80b7a43eb148154 -2011-09-29T14:56:00.675535Z -2044 -rusnakp - - - - - - - - - - - - - - - - - - - - - -1087 - -AUTHORS -file - - - - -2012-03-23T10:42:16.000000Z -8009158a7750de0de912d9355abb9ac6 -2010-05-03T23:29:13.086772Z -1563 -rusnakp - - - - - - - - - - - - - - - - - - - - - -995 - -editor -dir - -opera-widget -dir - -docs -dir - -chrome-app -dir - -README -file - - - - -2012-03-23T10:42:16.000000Z -a08402165e55578ba5c7af29b0185a98 -2009-06-17T19:00:23.784445Z -143 -rusnakp - - - - - - - - - - - - - - - - - - - - - -417 - -clipart -dir - -build -dir - -wave -dir - -extras -dir - -CHANGES -file - - - - -2012-03-23T10:42:16.000000Z -74ed2c78b092891646a49b81f7b7c89d -2011-09-29T14:56:00.675535Z -2044 -rusnakp - - - - - - - - - - - - - - - - - - - - - -2666 - -firefox-extension -dir - -screencasts -dir - -Makefile -file - - - - -2012-03-23T10:42:16.000000Z -3fdd50a53e633648a8413eda96a820b6 -2012-03-17T17:45:28.575273Z -2060 -codedread - - - - - - - - - - - - - - - - - - - - - -2783 - -examples -dir - diff --git a/.svn/text-base/AUTHORS.svn-base b/.svn/text-base/AUTHORS.svn-base deleted file mode 100644 index 2e0fe8d..0000000 --- a/.svn/text-base/AUTHORS.svn-base +++ /dev/null @@ -1,22 +0,0 @@ -Narendra Sisodiya -Pavol Rusnak -Jeff Schiller -Vidar Hokstad -Alexis Deveria - -Translation credits: - -ar: Tarik Belaam (العربية) -cs: Jan Ptacek (Čeština) -de: Reimar Bauer (Deutsch) -es: Alicia Puerto (Español) -fa: Payman Delshad (فارسی) -fr: wormsxulla (Français) -fy: Wander Nauta (Frysk) -hi: Tavish Naruka (हिन्दी) -ja: Dong (日本語) -nl: Jaap Blom (Nederlands) -ro: Christian Tzurcanu (Româneşte) -ru: Laurent Dufloux (Русский) -sk: Pavol Rusnak (Slovenčina) -zh-TW: 黃瀚生 (Han Sheng Huang) (台灣正體) diff --git a/.svn/text-base/CHANGES.svn-base b/.svn/text-base/CHANGES.svn-base deleted file mode 100644 index 9abfcef..0000000 --- a/.svn/text-base/CHANGES.svn-base +++ /dev/null @@ -1,97 +0,0 @@ -2.5 - June 15, 2010 -------------------- -* Open Local Files (Firefox 3.6+ only) -* Import SVG into Drawing (Firefox 3.6+ only) -* Ability to create extensions/plugins -* Main menu and overal interface improvements -* Create and select elements outside the canvas -* Base support for the svg:use element -* Add/Edit Sub-paths -* Multiple path segment selection -* Radial Gradient support -* Connector lines -* Arrows & Markers -* Smoother freehand paths -* Foreign markup support (ForeignObject?/MathML) -* Configurable options -* File-loading options -* Eye-dropper tool (copy element style) -* Stroke linejoin and linecap options -* Export to PNG -* Blur tool -* Page-align single elements -* Inline text editing -* Line draw snapping with Shift key - -2.4 - January 11, 2010 ----------------------- -* Zoom -* Layers -* UI Localization -* Wireframe Mode -* Resizable UI (SVG icons) -* Set background color and/or image (for tracing) -* Convert Shapes to Paths -* X, Y coordinates for all elements -* Draggable Dialog boxes -* Select Non-Adjacent Elements -* Fixed-ratio resize -* Automatic Tool Switching -* Raster Images -* Group elements -* Add/Remove path nodes -* Curved Paths -* Floating point values for all attributes -* Text fields for all attributes -* Title element - -2.3 - September 08, 2009 ------------------------- -* Align Objects -* Rotate Objects -* Clone Objects -* Select Next/Prev Object -* Edit SVG Source -* Gradient picking -* Polygon Mode (Path Editing, Phase 1) - -2.2 - July 08, 2009 -------------------- -* Multiselect Mode -* Undo/Redo Actions -* Resize Elements -* Contextual tools for rect, circle, ellipse, line, text elements -* Some updated button images -* Stretched the UI to fit the browser window -* Resizing of the SVG canvas -* Upgraded to jPicker 1.0.8 - -2.1 - June 17, 2009 -------------------- -* tooltips added to all UI elements -* fix flyout menus -* ask before clearing the drawing (suggested by martin.vidner) -* control group, fill and stroke opacity -* fix flyouts when using color picker -* change license from GPLv2 to Apache License v2.0 -* replaced Farbtastic with jPicker, because of the license issues -* removed dependency on svgcanvas.svg, now created in JavaScript -* added Select tool -* using jQuery hosted by Google instead of local version -* allow dragging of elements -* save SVG file to separate tab -* create and edit text elements -* context panel tools -* change rect radius, font-family, font-size -* added keystroke shortcuts for all tools -* move to top/bottom - -2.0 - June 03, 2009 -------------------- -* rewritten SVG-edit, so now it uses OOP -* draw ellipse, square -* created HTML interface similar to Inkscape - -1.0 - February 06, 2009 -------------------- -* SVG-Edit released diff --git a/.svn/text-base/LICENSE.svn-base b/.svn/text-base/LICENSE.svn-base deleted file mode 100644 index b98ac70..0000000 --- a/.svn/text-base/LICENSE.svn-base +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2009-2011 by SVG-edit authors (see AUTHORS file) - -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. diff --git a/.svn/text-base/Makefile.svn-base b/.svn/text-base/Makefile.svn-base deleted file mode 100644 index 52b55c6..0000000 --- a/.svn/text-base/Makefile.svn-base +++ /dev/null @@ -1,97 +0,0 @@ -NAME=svg-edit -VERSION=2.6 -PACKAGE=$(NAME)-$(VERSION) -MAKEDOCS=naturaldocs/NaturalDocs -CLOSURE=build/tools/closure-compiler.jar -ZIP=zip - -# All files that will be compiled by the Closure compiler. - -JS_FILES=\ - contextmenu/jquery.contextmenu.js \ - browser.js \ - svgtransformlist.js \ - math.js \ - units.js \ - svgutils.js \ - sanitize.js \ - history.js \ - select.js \ - draw.js \ - path.js \ - svgcanvas.js \ - svg-editor.js \ - contextmenu.js \ - locale/locale.js - -JS_INPUT_FILES=$(addprefix editor/, $(JS_FILES)) -JS_BUILD_FILES=$(addprefix build/$(PACKAGE)/, $(JS_FILES)) -CLOSURE_JS_ARGS=$(addprefix --js , $(JS_INPUT_FILES)) -COMPILED_JS=editor/svgedit.compiled.js - -all: release firefox opera - -# The build directory relies on the JS being compiled. -build/$(PACKAGE): $(COMPILED_JS) - rm -rf config - mkdir config - if [ -x $(MAKEDOCS) ] ; then $(MAKEDOCS) -i editor/ -o html docs/ -p config/ -oft -r ; fi - - # Make build directory and copy all editor contents into it - mkdir -p build/$(PACKAGE) - cp -r editor/* build/$(PACKAGE) - - # Remove all hidden .svn directories - -find build/$(PACKAGE) -name .svn -type d | xargs rm -rf {} \; - - # Create the release version of the main HTML file. - build/tools/ship.py --i=editor/svg-editor.html --on=svg_edit_release > build/$(PACKAGE)/svg-editor.html - -# NOTE: Some files are not ready for the Closure compiler: (jquery) -# NOTE: Our code safely compiles under SIMPLE_OPTIMIZATIONS -# NOTE: Our code is *not* ready for ADVANCED_OPTIMIZATIONS -# NOTE: WHITESPACE_ONLY and --formatting PRETTY_PRINT is helpful for debugging. -$(COMPILED_JS): - java -jar $(CLOSURE) \ - --compilation_level SIMPLE_OPTIMIZATIONS \ - $(CLOSURE_JS_ARGS) \ - --js_output_file $(COMPILED_JS) - -compile: $(COMPILED_JS) - -release: build/$(PACKAGE) - cd build ; $(ZIP) $(PACKAGE).zip -r $(PACKAGE) ; cd .. - tar -z -c -f build/$(PACKAGE)-src.tar.gz \ - --exclude='\.svn' \ - --exclude='build/*' \ - . - -firefox: build/$(PACKAGE) - mkdir -p build/firefox/content/editor - cp -r firefox-extension/* build/firefox - rm -rf build/firefox/content/.svn - cp -r build/$(PACKAGE)/* build/firefox/content/editor - rm -f build/firefox/content/editor/embedapi.js - cd build/firefox ; $(ZIP) ../$(PACKAGE).xpi -r * ; cd ../.. - -opera: build/$(PACKAGE) - mkdir -p build/opera/editor - cp opera-widget/* build/opera - cp -r build/$(PACKAGE)/* build/opera/editor - cd build/opera ; $(ZIP) ../$(PACKAGE).wgt -r * ; cd ../.. - -chrome: - mkdir -p build/svgedit_app - cp -a chrome-app/* build/svgedit_app - cd build ; $(ZIP) -r $(PACKAGE)-crx.zip svgedit_app ; rm -rf svgedit_app; cd .. - -clean: - rm -rf config - rm -rf build/$(PACKAGE) - rm -rf build/firefox - rm -rf build/opera - rm -rf build/$(PACKAGE).zip - rm -rf build/$(PACKAGE)-src.tar.gz - rm -rf build/$(PACKAGE).xpi - rm -rf build/$(PACKAGE).wgt - rm -rf $(COMPILED_JS) diff --git a/.svn/text-base/README.svn-base b/.svn/text-base/README.svn-base deleted file mode 100644 index f8fe943..0000000 --- a/.svn/text-base/README.svn-base +++ /dev/null @@ -1,21 +0,0 @@ -SVG-edit, a web based SVG editor - -http://code.google.com/p/svg-edit/ - -see AUTHORS file for authors - ------ - -SVG-edit contains code from these projects: - -jQuery JavaScript Library v1.3.2 -http://jquery.com/ -Copyright (c) 2009 John Resig - -jQuery js-Hotkeys -http://code.google.com/p/js-hotkeys/ -Copyright (c) 2008 Tzury Bar Yochay - -jPicker -http://www.digitalmagicpro.com/jPicker/ -Copyright (c) 2009 Christopher T. Tillman diff --git a/README b/README index f8fe943..a752ee6 100644 --- a/README +++ b/README @@ -1,21 +1,19 @@ -SVG-edit, a web based SVG editor +Method Draw is a fork of SVG Edit, a web based SVG editor. +The purpose of Method Draw is to improve the usability and user experience of SVG Edit. It removes some features such as +layers and line-caps/corners in exchange for a more simple and pleasant experience. + +Method Draw is Copyright (c) +Mark MacKay mark@method.ac + +Published under an MIT License. Enjoy. + +Based on SVG Edit: http://code.google.com/p/svg-edit/ -see AUTHORS file for authors - ------ - -SVG-edit contains code from these projects: - -jQuery JavaScript Library v1.3.2 -http://jquery.com/ -Copyright (c) 2009 John Resig - -jQuery js-Hotkeys -http://code.google.com/p/js-hotkeys/ -Copyright (c) 2008 Tzury Bar Yochay - -jPicker -http://www.digitalmagicpro.com/jPicker/ -Copyright (c) 2009 Christopher T. Tillman +SVG Edit is Copyright (c) +Narendra Sisodiya +Pavol Rusnak +Jeff Schiller +Vidar Hokstad +Alexis Deveria diff --git a/build/.svn/all-wcprops b/build/.svn/all-wcprops deleted file mode 100644 index d911b94..0000000 --- a/build/.svn/all-wcprops +++ /dev/null @@ -1,5 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 30 -/svn/!svn/ver/1934/trunk/build -END diff --git a/build/.svn/entries b/build/.svn/entries deleted file mode 100644 index 7828a27..0000000 --- a/build/.svn/entries +++ /dev/null @@ -1,31 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/build -http://svg-edit.googlecode.com/svn - - - -2011-01-18T19:04:34.428452Z -1934 -codedread - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -tools -dir - diff --git a/build/tools/.svn/all-wcprops b/build/tools/.svn/all-wcprops deleted file mode 100644 index 177d432..0000000 --- a/build/tools/.svn/all-wcprops +++ /dev/null @@ -1,35 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/1934/trunk/build/tools -END -closure-compiler.jar -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/1833/trunk/build/tools/closure-compiler.jar -END -COPYING -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/1833/trunk/build/tools/COPYING -END -ship.py -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/1934/trunk/build/tools/ship.py -END -README -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/1833/trunk/build/tools/README -END -yuicompressor.jar -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/1480/trunk/build/tools/yuicompressor.jar -END diff --git a/build/tools/.svn/entries b/build/tools/.svn/entries deleted file mode 100644 index 792fcd2..0000000 --- a/build/tools/.svn/entries +++ /dev/null @@ -1,198 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/build/tools -http://svg-edit.googlecode.com/svn - - - -2011-01-18T19:04:34.428452Z -1934 -codedread - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -closure-compiler.jar -file - - - - -2012-03-23T10:42:16.000000Z -e805ba926e14ba85aa09334aac487533 -2010-10-28T16:47:39.333879Z -1833 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -3939454 - -COPYING -file - - - - -2012-03-23T10:42:16.000000Z -3b83ef96387f14655fc854ddc3c6bd57 -2010-10-28T16:47:39.333879Z -1833 -codedread - - - - - - - - - - - - - - - - - - - - - -11358 - -ship.py -file - - - - -2012-03-23T10:42:16.000000Z -a646b846ec8b02ea86aa4b7179394963 -2011-01-18T19:04:34.428452Z -1934 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -4264 - -README -file - - - - -2012-03-23T10:42:16.000000Z -52caab2236380abcd7ed78f0c55d9213 -2010-10-28T16:47:39.333879Z -1833 -codedread - - - - - - - - - - - - - - - - - - - - - -7143 - -yuicompressor.jar -file - - - - -2012-03-23T10:42:16.000000Z -15af1cac844bb711c44b19b66444c853 -2010-03-28T13:59:52.102843Z -1480 -rusnakp -has-props - - - - - - - - - - - - - - - - - - - - -851359 - diff --git a/build/tools/.svn/prop-base/closure-compiler.jar.svn-base b/build/tools/.svn/prop-base/closure-compiler.jar.svn-base deleted file mode 100644 index 5e9587e..0000000 --- a/build/tools/.svn/prop-base/closure-compiler.jar.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 24 -application/octet-stream -END diff --git a/build/tools/.svn/prop-base/ship.py.svn-base b/build/tools/.svn/prop-base/ship.py.svn-base deleted file mode 100644 index 869ac71..0000000 --- a/build/tools/.svn/prop-base/ship.py.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 14 -svn:executable -V 1 -* -END diff --git a/build/tools/.svn/prop-base/yuicompressor.jar.svn-base b/build/tools/.svn/prop-base/yuicompressor.jar.svn-base deleted file mode 100644 index 5e9587e..0000000 --- a/build/tools/.svn/prop-base/yuicompressor.jar.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 24 -application/octet-stream -END diff --git a/build/tools/.svn/text-base/COPYING.svn-base b/build/tools/.svn/text-base/COPYING.svn-base deleted file mode 100644 index d645695..0000000 --- a/build/tools/.svn/text-base/COPYING.svn-base +++ /dev/null @@ -1,202 +0,0 @@ - - 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/build/tools/.svn/text-base/README.svn-base b/build/tools/.svn/text-base/README.svn-base deleted file mode 100644 index d3c90e7..0000000 --- a/build/tools/.svn/text-base/README.svn-base +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * 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. - */ - -// -// Contents -// - -The Closure Compiler performs checking, instrumentation, and -optimizations on JavaScript code. The purpose of this README is to -explain how to build and run the Closure Compiler. - -The Closure Compiler requires Java 6 or higher. -http://www.java.com/ - - -// -// Building The Closure Compiler -// - -There are three ways to get a Closure Compiler executable. - -1) Use one we built for you. - -Pre-built Closure binaries can be found at -http://code.google.com/p/closure-compiler/downloads/list - - -2) Check out the source and build it with Apache Ant. - -First, check out the full source tree of the Closure Compiler. There -are instructions on how to do this at the project site. -http://code.google.com/p/closure-compiler/source/checkout - -Apache Ant is a cross-platform build tool. -http://ant.apache.org/ - -At the root of the source tree, there is an Ant file named -build.xml. To use it, navigate to the same directory and type the -command - -ant jar - -This will produce a jar file called "build/compiler.jar". - - -3) Check out the source and build it with Eclipse. - -Eclipse is a cross-platform IDE. -http://www.eclipse.org/ - -Under Eclipse's File menu, click "New > Project ..." and create a -"Java Project." You will see an options screen. Give the project a -name, select "Create project from existing source," and choose the -root of the checked-out source tree as the existing directory. Verify -that you are using JRE version 6 or higher. - -Eclipse can use the build.xml file to discover rules. When you -navigate to the build.xml file, you will see all the build rules in -the "Outline" pane. Run the "jar" rule to build the compiler in -build/compiler.jar. - - -// -// Running The Closure Compiler -// - -Once you have the jar binary, running the Closure Compiler is straightforward. - -On the command line, type - -java -jar compiler.jar - -This starts the compiler in interactive mode. Type - -var x = 17 + 25; - -then hit "Enter", then hit "Ctrl-Z" (on Windows) or "Ctrl-D" (on Mac or Linux) -and "Enter" again. The Compiler will respond: - -var x=42; - -The Closure Compiler has many options for reading input from a file, -writing output to a file, checking your code, and running -optimizations. To learn more, type - -java -jar compiler.jar --help - -You can read more detailed documentation about the many flags at -http://code.google.com/closure/compiler/docs/gettingstarted_app.html - - -// -// Compiling Multiple Scripts -// - -If you have multiple scripts, you should compile them all together with -one compile command. - -java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js - -The Closure Compiler will concatenate the files in the order they're -passed at the command line. - -If you need to compile many, many scripts together, you may start to -run into problems with managing dependencies between scripts. You -should check out the Closure Library. It contains functions for -enforcing dependencies between scripts, and a tool called calcdeps.py -that knows how to give scripts to the Closure Compiler in the right -order. - -http://code.google.com/p/closure-library/ - -// -// Licensing -// - -Unless otherwise stated, all source files are licensed under -the Apache License, Version 2.0. - - ------ -Code under: -src/com/google/javascript/rhino -test/com/google/javascript/rhino - -URL: http://www.mozilla.org/rhino -Version: 1.5R3, with heavy modifications -License: Netscape Public License and MPL / GPL dual license - -Description: A partial copy of Mozilla Rhino. Mozilla Rhino is an -implementation of JavaScript for the JVM. The JavaScript parser and -the parse tree data structures were extracted and modified -significantly for use by Google's JavaScript compiler. - -Local Modifications: The packages have been renamespaced. All code not -relavant to parsing has been removed. A JSDoc parser and static typing -system have been added. - - ------ -Code in: -lib/libtrunk_rhino_parser_jarjared.jar - -Rhino -URL: http://www.mozilla.org/rhino -Version: Trunk -License: Netscape Public License and MPL / GPL dual license - -Description: Mozilla Rhino is an implementation of JavaScript for the JVM. - -Local Modifications: None. We've used JarJar to renamespace the code -post-compilation. See: -http://code.google.com/p/jarjar/ - - ------ -Code in: -lib/args4j_deploy.jar - -Args4j -URL: https://args4j.dev.java.net/ -Version: 2.0.9 -License: MIT - -Description: -args4j is a small Java class library that makes it easy to parse command line -options/arguments in your CUI application. - -Local Modifications: None. - - ------ -Code in: -lib/guava-r06.jar - -Guava Libraries -URL: http://code.google.com/p/guava-libraries/ -Version: R6 -License: Apache License 2.0 - -Description: Google's core Java libraries. - -Local Modifications: None. - - ------ -Code in: -lib/hamcrest-core-1.1.jar - -Hamcrest -URL: http://code.google.com/p/hamcrest -License: BSD -License File: LICENSE - -Description: -Provides a library of matcher objects (also known as constraints or -predicates) allowing 'match' rules to be defined declaratively, to be used in -other frameworks. Typical scenarios include testing frameworks, mocking -libraries and UI validation rules. - -Local modifications: -The original jars contained both source code and compiled classes. - -hamcrest-core-1.1.jar just contains the compiled classes. - - - ------ -Code in: -lib/jsr305.jar - -Annotations for software defect detection -URL: http://code.google.com/p/jsr-305/ -Version: svn revision 47 -License: BSD License - -Description: Annotations for software defect detection. - -Local Modifications: None. - - ----- -Code in: -lib/junit.jar - -JUnit -URL: http://sourceforge.net/projects/junit/ -Version: 4.5 -License: Common Public License 1.0 - -Description: A framework for writing and running automated tests in Java. - -Local Modifications: None. - - ---- -Code in: -lib/protobuf-java-2.3.0.jar - -Protocol Buffers -URL: http://code.google.com/p/protobuf/ -Version: 2.3.0 -License: New BSD License - -Description: Supporting libraries for protocol buffers, -an encoding of structured data. - -Local Modifications: None - - ---- -Code in: -lib/ant_deploy.jar - -URL: http://ant.apache.org/bindownload.cgi -Version: 1.6.5 -License: Apache License 2.0 -Description: - Ant is a Java based build tool. In theory it is kind of like "make" - without make's wrinkles and with the full portability of pure java code. - -Local Modifications: - Modified apache-ant-1.6.5/bin/ant to look in the ant.runfiles directory - - ---- -Code in: -lib/json.jar -URL: http://json.org/java/index.html -Version: JSON version 2 -License: MIT license -Description: -JSON is a set of java files for use in transmitting data in JSON format. - -Local Modifications: None - diff --git a/build/tools/.svn/text-base/closure-compiler.jar.svn-base b/build/tools/.svn/text-base/closure-compiler.jar.svn-base deleted file mode 100644 index 4dfa5ad0b9554ceff8720f2e2ab9c3caa25a1d5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3939454 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 z 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

AMo3CF z_VE--W7WHyS|kbwX15$H!N1H80cM0eq-#1+rSZxtidq9dEhAmJY%1-Ci|+=QM$8mU0B3+C>6#kp1$% zt6l#pS!>Q~APPaUzG_)LLnf2Gg_421%pv;hUZgBKA5l*FqKJV7cpF?vU5%^tOUl{2 zkBHe9%%BGW$rT7F8fWfs11eYt8WBk=oexmNb!E9UJ_^{>bp94F`M7zE-1>xmEe>89?w*Wb5DAz{@7mG8wU_0o_ z$X^bW0KZ4srA@shU1+PhW^Mg(p@;PP!u_>s`~6Wx z)3BN|ITfe1<{{?A3x);SLG4aOdKJwr^EFky4OSdRHMNRl2W|Da>04J@E%UB?ZtZVh zVDqonrCEyU@PDcs+|M+{+58-qTVMsqxqYFsXx6xCfN4TiKVbg^Q|uj#$un(Cu`$2F z+TS#faw4xvqGu6CuZ4%3s>jvTYW9$r+rNmgSNA zZ~QD1v9Y_kvnTJ&@w7bt*tSf^*Vd0fj+%uQ?OWrMMccHwsJ-|(L_$qe#Wt3?jtCT? z8w^`Au$a}n^Yu?sLFb7PHGVXm+u6}nWeuqY(B@UG%=v{o*E>JesV=l`J$_fd-^otg ztzZ4gPPS6VPG=#-O#s_z^9|~oAsWNkcIEh$yB^n8WVUd?5_@YLthr!f~QX8a=?M+m8B8@3!lbNqu+?)g7q93>xkJ{ z@($|ixz?wP83)x(h~I%iE1R6hzpLiUHd%8UPW-#WBJbyz#kv_uFXjoEvr3u3Oz!3U zV7sZTC}#SvtfU&Jrv1QDkM9{SNG}r8b9-4=42WMpJ0Zo(PV!1TBKuqxdxb6ycHk?YK?n%BhUkX8~HL|?ItusncFwK`%6 zA6E!F7c~Ys>Z9!uf*;_U3es*fZ<*~pVH5rObjMnT8EJ9hGU20OoxI-F~3I(H-dI2g6%Yp|U4{281>2piRFx%EaJN|P?f2bO{>4$0`%%=X3)+$v8 z)pH!{t-sTER|L;o+ZK}>|G##>7=zwa@9;oL02W+dFy`6)pmARFXv8|bi6=-h% zN5RQf+fcy+v8@-BBqT+c)_8f1kaVlQ=(CG8@F>M#Ng`lRQpMlK>32BoH_pv}LzL}( zNBTB#-wWec?jKOYL)N^C-*{SjpA{-xXH+tL2}-4&5PcxzB> z!tt;Os>5EkK6&lP7@~g4uBLne41!bTz0s!%Y1HbvLp_1&yJW=R9Tth4Mm$aW8RWDX6(fj&eRevx;Zw}t3VBo`Avc}&~=T%NYpZz{s#RW-eu`tWIgeeQ0hnyt6N z5Pob1);z!6YYsN#Y-d8gP0gK~Uz9|A#YGzG&}+IcKY(A%whTH zlg3h@Ox=+d*D))0z#L|K1)@<~Cug?-2IA(xO;_-k0GTMkEJ^81lGyvWpGOE`bE(!bu=+(C zehK2oylMWhGzOlKPoLs_cRtO$7DEhtBT<9IvXVnXA2A@M^$$sU<$&IIh)d}fPjNNL zLD+X3^^<}23+pg(WTg~QPYhgeG~^IbC)_7xoNLi=Cn~0El=w*`)$3^?J)~j$WPtMY zMQEvCz%(=K%xGB>f##Yr~D#;Bt{~8j?N5$ZshnyE>5FeT+M$OMI zv{s4sLq0U&9NPzPLk^7nFLJCIpNM(|cJ`8nY3i1pcO0_D1SO0!M4%ZCm&K@9u8~NJc2HbsQ$>{9} zC8yXykw=c}k{2RGjw8wpFa;;Jpjm!Gj+6Zq>{bXC*Ya!u2YZKq_`=0E_v`U!c&FVz zX7$J$#)Il3mA7qYhu&oJZL)CtP~nQoo-}s|zn+I>ZEiAB^~ zUoFH4i12gY6k{x8;xSnP>})FyUwkGV9(6hY;gUwkv=>%L9GVV^nwH#;hT#n^K29ao zNgP^Ai>XG>VhOYUi!+2mdmRgq{)

+k2Rc!EX$U@sXfq0Qtc~j!8!qWC`|r)1FuE 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%0D%bIy~NeHD&}@Ic_g~bxVjw&$b(E+ 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%0AHw`X&k<_1SAnF0mX;I&w3l&9) z3s@BNFC2&>$9XKe`4^(1sBteBnf)CGqR4PAi_iQWP*GI4kVOUmm4PS08ftdTJ-bpMd7J&5sO^@F#~uqoZF&TTntCEhRP7Wix=8iW1%V+Qt?`l8V?8|5NQ}4Pw0{mx7>&MfTa0KYH zW%QHkN(p~|2pF^_@O#|#{n`tWSQ16j`@AB+C2PrE$Ar;l7$_flG!mzTq@R`=3cxt4FjNmn_N!)TZL!jo1xQp14DYvKB< z94TRU@FL-Zs~l-z?8`^tf~y6|Vf4%2!z)$`Qo~r6|AxD*7Nmp$mgmC%tQMq&aV}qm zGq2hwhtVyg!auIsr-rdC{|QYJ=^YT(SZgnXwjB6PmPP3|(jH6xd56@gxOT__~*TYR$)lzVb%hTcGt7>UD z_T`gsiPi389R2c-@cPy6R2=K_PPpG{cM1-$ybyk{+MR~uT)qnDT8&D^(Jc>#7p_L7 z;#ijdggdN8rQn#Be}%8CMy266mT}>rReUmzVR<~fcNL$CV_QB5k6Fd1;Fyd757YkUwq+Ycf>I)U@L42>wjrc_;_8_rW z<%aV@_nJPMr8kyq6^DIxbakkG{rv)eA$P4DP1u_PdJQ7(O;|x6tcD$t9#vpX`wKHb zgfXVq-G?~z3TcePHU1Dc2)cKxaUFL^g9Z`ZnqBuF(hPzKZVj$W4>Qpql3U32`eEiE z=>DzF_4`9pG>G{2>GkxX=^%*k*7&;da2yRHy|ueOIUFDCy?3j1orZnf0lcNZHae2% z?`6LwzZN;FNA|MbvR-=~)%W*u-jZCi9r+=9S#AN>wnu*by&SjH*D6N`$X>Qv&g+Py zgZ^Hw+xyp~M_kAl;4R&?{t;Jy4ErtFwct@9GKTe*<=XA2us??LmiU_a$N?F{a?5o6 z?8u=%hU1p%TH$B~8N+tVaUFKF(jUWhOL$Fl1VY{dZyBylk3jvm?6(xx5=XtrTh?2) zYrmu3{#(vl(rd1x800O>?Z@!N-i-4Yw!K^Rz=6t;Fi6mzk6y-G`A>H2qTIiyOLJ>

J7l45 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

4O&%HdCK!rltDcaR*jwhI48We~BXf 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
c4ehwt`g*e#~ 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
pi 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

~DEf~D^VWiLheh9;` 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�#8*28##2;(EdCV+7_G_`9V6F{yjQM^%o zqLu1}JUsBj{diLq^}HNZZ-1S8n#7iK>rm7$gQLU>aonT0?WDvwa$qG(HIPw~fc!MC zVrizJ#6}*GvTITXRD>qr8;lrr;C^+emc`MyR|iNE7Hu8LIMC^eSx~lzi&CBm zc7doaeTL_)$U`4jt`KVv%db`HwN*avwLtIg*MR6&MIPov_wB)lNIKLMDrHZF_<*ja zey;xx4ctFdZ_3yDWp5feU`V~-Y${&6qTBA_Q+zfG#1T2um&D&YUU`MrSHe(;9+7T9E{5jTPW% zgGRoU!3+}?gek%VQ{=bvbQ>uMbD(FpveANy9j$mlRe1THik}+IJ-NuW|hB*CQ4^@rL}DV4Ud?#nCeQR>OIrN~tLJwt7)c4)I;67*55(zd0w9?|D; zmf06t$y#9_P(fWiV;N3Xk*}*{7-90-a%XaPbt$a7;+dmo!!n#SZ%W^2txz@1_8_aX z#A;1eiJfMsSCmneEeawFoZM)J2!42uv06rB(99wKmt{Q&g6_Q|KwWQ#_3xN8W5!)c z*Sw}9**NBts+F^s4gEu7t>c9F&y?MHJ0 z4W1%6+wX=jcO0wDzSR)I^$AS&6jYC-B(2OHC;1Er%F|B&1a zRa4)bI#cJXbN>zd-gRAjt>0Qb=nYrC&r5H2Yi@i_AS{!4O8CzMKLJuL6@XH`s9bkM z>qeV8%?_febwtYr`$TU>$~KPXY=70*?MkZmB7w^%_snSOQ~d800rbzTe3}Uu*#jS4 z7D2(F1d#ms=XzNY`LY?QV15&(Zyf@ zzP5FRJF~=k{(!WKWlOAhi^!6_Xt+DyStDPqY6tv?l?Pej)*t&zeJd@7Q)Nls1~bT1 z6P;n$rt#*=*e4%dN>vb8O?Ud_^<%X$>Z5p4Xn}w~k}NY>xf_IQYJud_#ZHrS8RXmM z_%%_54U4#ulAyeU_>L)L2NtWpKN=yAXP?7oi67M;!M8_a+EfL&M3-XBlpX;Ny;OST z*?i&U$6giMmr);!5Nb0cBZTGAQl0SirQWGryKLyH@}TDBBZm|(~wdYIt4O1&lRwX9}2(W?}51zZi8M(rbsns!UNlDB!76r%}2NHMOA`c(C&cHVML_K zgk=Z((k;|O6+bG672Ju1ajX;DX6tz$UyMn<#&t8oWh;K?p%q(e+>G;@bOT?U#$mDT zb;tPzd(Zj(Vmm!qz`rIse|ze~{isX3JutOq(r`N*(*6iBdosnFm1#1n4L|4B(0(+^ zi%yUWv#Bf9Mg9H$wR}o)Xo>TlRf|tJIa|=9tF|vLFZi^h24!VeJ8Yh`y}5d3wyz*Q zy>x&>Ih1tsH@@AGxlaRiliMd>eO*Z-K>6bC6uy3*v0whQ-y&`EQx!`HIQ)${&px0e zD$(b^EmT(wz3eG@5d-P2C8ZC+OG`HuBFomV%r{9#beu4vKBRveRnd)dfi; z9gQrs!U+{<>xdHj2Xe3zNgt$rffzrq%b`{GPH3_+{GQpz4qeBy!>__{xEAU^9 zSxW8Xg~i`OM=t{ii0pr7NLM$qbu;_F6Ib6Q-~VxGF{S;bNEpdLsYd~075U8!OKyZ2 zs0o8ofI=Mr=vAf~lf}uL9MoFfR5}l=S}uZHwwA@zY06(B!KAa+D{oS-Xj&K7v0Eyy z+OoB4T6fv*{QkVq&Ew~$pQrph_>MomGofb$o&{g${E$IP(cKidZ}b?iT=PMpDK>`? z-~4C72{scXqkJd^ot;L*`5*3fpS}JHG9tM+2|Zg4A-8(=hLd?RVOy6EB^hEOWDJUS)Nccymg2|2i?c5p4spI(?jqInIQ&_ zJLtM7DfXSC;7m@JDVxu9us!biSkP&&4y~SP5gM&84A?yf`)b+$@K*e1=>PQ&oy&be zVLLeAN-}Qm@7pnM@9it1ZDWqYmhF`akusZW{aD{Rdz4%%vThaldmauUS|Qpe1rWA} zgIEOo*}+GuFbY6dZ-nl!X%FmU?9pBrP+8B<;=n3*6le8+BzMhY+Kr$`8!gXVrrouK zaW4g{#_ayRPH<_jB5KoR=YK|{i)#D)rqe}2-14X(X&Mm&kdn<8{1u9aW=TMl4VQ&_ zV2xb14Krq0o|(*2tgJ&ktJEzlh6vgDCBacI!S%ksCqoLmcIm%_Ki}O4lE-wWO!nE3 z3@vKo@l=ZTMZ0@(jg{)8I=2V>;vJ(|cyafJ^;G#ma0|7rmetlPWzZVFyml4kTu*putvHB{5Jd42^-uk$oPGWag^6 zC9BC+QVcQ3ietG{uiKHl(IuEEUfPFuV2-nkV(%IZ5^Abkkm^P9O-a0jV{8oQ*#RMj zUX>f;hLswhu4ZXbu8t3*T4Y3j_s?>-QP|PPuubvNBUa)XR<6aYcAC9LJPPN9;v>O$ z2+N^$Z9_hrX-+?41!$RJ|7d@|{L&RrjTd+U@9Lxp`z*hzn#P^ow^bW8!h^N(dvt+R zkwAjTWF?<#3AanXL`qmT9{cK=r>vgF<>l@G#dTQ$EYAmu115MbHOD=7Nty$hlZBUS z%Wh|c%7u3Zzn;=+g#Mg!A`^}AQ@4<;kmJg@9_tcObYguRZ)%(zezjEDS){~W@|S6~ zyi>W=eOHdF5gV}>cFP=ugU=vP#BeZLoAC@n9pSK1cDj`^Ts&SyPD*4hRQTJK;qI$V zDLcsJ=IC3TCL3xzF2@VT^O)c^VbLA~VZ_Ng;a&>dOn#G(O@xZC59<$MUsT%M?zUHYsQn0o3SWFT1*a}D_@{;7w?EoDfRqv19T+g zVZ{%z7zfgC?rUnv{aq(lB8eE&%^)p~7d9rR9b#`Dr=Ty^m4M$UN!ls^7i3h$J#TFb zhvsZ(;|E(h^=u(8hu|;UQG_&Km$!!le4U-oeiRCv7@%EVu%FU0TS%P()`@JS3#esE zoVZYMsu3!x4Id3 z&wt&{Cb9oCU`uQ?0c2y8oX=B|R&L+Sx%X|7TU_tD29^AdGCx*WiV=(nBQH<0GIRyLy%OT~D{0gUnHkZ~7=yLQ!D8D<$%mW%Gc$ zAW|SoL9oY@HbC!r;lXwDyk12%=PgR z2Bs@4Z?5MM5NT-0O4#6BefxIw(f=IF9hD)alx*1~Ol`!HxM9h1Xg9FsYoPbg;PM|M z#4@Mocp&LaC@w9WLGRWO238sE;?s#Ai^zwk1~z=laHGC5i#9aww!# zZJm(=Xv)l>OaFi)?nW9z7|@n-W>~u(=Vd39s)2VmfUISUjPtC1p9Tiyv^b4x%H%8njc5;7UmEs9BRpSf&D?RS zD2@Y91G;1jHumc0)lc|BJc+P{1!FfibVQ3y)bgF z$gv7tuRW2WJ@MR?Mz&%U-#(AQrIt1XOafh`_fHTC|K4xL#z=YdeK!b8{ zmy;|#kYB`=_%3lE=)^yf2D!J2ppX5KWRVuxr27sgnK~vNz{mk$q)7B@z8P9kXOCxa zv9uMc`dinPx+=#?HRXoEXTKoDtf*7_QllNg@?8M}f6^28WpcW6nnollj*tLbT4L?( zR!0^>^Iq#M?17-7bqt<5^C+|Y3{w1TydG$acDWW2XQrE1clM}ewzk9~_nc@p!b}!| zm!9Ufd%zHan$D6Qd4mC2Wic9@GbHlOC8=af7TkepCt^DR@6b5umFNSPz2J?-VwpCMowX@ zzB-AG#9-tZt0gfu#(ur?`#^tsP;M+yEbDz{Usi96OWB^vRw*6&>AbNyB`fUY@#TG6 z_5Kn|Fc3nztrzE`aJUF)jPhBe5z=?J3H}y+MXA3-1t!HfMZ!~tI^#b%9@u6Uknpd- z^iiFYv__^`JWA&=2%j+IH#+W(i)2p(C~GuJC$Wkq-N&cZPa4alEG%PuU&#WWnslF1 zI&a@MvqFzHmsy;B_gcE~VOMHGsS4;RJ6v$JNWvNrp#d{)&6}OwfPJ!AmrEzkzM1=( zUgv6Puq&uFB^?DDH;hTfyv|8IYGlpYmxZyegxJAJa0No=O}35-@;GDT*!LbSbA|&I zX@z{WdW_m#p5!^%&T@p(unSK>O=R~^~%@n^!?Bv7=AjP^z{$LQ010tKFj^h0r19C0)vpD|Bx;KS>= z)J<~CKvd3wEL&Ro2h;3Cyeo!Zak@O(we+grLKb=o0CnNz=`_)f4QdlBUy_1+nL>h> zR}T~?pW(1nSlx>dZ*R*`J$9`Hjx{B?VQI(}G1DC51lsrnhnORSY#v_d_bRk~1u?x< zms1TY$aHc$q>+flsaEf!@dZY9vqU>j!>9z$Pb?J|Z`jJxN20mK?``|_@%M+y)}P)K zr<6UxKI}`71*p9)CP2yDD~uYZ>b)9 z*?DTebMDSqy8qpy{g8dX8t9qJObErl4S4#b{F?YAji!A5^p(uKLxVTl~ez*&!0qE94bNjYn*_III zXjm+05zQ#+s~5P4jaF~Ill3=eI4B{z91h*CXH*8TRW_0 zmkfv(1sM37-+|Y6&p!0sGy6ZWgbZ&*v4o6oO|X#bUcTv-`WM`Y9Jbkk|3$47?XG-$ zBEH{*1xiAiKa-D0aEhUuc(-JS7abHx&~|ZVu_}XElcy~%=!IKS7Fa+ePS<%FODV!9 zBA;&Lo4}IAPvXp(%3*VNFeT$z;VBe_pnES+S2z%EEdLdmTs&-8q6M@So4Cy+tHot^ zUoqG~X?Q$UqNAV&IBLjfvlQyXR^|Sn-6%-om_ucy=Y)lbSKTB9EO|(~N;cA<$|G?h z;+%Rqr#f1s8$y$?0Tq9YQk#(JtWi+Vzy~RB^|<>L{+bewmIxOPV}Fy3;#NYVmQ5>S zfFnXLt@UewuH>GSuEPj_s6_Q6$Lx_K#+zNZwG>H~f=O&1N^mOB%Pss`L z`HmSbnm_l5LG#yqlDDFMA(XdoW~}`_)oJavX^~kdig@0u)4|0@d z(_w)-2?cGJU{ziSk7td~1tEfs=@OEmkL|jL>TL*(pqS3Xo6$=_M|H4&_w7gamvbJbRwo&5oL4yx)^;K*pQ0lTyTk~p48a4sfRsqj5fPbkhyyhrc0=)CI zEfO-#Fqz7^XmclPm<#gCa9_eBX&){Q`oARn0}JL{B@B`jqF}_jtlX|RU2X1wJ0V|r zrKp&xLRl1$G4K~@$*~r{W*9{k%}3we-W>T&3O%0ZI*B2#lG^b#b8ne(U|g3RuIRHv z9b8I;<8!0Sp7GD71~3#k#N(qGwAmehWGB9N45J(D!Z{3#EWXlu$+bU<`38Z6PTuF+ zW_kbdiC_a*2ppMOzMyCf%w;_#z_XD%>IEc5p9TiSzbWuR05RSLd9iX?;ca_jG`weo z_k3fBx^fpe$*XeX>UlBvrLRS^wNky=8h+d(3B)t*2+d8opZx5MMjC}&h@o5+f(PQj zw$+|mCST_`te^!1azL1inP~z%B<|y}x}73)+vN#VUfenOe(T_9GGTFZvEN3j+g6k` zsC6_ylyYP5os10Yy2l0|>UPvwGR4p*^4_6L_T@ZHRh#%ZH;9d|8^h8G!5|h6&to`@ z@C;Wu(J>vVY0QQCV;&c%47FKm%uN(Ax>lU*&O>UJ7&Cb2ju)vn(!4|fdyFH1B`7LR zB#cInB$!T&6s?JU?&>A+(ROgz>bG1US$Snzi2&w4#C9Jeg*%k zctQTE*cb0C+^5y8Qg)V<)}B#n8&*{!{fNXdR2mmCQW_>L1;(cKi5yy|1{VXJ$3Rz@ z@zGY4F?}>`p|WNgfcrxY9ZHy(x%4g7u@9n#Yp9oS;;PCw2A-7STIZ~o_r z`p02K-O&d!#(X;aU zc6#i|>A(;2!`-lKqU7*mQfr8}80M9WRhgfr?B;)=IG%txeRTS^qvqh)#O3-=cNTT8 z7DYS`!)XS``2}&>N1@k(nPRL$a%W~T@b@~E@j9zX5Yy8KQWN&)Mly0Tsmgel3S=1RrRI4bGKobFK)Y{|xu zzj0G1ln9cJcIg{cv|Ty>kq{iu#*hkX72ha6J#)Wl%+;)%l?W?6NfLY>&t3agd}p4Nl?I%S^WiB;#8KebsqptZCkG7$3v z!=K=A9YHnpy6@tq3#ZV338EkB6bXOL61OeZTJUYz6L$u0e4djDMv@86dl1P5Cv&{==e8y#5#3>yCnO}4qGH>Rs&ePE@sjZVv zn%Jt{A<29z4ogdtw52^AvX3SzL7`5&e6oG+o_gYy3yshj0BLm`W7CHkdNY~$UiIp+ z@xnvLzh5OS9tQakt>rEud;Hi(`>8D{=T5bld_+{M)z5!jbZvwtv8Z#C7t#zdftomU z^lA*{y5oio&_Bb=JWd}eqfkp9sUIOMKLA1dl%FY>gkIWC6cFzh?X?IH`8|WWd!LHy z-v_E~;v>F>9c4ayZprTO;VzQV7AN+oUmE34yC`RfI6Y{!rG+F%7@X< z8lTG1cR4HJwD-pcDcD|0uC=Mk{hntP1bh<+mQ|5vanc?=!wI+Zd&4Y_&kDsq8vbTe7V7OC}wR1YT| z2DY4D-?NG$x_nMPKL&QK*?t&HJRSh3d<8jGIkQ1UAI*1=fTc^Vaz=#x<@eyIF!-Bu zW^Xe0Q117Yi0F3m&q$+Cjx`I-4&jVJX|Y{Q592=aGhH8PofAz~M83L+ZWWb!oqav? zJvS{CorZVA$jT5Pi@ zgsWDiaw*hx+LtE%^?>7iWxg3B>teHU#o}#X%VBEz-Tu;F$baDO9BJBJVV{=dIuZPK zdcw`iB$bG{GWdzjM;YzSI!nnq{;E(_kB>$xxwf0FNH-rfrDK&jsalBNjpYI8b3p7y=NfULeS#Lb4I<_w%dRFc67xx4$&-OZYsIumGoWZ`H+b zcyHZsJw@0?NcoBA_C?=+62vq;;=aI3!AG}&GBvu0>Ve#^oBv~yrj5T|fBqI0yuS&G z|NbQX|AJA#dlIN&emUrWV-!|+@!iESvmu;Yb{WM*knze=3s~y&jqFx3bTwmF!x0O~LpIBntF-9OJNG%y>9Ea+Dnnr{*m~zB}7| zF2~s}UoKZX&zU~=i@&aYK!pErF9w78#$;S~%m(pMTgbvM7F|H ztWFWXzfKU@Umch;#o$gMx3%pAL*E#(5bZl4r|e344vJ3|e7xaIcy?ka?v9{kyZ-FU z`nbbb_za@@NX+pcMidbEHcP(n`0oWqTXcxBzVOHaF1^b&4f%FJf81d4CT@%PSD zU*Jgyh;&NwAlT0yEG%wXK7uAn@Zke^8|y?*u9d0Dw6sMI5L;K_7;7UvM4|$5jSO=E zQXSaAwpr}O#oD=0R}r110&(cm&kH&R`_(s9^tBrhgL$Y1CwRaGA^|CiuoTaCY&5w4WizDD*`y?0aH4H(c1Q$VP z%(Buw)sd{HhM}~1KEbHn{9S={%YHsAjE$?g2drR+9!gP1P0v}TT_B<>@6AtsD(pvzKiKF<36n?tW;^d( zyWc_1=%*yYwwx3nyLX=L>yPhXESN+P%W$_4sbDGJxwd>{W8FMJikzF7(tq=3U-4vB zaA7{N%;9hg$3ZCfR_sa*o0o)Kq~Gwyvu*T6dOXE&5M>ma z5Z}f!wIy;8X*|L*)TyY`S?BVOTbfo&0Q z`}{Gf%N|~ComIAJ=A%_P~-|B`PC96E+8ieiR5f@lSP_ zlt8>Al>rm_k9G{6ZA^SzRY7C#B9_{U=o}s`N+5?sa%F~AfxAk2B@0|ndzwoa2?MFZ zU|BtiCPM_jdOf&}X&e)rX{BTZIh>giIr+E%rP>q}hjIZFjq`_&O*^|h7rEtEdaV9{ z2O~#uzKf|6y$tzYym(oxnG)rMVS zK;Q+)5jAS)(BtT0vcf@4=+>u_oTVPRYE5F;L+!>5(Fd6kjBr|+U~{9=a#4+G_SIZ| zlhljS2Kn4fL%@2=s_Iu$UmK_QbT=&?7WEdQPf@8XE=j}TIdwO5@gw&%Hu!7 zL=S=^p~5WrXsom2l=)RTJ1k3`QAjVA1Y{Iv$3k5CEU=C?#OJPCNQ9iqqTQF);~Gt) zloCGNVs*dSz>9B~`1$2A(^#{a*-_HbhQEUC7G|t5Zp;p9G%h`nftjuR-ZqI$L2L`e zD3$Bt#VDO?n!1o&ZptewM0`85rOh_-Qbw}GVL>%gBYOw71zXL3-MEU@pMg!6Z(m$v zt1w2FLrZFlG+Mn+()p~^V^;7kXU(74U89sr6;*_tc9Hzb-QYH-WGpUTrciW=wa^IG z_10@HH~mrWdlL2=BaHt1GQz${#dZI$f}|(k(NA#p+b!25rxsf^zi>K%07{EdTmr1M zYr04u)(t|Vw>v>AA@V3%L^0{VHkr5NDls>yspiPC`!fC_B-VCZgl)po9%Sj}J~Gv7 zR$gr&r@Iq7Kq+9HeRwNYz97jLF7T6}HErmhTdvOI~kWoIa?Y#5v5u)hx zTD;F__6laZ@LxUVM2WOZ8TNk`fyxx^*adX8JGz zm&3PWuf*$oQiiGsUI*rTwVCqO@#ngWS|GdPu?-m_}y`(`OZ0fR(`PZz^4O*GNo6w;k=nBz;P^ES51!)eMd zr>2?4GCWI(&VR~$LPIl;D1nuF4}dOcbO?9j?6T@xZ%hW-uB%`XPyr`lzqj-ssbaE6 zPlGIJ88l9dtEdVTIRVZLGKuGaD%}|EL#Rm&`+ns^EYBpJI_E-z5~RIgT>=FLW9O{4#@!Y(hypf>0Fd7K^9Kvq0|R z>p_GKM!a25mXH&&Hfyo0$QI zs^*tJ{REZ4cfByEnS|B#gYr8~!^)+Z>%`<)#cvnVxF=StTK3?JXBAW|lPIX8+i2=_ z5e&T2I8!xjS-Sro=LX*Au5Zew72%SgJNco#MUr+b>ax0jYa63#7p-+KV*lahzu~yNvtyDEW8OBE#j?dOK*7B4f%Uza}C);?i(N=lpf&8~zKVzbtw=C(l zoEO!iwVaN?$f6aGYX1$~Y8Jnq%M#z7JuWJ7wck-ioW*{afyUOI%)yg01zF$$B}1o* zpKC7FgaGSXmk@3Jo6&a5xoQ940eFR@<(;q^)>A!=qKX#RRQROrj5;WLo@>qVj>`7b z9a)h0g}Obc0WU*c(;XgB_7CcDqO1qw7uQ?X3&=!-%njkk!b#1*$neWA1lOVeGf9gi z-9}RFo2o#d1OeguZz~l4541w}d!M>8rDS6Bl1^Y}7?Xn+2P>3bC*QKn5VlHA?lV=+ zXq1X*OqjI6N$rGXbFc)4;nQL`{rpARx*KgN-W-xB4{+*(#Ku6yToXe@LHQ|McD(78 z_U+JGKtSI;CU&{%xZb+Ydi>7Pa(=Gh+Cj=yTlAa@WO@zrT?;*w>kh2B>!`WysCYR& z7u1b%V16~HdD_#Ft5&+P(|2T0tfm`!Yz-KT5-eSvAs$ZK95n3@1#fM$L=C?u3DJ4k zsuJ7`*?1lB@brdOJlyB=;|AMNyAdGjnfc2|DP(vjN-1P~XF}=0_6nPj!}^Mwki*s% z8sOjeH$~2W=L)!{9d?XUypheB??j$)K8;)t^LPAO{Cxilz8>A7}38;KG znI(Nb1;mk9qu!qCB+QvKStYU+*vKQokYsx3!R=n^GJkp){%zl4^${ZjPhwa!-t8cz ze^O<`ge5w+vn(|Z-pO{SmCLiR$4Yd!Ja}LCY&2ruRdzLD9zz%5RtBUPAh(i@u?RQ5 z2Zq{PHwL_q%AkPhT#)-6m|)&lxc z6TsROAd3(LZSqiDP9=yDZHI`?H8quDe-KF>+^^RYS7e_mGA~;(Frcl+$tL}nfQtnB_a=cqaC*D|usor4B;BhO zJnbpNWf~2*n(@#lbM*CNo_XO7$G#DJ4C9ojJ4j3<%Ku9nLCI4wS@=y?c++Uh;m>K7 zG&RJX0GH>Qn_8JI9sfgDbf7DV;)lVrFY=A=R-v8B;ug>p>_}Pe#c{U5@83oB)_Jkc z*)I$u$ScOnl+;Setd86JqwjSxvq|(3TN<_a?Mc5D>0s$*A%-{JxWyn^oqp35F@@m4 zYyR4;3C=gsA?VU}qNIYPj^zz5yiYiIxHwCp8*n@KS5m7m@bu}@fq_D>y37Tn(K~F> ztCffgU(y$+B)=v_j%B8hsApgB$nQz&y9yj%t1k(`I$-wY>o`?&w)y8gT>ve%L4lyB z2(cX&*<{tdL>2)Kz&bV7%Z^4(*P!2|rym+nROhj7!JsQ?!3eOcPGNtJ9-XdPUSUyI zGfHS3fCql<&3r0XRZNXxwcPE_aLg)Vkvuy54gL)pBXn&DWg#nJ8N?VLY4&jh%L>^C zDnBF%yeSCdkr$+0Ps9nR;QuPI)ljZVLiCQlw&kg9$5+>31$6S1z93I%msPthjbrU2 zU=dYR;*G;~(I5M9vNaN}{Y&qc&gOw7~ZCIoA4XRyK;6T_cn&1GpqO^mfb6 zvYMHUH+T>CRkRP;S-QXDDLpjdDc<)>^`gHP z_-|hg6WVJpxK*mid{8|2w34%w78sNf$1ev=qn49N^;FwKFOpNuPG+Ie7$Ts-$8Nw9 zW6Yy@Vuj7qFf{x5<|r0eUYc7QCKI3*d>BnyUYbAEgP(8T-Wx4pIB>3#sT`BpcK^<* zR^H1>^^)t4q*jS~I`ExePS#|Tl03>xW6Vfs<3&&kEG-`3nkk6CTKZ66U3XFm6|vyQ zS_ql!vG;6>Q!-I(U#ggZp7eHXx=G{ausgJReOL&^qbfg^7JRn6Q=zX!=6XiVmZqJp z1E6v65uaTbb0j54m(sp7ED2czC6JVRm1(aW0`#t_b17A@saB{Otr+w$w}!Pygm`w; zd2_apPCB(&?(!~P{~;2KeIG1RfYfy zhtFr8K2C;u>(=IO2uI$scj$c1n3wD1~3YNcjbMF3j z=^HHE&pn8larvDVYY|VCh7ERxWB?YKL7)A@pjP}nE%kk~Ot*wx1^IvfGjIKT&R_h; zPy5l5yZ(!gbDoO>@pnQY9s&`2-;M+uc2tu44b3iXJ;>JveQ%5O?5mXodSZ^kunz2U z1kpqK4Sb>DUEd?18j>q4QghPb(*q6BOr5bvNmIR@p6mEyel2%4Z zzV3>+S<}^_wX^@2vEGS?SpS(QUy=6fOSQ3wk!X+oV~Z3{Xs;aQ4(1hL<6N1wmigrx z7uHsSQg$_EiK%UDeQ3a1wxsQ0Vm5csbmcVJakfh)uXc|=;)KJpIIGEb7&?#_Yp>XQ z@C!}wpGxVoP!#5u#q7~9tgNr&!fZMz`>wJQ{G~#!^D+O^@zySQiyzoMj0lIztfr0uB5SE(2lS+}8 zPh+4HiL%0_TBKZHMZSCvlA~sdXP(roR-}O?%*U*U0>#{pIm-Do_D4+ z{hNbRZH6zX{Ftvo`#7@GF}?hH*oVG6TBh^)2=HiW(OXblmJT(ko|LzfqSUm*pLc}j zsz^rTGkHjDW$HLlNAv8LOLWz1Tp9qS3YAWuf0UlTNq+X(`a^cH5VIr!vvZ|fTGau4 z!-;;(+BvZ))3i!h%aEcRY{YCDXMZYH%`W{=A~^A^{`Crcx~|m2ee1Sa)0deJi8&*Dbwf0pUUh#oY5wyiE`Q(L*eKJaK+rR?6P^;<;!2d~%(OjghEYZ@4C>t;dz%PR5r#1jYof_kXI|tQdnl8^K3SSn*F>ibrNkNcBtJ{7}dAxpm?vA5oN9k_ke&uN}Yq zB>t~{B4y2u&l?mF5Dftk5Xt|q)4GI}nXT#n9j(yvF~m4*`seqzZfp{SgtG5Omqdg} z7%lb(gjX;K4GCz!s4atiJPEzM`-0z%G6v)h9GoTOj$xFHP2CU$P-IDcvApVWeSJg6 zwyEi9eSO*bvHL>cy8@RrEh_*K|D5=Jiid5->vQ@w`~B`%kq{g}LzEaBE#!1>0Xy|F z8{ESzI@2RPIw-j|_^}ln({K|WWc%?)$bZ~G@ZhMY_0_?@gyY}9)IXUQA>ZuaU-5#V zXFnjgK2I{FOlY$*5X{-qoShPeY&liXxL6zDR6g5qdoP5Gom+7SZ5dT8oDxQC1yvw7 z5zL=#i{aAn`sMS;Lx4u{IE)fft&)*{J?!nL_dE((ai`?tf-;8MHq9b~vWzQ(w(?Wo zF&#zI9k3}jYZA*?{kf(ohGk3pLTw$vxDGc}9aYAr#Ox`}61MMC(ri`sQJJ>=q@HhohGPLcFoY-=MQoPdr9w=J`XZLTbZXmiQ z&zTkmY`Xpi*eDF1+o=5k>lYY6T2k!G=?HQ9dC{ME)8N znMdy!IauHeOHG4ub_c(_fZtm{@Y=jdZQ@A$ZyZ+3?@9q|pFol?$|ZYSCBFXc-$H-U zqEr=cYv>tcF;xfRa(|&(P1$Swu{-ND%+XFrsLa)kB7652u3JvJo@A9%ZydoR2`Sw$YjA=%~`gwW)z)4k>`I z?&*sNLDwZe9Z77fd9h=%uBH=mId$hj=cD4QqMK=fOdz6iL; z%QbA%Smu$C$!HNs&TwH>aMP8E6~Hn^5lsodluj8?um3k8#BA_anNV$C&8v7EJvxp< zg<)HnK>{A9uSfVHyI<8~5FY)l&&w%>{F3jB)SOn zo@e=h!*$&0Wy-$PQ`;vE9sV%$7`Jpv3fj>Nz;lMzkelB@0s&i1#S|&@gZ2#RJFiy4 zyfqq~uQCoRhJHprec}0e#t8+3_ZD4s^6Kbc>u@C(WjHL&aX`abnd9O~ca_+Fwhm}fc=0=U5%yb<@}U=y z1~wD23ad5pXcmC+B`oMk&aatn;907QTp{9q;AO(@-rA!V1s>fsynLC z0De(!{InQ4L<-}UjdYC-^VvnKAUN;7CXsz`xG4K%d(8Bq1W=aa`dR-;zh}Hv3z+yf zl?s^aILklHMPb;`D)qqjqrn4sPTT zF>>r;Ga>C1zR^Hg3AMF;rlQLlfZ0sF8gh;?2b2c_cvdGI+enwgI3YCxrZH_W_b|`D z)8~pd8?zjJeA(%>x!N++mTI&BI$NMU8P~R(-nHnOw;6C(RBoOi@0bL=f8co2{BUBZ zJu#p$eM8qqZuB5SZ(0Md*?e#msl)ce0;$scfMzlE7i^P6CQsZAGpz3f4Kr--Wab9F zu#h$T6ymzHzCcTC{}dSNd{N&4ia;Pt-5$dS1^ovwEbI}uDvUQM@%Dq$sX5jE)ASP7PHfyaE?({vYXg58Yf=KuFk33wN&GKO9)VAZMK(>PnamrW2vcN(4TJ z6PXHEcm}2uygRiqbOYZ|6|fbtg~k}Wp+n0US*3-|4O(T#^h}}n3FwCb!b5U}=Hb$> zP#d9x3BlurTD@x5nw@b8*FR~0gsj7z@C*}qK4s_ ziFPv;Ua4i$FKuWJgeDBYEz81zp!Mk@xme!j&n88!6afPNoBF zyh5p9LfL8Pbb2bUxawUV6uYKo;>DVUDiP!^7pdExs|TZ%Hz}(!p`&Z{Y56t>49$lS zU%qj|q+f15tf^J8@xQ2|~}bV^6Z%!58Q94{`{*z0yy zR@WK1chU5g6YVJ&U8OP6Y$jgEJZcH+H(NVhp0!0y951e<8}s!@7OG6?s)-|4*F&!q zY?f0#?s{X$CaKdye~F(IF@LH)-?ZhY-0Rc+Yj@`}>_F3bMsb}NoB|y+axq%_2Ztaq z)Ocn%#D2egmdFy#p6b>bHbyN>48UoK)L~(N+9W@erG52Qn{p zqhKoS6GwH))@VML;$W%0@M@c}J8xu4Sl{Ye6D1pn+}D2Nyj2uO?+f-BL+Ybe?Fw<{ z1ij-d4KnZFS_qCqE)cY*TrxH&H6S*~%#ud_nz0Glr=Aa})F)yui$%mduankb`H9TZ z1^-!9A1YUW8ggL{PLyx~QgLCVv-W*&F!Cv-OaWg7ZZ@!9854YyNqUBAyQETx$M2Ya zw0s*9{bJM3`*RNlkF*>7F~AE;lztGhl@XO!T#ax!EY_d#>OJnJPJ^~jQ%~2cz4KFC zgpMXDq%I;YFX@+wGu0;fYv6YKNL3RHgl5o@DOMnOD}CcejN|Q77yz%IZ!BqE!Dsta z7=4N?s@{5R8Yn7-8FatlH5O)#|Fsx(*k6g94RlR2`e3E` zBZnJP-w(L@dt#8K5|`ayQBNEBCr-yi=ZC$zxcSRrn4~c+zs6I`q%keLIw?gOj12}+ zk58d;?$QHq$m@$*X!>_@0p8H|r+SG}J(9r>M8z`KCdm(yi_*k~bq`dP@q&XC^9H*~ zUm-}RWVZ2w!|JE#n?L-3dh-^Pu1`287bLFxJgtK2Dxb*!B)y<{NY$U1dZo5Mb|}@0 zj!TFa#cI?2*I3Xd8ru-rrFh74BU$%*k>1))TVni&9(>gCC3@coP{~D_HN?+L_(7&5e#= z5pb@@XTpr}{B#YpQ^#n|gK9c-+&XpCJ9P?{FA4Ik-RQ){6qinw^G7_4-Wn0W4g#*9T0M-FuzgN|7AyrU6`Y_$k%fx`C)Ou zsx|Dc)z@_Q<08?ePIh`k&l&V834V?Sxv${Pksw}jH;f-mal$?`R&tM{4W?$o$T{G_C~b>y?f}sS&|)2Wi~NFDe&j0kpa! zs3KSf+#&4|d}Hl2r;^MNTuNuGx9|sB(wAFyqZqFkBaA>waPUEH--PaBm$*UM@KV0I z6bp>}r#(iXpsd{RR%?oR?8~Mz@#mFCx&}P`eR*fEyS^XD`{g0D&XJo}UeyOEf9XWa z*~0IR3y8l3rFlc1)tpsxq)Hv}u<67{X`zLjU1Nw+DfoG#vaw7|LojV)?2Vhlv(D)D zJM;X$qnZ%dXAy=Zbczu=dD3B>EvfUAwqB6+hefLzsRk{Y_L7nH3R#70y)*UtYS?VW;b zi=u47v~kn6ZQHhO+qP}nwr$(IX zDcPu6p4XPjkDG!#ZMZ-?6XMt)@BuO~(Y4cA5|e<>1C!iu58^n{mV8WIdL-XFGv7Nj zpW77rxJgzXRja^z2Q~6EJD<8i@GY?B^HD-z13Ao5gD{y6A(;*-x$aML9b$4_4%j3f zr{KmitVzU(GR))}-#9|`#`0r{>=@PoP{h@yS zZow=$*1JlCMVa?~=U%vT-RLNi%R$=echxJ_A$JD^j9dvV=hnXxVsu3MLmXB|c=D=0 z(Gm}O3_9NsEf2dgu`_JgS$4wTnTLoC+H{2~tpPtlKtIW;;d6*-;n^J!2W0iS_rmuo zmn5S#5o+8VO$Y;WHo<+V*>|j;(tW1oBzzM}?UGYx)lLmP?OdxP0HYynhTuSj-!fc( z(8mB|-m*H)mYx_Vj+$22u3g6X=a`+%5^XtGl5**NZISjbjQ1OmWD#>`oTVj^dxwX+Mdj44J-(QmS)537g(sDK%Q4sm`l6 zA;~gU>T9+nOpUO7KSY4uXET5?2f8}VdQe!sUv*?redAsbm$3!z7l;adHDjQq8MVTpN2#Wau(?|g? zp42r_B>jrTX+xhMn?^24!LnYg%i*?uqI z--nlM09fWn@uOeZwTA+56zZg^GTh7xBdd^g-Cj4gI64dwLDixQ47{pI+qZ4R-vyBgBH8qe-sRvRX8l z_Fh9{gAmIt4j2fW`oY9Pv^~D;5HdNF15k5aj;FXI*kA>ph5t1}gaH?Ro z@<<;)x(6xYh9XCBHM`*`p!Yx_U4>k+s2d8FS^vD{hL|(04yfl;sRel?^jsg)8GPvb z17ek#Jipf=`-qRpeJ7#2jkRN<(WLPZO{nt&^FA&K#PN-pz~B|ZvHC~^p86PGnz6+J zX4fb!Y?eYN?wt5~b#_P)|-SUGw;KO7TP{-lWzH80Hp$%-6H<3w}FhUf$7zoU9z z0qZ1Zzr}a{n^GorOxw<>YywhSk;4-~%!}m_v~Ve8 z7%Z06*hCM$kU%jT678ZAT~CKv%P946d! zhxCfK=h6Kdi&Ypu1+%8lJ5DAHr-wtsm>}?^#a58&=|iBl5L-gOKe$6GMpjYq7@ROd z33VC|%!;|X@)>l24K)OaXBS)^QG(1>To6ry07or8vctm%ooV^oYfv@o{r&E@%!dq% zMgS_0uIO}RPQz7Y{E9G$5z^%EDS`q1Uf&pYCoCp;QYN=GRpwbiPzN=)n-+fn8863P z2t|1k*4)3n3HqH*C{DU#VBq}x4~Wvul&Me`R_M!32`J#HP6TxstzXdAzWjxmaRYr^ z7U!}WXLJk+^w_6;s=RRZw-M!5)r8~uEg_993dY8t^0110D)+YEAZ$noe>p>R^0V~& zdI>323BZF8J^JQ)2I<;4m9?247^`R$ndZ!x=*5N4b4qSzicK99Sr+@=xe#i7nCA-0 zAtQ;*%|w!{S>hDfQPydPqO?iMp31smE>i}Y9X7b!6LFoa@U#brLjhvVb3t(0&-plA zJnKMx;DEd!Z}qS>xYz>IK~(J*1GHDD_pRW!dpZcW3|E>1&-OmIQLp_$m+h1D@AeiK z17YC|*1DU8<)suA!Kkyvjus+pL`V`Q)5@?p1o9v~A~UULp&N{naotue>B{^^hYa3F z1$B^6=VK6$=VadOvf%ebU~6qjfZA*R;c^|fdh#8pr07Gdh)Y2Rw~;dl4nYHYmU6}K z;+CPZ6zWnn#uGa``%RLI#mqKyb<~%SB}MCR%4Zcmo-mtXWo`m4v&z3++>GN0N(hy5 z3b8;+KYSXYtMzBzXF=fPtwjw9^Jt(dB6Us{@5#9G4cYBvF!iEyufQ4#SGUI_LG0OQ z*yyHVP2}UN$r{SMS_#L@z~xLH=N%Ub zE&5w~Iyb{?s{V1Ciap4ZwG9;PMjZA?$8HK-M>Sa^n|-DAv8iiqG#QEmM09_HseR%! z&%?NrGR0N$M#RhlaHf=oua7t|wpZDs-u0JolEE*7x$OUHE}xN@;eWxTJwZnYI4 zXliOz^E_|H(jK)LF${rv(H+j+6`fEAlu`%_=M8`)8_?qdB|11>LYx`@s}DWzot! zm9#!+vPi5mmiJt%e35x^(dNNm=RqL5{_N2`+Z;{e{cP-&VN*FEw^eb(ZcJ-^Kk>}% z9VWNHg>K4D|1IBKkktN|Zh9P5z%& zX4ei;;Lmp`o*REeh-RhumrslTW>H)VY{dxch`iNe=*yw{8S5I4qZ{+{NS}n>^6MVn z9-c`ys3nYo(2;?isoCj=>F=fY=k*=7pVShA_?|o{%RO5FC^dowNlrQ$ax_+%u@dRv zSTZZ#{8dLl-CBZV2ZoN5kllq7S1VPs_tO2BkmSk7Kw8Lzfyh73nt~`WZ&G*s zj`kb7_>o%=9)S0jV=(7SBFGjWG!DOGsbr2LzVA|2y?VaFub#CP>@8PmyLBIGcx#y* z6+vn6CP$7W$AJS&!aO-MnSIaESs+RPx%{iEjo&mAk`l$ve{TbjL5bk!$aT4%;%;zb z5quYZPC|4TL zKBWq%XH}{Mc~tB>Kg2corw0+pA|+aWFHGhE0*m{Po$dzacCmVc+JiHp+84~nm?RX& z57tH+&oJQM)q21&;S;tK6WJb3Dua*ed*FH)#oZ->yU7(jpp^}18-GWdw3C_OW1vrS zngWfFpm*l!9UJZ;T3kTl$$qD**!PRQA2Hq@!4$~Ps6SSBB{l7Q256FM7J(Al}Hclx555GFzckCd+l|EL-B- zZQX*^`x~J0eYCr`n~yi=;Rqb?E2Yhg>&SDGo$WZi_L$|E>v`$%>-)#*ullLeA1JqV zhn%bGpgLk^?GBM=vd6?EL#=5-6g2K0W*9psYZ?yUe z3GFv&F>85dO2@_wW6oYVP_myMdWgA=3C03rac7RcYA-kx4ps-27peejgehB@-c$f> zw@x1iiV{VcihT6(IpkyJ#Z$y{!;4}^Nq!EGl@Oszgb*E8melZS&z%}gQQuXlK;%n| zC{7$53>0-c*<7$!&xM|42{~d|5Wc`TlX=K=s*KXl5tF$+S@X;~NosP$xw1C(!l>R$MZ9%*-@YW<-HWg`&%Zg*A8zK%Zo{&E`p*^q zspR(GtB=pl^m-NCN2n+`3UV=aEy&c7+AnoIwF-N8X=tGsAr6etC}2FA0X<#SA@hKr=5^KLzoklL$6O>(8_!F{{9L)b@Tk12Yqg?XXY4J%m`Y1NSM) zE9N#DP#O?T0zdQefz0U8g1p(`2@%)d27EL=+!KFOWhrKQle?Z5k>dBzXk$td&<@y` zX0FsDWA&S0E9eIb*_T8A1nIWoz`w8?I)41{qPP4$Qk-)bj7>T#`6c$rFA^_){I*q` z5%1KY$i=~d)llz7_saolo2=*tF^_>Pvnbq)_G%io0^sVT;oXEmZ6YcyMZU;7Xp?bMhOB$2@t_Ba3ga#cGjf0 z%K9TMYeYc-6KBY>TlWmw4Tm_?TMlr5D12>)Xs;!adKBh;QJhVE zyXEd{vAc#E0*^T@T{wM1D4<-bR@afj(en6m_13>wbK7;p!#cZ)$YY~-}THd)>tb8 zKUmkzpy0M$SSi0N^9_o~sAe?i5u+68(&i(YGwaMg0}-SZ``nCW%e~_+r=O#>x)dJ~ zm`!>8axB)EChUtxaAfNb2U`#`Z5#6w4#<>Kxm$nYo(m?XxiPcY?0aiD5;IwAW$OHs zDeID;v5x;_n2hukzMo4*Qbu9vI$KrO@|e~%LLfz zOU+C*@1rysCJRy7W0JHmv8gYtrPTMq?QmLQVlXv0+?WF{o|l3LZia}xadPEEQvrX z^ro#nfmPSlG1-pO&k9M`#vjU+MW;9}y?P#7G2W&bw{}a;`}(^AIi?5zJ$okLi^k)- z2k%i1umqAp=o5{T)gvMQK}JMII0JzLA`@T`fE1t@ zU=3spe9$m)(Gryxj9L#-GGv<#=V2$yWFXL_r??RlZZ_0xCZO1K(6|~YDg=&;@NrkX z8e2L5{1qSZ>utg>rn!*$NVqMeJqo-l@+LP(tttI0(Rn97Ku&0DpRBGlfkU~x+^}+$ z42(=1CTSuEpXo%UD{usSk+-Pa5q5z~RcPw%9l{uhnnC0+cdART&748h7+>+!(hIE_ zX|CBbYqHql-~3!ktM>tH=`e+JxkPi2WF1jinherDZ|JlDHjTC}1OE9|NWDK%qsGohq0rNIpfl{>g!c62;3PoTc(0FBz+ zNYAp;5MGigPyB1ra3rCcbam6sU1c0%{Gwh{X>5~dqpBj)_?Bq1z|2!(llJ-5nNpi9 z5Rlw_L8(KLB}ieh#L^j@j4UD1MSIpL5kX7h<$|U2rg#va2*;C0+m*~-Vw`7NR>dzF zSz_F$%db|DoGd;8>`9;_qNqqo0{%qU=}fUfN&v@yu%rOq8yU!u&j`5 zvHwZ7I6(|&0%4{rAtx+10{Be#3u&^}*#q6do{aM6FDKp&GE8+bnouDS zQz4Sa5UW!dBR0x08xt!03)J$C zXF9$+_ROSE$5D{ETk^9m;s&%)g)iNuTmxEy|4MfBMq$ zvSmz6Z+Bls1^ZKjK|uaTemGJ*HBxkFFbNx$$;>uQZ< zmFj$O`&K9Fb*auWttDDZR_l$H)m+Ez%+c{o&U8Qi^%&b}ZddjXwVTK3j{OSzvdu)N<)D{)8KN;f+V-CYOa>j@W6T+qQ?G?j0{Tc{aqATaZrhh0%8Iw4JF-Wjc z8x*m!M2;hbO_3;w7{kOl5}*j3BBqHL^TbIKK!s5eS$@|it)Dt}M)fBk6zfVFh`ww7w%ZK_iPS~gZHJguu^ z14?Yf@+R?%wEiAlyntkN2jov}h0v_b==AP1;^x(j6{Y?|Fg5!rWlYNCPmuOt393%r zG?|5sk(oUSg{8Tky2z%&s3!%p_{Up7(7t(mu9oB=z|d^dMD-gqDN<4m9P>!n6(HdH zh`PqAmN9mGO`(PI)YZcio>deOBS@NTto<7~ySr8Kj<7(59-ydoY8{JiXP`fJPY4I2 z$gO;Ewn^mHDXyPzX=9bfMTD%$!q#H06{McuNdj3;M7*3z*DNBOrCdrczM^8e-~!@; zs&dL9XXn()%ue(RtuUNE=U-f_N=UD0AY<+BSy$WG*>2T$ws!C+u7*-UnqW1L5TBr* zc5lgxL~pMi+sM?=R1p?m!>~)XJ%j#jm$VP{#%voHy>JkSq7UXe#TC7BCV*0_+q`tT zRqj%&@NJtSVkd3~vE0^mvu6l8I>@MU&|3cJw9sPi>Zxok-_*{*O<7HyCG7PP3o zj7i-yWy>_CxWV5*uB(G=u($pdBGcbiiHtBIZEAofxmDJW~0w1a0YEK zxPV8Bx+}9TT*FrS)=f1j!$Nskc6BcE_m_zbjbbiLjJtAk7m{mM9%LLrRsNl_Z>|!f ziA1hNRq{Xehs{}7wV^GPm<0ldooC~Y+&ecML-mnbBSSp7(#i%v63dt7_XT;@4Be^q z5#;kF0Mm7GQG*J-O{R%H9j*j1V{dz_$Wml&O@W(umgNDh2~=qR)bR<}vT%E8VjsF) z-H9Whq6ZdXLn_rqb!JGp6MFE$8O0|OPhJUuZ5X~Sre?z?jGnxNH z-^|3`;jW`&`0D^Q^ke`%_{-Z;L$w<7-%?vWVxgW0=C84>Q=jrsv<5pJPr+p>YZ`Gi zm*=_B1-V>(4yjR^I=Rc1+EZRs5>#Gf8GYvSEXc*pLj?0WU_MQk0eYzfb}5MGLV8Dz z2H~*+Vg3Z=Q@io-cE!bM!WLvCpLPK8+4mZ%aNiNT=YC?r1I%E47U!1Fx*x{$`ZJRS z_z=8agy4!XLuX!tE( z4v@}4OTP-p_JDQ36IA&?o7ooF0c}tON}C^Nm%x_Bd0jnfP;;L$geI&9N-N;NnxsGn zur2?|Np$*Xu%{$0HehYkUbDc7zrNNaEOv^UdN&?4mZJ)d~vxb1H{$1uZbx^jf zGOcoLsBOah$QD0BXZUY0w$>CUa%*f&TLTkvJFKnRdWLn-AS+|qAZLVggDq&TKN(7C zBQ97Aq#rp-Yeom84Rk_{Ft@O0ggeTKk&p0fVP&2;zkxsjUM{IrJoX?Zx5$y?`cVEw zxJ_Y4hqS?$Jwi~Sd+lHMUNUzOM)mA1eHM?leU?@&^zGxv<$rdY#qUFctgQYWQrH?vF*ai`RI}a?N$0PNDdbdx-1bM_ zS!A8&$en&8CsR@F4pEYbylv7>8NW|0Fn`>U^GAa@p{|D63X;Ahlc7& zZ0u-!aH|KUq?XR%qGfG(4#)#xYY)sIktyhi!lu8kh8Np^?_k{p;0flCH4f{PEb2HW zU@}AWC1VO_^*2S&)dVj{OvTbZ^>@lxRNW)BFg;P9E1r%2Q2$cYFwo8+%q~>DdkrT= z##|fEdj{80w&b|yIJ$rmEq&cNYVc2yBuGi4GdDnQ&CdPQka{vt7WLK$r)l^x<0=*o zv0=~t3XjltPoK~cb&OioJ4;XF92C0G^WAoXX@rxXgLi}qy_{x#R)#{Yf$552vr#;s z?Vb!WE4~z&X=y87xW+Sx$tAqaa z@4>tqp=C$#P1}LSP1K&Gt3$*(~^_ z7VO6L`S0K@|9ioDZ`-%yzum2Uxut))9p0tw`LXW#!4~>KyKB?B9is{$r~Bi(Oc*A? z6Z?s{`ra^FPff!Cu|cxI5frbG$PHl;*aB&Z!rVb@@yF3YdB+#fm0|IG51`%;1a&N^ zA16*A^bmC1sT(FFc1<6OF8KU8u3-2ZQajKHMFv)zk~B!VU7F1Rz)C`WHheA^;h)k# z>;)f=&{vtDOD|Ym73qy*G|U%UFqM9s?J$S|uKzK>(XNbN9xA3{`HDab)ew=H(F6=p z5)2Uym>NxIFVHKaw#h0Z%veSXyZnLWy4COZ!)eV$5>0fSM&}JiomEXoI^!J!MBj0I zYgp*RV`;){gVoP^W%U$GSvD(QZOUjhz6kqFjaSHudaX(g253Galu@lxVfK})$0kLC zI%THcyJRV&(KI9KhpOK^D(v|yH*8lw3zc8N&bhayGxZXo;Kf^C{TJaY!e`unoin?2PK}i3!&LA&76HF z0LjsVm8nPJ1B;B&p}+%TvcopqG5rs1>N$1-oX5J{QG3n!XV(&%&J0AwbStw`)EGgK zp7%SrK#;=rUabZ)y~7AP&*P)}@$m1$;tyZf0W#5^|FO2?h!K%b4J5&xqeLN<+lrKmSIHH5LNP9d-4W4)jF?MQz-D9!`8Ol`HI+}qPDcpQYgtil zfm@Vh5VMK}QJ}#Rs}-|gxQD5$|GIhw>u2>m=(g{L zjtf-^I>mMGrgk=NB=sZ@d)PQ$Lm}OXTOHy?yk^cIMTg9Q6*?KiqPe^XEwU^~vs5lJ zY=e#(jvB44YC!HdR4>mwTR19zB^ZO=6D>&NNzm@NKzx8^nTek%3=&pgX(U4c>Hr}- zD68$+5ke$Y49o-0i(urzJ?h9<{78X5S3#d47lh%>seG3qKO&VMkOxtAzfqr>HYBPG zsLPA@?m?10R<&p7i>N(=HsIpTusvyIz*iSUplcU?S&yqmwGF(Bwh;?_6Z*9|7!>l( zD}fhk$=rORpw0{vCDRqdhLLK=iOo+8F*o~bCMG{twPr>ZbZ38_O$~0%f}UOgjK~H8 z4vSPL06!(8Lnvm;l;NotT=62t(4q>rZov4jmqFTx-_|k*+hd4a2`@MdrgVqm4mZ}& zvIkop$D|Sr-GWkp50TX+C0F7E-eIfkR^vBGu-po(_#SZlge$mqBGY=kM*A-fv@ukT zMCtmMJTF?z!~8Yt%!mTa@!qHK+* z!8uU~_yG%2gO3lz{j%c0nR`e*NWN4Ex+uBVKcCD9O(ug5Szk>=ELeB3uidoTAts4` zcp)@CN(MKfT0;A}RbN3r5!Fj^d_ntG4J!Zrv!$ZALXU38iUDdYXa_S6LObgW=cgN# zLf|ifFzzLb0bHi=_eB~Ze9WOJ73mAvl?a%ADP!KpU-Z*gc#Mf`&Lq-Yp-Pe%bb^#HzrccR&m zi0VR0nG}K=hP3vr3{u1i@8F&RnyXu|gIB%q{m@hK{Jp;tVq=c*EAj*?12_B!@zn~5 z&+`N~`shsxw|P)B)uF0`fz*TB3R$VQ8nkbBahegLA8U9 znW`Z-6|wJ-TraMD zt>9vhrGpkm$TKH>s8md+Km?-9X&lg9SjXgM&H-&n>XE` z$DCX5)3fW{9#262BKKif@bB0tysieMTaJ6A8~HDITjT>go#i(&GGEPLKi8oUzx_DA zL%N^Ikv@leC)}k-J^Onpwr`vtgWd+qR2+m4B4r4QG@{f;~sbR*Z*x9M=dp^?k6!Hs!uyqLwsji7kUja)(1) zd-T|3NBLfZBwK7`#izhYZCI3r?KWX$JImjgLqjmR+;ilnZSxVY>FueJW7@*(nHmml zWv6=v+7m~HxF}3o%Z_rR>x+ynZ(ADtr4d0vL1y|#5p8D2h2arH+En|7?4nvaY}LYR0zc|fc{c|$e8zS9KM^p&$)N@2!ZA;yA6Tmt z4gAdP#iE5;u>be zd+^r}VnN$$;5ZjM_!6$QG2lWzlFIoe2b{{6!_`vwm9HuXU6rM*WTLY>2qC2)LzRfI zA3|8jE@5zoi`MN(Yk~aY_hK!ah@>=A;K(k?rar`*KIY;Mk*1D&3kCrpX~<|*xHd`H zaieX!a+B|a3@dnW_$m=@1a$X5SY{g_90w{gIMB^ABO z@Ou}>|09+@lG2hJb4OZRCrHwnUjr`&2I{J!Va2rxG3pIGIdvPg6uZT?hkWbos1cHb0X}RYc(@K<8UN zdsXZeqVsFpHB!~Gl`O}=1oe|e@!%$Q#LGoPwn1{QF~`8B3MN5~{N1`NzrCK7iGcNp zRO>0&0ex^Q_M2zdlX^rPv{HAl{t_GFbXvo<6udiw-kd#qqcL>2RT z-Q3G%CU=_{DpGYMa~UBuN&Jd4{XjQzrH?#BY1e`_$JUH;9^aYY2WwN%;k-a0C`g~-%8W89H6Cf zxUB0H318W6(ddY(0eRp!1UfY}d;F`iGuf$55)(nIRjy7G7KXY;wK5(=_^QnS;epCU zU%0%hUYLd^q`HuJ-eY{o@Dc?3`q4C=pY7BZ4z!`z%&$^;)yj zEt`|JO}sn|yKk>+nCTb`+p}@a^=28}P4a;Ghd^FcMLAlFtWu6vHge~z10<0=jU2%( z#?S(X^NGOy@^2OlL?yyTRegohLeZr(7i=xw!sXVQv|o3bN)_mU?x3i4bL6w>6W@ef z2O&)1MWty;AqJ=?PhL@8!g0laS!}(&r5Trv0gNd#+4rE9lUySxKy1Fl`FAi$x&P8u zmyTYrKyAPL9=xJlrZ{mxX-#8N zo5JQ!Fn*e(hsPr12Gw}`c61TmoBtN}5pd(6WLrF7+I*CM@Z|!X0eo$tmFp^DPN7o1 z!{8CInsrJ&bQgtYM(mcnIL2LAr!vrr`zAvA-y8TaqRO;H|9CYnSS!n(Z(mNh9!)_t zrLK4k+oXCtHgQ8P!Nm1}(GY|L;k2{V{K8!dS4qRPvjQg3vWLZ%$xHYJxO1+fYn9}B zQi1bF(Lr6`m&XfH+T`IB!#1U>gkhBfq{P?ac1^@zsgA}D7vc>Wg*yNlF?VhWZoEB_8?t^t}qBKR!@JkNYS^DcT|Ef|C59u!dD{t zA1@LFuI(ATN>b+U*{5oJUMOr*+iDZ@T?{D`3FegZ@>VUQUE z2Org6~h1L6`q4BQ6U`#&anNZe~6 zm11lvTzo}#5#>7f1qI^CFf0NZITMkbBSS!Y!}v`~1q~s72j%r%a~muVcgz>xCKYpc zKs)u0{$Jznfon0$6}?1R)z;d%G!}3PQsf8!#%No#(n=&`M$5300I82*@`<`$-jl#A#hj$zshLc#!hVhcGaCfxwt?lmoBD^4h1Fj>i4;V%JN3f)HcXAC77`mN$8ug zni}Jm8efI`GofFiV=KZhT=TwV;_oqBa#?yq|MV)=e(@R^7f*~?`})s56Ha~WR`x7p z=#DMv@lZR&=h3soP#;KO1sfk7Jty-%cwW*kePdMSX`Xs zaZ4Ie;LBkg?4C{s0kNGrDoK>xfYh?^J~tAsb`oKm0XMUi)qDZfVDPPPeorb?zCrTI zhN%2q9mUkcOg(p4Q`W+YnCEqHV!~*B1IzxhYK-t9_F%vCog7U&UmQy9VQC?r^8EP{L+6Y9k9x!)1PN&6@HR_Bp z>XI?)it6a%`e4$(q7!EAyFVIZm!GM+FWI@Wq5WXag9DcuWMs@ybqKgNa>`T+?w%{T zOGx7Ow+7B&0a?0!M0^QhZrDf!gi?-aDp(X}uxVqKsF2B}pl556{u5)bPsZ*weHg{s zvRN+j;)D4H@(;7T^av5u#Vp~+#PVoANg4GazZ*zRNlQ|;pXE;J`os)4=M~Cuc9(K) zsNsVeighJNY~R)abyiJY*==-BHPHKDHIT3a<@kXz$O^&de5sxDRWZGAaf+PNNTFgz zlw_byEXTd9c9ELY7dmNnsHJP#2X&;bWT7S+0^hBlqHYX%BMjp~G$~voG`uG?yhM0n zH!_SsT@ol!Wr~Irbp$L5Uyw5@q%$JcK)P|!^*?iY@&V%_T8AaKjHIwch0AOfEus=V z<$QMp{Zb-&$Mf+RjqO&?tJ1$^l2=INJ)uUnu||{E%C$^&{#7Xu>IF$|*cs}SG|e8a zkx^!}$eHo5Of(6fX7ro1T7Os!fXS2IGBxB>HpN)3LJyzGu{i%QFB~iUwS10toMB>C zK%pympis6K!$TikHW*Cy%5e$YF7;K8%CJvFHCQARv_%?`<_Hye@TE?H&)48Bw@}GQ zF0*P$CO>Ef-kAPk&$n_Rnc3HH{JJFfhWVYP))dBZRn+`Yb90f!dJ>3n1uDFg@p()W z2`?4fUH*hQQ?L=2K!n+TOn5qGmRXqPRLJRPlF|lLf|S0<^9bF}{d#l1^mzU}fS5Y@ z#qQL}?iuk6mmgrCKxGRi!KJPGL}v$fo-)J%3C=)xKe0&2XNBROD2#!A<=M5`(@08u z9okQ{C4{sM5$yujd6QWlcR_A>)hqVGTOEDuC&}rTed50#C52DGAF947Y!mQ>B0W$b z5t6|Q%OVmIwd2WlX1PZeg4f{FCOXlej}FolOAj%Mg&cCkfM7NABz&$_UW1u;O9)}F z$%EnM_r*NDu#ZHTR_4`c#rGG2U`~{GzJoqeVM8+K2re^AE27d-m6M~7CY}h&?Q4;1 z?3I&?>s!oOSXVzHKPYC8Vv3q!&<$BoFKjhc=nP#S!~9rCkAEOv50x!Y@CnWHMB%=1fE=OyNz@Zo|Atb2Gr>;P8(`oF z=sNmUbf|C>`@zbMqumvMa`uw@0n?4!;S=;lI6bu43;1H$jqi?jJ#f9oe%6A`zyV2& z9JeEgL2M7Dhi2VT0Nn#kIxyK5H6VH;wJoWE1KUy0iEL)NnPa^Y-VEy$dmwy6xE<;` zZYI=t<9+?jqm7nn3T=pLHMj!It}m-=3|+Y0T;vmvO)kD&VykKUra{gVqw094q=}T5 z)~(^-_V^f^snwBK75c`-et036;NuVZ6oSIwW9+C}>mRDxAI0P~=CnvMlOg%n^?2BOI4YVxYzHyy%R_B=Mi{nk z=Zf$`aB$loeBN+Io%?m&plE1$mGGX;?cHot<599c=Zm8=u2$anh(NSI_}u?o;z}MEG5l2?PV@3%As3|6l>BQ7)*O;%5!en z>bXr`D z!^}@@NjzXTWIU(2iFi4`cTOK+$2`ntXDIe>wW(()XB{<@KGkvhuED6 z@!h#BBi7vd8pl8P%suR&sK?I>S!q+lKtvn$0Fm zLc*Zr@@(=QR=uto(z?MENv1+=b&<7G&UY!)-HLRW`YlGAxG$yVh;=f*ucXc_tT!av zqZipTlA7T9@);S6AxK$&9SFwXc>c_*jlwl99>BEy=~iRj`oLOkQ>2$X%zfD zM*b(m${(bSXqRkBDRJ8keYCD&bbnhczM{v#? zM&~g8H+7my&#OW0h2BwPrK_n)cctqvM(u@v%_c_esIT|S5Xe(qBe*l&x8|C4;czJ2 zE)~t-%RL)~^(>*CH>+Ko&pRP2AN_2{`ENexggiYOL#R}*FYEUozQv2akrd@!{|V;9 z+XbPD@*vGM#U8opVHah*lJ5o<+-<>KyOM7Q%lj9vVdI+bPW9L|9NMemcldJOqzkKx zZ=r?SmD@--ZLPDxyeL@Bue8CjL&K(0lZ79^{|=NO1~dx%hn{Bx<|@x$*)ti@`eSHREoD+(B(Ss#+DLAhFS6Q4F&r?8gNg{TTRAp70-I-QJ8q2fZybY zSAsG@Y54GFX0y}YyVF-!S1)*aeSqttG(p6;#`ZYyOyd3X4F!h@v5W#$QY1kl|an97ZM3x4J>T1t@>j9!HN< zMM)rVR%Rbsw#SYI8wV3CPt8mgVsPY@77~M4UbqX2UpEzy0Grl+$8=Nx?Ndzs3Ys#= zo_j^b-Hzln2G)(97E2!IF%foJWNVzJoT*uuw|bNe!2Nt>`V^Qtd+oivwAD)wV|lc& z$L-BSG?rD>QRlq%HexTOSh$e~BDUrP#VDi7$c+<(0_vOYe)IP>R$Z(SCLdethKQ|y z+W0!a1dOe-Z0`6Cc#J@RS| zL{s?Xa>rsQW-94=DV&=Vnp@v)-)*+f#s>H>q;;;1?+#u|)2U35&F?v+qwEgZT-K?t zS5n{4+m{@G&ualLHzJ{KzX;$L5N*VI)Rgt3NUOHNl$5nZqls!U3CUm(vrr1yGyxGm z%KlJycv=DEc%*qKZNI&dfG}1q!zA|BG}A^Y)<;HiAQm87AW&`8*+5}9mb*&76_D=f zUZh-JR4xwM9T>QUv`X{SQD6n8XYPD?EmcQ->hvj!V9x$I7Bo~CQbTeAtO*QJ5k)~r zwgF~SNXLA6qTKN^=+d}MLrr&`cIuoV&QX6D*<4KGQQ;z$(tIrL08oY88S1L z(n&>njxmElyev6gxzOg~T*#4`>`F5*;4S&{2n>qUz3fTmjSF|443+h+Fl7ZerbvzE zn4lrNeD}K(m6ZpcP8=c4wI~~HhPBI>Ap$>_j5zZ8Y0~jFHPzf`8`FpYZ~X(jO`d0n zB1vWsJrq&JMNvsfEF;m{^>dl%PHiE-7);7wHdTnz`n}!6l&uMlJW@tDU@e$9t6%=e zBXgLJN+uy@447%T#+S$$uA~JkiwccRx(T)Pr|V<^Wz|SLV>2X4o}4LiX^=JQp(sI` z;;8bf*)`V43u6{B_e5-gFQnbR4P_q9CW*nHTXFP$1;~&6v_JY%@igEIR0co{khce^ z!9?todpwZ0hrob%j_i#g&h#F5(67RSW$hycZcfMK`%J^^S5zg$l@^ku6){JQA=QOh z2_wmd9AgCXB3)`TUM@pVvkOF7qPj^y{Jgwjb0nPm6v=w}!3BDa$JjWjS}>J$alq-( zk3hYKyna&G>KfwMaLej&*zc@1q5ik*uU0t@%0Cn{^A*dR=EBKW+1WX2ilixr{2r(3 zdB{O4vuTp>*Gl@MyieShh0vvyA%>Q@khYcE1+_$QmF}+M$_++yKg-Z8vTxNFH3oYs z(UJPs%TE}>rHp(UgAz^r<_>qQYFyqM_5_jU_rL~bEegZt-YvzN{V&Lztk|qvJ5(Oy zhqXVI37DA8ihK5WK6N*sE#%unIM%rUAi%6Jj1UR1sD+RVPB^*zWL7+$&-IW-1At&| z&W(U#?!XrgFk=yiAO;^0jZ)fRZGoL1_S6WXyEe_8>s)W_3-E^HrFi%_(M1I)-uAGw zAA4!kBgZgh{hKRMSNoh}X=MW<}qU$`6cRPacdcgR4bW0o6qf;%iM?yF- z#OSyNznX+&88I1%`9x!5i!Ha_C*u^YvM^Wk6S86X2`S;+6nPj`BbrQV*|=%l!5Frd z>u%}f3fmm@Xpc^9b>m$5H+X!h%9B4@tv3XshS>y}6(LDb^_$t$O0ZK${2f4<3doyx zhqr;0`=E6FZh^^Yb^DhlZ9(WbPATkxYvb5DU2KcUVzRJs)n?=oQJzyx8U)^@x`1%i z8#SuW<%d?g1yAfbjxoNrm*`|3|7e~dBUPDZQP?ITwsyI7pFilqh33%C5cAl|#g~|L zwRjsK=gx@(H%95Y8=zmH!#$@}z9ra|BU=`-+VzdUEntEyC%^gkJ~&B|!WVp-=ZRRg z;S_FIEMeU0PPhFFe|Wj$Xhwp0D(EaB%sze7NIG{gIXjfHFR;2>oEMoUZvYgUH*O3v zmp~TpE1OqT;`sa=z~z&mJ7TET^Sz`evdm&v=uYF;)H=@g9lkd*4&o3-H@=lwh2yCbsrmb3V#qxfn=;~V{fc$*OXr2Cc|m;3vg z0Uq?)5&a(0{OL&G8=?pO7K7IETI2jFJANC|-5-n}+>Kt0NSBf*RcRuKD!xKf;z)o? zpi2NM)ixE7@V8opsNesLo%!m%_Fg3a(Z{6rZ zh?*6SUZZrc&d8dHX?M+vSm5qXi4g@asZ>aywG1aHvvwCC@Ux%m-`DnG|I^zm`=blg zFo5PVg6!<*N1wR4G}Pf>gL6oR+PfXj(=F`N z+ea9eC;W>G4DQY$Up(+3!7^j?&u}sVyd37jFT9DCy=jzf>=KhL8d`JS!{aVi&w>~& z+YCo?xPJyRXMNoJ&Hq#HM`uOV2?qlQ4)%WCD49n_Eg|wBN)9s~4XGu57)_JF-v=jd zWyhXiEIudiPKYU8de99N^>XZp;Ata$9YPZWyc(-RZGT?OfB~JyI2!7{I1oF@&Q>}yPj@6wPU}0CMWZ2dA+}9KKy5DSa4wc8{f(4ucb3dT&Rax7p7RS zn*cMaJ~b|v0dd#$ho{qFW}&OA53RZ!wXNqI;R@T-?f*sDImPG}gloEcw{7gUZQHhO z+qP~0ZFldsZM%2dwr%X`lR1;jIdd~7SvOy0T~xA?%Brg8d)`tuJ_9D#feueoGAt%j z^cEdWdaRgBwj`6}qSH#TtSrs8A|zS6-t#sknBDo12fo9*l90jRZ;H0--XGZEN&vc0g$ zL{((FUDq)tJpxK^@hj<}bcoI33{FNR|gK_>q{VY_CdXt3c@M zz7Cy87e|@VV#s51J#3QdX4g1!$dkjGOQN}hb&UH>66%cjT-a^Nx}5Y#aXuErR;^{~ zR)*xC8)%~zTi5G?kuvE8sSK?T`e*h{(s3?HVwgVA@{XosOB+Lss{<{TN9dtrcy&Fc zs)@-6k7zEV(Jd;_g? z9F4t;M($=b7p`f}k!LVlxj@q3HA=J1y&SvgQ?YZ+9Fz`t(lEB)nzUN@QK^zAL#zF!4vRhuHNM9C7|4A~R7P)+GoFi8&|?Rx5FZMTDgX#i!z8H6O%cmDb4*<`LEy z(uZv}DHrLsNf%-4vD$Sg4thK0iQx_v473;to5gmBeDl)8c8uSY;>EfhG-GXv0K@sy zm1F^Sd5NqLo}wyrd~x+^74ff~m3zfNSSXzLjyp|1qb+M?k}AtWV_-Z%zD0@%v6e0H zuU1acJ5-B6SoX=%e8CYcT(G-EiiBM>iilAcEmDNAV(Vpi;>cN;EQ0E~PeF8wicry0 zHbQYwkdc@uLu3()C<*CPt#l-Wii(q>%S1rP2OeH|lAy~h;Kg0p2eBGdu-6^6pr%Wn$TX@d=f<{97hb~8slxu$^d$TtzxGTH4xBc%*zL1ik=QN}KKI95o z$}n@h7u~J6vJRa!EGP*T(*~DueT0=Vy&H^bmM3=P-7okRbcBV)x+Z-6(SzgY&5-HJ z)o0PQQ{(|oW=?(`l|K+U#&fH8r=%=1q71qu-{);dL$YuzI@Gr}r|#S``D?5FlYVs{JLj+JdE!V~!av+8U&3#AA8mMt`;OKA%BK1A?V$GW>hs_* z;v%^M?*P9{OlNzFbS9&XyuaC4hxl7>E#GWJqMx6@2dMV5m!ZqU6g#Z86dkkZ#l^IeVkv=Tc5a^B$Lri$XG=(rzz|`N1n~!<}c8#-+XOPjhbAk+7?UqGe(A8LB03#7+IO61^NQG1+8zt&Y{c| zW`bf~BsZNAzY!N54F% z;~)32y5Rf^T-H)rW`FY-(4j2do-)~SPZOo>3>=>Gk*#D4nl?tmP?y#_VXZh>F8#Kc zHr27nIBs;uT9Nhz#!$<88e!I0)H&Ll&$MJIF< zXelWz@x-zQ7~=YCGe2*JO6BelQ!L$&2V(tA2zwpoXs zcEYHU)}~P^&$98ije>0H(z}*f^)i!nvmZXT?G-E=o~3!^o5yJ>@zuR1d+hYo`9aob z`Wh~8*Fir2;PM9#%NLB#lMhn!dwQMJKc>vbT7$-K)us#mLAx((n{Im}k$>=U7dyk& zPd5j6Uz(e>{NWIf_!QJ^cU|#~zC%$ZK7X>*Q1w0kHW>YG?NWb>g18yfyntLady^W5 zZK*5N&Kqg@ZPWU(9pBJZ^2DHrha~JkCnZ~@P38=&c z9{=#W{jdK;)j7QRVcv$ymqJ_x{!EcoC-bhoZH3<{Q3c;+)w!Iw$+qxX1z%9S$)9(- z&=(6lRd-I1j+1h$U&j?xe@_-F;5EZlVX<+|pSJ6FjCSK1*pbwI1E zsG3G<*+e?kms|3r5nH*ThkKy!uSjdC=toZ-h@~yX<8^v=thj*iP%}J zn8IA0X9D;DcmT9@+j?m`N60IY31#$~u(i&)Cb8BW|E+BApN?(aM;9$OGLwwJotZ8^ zc9ZgRgJbza2Kl1VYjbr@CjPUru1<#IAAlBqiXCm_lZDTf(~6rBqw2XVS`|AR)_2Be zyJmpM&<}Py92YQ+tCiMcK6wkvhfqN^x^n;nk7Op7z@Z*)o&taLO4MV*cvF`>ytT;V z#E1XWW4K|WUgDoXk{tMrq(1|E&!`}$l!Sj8@arA=dt9+78F|2=39hlMi(c zwvBo#q{0WsF9@CZz2o?ND{yZPwANfA3TLRLov6?!2n9v{AkrrYz?_VKPwY+kjr-i} zj^g$g@F%8kcA5RbJdi)c+s8ikh2rFuVoh)Mvh%K1y!xD0S7vYbr*HUVaQNS7_lDy5 z1$0=N+uh_QSzrDl6`C?fu2A6g6NLY|OAcho-owKH0*cl9ABik%O#j;fD~XV+rHzTH z)BoNy4{JmDpe!x(o0HkDyL2dM<)_R;N7#a-1Q95quhBMGYKr(8SqMiKOUfz*T&U ze+UC9P(L~az>PXF&H#_@d2r(m!M*342FPTm$i|MlWhaFy<0ix|c-$J`{W&q>!U%WB z)0x^eDg`m$yQIk;G!8dAFkIcuH=<)dab(Pk2GhZr85W|8+ufI-i`(DFubQ0G(H-U@#x}?AkrMCC!5jfy5JuRb^@zCvO%r~fnLDc zAszLxSJJo*h--F_r66THe;tI^r*@0-!t?d_{^Z^tG4c7WLEA`H1!=GA*Kaj#?CwS;>EasKt4fG=3_^0pZ$ zsi)3x3QrW1J9ldT$MX3jtNS`r&CkSfBMA#v)gb`5k_(x2gfJpi^#REy`BT;| z;Npjdgvx7qs~+w(j;@O+fgDR2gm4qA>I-d5dS4>^0E95M3pcz+OKU zEBIy&Vtt;DW-7ej^RVJmho=vrd*8{uoO3w5vJMX!7~v34(cFa_*r9%JybGO`Tey+D z>=VQ>-p+Z;K@Mb`2Kzulu~IOIk!zAN(SzLf5PO-sagi{p;yooOC( zWbOp91o4_p2+o^(95v!0<7i51?DcZO=nc&J9oa}Oa)r+nho77fd_JG)=?*NWUf!l0Q<5@t%buJnd^ zRDEsfUk@KNgF68_#JheWcyQN!PVz1w%?f_?%3{%rQ53)NF0`&I?mB#?S&JJ+ zSEf9dV398)roU=@H;$JPc%tosJ?Zn4`W)z0(*;&itX` zcAJPoj;7rO(UdWno787-2A>ZwR2MHvqt3drvRaa0i@Cc`R-N!GGj6=Jt6ggn@sBc| zJ(iP7CL}?~@}G3!YU-wC%BHuUm}PfeO_*o)pAK3v6Y0Tn7lLuHru`<^M1kyE1T`HE z=wobd@#*=X`g%U}1A#d1y2wIPL0o2)6cn99)UJ^V2pc)f_E`XlU(P+FqF1j;l}?<>{rI zAW0cpwR~|mto3*sFQAK8=sgoJk({RsC<(S;S<*|B_+kL1=KADi2^m*iXbRi?L}v$o zYf2Fg*g4mJzcCU@{c;@gLWFO~=9e)MaeJZaT~Z^o7@(t#!^P~P(G*NlU zHA5QnUg)$|o+s>{8IL_gS>ktA7Vv{0=-^3>F`8hf#f#{YtAtNrhn-u9lu!d~Emax0 zxDa<1WvN9Zsgl^@4{%I+4l6+4!HnE-FHw=et^MfVN5WIpt~j~TK;~hvBH76qS8|Qs z>OAZ{pQ}(=Bp#^q8~7tVPwG$;?4k4F{v4v9)SRv5iMCKMKD;T&bDG3n;w+AQ=e$uA zD^PZVrH(ICnWb+JP->vV8DqG`A{20wM;7n>mkhz;f8uk--Mhz!oTHNAd8r=*IH8 z@hjHO54J!M;3cqJnVh_BYh>AUM=NFmvfw znye1^nZ#R8AH5(L!)9Flgj>;1_G%(%Rj?~0DjmH6frUG?=qRLRl2v$alGX8P-Ax}%x79lkDE<&<#EwxtPcqP7bZ?V|A^3Zv$j?U3Qgy8%N2}rk z^0&%R{DZSsuc0CO`|56=S_AgGlu$EAiS~ESP`!gUq@VOKp1CIT%KQ>PUQ!YG{(q8n z5Zfm`dF^k}pga99o1dv!y^;|W4iD~j--L$jG>6A|Hq-i>;$A66_#r*@P}xhzPcwIu z?2e0X$)Jb|$e@BLpx7%+KPyf{uKXZ#QUc{FDWUWj88KKm$zh){a#w$m{eZR&^w}FH zdv5@JyQJ6m#PrUtyIoQ)yp<8W)aIu!GD%t@^`T>9E6E`Y7%E)VWqQ@KB@Tu)ChWx? z6CGXJu8UpGQJ^!WOo$z1Fc*k%r$U5+?bisx)qV_K%?qu&C$B6MAJ*4)q^)$CMVG|K za*dCu0A}(;8Ac@{JBLqGrZE>sM~V6hDm)b;S;<}-#9klWPt%Z$#M@IsgR1$+%kbe|bT5^AbM6rga}jUsU*&kUZ#aY*uqia0{ zp=HePFb5Ur5f`ylhUe^3R+$AXJa#r7JDY!P^=L?I2i9u${ULEax%I(Mi#a@z43dsqHK-yX2CUfA zvZ82>onB;X(*Lw1nESa8+I?v22{LvM?W%n)G&U@~<_6bc$^acX9^BO@0SzD_!Na4kOqJ|Mc2H^E>;YkJj3P>((CA2Zo$kjAIw8*_cBf=8%@?--g>}Im z_QXO>I2k<+*lj^Xa4m1?0Ij-y$3A=XU-$)zwn$4q3(&cyWHr`%2?oMg`8N3emI~6Y z2NiR>vIZ2nf^HNKP~|SkyX);;zK{HwY8PK3m-mg65L@pUr!L z;&ZAoWVsNcJ(5&w^w?}F=jJ;@=^&{W!DU^pR5@k^s5ccc!rZcQm6;)Vp=XO-1ldhK`z;4fXwC0q!^90B61^)ZShVqtVuAB4x%U&EUUTcs_mZ_)V(uaH76Apj;+Ennai(u2w!Y6;ImkEb#IX7SwhUUE@S+ghT@<_^)d4vUc@I!FsQ3Zf0ThSUTau8_GL!hH zh*zPz)h&bYXbSFI)T;34)HS~B+`Td{PW-T`SOQgUcR@07?`CK0%SHlVk=Z1%S;4^D zU$QUJSd`tUlscWDbgIQR5fVuE#1BD}*{FZnkERmCgrV z9!7s4YhdNJ{ub_&!Y7(-&zlC_ug^CG-?97_B@V-Hgma*_P2d$S9_d>k{??p^!$FgU zquebLD=1yGA&4O>$%iaHr%jrENqY1cDP0R$fIx=mVjF+wEg~kh|N*p7chQ) zYZCnX+z#1$WofVXkqG21%~xz`Z~Un}(bt!ztlc_4Eb*A&(oBDFl&v9VJCxh7Yxo`z z{CKrPqtZ_NxjN;OqDpT$E<8@o9?du=YS`Qo>2Jewm_bY|jWu}V1Bj7OLmoI9tMK4` z2(l1EA~=~Je(??@d5|F#9K3aKaqjnFk|j1_YX~(&c!6Kw^Z1z|M@TMe>-SqB*BZ8g zJ`f{F!;sAw3hrMLslP# z`KrO|eauVRxMARZ50@y2JxIr2ameJ8{dFOw*K!m=lY3H`_hpCctSTGCD|Y$owN6)L zV|~{qqel+dPe+EVoAB-q&;4Ai3Fi?Dx?MyHS9WdTRkH(oELSherI9sohVL6@Ep*Qd z)zSMdgRb?scnqaCwc6>!fUw66!*HRUVv}{~ljMX(5HrM5^NC4h+WSTm6O<}*>%fiR zDhNmT)gfU)WbAy6Y#85R&&(?A0<$gXS8^T->(_*iNKTQpp%eyZMygOI2FqF$Qu?<2 zy#!jiklcMFEM+MbWw*?BC;e_}jNctb=>TeobKUmUgl|LXnrsx;qk_m9mt^Yn1nTr8 zYTm;MTI9Uf5!{+LQhcDrVl~x zf2F|9%OYxOaGe5YPzwz#3-LsnotR|iC>N;2bp28h$tW+JKvmQ^;N0i*)QgQ;nmD#^ z;-gBs!Nm*k6v`Is_7p{4Nf0ytc@o9Ug`3;p#Uf8EvKh3NY?`o`>HDH57ITYF4=yzz z%D5gLOuHFLDC-w>9F2=Aen^i&7i3c_`ZeT!*6ta$JP>zBrwh1mE14)!j$)T_t#N=5v`x|Sl9*$Lr%nU%- zxCsOxo=S*Z8=5c-lS#(|6vZTrx2nn}v}@E#=#GvJ=}bw-O*tu>#1&!U$}@5W8o3xb znHcrNWa`i`h?#K`H_m|qlpz7iv;+@inqurU|1o=rGP1EM^2)O0CFZenK*-cu$P}m9 z7)h4ma#`np&K(f|2b$0hn(!7f1y(xNC5f(Y5+=iZC&$``lITeS#TNyNFFU5Q2xWp^ zId&;X^>hgYK#N@H%}7|Yh?vqdBbN<+bkMSbEJMDumEqTjFEtH&ELnv}%41;_mCxLS zB9~>u2TRHObv$%Hi3%t=cGKt}y;oGdx=q-9XOJ;p(-w^ST}4&a>Vx*! zlmj|wTQ-2XVU=OTty{FpqFQfRafFshKb@F=R*+rKN*SSPW$_9ydDT=f;nrpj<|X=s zAse)8Lpbea3E$KBYF#wgPd^TVs{6SCMWk;O>%xPeXv;1v7V>URPRd`&;7NMBtT4W8 zvp>|yvI04BwtZsJHtWeNT(cmRVR~y6iDtZsSYTG&1`K^D3G6#_sbOiHHlE`V8%1Ah zMyrAk`BnC~Ui0qM^b6{;UkC{|LRTZ@SxanMEs+N=pdyPMYr{r1bC9HJ;&!l`H?yT` zvNBEHS79M(XD=_fATo_$Y~ z{o@BWc15(=o<|{$cC3EBv6-1M93Ra;_(AcbZ*o)XhVTD&0$&WSXby`61myICGV}fa zb87$33H<-T)%<;Qh8^=fxz2LrW*bPP8x9-mf!9`(>S^BClW?o_#Rzh2#@SvW#>me! z`J6kF<;nm3dLZT?1kK8Gj9Fj_`7B@9X9-+wfTJZW4i!o!gOkl<`@z+JO(SHoP+Df9 zx|{8EcDmnOHO_Dil=*L7_H5++K5sspWK`E(*HUmt!l)yx_)H$no)@L3ERqiA(nm@JJO!p2!;)&V+` zhg@X1GF$-A3>QYt$)IJ%Gqd?YlkO<&w#_kTr|u|r0vSt~&?j`?Vt#b2IB{cZ<2esh zLF;&tM-68V4yM9*f^ylSg4+N*;S8R9dxW^KgR8_u4~F?#Vx6TqeB27$7%_-JuPcVe zmsq>nW=WhsN#<6!2BoHdnUR_E#2Xa5kqlR##$uZXuG>iUkBcjF@;!&Oa$h3YU;^ zph3dLDD1?CV&&`63iI{MZQL5z@M7TB-uv|mCJBdWHM(0qTj#82g_3ucgVNVmkeOcPZ{&Ha|BC$L}^lUs(E=~oxe((<*M+s!U=s%LUyZn*ryQ5xzW$D!V6>6278cU zOS@84CKC^nT)j+O#zGiNQqSQja8ZJZ5=nPco}1k4ZS38G#*0+3=ZrgrzhX+dM$5T& zU1VY7bh0@G*{kf~9-G|3a57Y!sD15q;$uPzk%Uy&(dP$2;AL`921!uNrW9A!pFqn- z14pgfJXajDZ~uZni^XcyMrDnqdNPxJoHOtAks-_uC-9-dU9CV^^a%CWl_Lp`S;LA7 z-Kj!yI-l5z+_H#6l)E~KQxrmog}*)-&)Tovw;QX$8$%#FJgSAD!MX@ZSx_g`sWGQvp@WiH1!|wtG?X*QQq-{! zR!w2{%7ii!n&q>|Xs|1y&>`B9m!)Kgy(-Z{s+-#cN5ebkA}ek%6k8XDwT+w_RU$7S zPOpd6Q5h>2YsExLjyw!wpkOK^ZH+o=kCFdQ79z&+njVuA6hXKU<`UNDQtVY1Qbi4- zN#4La!6e%^4&yA|{H<({`_RW?pv8!`zEN0Yli#Sa#AXbK}Bvd?IQj~a;YURxjphLta6paTDmskaCEMD##8C~sj z&YY-gsuw3Iz5^!I=gl_j%(M{bz#+_XvjY7}^qzYtEF_J7)@eEtt^D(M^I_}M$t?7i z8!&+p;|NT~kH^ZbvMIK=J$xxbl!wgpFhEQh^{klPaZ8}b96dHUiZ5&QffPV$&W7T; z&!PNGCo+~1JU^G;R;jYIL`yOfSA{<1$XX9s>(2Ygglv~it5|wj-Dpu|?o6ZqlvXQh z=^H)&j$ZaeD|extwA@NkZBOZ6Juxsa?IS7^r9HCWV#;f{ypi=Nl&;doGo6XHOrI%r zk*+Z*Zw_)*=)4bAGKb#RWRv(pj#{$ljr}or3=&gI&V_Zc(w+xz%DwYT4;{`fn46UY zD2sI!T$}auXdS)Ac7I(D^RGdOWQb&hB!6<}ZhjO9*7+?tmJcGEl><1u)nAYc)yx})<(LZ&pa)%Ai%zh3 zbGs-suBh(TZ4fUNZSujj{mxj|quMN8Xb2V_*xNPzmAA%lH+=~6N1PkVa)X_>1TY_n z$q3BtS>xgvn?-x#cY0*uuMZ5#A1qz^<>4#8ArqY+p=ud9VZ)hpm7qwT#pYjua74-{ z4x3>O_lB=&(C~|4^p5TQAScOQ?ZO#I0i^Dv_CAnLOrBSXTP`2ih#ntBd!=(%8&4WZ zlEdMrQ?mpc3U`JRKMj+_6u{G$8D;s&T(nt5dv)9PJqm{x!h?UNS<&AgpV6Rggn=^rZ=!zE@B&+#S>WyNWqTjDMk zH9{%n)x#AnW{D;8mO_mb1#iZyFEc;+0!l9B~mW)SibUqo{HOT@!Pi6fxJ z-xh5TZS$(V%ng&T;=7ZbKq2VN;AIT^5>ql&MlXHye``m5s4TYg`L#XR_|oTcZ4S5U zOkIR^W}M=m^$+M8N8W00V2g%Ev!=AMo5v><+l-wr4Qyo+|I6FPC&_XLv)|qy$~#^! zOrgQ{x6kIB5scsM6+m^`YaOCMyp)* z`|k*P%>VEFjyS*6zcX!&A93tY)f?Tm8r@KB0j_NkazfG9YD}P z4%8kF2(Pzn6a&EwsrPfzx5*6Hy+99lBs2p%{Z3s-Sa)P?SspAPKt3WgD8Zehpf3cz zlqxkD6m6(=R<}rX+pqyo&NM3{1sNr_=5r@u^4c*^>uo8luIP1%8zZnTE`9*}XX&DnuUooTwrv|}$6$*s$W z)75-Xp5!)D-n3Kgl4c$Lk{QldnJbp^)rmvA8aoaXj^%>c*3YJ6eUJ)Y$d&R%hmusMUw`A5FbK zn))f3Po%F6Lp1gSRhDi%`dFh???*zgZVP6UTBXqdW6 zV~qUdnN4=lsowPWXVl{RV;Wta1;wW|Gsc0Nlc*XK+$~N%8QUIF60)54U*DWrZkf^p zQ+aNkCi|$;0~b7YZ6^CT=|H}CZlNdp+D8qT&>lwewVJfzAc*HYkj!?a84!AbZC_ z;^I)bWng9@kMXK}lJybJahai&6=wBfaVAl1y~dLYO~vovVM=_sKGe)Kd?C7TNS4f8 zCLg%cgNqceoM18^keWeuLx>)*&f78v{BPK}efnLJ9=O?E`aOtOY7Y>9IR4R{KJHie zuIOI0$@V;+?nt*;*dvyV~}=V^A@lGua%zS>0zs^miZ z@PsqRSZI_hx0S`tYb_%OCp!*Y;-V9rpL!P@S>7t8n}hP#hVVQmE(sGU!LQLO7XsT; zeuJVSm3iGJuxThh{3Yk#i`&PYsJl1gn%@F5_jIWHo)kr{86}5(Xi*U7X!JB{_XXN_ z{jn1ykW`_Fs!_WMO0eRoN*sSu`qfjRJw*S6w5FV8R8I97nWC#vq#LCwg~Ft)wMhVo zvrh?Rg6yEvE=BM(Os_9+xV*5&z}S!rg$vWSEb(=cTySg8eqwJo^cac7;JYlO6d6`x zFgb7YBH7#!7IK^%31g3l$?)}pdfDY?j?D7ud4ykb8Qab^EjU18TMmQ(_E1luw{Wjy zsZeE~5QI0{rCnz8GjcqDqq!O#N(>EqP7v~}U+vGfuj0|Y*oD2s;T=+Ro&dP>N%-=A zhrgacoC2wB74&<67H=jB^k~yJQ^23RZ)efVXJI^d+ygtb=x#Gv%EJW6RnWiaCChou zW|%@n+!qm7OO1D{4foQD3qocwN>F&DfLKakqEdf+-pVqncuG&TsEd~s$ZDG+Y7RmQ zQWab$jkwdr);%gKaK+XrGD>X1kqxS+nWnd7(^Ra}_X3H3D^`!M(cZM0#>#4De~b?< zRm1Tzp6XfF1pwGH-ChkniSnHWk4>Uj6xGeXqtK;gB$euJD%XZJ&I%~Y7%`VN! z3o?6OqIzaCk^tqgAs`)M!_XC}|nr2gGhX1|+Ua*_DREOlmXJ*RV z`cwwOU>5T61(Pu!#J^lPo8QhOb^ct6t3dAk^fJe2DpWylEEe(-062tcSu&jVpQKR; zgG3BJsNSSaVw@ZFGt6yt%r2MD&vg?!2KHzz-Nv^R?9MY9f_RnRBpl|7@fx9UJ z@w+$}Xbd-Z)ZWxWhc4(b#n0CNtdk2JboP%ZzDL1AVLG{^cBB{7cKz)k99W9R0u~W<(EUsVRPV z1FHDjO$4x9i2T0~1Swv4g*cpfsRanjitWh_cktQp)@R^Ox??H^mJ}6BMZn zNQG65Efn5qX^?i%n8m zT2`t=R#`)0KBvcr@a+s)jY0FsD8FJfO52@N$WNU26v>PV@bS3prv5DX2K zUI0w~*0(WvZT#A%W38B_*RSzm`epmyPi)e~2cGxCwKp(}ay1NRn<6ZPu0_8rau1o_ zt7jt&{O0~)y1m4!8J?YMf28pKf$jd}l~J28ta}uvZ<{o%BE|?qZusE-#+DpTf2$79 zCb8ZP8s^Kq(5oQhZEg5%9ZdYLB8J#)MuxWz?2fY`&<+N^ z-);~BKdQ4ltIx*Eqfc8`WNag1-t(m=|hpGH*pi$oj8s2Ms8cWfxd*ajfv*{=I;C z4lHP^{=hK><7~6&4CoaSMk~{dX1}G{YGRX>Wn0q2CNN)UL%DE$)ea(J5UKJNZp2+c zQrvDnd)*TDeYCqVllaDwxre3j5dJMC;lQ8Y&`QP*h`->%P-{n~*cX?lv$I$j2({|< zmr@eW;j&9Dw!$p6nZgW~+k=6JvFGyyQ;%qI)tX*2W&0Iwz7<6W>>+DjSq$G483$SK zc4CwZ9&qm)hVWRcJeLHA4df_p!+E=W{p|bvd-fOD9l528sb$Aj^0d1O>RykncG$~f ztiJQH(r&e%3nFWSvJ)_rnj|EyOloG3NLi|Epuxl;xvgzWu2cpLZ|df`V6;=P7u_P^ zv^Yo+_k6r1=T|E=5$~zI9gt}G;<>Qqyja{e64f?TuRd5r;TrckQw{w!V6JX%ts9NF z)H#?8x+Gt5_u9szUEz`S4mBn~rSqEdO|7>Le|dULehQfmBt6Cq^p}xj2JGgBRj)1( zpSN2%)OL*5g8E$c(Icg;F`YJ6HEKx@+;9?cq=h8mPGve{h40(l;Mp6CJV0O#&DXvAf#`a3UIUX@GLqHP{peQvjIhG3Ic{!p(AqR?^Bz^zZken1+R_wYT}HJ@W-2 zx|Y#*0Rpq6>gM`gD37H*F$4_#IhHB#C}DRhJ07VkAjqR+Z?u{ev0kUN>G$SmPl~IA zo(Z{00Amgq3g^=?NeeNR2e(*3ZtjdG?mt>%;Iz_7i#qYi%`Ojod0A!uE0C4U2ZSWA;W28rjy)4fDZhYCSFum$R%MQVC)Bk~S5^pCXG)vqYtdsg zyDn`L))*{#M;1|j=*20+=0&|-N_f2A$Xa7!u(5{i)SYN6d&=wjb#Zy346<6^2@sDe5VyIweGQF_hr47k4BAJe-$Z|3rB?<59QYMlp<9WTw zpxF1VgbQtd6~d&COVR=ECDZ-{K$B(?D`d0#rEW#xRF)at(jq z^l=(_q{qPDt<&;7*1Mj12o1V?sud20yg$-ILQ-F%d#hY0e)4T8g9it~B^D4yONFok zTF66`&DSlQN^?f~Z3jR;`^9F>ltCipB>Krj4b#fQs1>omqzh5n#Y#0HNVEoM2UwEn z3&^e=ZTIiXsmq^4#KeOMpCKm6mWqunBh!!xD%8Dx*S4!}KBQ`Ps?jO?xoYImXShTT ziyt0Nk_$CgTwW=E-9?iNOGck=0h-{I?+;xzd2ET&mazG>XsYBC`O8WhQ_55ed2$$o zFa8uuM>M?3XeT6}@u@M$9ctrZu z0|d6sYwd`hSP;Z0lVpFXxA2T60WiGGiKHr`Yf(K(>ZOlz5J@}LH}B9wlVfyvsA>|c zlS8D<=Kqx5LXKE%nUnGqNx$wF^^CwmB0@ZOnmo}-Z7T&Uk_?SDg&?s zH3^Oo<8`0Vre$C`6CsyugsKc>&ry6Zs1&MGVafqI`Wsm^UAAeRhFy6Eb6k+fx;IS| zCz)-lB_52eA<-2`OOp>OlZ85FlP6>Q$!3zkzx+_X+2S7)A2-~)l;A%^sq-QVuAi%R zwz&O|*JcvO75u%EB8t%i^yO6W3mQkFBgMLB%&Liz zY`qK;@>Fc|hDF&*#=R3cdqRo6f;juH1u@MEAoXs?zF<;t!=+fmZn1Z+S=t?raSicL zz#H@J0jXi0pVz8Cl-^$;sW=JHXDHmWPUP+gc|xD4Z*Vd*_`g4g?Jx4KT24mf(E>(OgxC@0%B$@`UX8K3O~ zb7KQspC$`A2&1sj%eT9$3TViqP!J6Mn0nzzYdLM9wZkdq){Mm#vPE^+LL~a$R$s{A zsucx{vL}jbQWV>;DA1`Tf{;HT^~UO)=KHuPB6*c#Zu|k|;~Pd$Zm-$kO6v%B&ccAU zRv5Em4>9x|bjy0b9-(`672lfnKVh=M14j&)$YS1W5d7wkdVsaAVlpD)zfOQcl83Qj zl9kX$Ip%~z`WUN~kMOBzi2dYUwf>uD^!i8nue#Wt9I8pZX?#xUjNGL$H{|IT$BqH( z)O!@7-s&yGeSCf(uI-u#tQs56h!dN5;m$(jSOICmAM{j}GGW!xj0^=BIEuTA?luAW z`47he;Ep9ATGqfq3z-2YsJlPFq)k&nidIG`nV2OW`1Z|xZIBq)nCX~`%lmR_mlXZ3 zn6jG5Bmnw>fJ}`Gvt=(*YhUDZOV;JTKM%hQCr^!*U9H{E{&+~whJ*m62GA!b^D>x80!jSH;a5o z{)k5!nHr(>u(gX*YRy{S7O@SHmxy^sFR;erI%Xc9jg;9$tQ1>s z$m4Twxa~6oDwpgl)g--!d|QTYBv#1sa!Awbl=)@TPe)G78YH$i)aSF~6GKzw2b^BxQVO9rbfphT>%i{eb z-;j8U`L$m+=W-8*MqgD3a@F_ZE!;WoJU=!4^#)_xGyY}$FVfB_N|PYk(q-H3vTfV8 zZQHhO+qP|2ciHuqx@>lF>dwr4xc6!Bl(BN<%9n^-8L{^{`=giJ{qGTM0rjNM8ZbaW zFT_AVy#H_B@z0s&Kb>PQU(^ZoFY$CO9erOT%5fyh%u!7UlX$SkE?@CwNJB>)5!mKl z4C3Y^Nt#BfoW$fu(!NDZ&9lrR#SUXfxDTRd~eBs6m^3KN=Nv0@ThUPFTw?jKZUpO;|xNfZ}x zpseS#mocH?&h{lc%3&+>6(wU>!TbJHVxTMHm;@OPU?5YTuR-)S6<$M&xj9T$K-XHm zghAST?l%flt{{jFdv`LhE9MMuP3!%cW+i#D-B{Xfu2@-G-0iJ!v5+vCaR=T<&fG;y zzx7Vwz*=&)#10j_1|qsdrnKL?;RDpgodp@%`4CQX{@Vc#n5>x~7PT1n6j|&R>=COn zVlFka_=I5Qv{A%`gG8|U+|eclz)xd92U)=fDGKfpCaScRN(^qGU03WDKMP7;#KJ#Y zCE@S(6F#N3NBHd;CS#ZbDz4!Ct zH?iSuFfoe`E**PB-NED|IhO5$r^{J#YG+xeGtjV zP`={LG4>f0@`n_$#}zNt*nHx%ZeFZWFQrXc2Nl$Tv*|lB3u;;=EoH58jZG@T=g94A zN@f@d-qm8|fn3z^rf9cx0!s%ARvO@z9|IUuQpy9f2qK+Jv4SY$lqV^*6>*m{N4u*u zUBRfqr)A~uPcOZ@YNv-J1=rja{na!!HUYOcH_>MzOno{Dmb*jV*c(P0B#v_F(yV*w zMg{Dpkd_9Dw_clElO?O$F5<@|0h72<)^$m@g@O%yb>ql-B&ULt1_EJl&d)w>4THf^ zvXrmEgL$aTO`rW{nrp&J+0X8C3Pae~RumBmVXjf;VrY&A!B#=x)p~I%gn;!GN&rPH z4a;7AwdX0sa9e&N6&yu^Bo$?dM>$>NAdyduhIw}x^J`9wG|S;|pz-Wei~T@&7qHmBu{2-3J!%IdycPOvaoFaT*T!`F8IidAf-X| zS+Zn50eipVE!pM_i!7&;aE0Js17Fgs41*%Rvx5-NI@!b+ass(V19VkM6lZt;$`p$< z6VEQeRU9-heXUT{dVP6so$^L?t1@XAFR}5EAIJ$!V;tE8^s2{JXJ z892+5wF&k`jb=z2HM?O+a6{EAceh&Ygf)8KdZjVAI`wOKv_rATSVyDWP>0&3NJ8`t zpvN^N)7Golmt7d(SPQV-OLv&2xjs;!efa(XGwl7u?U2zAC z-f_T=J}}w<&Mr&Gp!xwZU{<-;^vV|_(D+IcBT)6q@-=+W@bSih5ukCG(0R9&1rbH^ z;hh-}AN?`>qfO86eTuitR)4T^`plmD zTH2&~Rc6Vjihcbg&Rtnf^4M0Af4bTho_4-kx#B&c7X=G}yp4Jx6qm)JWsJ2auP8@& zKcr~1j(jP|m;gh-(=KF)IksG(B+@ci=VLw*U7&mD7||MepjVaBQ(QeQrCY=HxzFVjGZ#{dfZ!O>Mo);J|kwHx07+moP^!~PuU(R%V_w!#74+G zri|H~&Le08+kA=UH>+ECXtRs-OUP_X*ZX(HYKPQTT5da8ltEXe=8M(cubaOLjz8Vt zx~AV#g$|o}Xu5^T&nUWCMm?>u;`rN|5Q9-%y8TKucr}gL=O;E*SA%YkMac=fYf~=} zZ;C?_S7Xb?+==}gq7HhG;$|G?>IGu*PguDYgw^;Ki841!@-i!Pq!vUOrbJma!ob-| zvBarKwx#-P2!Z5MAwxOvw|0+z3oWA1dBJt16Ilnrbcuy5#?avv?b`~`KTHB}>p1`? z(j!M95rw>y0>Uz*RuK3@ZP`rD*nDADr6a7(+pN$PMh$p6zm3|M!+C4cY9vci%B`B1 z!+mSg#MsrrGA3A~-E81@w$CL9Yp3l~oa>A53|8@%J5c!`g47@)V}$01$Q-AGTbDzR zq!&AZ7dVh`;?QYKL!(_N9Ra+mGzHpADCp!Fl}H@ZK(4oC!-Fm|zHhnhg0-y3$Pl8? zd$4e0IcHM=nvNO?#&29`Fs(fcMUnul=_)1KObv-SO6hA6`}rzV%zW4KzuJ^)8YTo} zBPi0K>}`Q>f0bT)ff!1a=w~MgF4=l>Zb9|nj6PpxlG)a=KN?m+oq0o<-_lXk zeE?TOZp9!od4h zUP;Fc)P+8tI5pvPnsZe(-y-p>T`9g;DbAwUH%;){p$Ml7N^K|q+}Gy_z*)_N$Ebv# z=n2W9sAq_Xg)PB`kSU*56p^CZ6Q^emA=Kd#F7SeNzYS-<`F21tB9uHb>JjQ5p(9&v zj#Zv(Y7G{#C`)EOlr)tigq?L>x$i|ws>9aat}lEKRep%z9bo0WM7VR*Ivs1pb(U*f zgAj9L-((OY_FT_ntrde=RyP&{-zzt+T{*6;x>?w_dxXCtc&Pp+ydAx@xX?bf+HysZ z9FamIXR&2lbL?X`&))9bQ`9qjE3UtdtD*ChkoEXriGGlCmsEPSyulf6Q#<`qQ4lwl zBlT~d_4wzAlm=^?hPXw|FeSesQj}7!o0oTw-0Mr-dX?Hz{uw>B2$5$m0e{?f{}Dm^ z3xAbmU=XdSYf6M3(_?=HY0S$LUO#7is2m4pVV{1A2(h6AERtpocdA&m$7jJ*IiW@I z;Jn$bgR~%mgES_ijrqMQ-52f}H_t-pfiabdwhU*nGEU6;0clH-uzjg%D~`D-WN?pi zZa3ukahv#C;+RveCU@G61O4WB^qZ53uEON0#j?Tzvus`6dpC%o*j}4oKb&FagoZ4P z_XFlzERW?|>%WTdg@Yw~Nhm--7Q+9R#g6}(-1=W*2DH5l(ah2V7&IvIK!jg$prAw} z6G5T&QBVZy1L=T?p$TIV+!w_x&s-3dYv#{;HT0@fH3HDN@!h^p8~RIjpL}k7_LM$L7!nG=0;zd#LTO(G z==)uRG5ehf9YgZ5Q((e+ z);bVi7z}DI5B1BU^>}BVTyEd#oCPN>dwyX>*5ZHL31$d zZ%WdOJGG?RnCYgvv=IN2IK+aCcN^w>jmAye=8HF|JlOQ4ug>KJrr>r$k#`?1@uYf@ z+c&0uQFBo`4AtX|lc;cU2}gB5G}FyF3+3aCG049f zywjsscXFx&%|UV&w&pxfAUs-l__s1|(PSl$J}dK6;Tt9z!90 zbUS-hk+?!ifj7)W@EpN6v%=(rT^|cg^SDGXeoG1efCfB~s)tS(N?y8}6+%@$R8yY1 z_9`lWd^v*K+ZzZn8`|ybNlg+NcPQ$Tp}cHM&Sy16DPIWiqEc&Rl6O!t%)UxI-fh?SZyTQaNCESaVv zz6-u0#sn@K4%Ql{D}2dT>4~50fTQqbNmevXNfNI*>q@aaOqh1!TFNx*9!2;FK00f; zgzaSf*jl3sxHDxiVZnNljIXmKW1eFWFLKYFpmxhrBH^G7Z4$p4cM(ze(5OR{wlU23 zQ1;b-#C%}X97kFMvxf=E4!`9(>khj?HBwOj9jiNk3EQRX|ICv)1nD$(Jo{NN{(A6l z2P?rGW;-;3Y7Y6MK{lus6;v{!A2c8KU1F^5FOz6SX0~N3j2iV=Wa{pHxNOcpgPVem zeunu9Pd--suSnyP*tBeYYlY%)JNTaX!Z&RBx9It9`Q8c-+AwP8gRrW&3oO<~N8VOvwv2-nMU8aZ+PV8#blq`kYzB)^T^e*r_- zTtxmRqb&vdYx7W3>%f^$Z??qYQi@vvc-v zqhwprd6v4>)&^;f%l#<%$^Yh_Mqbu`{_^74ryRRhmMPNj9@$aK@OlAU6-k(N{34@N z#nDi1kMnm#YGL%)(uZCin|bx9XmknbYW@lJPg?Rz#S{k()xvuo^Sk$Ws{~;5p~0lYDlD``pJnyNDgOI^F4P@?>R?R;sv8%5dFl{*r%0{!>PUv|R63Ug~%mb+t=_ zBvaSb7Prc*bulLI9C8f?6gKX-lTw&s#(dR$zEc@I@iW?pEhTr5y~z5loltu1US<6g zOCJ{pK4r>A?5TEPc`qo{Z;pVO!dqN&J{tPk3aV=>Oy`Slm2I8J{6y_Y?MjpchnSpt zl^haN^;Cr2eDh7@aGC1r@dVtARdg}L^dX#<4`|wefb1!TG5AU?_qXu-#baA2agn*r zsThP5_2wqHc91m@$sju4`&2w#eSfl3Fcv^a#SvUt}BmT9bBdV>kBTJ4uiLKJD z_;&Fi9g-VB9lT>-uC!iWO%^iCIHBNgxQB^TN;L#4bae+O7Uf@=RpXuUCYasW4$j-3 zM-LIe9Y(g$dqHnZy?#;Mf=LBY>{Ef~|1@x|FU)~%`^M)mI6e?!{ty;n@D4U<95sV9 z_9H=<>d-eUAD;b-eeC*Gjj@zN$kLk}|%z5Vz32%0m^mR^SCj zvjl^FF#Iv^(44%5gFUw@p+$NA+GtPj7a^PKqmC)T3;Pc+{eh6^zDYI=PFH62eg!ci zy1l^>=)UNZ6C~TdaWPn!5?z)j2UzHi@oAq#y>$R5-XZH>inngQA#uD_04mNB!BG6( z{1Q(d%l!4CL2i5N{JrTfe^eu9Zr{3+XD^_%4H_5w)!zUF{Q^~44mxE4_0$;GI z>X_8nK7yvndbrEJ^r81mkYG{KHQz_{~)%K`K_4&79 ze=kjQ^yJrEp|_%>dh;4Lmh}NKGK0u!b*uA>cQbAKWvgqX_p|D;5|*+f(P*WQ@|Qx6ufuJ1c1dwiTz4|ip~NlSdF^Yr zCtO8-`Yi43cM3>QY|eHnoX9S%n3ik4k@;rqlsYAPrgZvoj6BD%0Q!FGpS>lN{Q@PFL6-mwN%{@H-bfTG;@E~O54UO*vbR`?z^UbtqK%rkqf$u_}N|Qw$P!X%H^c4 z=jN{WvNmNwoq579&N5PrDwSOy)j&;Mf%PfGB%0|g-*JOaW1a1E&RL7y<^8bKFbqyh zp_j7H&wl#`wM5O~7;ab)!(AIsZ%Q)BS?1I=m~zB0GPiw_s|sOw2E9~b`w9rQg{eLa zxh=P(Yo|Sy($Sh`{0f`Zs7wa-r*`R7F%_g)NqdDw3S{@@{#P$T(Vv_7p!toO*mgi^ z%0MXq%tdoc$*CW*eJ=vhv70Eh-Atr$6o`ZnVnZJn%2u!C3nZs}26aTxT$#$C1pTkH z8kJ#14QG7xq-YI#Qb*~O7v^7u?f>ju_ZuXFDQq}}6bWUF!ZMH4bcoCpP32ABLzq-H zF4Szpvoua}Xj})%am6rkLv7hC%1CpMjAEZD+_4=rDZa8R>(i9>A+h~qHF43}<<$4y zYgsffDq3Lk+kwrLVfhS_<&%q&HbH1;Bypk6{nRHqJ50SHL)bwH;!`Xv>d7$A4Z6F5ZCmv57Jj}Q_>Ix|DN-q1UwWer~F8sO!RS$x%B8x=CGN~xa z89)4MAvgxtTY?A9G9qZEOHCsljU7Et8x9=OiYcr$Q`(3HK0Nx2QGPa5${0g6W+Pku z^YGrajvRTcj`arub=4@cc24abv4^91hjDZXUeXtEfZGR=(hbpqt z3uIggr0P5{NBj`%kj0SeA#-qS6ib$wq&e9ZvI*;6l#j@n3@r+R5+hELJUxjaeMGeh z#5_6;fT1DM*9oB>speSMiQ!uey(!9Ki$-mWS!0x78DtTP7$4c@DEqqKYRN|Avnu#Z zOSH8=z;kF6Q=o!TEGd`|ld`qHC{}usI;B-#8-fE}TWp};3lpdP1~#n@)Nu~d^TW)lEr96fdY)DeC@AU9c-luth(^YbU= zYK7$sbXA6x3zI5;C7#*p`FhG}0{oDTW3f>OdAPref`5Y;1Xw;=!xkwcp~}ADQ{mWy zHEe^`o3Mk8VQo>i0P0StmqT7l-ndv7=Da*0O}pBFLizh!{|dMk-nf9-YEZp*<6MUWx-X* zz9Xh@0kePOFmDr%DPSj_X>h^b2VPt(Iwy} z{p>xK)_V5&5}#AvNE1Xdxj! z;NBETBQz+xP-9=M)q@{syBD{ua0J~v zpUU*-%jl=c!53u8`0(%7#Jn+*T8wWc>${&VhrEF?e7{2JW5aL~TCjtW#4VjPLcapl z>zC-z3pV)P37W6LI>a7dc6dWp`-2nO`vqXE3@>~PgUbnTfD~^4WFI62{}Z0a*qt-J z6>vJ8e&Dzq@1L5+uOYo>kL&e>pX6bdELZP4=|ZJ=dhQl9$zzV|<#es3d<{O@$Kb?} zD!%K)6EjnbftaZ6I~?D?EiE7^{oPGxEW?dtBiU{RwZWQdi{lPFy4xsbD+Otcay=6D z4t1bUEOuF%H&#-Iks(FLZzdryE-j!f{asFH9ETrCC)Zw;Y>OkouBHdn)M1Nkb15i0 z>__ZWAi7NNVm)^sb-UB3Bbxi&UgcqFFYD0kv1Bb`9AIUa5-kzE`s*#i8SLwPC z&8Wdf+wjA=>(xh5$Fner!v7I-vZMG&`y2mj>6w?_HH%&qE7-V^Sn3CMWKcFVbPxa` zuvYRSuIDSZc0dyg_=+dzTq0c;3C@vh#GKZxmU0Xu>IC_M_(~uB8jjSz{ztZQ&;rm< zeQ#ruvU!x+q@jPXp7X7FUlZ(~vB*Z~I~a!fD-8BUP`hTp)H%+K{`SfB@2$oVqc$QS z5h;KJ-8lUt;fH&ta3-BER&ly__Eo!5kyz3jOuj(P<>foh3HQwj2zmVzYyHbwg5^-K zoatL~tyX)1fy>viPko-}`W-LC1L3Y8Kk>CTBp^xiRO*L(<`jKv8@?wKnWH@RjJSu_ zez9+`#BqU9r4?3%?2v}SQ4u{g;3r2!#3C@3xDNNdi`wvYm-BcY@H|?>+@kzk9m^@! zP@htrSIp5qLa|3$_?^dJc(EVgI@c{@dwOdnME?Q(#St~9Ga26c3)AZct@Z>h^`Gdu73dlZ?KQRQVrYMs0uV7+6Zd2Arw17ohCq{qcj2FXZvV!geM9mkClZm)Gqt&%Wmm1~?ai`nA^C zPuTw|cGqI8o9WX{RbvX2<;0Y zL(je`P+9EU&jz?n=2u(W=4y6gVCM2||Da%nmig56VrA5~l)>^V0P%K@wI6o@hz&jp zVr1l!%jK`{-oL-j&l3#}d%(6u>B4v(DxI-DRHKGjnjB7hqFIKQl4K)#!mYYisK$`` z3P|cW%267JMiQ?Mx$!eez9Sdh_FH#l`3u2Kx0(=ONX%|!p#cDHAwtgPwNq~qAAlFA z#yZI!Y~OsR!vK=dT1Lt52ZIYm!@ksd%Q)e)s=-Bf%DotJ*v9sD=&pX%zV^fTv9F#g zG*mU=H;~CuPSu6nop8Q!E0 zHsO0ogjCdcKkWrx=x+hrGFIeU~#?LcX zmn}rjKji8Gn7(eYD6I%~*EUJN$?fGX?Y50@55F-Sqa@O3#>peWoGS?vh#QU_kG+uB z8iR_HOzYvd8IuS88z_sd_m}I*4=Ahi2b3l9|GNPH*Yc~=*m6NNL;I%NFkQ0q-f9(; z(SZ?_0%29Gtfc$BSdJxUMP}C&Xq;_7GHkArA_sX_?>Vrymv=XISA=F&6Fc1!5LCj? zd3ZI2ZQ%F&F83;(oXk>sJL_{k-(lhN`O5#{1=9d{Jp_@4&{%gIIydz<(SB+yoo6D) zuY+S&2E+%H6Eop*G9r;7(h_U3^2F4_soVY9SeM^qrKZb+iHYte+Twf!M$>Q(=34D% z}o5Nb$PJ^XC;w$>zcKonMZ_Sw?m zM(s4^fTR`X^3Y=`H9(OyNj@z3%vD)KWGSmPD}Pch>}|!CxI`}JY?jf%%+CwO?;l7v znCc_^Q-s0$zxzm{vGd(6ctI;{#a9RNkW)qJrege`TmhkSWB`0~|iRlKii}iS^w|*c}(Fry} z9MDup?V#C}VmZP)=QeT(enKDmN zwu~C3LHPiuDGsWEWt_?HgkqKC_9hzJBWRi~Bad%6S)HP(w`j)XWN+o>W~RjXSYB>9 zu4?mhUwC{nYf2=2HA3CN*zfdOT7mBaQe@cE-Z8?iZZ;7XM3{BWQZ3>nNyAv}jRCNo z9q66%a_;gtST9=I{*OgU>Oo_f(kCIdoHz=#RnhdBCRh3tMXk)h@D=IJ4Q9k^fJyC0 z$PX1W5Y$ZTL8ecRFVH0vJ(@&gw zrr4#tJfc`T9b5zRS`ilo5?!ExMC@|?T-xW6) ziUq?vOOqntgjkJ6iA1LP^rEQ6CvNL;YlTjjVVTUs0-Y~G)h6Aohh8x#I`g- z{YP9-51JnE@mj-R+j2EAdsKTUewf{MZ}N*ncxn2PLt>l_Lb+{dCoFhC9yMa&A)KO( z2z;k)KMbvV9*bL+PJX?y4-0#UMm*J9R8-uU3)E9&eL7d7xV6pIic*l zkeusiEu*pCCsO2T1xs~*@tk{D-|2>1nt@|0IQp?@)@Kq~-P)#&_(V=fFE?BNjuL)B z1OlPa_PaoQk{e>`lYJtN8h(iu6GIwi^Sl-r~8f z$%@#y3kvIgYfL4c1nwV zlgU`Bb$o9JNOQ*5Zm*gbd0S$oQA|7n5KnqVJLX->?`DCQ~O?qK;$ zB5kV{S{}xE`)`bjC9@**dIo3@MeMP0s;leu&L5DLJNB?zYdnMDgV`hp$wp&j`(Z|X zL?(9z+y?^N^oymM{~*0}0`M^+oR660F1(}{M>3*JdcuAu_^-h$FhtafgfAC|lG5m( zFc@xsiu_S}4e(F=f+4=v2Bh8u!`9=`Qd1> z|3Cak{&#_yj+dwIikpB0j#ufQ7TUQKux3ZvkilkCofr=ttk&3BEW1C(xEoEpID9iC z3Ff1-lQf3I7_%tPfg5w?g^6I0&{-?cbXG;MRx`=J>4;L>&(hnamRjNYPWmgdI2^7e z50yUrK27F(ei&N*C)+O9?)AqW0T1UnK#DO7CxQ&bDRAUjvbM6#nX^X57Rhs@5m6yh z^r&G|y5wH6f4L%$cnop>T8va6&PI&0RN| z!Ul3Ob;n2NOj%N9vRZ#aOBUx#L!>BD7+B7X3+>7IWWBR&n-0~#>`f~4j3%z2y6E@^ zR+(__z(I|`#_*vmi^vBk@K!6W9q=ChLAE90dnn?*;N0OaZU%?o4EGAzby&>)a)KO2 zRv47Y?N)biEcK?u!n?OwDJe1}DGev5$XRU$+$dK>)0i=4-uL?2d{(k#)F$p z@34M!?%>p;o%6osvxTFl2X!i*xrK%XL#)I5#YC6V8wKU%!@ED1@0Ty1;L%_ascQ0T zg9GpIk%UvHOaJNxEWEmhgvh`!vXu^HliS-zSMO7<4t{6n3f}HcTT6spIH{<}gx2_# z1b|H>cJ2t0;+h7%-oCp^;9)^?*w)>Rs)!F224Ri+Z;s=9Z5{o{{G>5WB9jb1kMEk@ z+Mo-Pm&hp;X`R0LrG8~P; zFZC3U6mgY_ldDzXcVB%b+J-a<^*jb$HWF)K;immsueen3YS}$R(PcIA?o9nr8R2Nic?SDS zyCzn(9a;|1BqSz2T#X>pE5X$0RCz3uT zyeA=G8r=+9!^S8qmQi7B=!yVP!U@}4agZe0P25YH`?ewZP}oZBsGUCkEG+o4eF0iaL7{V*qlwz8CO?^ysE7)7O$h@R}?GvZuFKQBp&_M$sF3+uhaR zrPwRbi$Z4-u-oX*oLK3q(N&Ad4h8G9R;<O2YmIX4ta5DoL1h}onB;7< zRBF5F>$Npd4eH_=R>w3n9G^_N#TTx_`QCB8ZQ*DRBU-8ZySe+j$@_6`rn&d0FTES~ zB(XoO^rw`2TXOKHJ=`Qb9BGfxqu}u?R+LD&>n}N!R;YHzR7=#KKav*!^U8reSh%J+eCZ` zG*0*h8Z5zX;Rd;vH+wk6~P`!5U)u5%D48t9BPP?^BCYa zBMyv{pRxpo&aqP=vINSvM!um_CAxmGQ-?4FnAZCdwm?Y=l`y|px*)H`E4fruIM077 zZ^0tIq&8m{a{#G0^VYyycU043$^qSinkj!DK!s-Vw-OOi*;CE0JM4=z`1yyLHV|Wd^@ENO*I*Qj)y!ph*DG(>91I5M&U0)G~w-GK->Y%T@h^Q5&Cy-I# zG&Z2@*D*t}>{P7fo{9C#ABT0zJ)72dxhs-KSgb3dJGvkxmG`tqSnR7*>8NKWm3RKP zD~?S>tb0hgtB6yNb<2Ti%Yn^hfB4UMtgAJgD+9JRgP-t}xk~?%%78fk)J&zWAnDWw zrI|Wa6aGaHwPPAZ#WUCV5nUk{8kPy7ibZw=Em`I)!(-CQL&gSX6FiuzfIl)IZ|uc0 zM3{qKIJVZ#=3<^u;_QB^vh7uuY-HwTjo(AK-cAk?>hc5 z(1ezA&ARy)obvt2pE-*u&&Mv$zsZ7dV0la%>~kDYn<33LS-Izz;srv~YLgxAQm6YR z*-BV36mHu_l%w{K`KS+xp_ZN*+CnUh$}b&iq0Lf#Ap-_chK)vj4qbVFqBPs3E;~aq z3{-gzq2{l3)$O73K3n0wuL6^eog9+QdQ0w z>Ru&kUrlP;78nkhu!3Y53+*sH<$V(6eYl$2W99vdvSCYf`!pB

RY7HP3uD)g2Tg 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

s6mw$Ta1$Hq0D{`@}ArDo^E8fT7|M=omV%PK0> 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 T+wX#?%k@znkQY_-=MmS2}ar_`+x!2y8?C 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

-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 z≪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 z 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

;0`lu1!plzd=60Xqbj5S*7{z}Cr;HC*8? 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

lu%H1T$5~m?l9V21NPGl7 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�ddNl0yu4RqIHRFUipZtg`R*Dn){J1QpB|i07 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�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%0DKoK2}Q2x{<%Efgg|FNNfyXXpR>QkdyrRvPa7f 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

l`cC7nG69Jzay^5ov8U_1yv5bw~^pNt;2 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

oAf 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

2&$xf1Xvd%v{RXrmXPTQ|2WVxf|3vG;I)H2 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

b-IMrMv0%Ns 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 z zW}IXqa9D(0ZF49j4k=TqqBS&=FAl2@H;-U>)<8Wz(17E{rm*3;!dJj%U&5xls2Nmt z(v;>d>nHRj?xiVb#)?FN5BpfkG5)(VDZ|Y)H^XiF@73^3F9>^NCnNlxF{<4GF&P09 zR-yy+AY--cBzsV!^fUv<%pu5EmH{Kt0TJz;W%BqDJjqw-ffM8bLdtS)A&KO&hrluFEmm#b#-9`lvJ*+lmCxFy$e)lsd9BpUi1?j%+Lb8p&Ua zS+n<-jsZ!qn#H{4jCA9!G%}P*-?@|DHOF2|;Dt7YW{Sz0>LPY^J-t~Urmf)z#748e z3~5%a-3T6ERmPJk^fP%W+T&hupf0Y0J*EzH$D9y5Rr>G>bnKqcfKEUp2N-se2N`D) z7%D2NLcIPj^`S(NB+|(`P+_Uqt2O)_1~67hXx=^rup1&-NJnQ2rDo`}t`ki3wH@W% zzLZ^xUqywx=(bdCK_G;QQ)Z^MCv>sDKQEHWkH@v$E*o&@Iz2aa!@Wd!bm^}+mZD!g zlv8`!cv=Bgxxsd*-cdK8#n=SF3VuPFDr_MfXE!9ftKZdyyeRV+*M)BHuVs0(M(VY( zG&V42`{|a#IOq_Lik`o4&LGNE?HMK>-r&?KdQ4!$@meh1k%C2=QEC|%OoeEsjL6cF zwv}tco~+_!Z2ty}6Y;mb(2|+5+*j6nC2t9PB-G!QRvXK#{EllZW)7iHu8PJ_SBRo6CuRw8-3aRUF%@XwNY4!Wew+cV_-x zEV!wyEdRcUU~LO*@Zd8aFtS%$f!I5FEsCAi4)S=P2a}VaT_^>YWj4>7I*5?+RB>^R z(uThTK|Sx$sxW%1j=%B4%hwTV0dwk-vm*=pxr-ORI#U#_8@%pr{3pAV><(x~Vc+1- zQ$b!6N>gMKw|EzEJ2)W)x5!V9ThxBzbBdwST?7|GaLe^T;dSJ3UpW;dOBPiJ;tWk8 zck$?mi_@4074a8`c#lKg^$f9_qKI~Hgo5270Y)yQbJ*r>9RW2nbGjbAeqc}ThCo-t z1uFUQ9IZQ-6$OL8%V#Ro3xyHg$_20?iVSza>q&fsx43V{(#81%L^vpU1#kGYb&7ze zTS`ukCB@;~mSxK4KcC;U9@N+nHst{=l_4?TX^KLI;I9FP?_E(I<|~c`)XiM$J3?T} z_88 zQb4dE*gh()LD=gFV0kTW^zdD&K?%2)CWAdb-LzmF|wzqTS@XZ2eEoZzcYyS++Ahjk@Hk&Q0 zQKi0sE(rM=d)*Ie7{ZD%o%vK4xk=@%Ge$UIZQtQ(J>lAUyYBY;`up)?7t0kH@s3{< z34s)qggY@|ge*_;LyjYsG{Z0?sG7Zj+jcY|={B8k{nB|IFVt}oH@l*{KmSDCawi=# zm!l!9XZ^+855UT+c`PxRsUAD>v%B04{slpg5%Q{=XJEL<^TI{R4A7;;PsYlSU4O)2 zoi-757!lL&6;%O#c7*^-CrOiA$Qin!$*LZ z4_`s2V8~5)!>SY5eKLODXONqNKD0L4DD2l=#aVFTdbZ&LUY=_0m6e)O{K<=k{4FTu z;4upm+UAfFm{nWJ&oJpW&HYMhM%c5-*i*Rl=|0kp5Jit^oA)-m3|_pMhc_h)_Rtdx zwVW3dmFgCu8EP4XZxxXHeV}1$Oeb#BWp}@!aH0Slb?`xGLj1S*GW{K-cK=(JJ}65o zmcy!_$aRSx;VA^+y8PJ*L|q!0925uvy!;i`)p^9vG(W2#iZ_^d`b7b%uuF<56vcA! z-+nY9bWQ#CY;_nC%cqJCardTJ5Q{hjPkM-*?QQn4Ls*AEB*Q?zfW<|A{2ca0K`xDd zs$mZ)bSqMp;QNu4VOUW8{$I1|ACGpAZOGW`w?yjtcUJv-bNfHDO4`KCz{ul2fHlRP zf842lUawbgsp?m~6NVRtcfi%x4VBRZn_vYO8;n=P4`WzWH#a&P_ac8$;YDD^gqnT* zI%s$E!Gxmgl=)_+Jae7+o@_t7?9A{1RRG8c4pJCoLf=LRPabHZ>DJdCkY z?X-$loCAHuw+lLoF%3FQ!V>{hLllIAPXB|V^&AQXpy#b+vX?;M^5mey1ln=hMB^p zP7j>;PH=Ax5obIdfFQcrg9o!cr=w07hQctqh6-;D(h;C&6HxnKw~=Tw?hQdJf)!}l zMj)o5mc*rI-?H}XC_ApDSXYdkVz4c~PydYzfvk2%;WEybM9SJ+Nfvl=j+8 z0G^TQR76-?O{iPg@=Xq8`I#^;qlNG98)1buOeLK~ckax~48pLW)AeA%$7;PYDvF*X zO^d=i5!6Ksl5T(w%PZ7)c-x?xVnjK737_%)_6_SjZlw3R4Y2l$uuAu ziAu4Q=BW$K*L^zg1fc8Ae*AHHI%SU{dmvvt>TS&|&75D5ZvDg9bTpI}u9VDFfhFUZ z0!bo2qy$QPC2lSo-v$!%gRzB(vIvV1D+>`_o=MAcrmce11KkrI0m9WL>5fqr1`*q& zE0BpuH{~BBVjwKL-Kyv*cj2Kd#_a*F;>2jTyWH>>6K{VWM&3hYg7MdMC*MH1@8#wU z5^vMpo&z^wzGVwEBkv#)P94y*okBmi%bamNBW9&VZsHwKxAC@J<&~FbIY*}00 zrP-hRTv$5?5WqArt|R#!^SlPFO_J%uR>XtfGXdf;;y)0 z{Jv&L9|tsa#sRo3Po*p5a#2auQh&}*U|O+7!!qc;f0ZwgRMx1{E`BLJi#L{6-vT_W@_zG#3*EEXx=eid6 z>s}d#1)?)X^1x^oVRxQS7r{DHGjpceLR3eHJ3es-s7uo}qtR6v3kzK#=^wk{q^8Cg zfR6nf3XVC{wm+hEM{J`0gG*ar?|{!PICsxH?hxW%A7nU=2`m~wd{do%WxLpw@V7X;=3*X=hqq{lpMz)ZNiavCiP`0`o5(+C)Pq?$wDOtsI z5YptmjV(wez~y8Y=TI4*imaY)6}KZGCFxhU_X$CkuE~PmhI6yb*KmrtW$D}#isfdn z!4t3=em-mN;13RN_qXY#$`;p7b8YY$o2Ky9?uxDt^yQ>+z!MjzT>)C}il){HoD$%9 z38|edteJzG8EVc4%XTHjf*L{c+*JwT1OWnqNRrC-gdezY0Qjc_A^M*mDuj7_VJ=Sn zlzY1MS&tntN6hPWHVbv5=EK!%MuYIu1~ES-38{jNqr=LOY*J&C0OW=|JGISlybK|f zqqEJn`@Q=ej0caFwy7@9{jL5R`D()NH1?#Y)%(BdGgL{rL9)D`oI@Vsv%GO4w@XlI z^P*~g?pZX5>voK!f=&3~_`tCtwS{I1E@n3kb_NUjA<}hB+Q%NZN=^RHk5GMQyh{9c zH&gN5C$s(UJVJ^l&MuC&|EcVjq9|jv!H?);B(bfYVntrA^(P@t2*lNUm2)LH-p~`0 z-Nr)tS9kT1NGfq{a53t=o#W(iny%t$!Q-NkpYo~r>uj9=87&uA=lk|=Zd1Q)pTFSx z1X{Ee>TU*m3H*~GL8BmYpt(@oCul6~j)renF)VtJq^R%B;Jx&DoE`5M~L>T~xUGCTU11RbjpZrB$ zQITz-b$0q%56BvH0047b`P;Yd6-Lu?pz6kjZ+qIf5(}`WYhx1zS~v)?+dU0lRx=?_`7S#p$L5U8C$OA8i;fN_kJA9fPKns3ZmA+ zU#MV_-~_*CW!HyY%GPw0eZvuY-iXLTF+BKh`(KTtzs80DW@(~GG?qU0NjVujOefhl z+Gc#-zJI~_$xHWFBM+JZVu3|8q4etq%p^XNVl=X^#>BBn>_-SW4A~~Lm(i%!^S zhvxjFaCLCEaMLggw@Ph1d0_X1FHnP6^Y0T0i6lv_atmB%yY|Bszw0!j3PFp_8Law% zOUY!sWc1;pPf@;df8t1$`_Ij6qf~CAWm3=aU$5Ds8iJFY66MPlp&d|ihu1NY^Tp}) zBv>f^9sIW(kh0bT)T;woPU3b=J4miIW4CRZFIcTsrKPkNziAEUR7Fx&W zmQ2uCfEG%oy3R5t&{b#s0mg=)&Vo}M9B6F>8Sbq1T&&KN z0!~06*Ks+cbcZbRg0DQs(Zr!U>(uP?i9`N-WdJQ#sEzYO$XSW4kX}sFeYvuIcvCls z7u1)5?;a7Vb#MLwQszxlEz!^|`rh0jaub;FK-9R2aBhB{Yawjq?x*Y2w@gT^o49M$ z&+QTx3n_q4=rNg$R%lOf$011DGp^>Vg@^7U`i~SZ^RD1ia_f`TcQ6WJ_GgF7GP+pP z*dO|rQE^Vh97F0&X+Fi(L64#KZ3S_+1Qb~-;>n0p^)1h>0KJja;l3gJH+z`a`Kmq4 zn9egE=?l;7(Hel?cc(aaF?<4<;#P zG8yXZJ@6U5@tLpu>Un1L|MBYOpE>$*+JDd`0dWg@2oyv1_G?f~16UHsEdF2$m9OO9 zl+z#l_pRu`f(9_>iHUuOH_%PM8YGM>@iF~QI2iT4sYG8=jQQaE>$VceHbLLF=?NPF z>MbGd)gbWY;DYxfQqPCNws$le!O0Xk`+?k_I|^=;zOuUvAl|4MmfbaQZj8Q@J1}59 z*q_m(pxzYzkT<>5yHp_4j7@N(q!hWB(s3h-Mnw@#$(*T?aHGf+p||oQ=`n|}#AOr- z-+y-tV`*k9@dA4F3Gv^G>;b!53y`3nYr7M7>%Q z$tP$Fi8{10i8N-W-&gdKxr?a4dPUx*t3IMFmqwYaL>o%W0KtMnu6Zo@wgXS%J3x5Y9XgWTFfm9E;l4-LPea(I z7a4DLrJW4k1q8XO$o|Ox#^O z@+fyqH5*cGBZ$-|Kal7SPKb2-;Rd3if9pEav-O0#?QIeH2H+5p*-H-5aa8I#D1BwJ z_3ov$N9;hq=7g)=c>((&-idug)QJq`3FK~gDMpq`@wJ78sZ0_bfXR^i2c^oW^GVUS z@~JNp1Kbtxnqv0r$qBqId;NREU#UJvW|g+5axvLt*1a(6;2M6A!l@^k3T2a!mz@#8 z#wo|5Ucs-M6g8B}OyDMEvC(li<*YTNJ-=QPbb`BUGbo}E znq#~_wK@T_rr{wP@hz^`odT_!8+lP#A^Evbt5Pk^pPh_bG6}wS43c0er8JI1Rw8AV zfk_d$o4P#`wJ+-G4^cL)hY`itbNYk)EKGTl>~9uZP5iHGG1CU2R1abGg4F_q~Z*Uc23bp1?iN`dTd<{ zrDBG5%g?Ni9~_FKRtp{H!aKpJkcAKsfZy!loK1I`-wqnJ8acTWs^>SyPoy~d^#|of;8?k6raPy|HWy^9qsOrFw4%#BJMIWr@w7xG)aEAe|SLTmf1wO2E%D&df zj=k%wTb)9Qzi5zV7Vda(DBcraFt?pL`dBfOh-!1mkQlSx@K*&G3Jb#?v-z%AG(Bl` zMujb%{#?Z%nlNn-iNqY!DS}rt%rNX&Z6N}{H$S(^!O3IV1>-z3UqZwuR4$E`fqMfC z02h?54B5j!m{+F&qBc0!J&~QS&s*LdW&Yg*4}i*U`%k{FTOD;2GDia%5agV1udbTr z#3r@|(?Bw_m}!ja2ia&(t*J$)i$!+Wx7^@GPR1RZ2JFw6fsI7-kyg(!d^_Cho&cW{ z`B7R|oqis(xBPdsORAsgkUNKs^6qFa^8vRat`0I+c(?7WmTe(q=O4x-lyyA7Vd6k& zrK@719kriem!+RFU`_cT2`9w|ov~GXt{r46;^_^6B|9iet{+_k|JzA#xw|SG3 zpoz2FHw#?W&e+81KWD8Rc`n%>42V9BP!8%K64(5|;$z;zVe$GR0{vx$Y|~>GCiQAo zFw-I-!u`PPsD`W%`TE6g=Dcz@Q!g_o82%{KQql61))be&enTZW5qS6fjDCJ5fI6V8 zNvH3HZ;2U)aGPw8r3x8_#Ysn;w)UQ*61@}jdWljvJknR)dPH15)||1pAl z{f#H#qwuG11^4+ZWhS#Dp%1p(%Gm$;EH}u43iAu>+;(p6fh9Ce@_`Lr@Qd$9f_@7S zALfS+q8^v5C^`Hd*?&C7_CrgP#@16fXmurr81iI%g8cW;39Ph`|KEo0KPH&}Md*Ho z!xQ#L1_sKB*x^oIm|)c|qi07!M+E+`|21R{&)+ZpFz21SopqBpLkC3l&(K}|x}^9H z-9sOt9-=5jSX{6J+Da^auj$4J>grC1_Gt5fVJM9>q#0|EIYE(K&Obwk@E@UDUps+F zx^OA;!{_Y3OUYhme6B8O>`knzA7 z-`Fl_$OnJ1;m;6(RAbU5#rsmHM_|uUeXvsG(bd#8D%}ae`V48m|EalTV!){TzYQJJ zzgo=yMd-r+H$qpYo{CwZysEIOl#W7n5+L-Qb@1^2%sM;+->H@uin?Bx_E@X$tke2e z*71t&aBiimC0P@6RArI;l~rqQoIxO4Ih#0QJ9(Aeo&Ssk8n_Hyds4Adbd0FOoOZEV zy?8GhS(9e}MA>{Pt$ZSN`b`!#7QFO-7&;u03J08Tbbbis-$m#DKOgMB0(Yf$p@gD_ z`eh^D5KpZV^h-g3in1=gbRXwe3XlkD5Za=o%@y);9U`lRYtZ_7*}`(q4#MT6tLWQ+ zvuHeHa)vD5i`5tC247*UlGij@aIt#8t}|zjsp(An$zj*^O|I9?^^D)gx4IIx_eEf| z5*T1eNg9=mM_N$YGXp?NRF)B(@yIZj{@6+H51Ax@?t(9pF|>MR!G?`!X4qyxv^Rn{ zP0vBKkGsKlAPSXh67*pGg`0GufpIbiW7`#;_PUd%;ifwThB5Ko(@@b`8+=y49R1cq zaZundz`s&K7+un(DNe8Om$@o9&F9072_>$`3k_1(+9|@U;ImO8&(BwaxrodNPZE0T zf`8KK?*PB2RQ4LoDBqmYw9<}vYL3_RUo5?_?4l^d47G$j&Ec~y73pOx#w=(wi9k_}n9T5E zA*YBF?#|A#Nbd78aSXXQY?Bi6ermb@xrnm#oGbMJHxI>xX}aVl>fIme0Rc@TU@u3Y zXda5=9$X!!i3z1AUEpa?nU&w*z`d%};L+Mty%@f3+n^6x&T9BYvgU@TA*I8=S>e_d z1$xsy-PYE=hGd)jy6*CBurf;!UwhS3m#H=>NhL`f)fwKSWjV8A7ETyza=IcVIZwMq zo#p@Hz=RcKiW#MnhD@-jkZ$Ah6v3#^RVrW!S#swGgR@iVD7!>y)KrD;?S|x#g>V)R zbtLD8Q|`lc999>3DUgrgsRa*qp614mEFHpSDV1Dmj`|-d%P&vZC(q00VPl(1(@Z-| zT}F}phGmY)p8M^A2B?6M0{0q^5>csYtvky;oBX~%TL~j7zi8~?Ro|G7_&^dtc<1u` zvlOqf;s~KLsGSl_hMOo4gUu7{gA5{FAy3mkW6b4RC(#(}+QJoJ3nhS`BitI!M%pzz zup!N9uRg%V?U^=?f0=lTznyjq%!~R@y?!W{=3qGo{sA*g^g60m)QQBv)HaDV#J zkX@Z>a-^RP)52>>ykjPjd-ia-ZZeA^99rn%0moP>OCA)_QyZW^#a1$L|F*!a<_6{Y zANlDlX4}j3V0c!kLn%eQZb-A#q|dbhdF;)Bq7Ea6qFF!NtcqKBoHaD%sxz~WCZ{-2 z!<=E}sz3rXW@)F~2~SXF@l>Z`gEQ6zaw8|6*VbCBLM7}z#~ zaR3jaIh75OtMH~cNJo$;TNlg8X7q&X+};8UzK@C}!Xd<8&cs`Zml}n9i*3$mdb>s5 zNZfU!zudMbKUb1x!~&W&#T|c2xuTRcMvl-dr?tZo-BsU{fVNwLu(p5eF*ewNxUN~{ z`3pUBlI#%aK}5`uOJWcx&j>i+THDfS1b*Rnb~OyiV?lE$7{JMr;XY&YnL@#YfcuT zzp6`R=c1O&jkE@24oCtk{X(|~ctTf#!WIRASAu;6 zC+1&f1-oHRCv5b-mDYu7u3tCH8C3f-RCPi}*q26%?#fv46hFljI7469V7C9oGg;R+ z=`iiT2Q+`gYW+fYI7F8ean@|Qa6{cGK2HoMC<&|aS6*Ut0Iv%_J}M4mTR*i#ydthU zi75@@)Yq!FD^I{=%dIqPrEjcZ>h}%WVM780}JwL{|WaEa(mtJbtFKUlpsY zs2xaP%ly{YNDCz2%?c=6ww>aGnuQD1M-h_uOgYk1Hyvt&t1RcEb?8gjSa@D5l#17* zV7KeH38)X~Q+Gw7GIMax&Q1Di@DLxwO*>9#P4_rFh;Z)wQ@vEon%svuhw>0q61v1go4UO#0C0YQq}7c>pRjOdr{o?(&}M?;~Td+7H+^*KDc za0|b`*?@iD``~{=gXO(*GXHkVw9c+Im@EH+)H-Q@ z%lnw+D}VPvX{m#}i+8$D_1fuvdAaUvXW1&Bb*xP~JjKuqNK*-m!qup8# zDt2ETD)s=>4jW?lcqkj2PXnNNCzE;~n-abSKH5hozNHixqy3K zj8`CHkO|Whut8GVJ3?N=Z|eZa)vnb~Ox|HL*nci-8NEYlMZ5>;Bkizygf#gN=84(T z*{o8TtJ6RP`_{ousY@>+*Qz8^hph&-OY*ep%2yg>BwA1?=1sG6mNn{smff4yu&0|d z9HwvELH^3C;bG8XAf+S((I&*-%Q6Mz@5L7=m03huKQIo%#MET-{M4YxoNEzMVLD$0 z&6o&GSH7&-YuY!Dfr6yl8Z;J2G#M_mRF--=H5PCwsn{L(CLj6x`#VnGbvqS1ScpeF z$*E)5J9{wtU6=Vo%Wba&Ze~u)BW+@3)<4_d0OcqSYD+F@BZHCU%tnU;plJ>}H2MeY z0q7pVg7n04;L{F;i32_r7Hd-!DiE+oVjmc12^4sMDgNrf84ECn7p z`%2aDN>h?81H=y3krL`#%KTm`GRk))_CTMG>VE6yRcfKo#}-)eg?uBNsA4x)=WbxT2GtI zI3;#Qxp^EZa{cS)0$xs7rx8tcnO7#~0dtw6lM@Y1Me^b|&S|2{frCz!=|KQ95khDo zZ^0tt3*g)G#LMg~3gpjACx^1D+0`Ea?lvdQ_4!1-FHK~X&RVG{$=JsnYjF@^9 z1{8~h;v9V>{s1P-L@S6q-qUdE_yc5O^5JIoQ(+zx^(SWUyb^I>MIN;W zenq9tDTf@l9s0)PmcWGfItOtwK0fSEQUXIbAG@`ucb~$r0oYmXJfG;-!{ZI?7wjHq zBr(guZM*ype4Cv<43Y&RR@hERu0nDcG0TcPBeY%{rz6~DgOM{=vu>MEzafG_iPSo1 zFw8d-avOag)KEnB=-l56mP$-suz3FU7pt;d{REl%@KUyl(~nN85qZ`?yv6E@7esWs zKBm}vqK;gfJu9^puOHh~>P(@{Y4W1pa(zlkgPbweVA@~$Md9xvmsP7WKxZHvz_&!+ zv2hLB&bSw#(M5v%+0L6}`a@WtpdYbMPuJPxBlQ7VwUZnd&z7TP3T)_e6*3&>cxrWP zf2o!UoWM3C7&bXVX^Ou7jvb9UV3cGVMS(9Mstr7`Ns2Ikgv9be75EDj){wt|o#C!fadu^-nz15@tw^q0R`9l21%b)`DPZk<&Tyrwz z4`F#=g+7~*Ip7`vFqnN<_<=D<2FZ^3Xu)r@1P#OJFNq@mgdu|6IL6%0ur4enW{nx0 znS;)g+?(w8_n8?zppkfMK^Vi2lG~N|VERzfAqFD;6huM6J^(0^(FY6deor_AGX6di zn;-RVgntQ}PFOCSm*Ba!Ae!p|^u$3%Q(2&krr|j^wI56* zqxJi>TC%cEIf3UOsh7$ktFavN@iVRC&YT&UT3XtgW5i~rtE#1GiVt}NzP{BMQnMVj zczq(Sk|+Jg`0x2H3KzgekARg{cFvSlq4YxAdTVmb2)1fCj9o`<$dU^IgcyFKJ(wUg28<_hg zt*pc*m%>HS#7xB9{-5m+)qgnr!U7g8>YJEDRn2RxLNe(v zOK2?nH!y(}|Ab5Q`IfV5lp35jcFx!~yyCrFL-RgL=y_Mz5RE!LEIYkNdCSMSCFS!7 zCiU@7bu&5jp0c?;J@@*3qV$2R7`X$TvnP&$XtTy*j~ur7dt=uf#*mX9u!lzV-bJA2b!li)p_xS;A1D@#(f8=H z1AN^MmuM1pk2bfMiqBvF$i%H|zekT>wjBN`RrpvyQG%J*UvCOF9&=Oe*8S~04%<7Y zihrEYalF)~g8F#yy_Fb8O?(%5Cz5OhW6dU%sg!M1fH+w)DPGZj1ysm*qe0)Ls^Y8^p-oc{j_2dcG2}->d3mXQ&^v=%f_>GcFzTpT)tegho*S62G{!e#3%p2 z>2Qb8t*Xlu5*Qd~rOBWIjv)r4YIoEvaw8vsrFz zqbjbixbL_*`wX4ail5WMbt!A1fYEa+Swn5PIgh=}(mGMwV#CpLyS`9dy3x|UH~@-p z$F1>1Q?9mnfypLVZuk`fYp`YY#~}UuBUtqLn{r`PJ@sk`wf$tJLIXx9*Ds6TEiz6~ zUb*<$C0yXEU}h2E=~EB5I5~~G2j^2(%x`r5b#Pt`u`t8mCtJ|Ok#dZ5P}IDW5;<%= zzYL8d?B;p!F86)GYy@sdhvBQBdqI^1%_+NY{caVbBEx5IoT6g&$sebl9FbCG*yj5} z1$-j*xiikvRh43+b1!K{a>s8e(5?3|f^zrq74} zg5K=h-R+aP^cs#k`ySjQeMX^9`i5K}X49``UrXbj$Q>F!GA>J=wjR<*_M1|4lW~_n zKyqp3im>ZD(<=W_Bx5!45?CQuTZ#=nYc(^#G&kxH_CYSxNx11IpK@0SQbsg%Ajk}l zkQ4b2D#yX-Mwje+32ASTG3zrCm|*XodQhM$`JUJ``G~nR;XN8{75i*$10O@*>)Tf! zexW;Tg==tG<~Z<2ME_8P4l%BgK3xoO3{kRS;%C^7l3_a0t1oe=%B#&QM1$Xd(Pt?1 z%{2=E8RHk=5%`Ol!@Dwl7PV@mo^O-NQUHW& zUPHVvB>x~6oH7%B*gj9mSpAhteqy2Tj|YZMibn#>O(Dm&QbzdpUxg{22SU;;fTB4Blp7LKPmRQ^%mAPqcS}SGf4sL2dOKRiKEIyBEvGDBW`Pj|- zSj-zIlG$bI>;ncBPAYrj_Udsmoq5ikbennh`F-K1>yE*X^m#1?(O{TJLaZv!V2_U?t+hJ)21913wx>*J5Z>pnx8M|NC@QxXpk@g|R!vNLfPHDoi!oM!2))Me|lkky;gJm}* zT(aGe{TXVSyb-2EY~j z-8Fuv>{rf~av_6G;9)XK!*mr45dO-58Yf1ZI(^7+okj(nhCa({`ooQ5dBt>4#_1UP zTw1--)dx~KES)(c3(93x2UJ$86i}8@OF{ngP4RogHBlo#&#A`eW6NcAY;b$0gOs+b|=B)!L+22vkqy=9JBk3r<*@z@c3|h*Zwa|3i?=~av zFU!@eOV%+n7l{o12oCX*9!_KN1|7t7>#@OXfo>NW*vEP) z4UCBz?%``8Ly05yQpD^bVd{w~V~*alK-rzY)!{BW2n@a1f5Y_k2Poyh%T=_M?`v?E z8Sw2?8PGjhn2!RX%v!YtM~5mzHy|@dL+?PpBm_Q6ndl8h8Ag&kB!;Hl8Nt@=kzx8q z<~bx~by`>e1e*&C1qbQws9<|Xj4*YF?UcJp_gi0bLU*I~`5^ufeHI_gVtxkpI=ZmD z!^%;%onD|BH>4^4*0Hv|?o=yHMO*8yO%l!C>}#Q-JI}<(FT`kZHeHOx0IAMSAc{3O zf8ZA|D3k55P|#{{r?gpWi=1AS?_*Y_n%2q*6KLT}If@sjH-EM_h_m4Kbk$1bC2kC? z-00}~ZvF}y2iCl59}80gi^f@)|2g3_qU_*EoPnDkl4WjiHzqz6Y|#EXEd^+5%LoA& zf1wz19k#f$9X?}{B`DREF-y&}I$j59nXbC`a@OX$2ua|8q9KtAYOSq-yyq-7H z7EZ?6MhI!cvdCz;A4+O3s#x5$cXpOnj^f|a+Mgc(+TQ|Ds9#6hXcUb2>D&4BfW89#YTKU~x z)mt*<=BVMj#nQ`=CO-O^e#uM(L2EVcUeOZmJYlG?LerqBL|W|Dbr(!f*06v&fdsz2|-D=!M1g> zw$}bCILs~Mc247T*5)y^QP+%umehX^x2@1|#gM_f)fnAWa^MMgeDB&Gc)L+`m#1Kp zzGwSQ)%oqFu*)abTPoMv%A}ki$p4SzkZBb+^@hjlf9i_@TXk zb0OcU_Qvy_(Z7gwHNdC_c3w~SVcka+bp4Hp+-n?QPzK%kw`g{qap@8(V7!8UDy*Ey zQ<}-y7TvoT==HG$MEc9YgUy~6Vh>LE+p&tP{4gH2j{k7t{&BjL*@&w)^XP8lV`Pt9 zB`UA5OCPyRL|$uWjxDl0eBPy6bhI)@tf|~ox#omnrQCF-s5^SXCJ#@k*sV?K3w(rn zg-3oO_zi8O{^T1?#UTWFIM`@|YCruonN#;b=LhV8j_(hQ-^oU7sJB`t_#}Ey1$M6n zZ3=5H1EDX4`Y_9|Kys;CU(`GM9*|hq)G+Qw7+p+3m}*`{!GBJKH1t^S5XJf^MlKnd z3UuLah$ob{Y6%%5NWmt;)p}yD?Ak=8W^=UDxzyEgTg!Dev#>Bn6|~0K$>d4F0@ojA z@X-X?qg{lFV0u#=>Eo0r57y|SkYFVlw?wECww7QAofyzfB^k@{L@T0A3~t7Sc3LA4(z)m?1|q;+GT5kIL~RzUR*Fhk0{@h)`S&A zkdO7T+>W$simO5vOcY5clv{C0xBH|4w0?Qrp=l$CyuuUJt(e)@$UAb}el+>_{~|-+ z)G0Y(0ZK6oKqL}qc&?+g;rYRhyRRSC{51i78Q`M(6q1!kiQKPL7p5WRJK6~ zGY}<}nMDkTBn`j_yW=}2-y1uFyA|WO7T_YUTcFGsw@KW#duDyx-uZZcyaM+JD!!Zx z$7OhkETHozB?o#SqBX$(h6hHn1=Sa~iFgg+u^Q*)3j=D82N{5#ddoi$9vp^<3n1&t zW{|cfgf)iaUrGVG)a#(uQIPT<`i3^bEs$;+*++{s%-DE1~JOa zO7=HGfvKe~yDZOJ`z))Z;usV~pFq@F+BQOn(=%JD>asx}dE{i(+Gd#K5W{^Ni&)*e z+|oaz4MIMbhE^JAnkjBvSN3#dVEQ~Tp=9cLv1Cpvbqn1|>W)6Q>~F$WTQ%LSbG$#o zT9MhtF;EXzPXDYZ+vFLQmx^!#vsi9nzLxhOje|C$J1;FM9)E9x@Kc9a1yVtx6}tQM z4P`TFWRF0OkffB405top8;8kv2zLgkrWy`;MX$m|U|l(b8wgR2Q2{p@Z8r z#z(HEUKrK8@9@R2JrOMrrb`Pl(;+i3(}jz_BrlkVH-`cV&x<;f;9*wJ&cQ7A2-Y#T zMQxZ{A~Mabp?75J&1Xru^YCdyFOA#4(f!i`zv*z@PK&Lx7C-!W|2Xs!5Oc>w9}IFLKuOnQi}r1 zVVP}m8dlHYnrSADv5nt|t7Jp4SMuc{p-cSa@JN3^?HTJoTOb|K8p=d~2@@tjZ{n}5 zt||e>OCqMGCPvQx6r3ng-F5=(8h+ViIVU+65WwU6BR1h#WF-PCHq_vk0x3#C%R~WN zZj-i-w`6VCcS7Rtf&2Dw@%BM`Amk#{EMws0Igj-A_YNW4Wy@$mOG|LFE;`M&d-3|7 z9`0=Oef~K|`v!hz^6kxjERI|k3O{^M8Z5nQ>Ifo9%^Us5h1_2U-Sk?8RO~x@=&Ggz zb{&(%1Ue*s2og~C5XH$tHOs^iEb6E?`_&+OSZ2IK=<*C0eMB^z60bD4{SUhdcc~E% z$bxfeOX`&IDPl5FMW%}J@dyb>A0v&Q>0?=@x@Zv|&4n8pQdArf9$8OP5ePEVSfy9y z>lIZb48;9aQIT^b&U~A+8u05O3;?BxRD>|X2hR~XhS&3WX>FoS?l<5_0NLQRo zhlSk6rO0|~6+BI`RZ8>F^GeqIetcFFY?e-YO&XbspB?$WWA2+ZXI#p5kUjg=J=r== z)ove?RVu|Gg>3`P6BGc&MKuNR} z_4`xdYrvI5i}ItP0u%w(rO4XDZ&0-jVV7+Md*8jqYjP>gS^rE#l*>}AD`-td@G`KG zHO6-HWwsQ_3aArSikeOSF^P-5*iRcWLog`UU8*nxy&wr%&T`CkgV+Bm1<6a_ZVR!u|X%kth9lSM0a$e z<;u(z=NeGNSxlT;WQT!t)MfYX*}{;Nx=r#HZ4MSt+QrqnDX+m$##CbDD9~t0qBi%e zCGE6cp#F*VgMqe|o#nK7NB(O3PZG}IcPiQxl^jLr(G~98^qew8I2XNqsQ5Sr7Z&uW z(U|Ib3YSKx+FM(Wvn6r%Eq>H1xlDw_?^vvbL=`oz25*wSaV`LHP|)Stlpso3NDmk_ z_b%K?NU5{(%_)m}xs%MC`A8BS>14|UOPR-^1?-{}EkUqMS_sYO4ipWHD-)GSJjzNn zx%nn;)-$C`ov_Ecwqpn?q8`i$g%*n^4a*+ZvWTrVP2}e5SX0p{>y31#JkTywca;=> za276?5L&1XZfT>f?rAPe|7rGj5f_1C>Zr|^J-@P!lj+6+w4LFyII*0T7*p*zm$H*y z3G)Ww@h0qAYoppf%}bpD)aF}sRjK>AFVerxqgk^LkwgUfe0+Zu(dCi;I$HhaK;R3y zup#}Ga~2qk?yxCQ6tTiT3m5O{*(vmOGGORVM>qz)h(F{dPs3-GCPk0a2 z!+3k8Q+%P2+Hg@{s`yyUI@KQfW2#x=1*KnrW8epvw*j7*ZTs`tY`q<{?T!G|)mEF3 z@3jH>FNfA22;3Wyi-v0RGx$f8Pi^@<0&6-t5cfLwL-1pdh%H+qC+;_df>LXqSlR(L zt#gu6FKjCs1FoT18w_VIR)|%CKd!JJ8b$27PPv$UqQXzjesS(%-Z~n#@PZqe{IWK z#n#cpz{vb>p4dVF-sit)pDEJ+Xd0=dED^2|wb|oUijmW5hf~4Dm&QFHB`qNTt7(Mv z_omTK7vC(J|98fK6n@FI-0T+KrWtK_OK+NbQtaklsl)CDYOY6lfw(LBaoQo@c$2}7 z-u8qPTV<2>2bLRXV2G@rPTZ-gA$T8?uEh>Um+w80Wm6hBatKwiA*Q0laCO9FLeJ7>FOqW3`B%v(XveO|%Y z`|NfpjQ7tod+gH|iAhr+#(>mshvyxq+0&bBuj|i`>*c&}GY6~8jO4}Un%Xr1w!{N7Q2m@ zwOb9Oj5OY9ffrl5=G1?LUt^?{GOJz0(uJ%eN3~S9Ni_-|6r~!4n1ufR^W*5vmeJgD zBpyE3td60WG!3({07pGgZ8@D$my4kjag!W7n$Kn zFUy_7Ef*?i&>e?&YLNYOlBmpU?Cq*8lvfIIC|9{=s5`Hva3Vdy7hjEDXaG-1W@a=B zyu&yYfSm1W91v^4X|Lv^q*@f}cJh-FMUJOQys4F7&_*ZenOhGGXd1oLm1_l0*+5O_jm36ngkH97PxZ6XarW ziJ$~$_&2-*@i~W@H<%4lM8+p9@eNTy4N`#J0l&*0i6W7v>KpWTjVqD`q6q5)iXQiH zr1jtypzbel zOnlf8DOS!{%s@0=NpHW)#+lsl&?e-5FTOyeEqePmqn^J-Ga@F1WEcQ4(gVzT{@Uv3 ze?{{@O0;3MO*bSF^e>r2*QBeKLyWi7#U+wZnL^BlKBfC)h)M8H_=1{eusIo#jWI+;s=y zrRm9r>=g%~88aOu-#rxIIdsC(@*{f(f%(XcK)9osT*i!;VQ8WmFb?NPq{Zop(-Cz| zzXdHAp>Ii^SK2sb5p2vZZsW-*V&ZTj z%wU`Dnn^OcD7HMMuGu3Vwcem3?qp%HOK&MU1}lZ?3L>CxVad^g8BbB@47C|mbdsGA z!au^yk#o!`urZlhBA<;h10mmMp3@C@cHlL9M$a7VlcisBwQSlMwP#cSWe`tY!^PozA-j6JyocXqNKl&XpDq7r4?+*QCS5(NRHDv`ga z_sfSisUz`2dzaq29W9H|h3I{&%a$c6lSc5=kDhxR?|SN7w++n5CJ3s9pk$AM7-eX_ z7C)c{>d7z?kbOA6xOPCBRtwd zN7DCZ4)cu(TNYV5#9Z$m297X;C-4%BE5MMu9~2i z7I9`;DCY}C4Cx>jB4ohP?QYs&{6g)u&K|1EBCHFpXCzr6ytwim2T@0g(e;4SUp`vJKF%iyma$P!%?cGWiO$j zosBF4-elS?Pn7P^J86}%R6X=vs&W0;wVDzKbzs49fH`rnaysevaI^EIJbnqqXlZ$% zXL?EcrjiDsJ9`bZJs0u&Sp8)$K^ifp@*^QlmP9CtYuR4jbCh6x_qr|9s!=wB2>+JU zi6Zb+5Mlxi3J_y8A?mtefxg3LX>bXy$78m#h}dG12CZP%IQwxllSpP@0f;pLD@K|Cx^8t#HBEkKwVC`xx`jR2V&;;Lb(DC z>0MT9vNN0}%YqO5>FGO-diOI@;Jc?Rh!G? zRF(=uPonOIs4Z&?N!@8asesky(CzXBuBeOM$e=U(S<9_rw>1%vlFkMiP6 zKRWuDpBAc_bMr=I-S(x6a>zk9k(fhki+EqaF-_|&!D3n)Jj;c-CG%zatqQDamE{)5 ziOAVLVw4bb3EL~siWJ5$!j3K)`bBzTP72twhBGy`#FAHb1~@}8s_D*G_cv;jcrAZ% z^Mr9%l|X3!SqCjrYV*SMsd>=3J&`gbZF_?wyUvdg_QrqRqv1x*H!U|!s3!n1yfpuK z=xV>zS#jnyJ2#ta-XnK@CXfCQ_Ykwv!Oo}cAb7pCGj9)g<#-n}-x7AOL8dc@S#)wC z!X>G*EhV!lU=_Ssj=M9kIr_IY+~0D$2mB*e8UUfK0iOSJZnw5`a&i1SB2_f8v2!)B z{vTi}0GMXNXV*wtBK$()c87a}9u5LWco&dPTZ<yz0Fv&GAa+Wc1Hn%hWXG5e$Wm6GJ0G=mlbD%L^ zoL|P{dvqp%sr>V&n8M|96&AL5I4(4Lf@vvUGo0SRV4G=9J=K1?`+>;@%{jap98zxTycWxq{k zmB^hO@oJKnt~>Ma5k5O zGhZQU@I>9r^&#Shk2I!Z;jyCPBceqWW2jBA(Zz)_JZtNP)hje-SZC7!4^*O!o<8?l z=@6{5UC}o(=ipoGpY8J&i3;^M>coW-+1uOA0H@SZvr9ACUhUC2HDm^Z9_Fs*fId`q!p4Km3xe7=;`2k_8BO%r)=OF@%rRgQJ(_?!vb>^1yjnfqzZDsP;~ zL5N)48`(RauKFy9BE*;)9i!7shSQ9f>CEWKFn~G*x(D@c`>Y6 z9-|OlVh7E~xM z+z7)01q`%-(kOK24~hcXOr~m&QnF`aL1#H-z?@ZrF}fvR&W5oMf^v3Ytg?JYHfa=6 zN9DmU_Q7KhI&Bw91NFNSBV{8xMV71TA>uj!r*PzG1$OejRvY$mfNeyHQrkz2t#68>& zeJd!BgjxxAi@toa?}&wKapLxu=3Yj(dJ?XXDIP~2G%!Yc4@GqPp%!=JEzan(yS0FQ z@}5I70Y~m0f*5EVN2NTfDtav*lis=pO0r(aKGbd*Fn70_`98&9OpzHCmr|q)F}Dv_ z^rNA2>1BKt;_`Q)FCeoShQl)b)=dN1N%1p!!?UprPVBY)=&@z`{ORYCGMUpkkt_aB zd#NFn19GhPeVm$Rl2Y6Hkkj$>OpEM|iU&*_hkB7q25rM+IwC=Au2i7GjL4-ysio!H18$>;kE7$(?o9LsiA`rOL=Qe7~jXciv(S zB<75sR9`0u+EmpsGK*(L>zeo}{rM+6fb-A6_|_bNz#%FvAjKQhdwC zOfww7^a)y28LjYwDarVgbDwK3p|mcAm;&D zKopP#{%`Kef8YZ^`$_;HS7>Hy1MrslCy7#JTL}v=JlL)uPd!R4&V#RMQLUH2r>%Jb z4Ifdb#1zybH?P5C%i1(PH)Xq~UE_VZ_>#}_K9kPNVW4=~d#U^i^owAUz1xymScrv* zVB$K>_L_a>!FxMB)bsmp54l4>qCb={;*5>vAc3tkWvKO1YR2+?uu3b|Dp|rbmS6=r*BLmp_|~WD1Q}cDHQ@3OOhuw1V+-&kt7Ix( z{KG9}M7aJW(Ql^NhEq7VR({epn)m$EkauvGNxVGMHh2HmQn_cDBJ)n(cACVD%f@|M zXf04aI}X+QzFT~z`ltQ*PrHa(C6dOI2%GaiM|7RCArzq@937Ytzh@fFYa=3Q1}k++ z4lde6DLg275iuu>S6#GE+2hnWMiN#VCK^Jqu;~DK1MQY@6a#dnq2Q1ycGe;35PIw2 z1rZBdZ{I3bExC{Ff?OVQI^&`P>fZjk{@r=&q`Y9p0KmYAWi%=hn0I8icVXt}5y>rJ z-#d(RqbJdW$f`wf-HZ6@I+lth>LzrFp;J)`l`(@ZGp$x;Es;PR@!!F4{8)|Ie_3SJ zgDNH)XyNIc1x|onB{1GZmScxTCU-k>1D!>BUdk|FPTFRplS8*GwPbADz!`8zyf88s z%gy1oL{+F^%$`Wj^~-7hB?FejUA=APnrRvF8aES_dI~<=VUnb~a9?Kwx!GYeZmGe{ z>8R7)*d_H8r!L3H_aRN#jaHEV&~eMPkcm{7#54YJM=y>2`ocEGsIqZSw`=2>=-KZw zvA-vc&3y8vD+Zc-2BW~%-P2^wsiY#|q@nk)C0d8Ol_aB;&LgGvTECQ6*G6ygec>Rh zbXg6<+Y4ujR3}Do7>?TjOoUUtMfrFfu9&}0prTVZKO6N@nLonm!ANqkjwUjBgIBm@ z2^fl@hImdH9*3Ykd4tP2M{$y>t7v5eq<{77fhWf(Sj{nsrhbb^*pUm}QeaZ18Gia$ zEBx53=-eFZ)tdPky2;rYO^k3&UTv`AF^|5m+#M?d@A-2gB#`DdZ=84#G|&uwy(rv} z695W19rxKJ;D^l81$(e2;Lr=5{k4ulr?6=dVri)II?)ZtPu&uX+u|??6=8Z0*Q!%j zT6V!gZW%RuWLvP zwhGURH&!(7k7$rdYyrwd#TGYjPq8XM>sZ6`8uwh?)`2*uIsf?l?taEpH!e*uH{<-e zlF{=__Q2=N*i>-@t$*krGg?$cbS}=B7~ACc`3%@t2O{huu25 z!Vg*%?z#@Z64He+5*{iC*NyhL1slm=+#e<`MVF3BzspCpi%fsa$92N(3Tegg3hVEL zImvj!HDU|`g)0n?kQd%UL_kY`{|2;>UrS{woJ1ql0I~#I?pd8?zo-h!LuiGGaJe`H zI>~xm&QrYxNi?$LKw?2X37si;Z>cRu*+J8X!;(m$q9hH}PcRVVFc@wnX|JH0T2o$8 z`fIOnn6W>5K>Ufn)jxEnCu00=XYA6A07wXWGHeW`SkR$dHE5ERBxRw6_nA5v5bXl~@99wMZmIQK;J{h2Dgs)B-!mu@})LeS|0# z0gu$kQdqrqj;+L>?diD~pR|ibZ~2r#AjU*lyJpmwkvm3XBX=3*^^P>>xtF409_d|F zR-pMoMUkY5#S)(IU~f)iKwSTOC)z6^xN=yMd)O%OnlV2!HHU|6ffp$elk${;r*!MU z+Eg2ZT*QK6KVF)oWPCpRCksPJsET19b7FfN*hD3Qq5vlB;)!MqF}V$t;KR6EXixvl zKnQ0p%tMYlqK!FOW}ZDbEqu<&_k9;`!Ud`rgoCifci9cSji0^I07thy(84Zpb@2J@ zrrc+~z{TE(2^V(8sJ-6$Sg5aam$vumOL)9MKVaQ~vg#y8X%@vh}4Xy3ESNrxIjjDS0`c~4Peq18o@j97qu#cb3{ z>KwnjSjl~o3KYoO`-;``60OZ0-?y{Qw?$&+MYX`lRulAfmBMEKLi9PnEC1c@P22;y z3zn-fc=w>X)km?>XoSVy{d80oc0TEf0F!TtRVM7rW?Q5yJZr>kHz+jL3lZg>@wsVE z`hvdWC$Dli!qSx(V@p%>fDj|O^5%ai_DgMEEBI=x;VrT;1bqEA@6=dfVn)HDzAbIV zj3UBTQ_H-jq!}gl-&Mw60lD<@_avS-AdkA@fBVMy*DEoAIy8WA?g~I$fCB8Ft#=Jb zZDfEp9N(Hrn2Ef$2!46Kz+f|C%shnXFsL(4b+8EX2Mas(_h{PAtPG9h9ScuAi;V|* z8Oo<{87oaeMEnK`yUo&PAHZ+dMp5alo9*W$FjZits=<8L`2^V|-hUkrcr1k*{qK;67n2G>cvbOhUp zzmx{sNxZaR?e@Dl-ST+r4J3I_!EL<|_zvOmooxPzz~UR8-2(7+_Xp^<%SY?9Uz&q= z+x7?TNZx6&dPnix591I&hp_xoZ_z$KtAcy)o_9&!gL=Ox_VsMJL&`|rwFWrYa{K+X z*>4Q>$C#9Llm>7rZO!M$bp5_FxG^2Q79tEP6Pku0##YIyf1w9$?W}LC&8;n=l-pSt z-!kK=f~92EBc4}5W_F;SR}r1$;&fv9TupyI)sB4B2(u(A+c}YQ$}ghDJcTS{@{U8C zYfe>jSi|$FF6LACB$OLi7CaTCOA6i_c`}z?oXB@trpw%kj}d!=4GLNfw^f8#1y)KB z{S4C76J|KrPUpo<%$>|07`= zY#Aa?F*UL^_J)bgoU(w3MzUJx{Kq0H)T{F14u8-_mB>;qju0;iwyAoeEHuo=Pdi3_ z%j&8&;p7UcWyqT;cuTrH&+sRxY+w=@IP&ixUvodhMbDxeVg3}Df*dkzF4$PsRaPay z*W~K)F1Awspr@t}k8QqCV6ub~v*>_Hrw|(BTQ(}K4W>?VKzZ@9$PkEmyZ+>$W<*1` zDCC%Kw7H;hhzZ+V$nfE^016#c1ChgoEfW#<-EyZ!U7l9uG9w-c&n9ejZEc3 z3`MCqC&V&zrmPhCWZ+);`B7xhK*ibNE0cj2T}cQ=2Q9tPB)3zFN;f#Ni3Az7SvNFN z7mN+9L-jBvm|)Zv0G#&ucD6Ifx<@N~nPN}Y5w;Dw(}Z5p_IE6$?JltWP<=_r>Jm4+!l3HsTZO=wzNiIG%DjYhd(8nBk;Lm6DA^zolvb4 z)#)@z>y9mf&UGTM=k^wuj8q0CFf%|`>8J_ol0A99){H}%k`aDdW<;ay4@2hKqF|zF zk^HQ3=$x9cr{btRQz|p|hU!GFO<5Yx0F^sGw~#lo3~n?v9~)Mkw1({rO>CT+;Gngl z_)#Kum7)PkB~D!+Js#0zxprVm%rmc)T1yr-FibbI@V*pZvu><5@bM}v>)0Tfq0(T9 z_ItvbMyz>Fm7gvyqFG@dov~^^wNusfa?LYCN9Scc9lYsVUC#&#bolXd6R zuRd7K$-PcsgY>16Gv;4xdi=`Q89J)^?Q5tR+hguqjW*}tn)4(-udJ!)RG7et^~b7n z;Uvh6;%ZiLy!j0>fe86cP7XgN7az!^v94Siz;K(LDKs0n&MqyjtSw8c&n$IxuiL zY1)wDV`ECzt@c&e$o5LwlfEWlzbEhCA_;*}x`93XtPa(uTC^&a})+xAmTW#o4ftatDo)u)t%{TGL+O(YJWHqtZZ!y+gaFj7IywjHQ_~Z zo}|vzU}NMXJ>#GAk=3`Fh#6_2eZfrD+g?koAj*^Vi0O#dwhY_fa`Zp3`stU!npiCE z_}6XslFc2%foxuW?-A`J8s!99r*ZSq(()zO3KlGN*;_{>A1ne2V)OyjW~gesRv_lE*xC9`o;5cNLhYg^maIP zKQ4a0ftL77$k?Erk{t!=Hnid8+z=I`u}SQ~LZ4+}ckX3jx}9hLbT3T#$qVRRX zYXQ^`@BwBA2`Q6D_WSQUKie{vIm3T8tw_uQpVHq;=o;)y7>o&1SGZ&k5bh+gL|Ypo zFLOp>nl$7lgVa*J}_@V({i1Vc6F4>Ss!;teO4LWR^wYVcSm^@{<0ja=#KqNa`zLk5G1 z{8p(m&t(gPWEfwsR&eWj@ML0s)HQsbs$ogQ)d%rq@k*Igq(9zWeW~@q>KPBIm6beJ zr1sO{HZN$UI10Jg`zLC?Uc&M8_MNt-0hN%-*rOei25h#aEL+mR8;r6lE1XsB{SaAG zn<9dKNiW3pPHV!I`A<^zRo#7p^!t4oxs@P2X{G1Yvd%l9X$ZtS9%Zms@%9{XY42r< z)jO2j7sReA(C{KabYbl_=vk!oEi3!SSoWwKvxU)vG*eV~qPht|i&VG*GGI>*jpZvI z7w<_TvC2lZfrs3nQk7Zrvy&lND10%$${-R@O6&45>V~R**#w6V9$J<0Ph7RTc<6#_ zEIHMfC_%e{?)Hz}cl8@o<2!CU@cM^I82Ssxpj7y8jk$xFH1SfA%v3F&+4uHycI10Dr`X|MxOIBxVGoxk9>SwII=D%beTitPLIY;D( zqpEq-)}fvkP5hjv3Kw4S@WBK$!|`|hH?L-cX~b1X(dr&ry#fF|G+y|QI~KB zPGhj=fSd@6Uc1u%j&V<-IU#0fkHfCX1(3v9_9`ApowE*QuGg%{3K^ERhc^c@+DGj% zHs$iuQ+EY>*;L~Utw>AOA+50nU0EH$9&-p0hoT*Rr7LR^G(v20AUhf53<`SY2yr}P zhq95mb^GsluVQ4B*~DydNbPDRjvJfqYTdDNNh9AQ)}C~m?Oi@FM;9r;%M`6~#Oee- z#TmK<`p%GNA~{cz14DYwl4~M8$e{WG+obMO=aGF4>5LC3<9|~CegNUQLRx#nZz0v* z3rCThqYoI|jFOkWA#YTWyWu*!Dtg{b`1r4RvlmPw2_s+ziv*a#ivGo#M$yF8#L>y* zU!zwETW1qTdq)$%|G&o1CCZbwi~PtuNulfxTg=GjS;>Bd0Kre7Wv(A0bVmjSfw#W=pXfPBA(x7_CKc zKvY3YwNG;CLb~K3F$;^NJ&1kW?5K zD6rEh*7<{c7*nYA1f@{%#lHXt*JGy|%ExYeOD@k2b)pupbian2rk3y2`~-VKfi@Fo ztx93iegP?Y#gK5tq*X7~6gq%|f}*`r9A6DTa+Gewz9Cd8O{owk4xrj+RV~+zVt^{7 zi|HgMz56#4&cAgnW5j*e@d01u8i3^{_W#3IN&kQ z$S~x00uw3|s?LNyl=n{4%3D=lMUyOsw`UqmM(x@UD7f>6TOb%f%0tEJ*SZF7eg5cN z^fP{Yx3Lnh1bCd}1fcvb^vPHab>r*&!s;Q|C+bEyh^RkI>Xl6Ki(yTc0J+FA?pnbrq%q;({DlFCu0+j%O*F zNtu5d_Sv5~2@($}YRN6vCl{Z5)lnK;w0y(T{x*~C^@z_@`JnSUe|df#H+1@)YJ#}% z5=v)VVE4#u^-b2sjjyOsjrx6 z^3%v53yz^m(iB6fJG0tjPGf2Ac&Fi1!P#lUgj#8%)7d4xjq2Zl4v|3^B86k*tgX>_ zZ2P6Gn|-P_@y^gyQq#ITUcdi|V&D%53)H{Y^MOGK33iSD2@o>>1B9z!--yDWQOM40 zi!OyH1-^?b{rR42yGivEhM&qDRv8WUaIbKi+1Jcc zQwTUm)q&ZktG~mJ9=diN8mw-seju$2rLTuhLN;taDl-0*=$z^gUDS>P&}*N=jr0@$ zBzOC1M{SL@%oJMmWB&YJGkJ_z zG;mgS5jDAR2^ee!@dhJ&9L6}FjOlQ#DL-IvKKZnQzSb_jZI%t6!KJf}Z@+xGiVF{o zrO2kQFKj^pX~M^Jfieb7*vqEiH)7AVT8pUD&m!t2RWnZu39K&x_0)d-ObE36gUB(d zB|DIv?L+?5U|<=~PPBAnKxH^Z;|+*rv^a@I-oM|Cdhh>QcU6sd8V9zez*6p+zjE1wCoOsBa@a+RgiK zWiL>bH<)4a3dqV(oI@%j;sy(2o3SsUI!CM|7Bd{|eQU7Sq8yPnYKCvt^x9O{YfGLc zGI0z^J|cMAqfDlfJJ2H^)EpAJXmGb%?6VpvctGYYAJ`{%5B|+dRs{;PSc3sN{~rSA zUxdt6sy1Lr85Hm2_YzY9Y8V5Y7e%Cv$4y(>VCh(Pz+pCkP%HobIQe^h!_9Qg8Bf zZvt8g!w_ds6zP&H>cU$K77Ec6fpF>AuvRk(*; zos*tWb}-DTDX_*i#P$&&^aE#RbrJ6M@qTDi>reLaool=MG9w^ghUR&; z-_S=IMjEt9%=O_z0%u`j0t}8*uk|&K={W+p&ef4D8`lSgI08?vesBbyC=RTki*wS)$rk-ygM7AR!-Plq$N5X*%stLGCS6v7jK}B+<8v6a9H#hJ_&caqdH`FKe$cQQs^SMFMFb^fhMkEz?BPLO z?G4#Nz6+8UvDjQ%ZC#!DnknIIySX+z9VorD* zHRO`l^i&PHoV(@dqH{F_EwvOE3;v*lA6!)H*xcD zBHW>m3`AENSFZBqORjUt3VhLqawpIRHcx%(^ucmAYPC<&!PZpH-2M3kV!fext(@UM zf~>tH9`p2>ngh2SsA~U2{nyIMc`^XrEjqZZ$0*{jYHY`UMrrH(BBH)L*+Ia&(%=CB z)upy7=ULfA)(fo?Xkp3=K*sDxaPUmTMXySd>M8F&{EW_jb@*8eSW+P zo}B?ORc6M&4_>fd1H3dIBkDf&XDI;MQdy)s)~>@G5?xh`lPlZLxO7I3za?mO^S%vz zy-vwbQ=s$Ed1c-@|Cn=ZoT~?$(tQi%hNG8*(f1Z^o8CM?i`dC$q6+gdDL%XqCoQkU z*Qt;`-We6a8M1x(0buIg+b2PeEnRMDXe4J%8&&heQ)uSpgSg=xN`w)ITohwrPo<7! z!WWYr^|Xh*i6P{lNO@7phk!VL4u)-(?+t7jHHKk@6tjDWCw%eTS$f_7MAiN$1E}hx zXT<{JF$#>w|3Go{mwzo%`6~ec7f0(H7*eh9)DY>Z3q>`;s-hT$q*97#s zFk-OJVCSLj70;5m-FDT8Eg?cpQ0#mo^(u42p~bt7$BYKXCvAOVqU+EJ>o=8XZFg9q z=+C%b>TkY*49|nxf4Qc{EbbMo8P*6cYTrK(f!wgUD5e6e;U!ExqLRh#I&`zMpkGSO zyU{otwIBuB!cak9VX-jL)9rNm!C(;@_KQG>!CUqYks*v};chWENUsw(|D@fzfPW#k8>QfAxd|?T?t4VC30@L;HUKd4D;=B9#+c5EGD} zq3DR>M5HZ|7XV*LPp#vPBx|i2$I%-u&TfNdD8&kDhnK_bNV-$=)t7wPf^erENGV1q zUSTMT-dWmo^Nc1SdLEv#+l1g73IKrrInpR;9G#&gy71QYqNS$VcH6CBzf}OuI%@e% z?DjIkqK{pRSNEAi#|Z#`4?4f(tUBL)s`_i!F^p#hvU~1>mh@4N!)@>!-yu}yG3L%U z+QR7yK-1pWkx^d2NV-oCj$?I!JLnfXvd7$N)+Ykzz?;uP=;Irn1o`Tttok@tc?t#d zd)3j68w0aX{D$KEALl$aQmV1KA~80HlwO?1Bh%5{Ot0caV$Zni`Qg!}Uww+XgU#v~ zbnE?N&r)>UULYaeWQ=3kZL;SkJZFzk~vd2(8$lcs%dr(ddB+lrnZ;`qi9K^%*UX35Hz*dx{@J0B#nURvxE z&ga$dI9jNRLxCTk*rO6`wN(&tj zipahH&E=J;UF5Za^-%V}J462g;IaKZ0vD;s%Hx6MQREWVDd`OIh*aovFkvK-v{k<= z=FP&Am#azoa*>b^w}urAMq9&#`OFipNb%pmTofpnjgWqm6fy5y(X`s1$RH40RbT9W zd*>c8&m!fnCG2a4na)2o?iq?rf(3lPsb+hI*dH?0mq|r$q*W%v^Wx8Ipt?v!Ao1IF zRx;{D^D8l9p^Ib3QRiOYFAGMSMXCCXfm=O`y%r$uNkY60J}U;^z6^^Bl$&Gsa$Fyg zuIq>cOXPZU5{F7ZI$hh?(i#xv?dSq}48`o$)kDkO#JPLtNCWe2;;a5d9s);a5g@Tp zr^S)8?(}8K4rwcGdBz_@sr^>$shJz04ufQ17uJMMB9w_BFC1ruHKDBYE*b(blf5v@ zp>&?E)zNnr*PTXG=D&7VPR^2fh0(J%k-26I)Q00GgjWbi+NcgI2(Cz%& z!A4;i?M*A#E3JTu=l%oWVE-#UQ~gWA5_^F`yNnt>-#>f_pWIGQz&2&70qcPLwpHJF^U$!yNA3e*rq^IilGGo_1dSw0t8btB- z#i0Y1jT`jKRD&fKbisU96*>$ytc`muV?RZjqv;9MnSf3r_Ke!~o;l9|B5*KqBk$8V z{vc$xj>^z0RnK|gG#Yg{>@-_1NT;>esY-pR-zEWkNa zh4;lLl8D~6_HL_~w;sVa=s&JyuA>Rp?;gnh2CPw0zc%9-C<7!gu-kOpz#MBV)6t5M za5_o_!_e8epdMvD(8XF0a0s!pC(th?m5r%rfUO=-77WQsm&IrSNpM)GWsc^O2muHy z@c1$9G)l=*h)3Lg{1ENT9~`!SWxQ3A6xkt;m+m4K6v0Xuj;ZHNz2mAdx?LFGZnC;o zV#~_)V8>EO*>=si-U2Y~A7Rj(Et__*)XmP$8QI@F*zC+U09t0+APTYjk)||#KJ)G3 z4O<=|Hap>gIpL~YP-NS5$Ai-o^bN_6DLtGCpH+Tj8+d&8Q*a{oypn6(a!#cO4Q^iO zunPgS7(G__U8JA_b_U__Xq>b5#w}1llwU^Getn1(VUIm)S@Z$B{Sf;x@YB=BCG1ab zGxY(m6$_0HMe700qM^OuWwI;WB{6HFZ|p+nq&O0d9!mW#}?Z7lz1Y=h$; zw(<8`yqPhRzgkHV;}aBS9pfRy`!3%kC6eBE>B+HMFcY^+_#u1MZQAJ_FR=u&N1Flb~&0JydPp*(W~?k5ZBo;gp)5`q_kmr zsIgHUi?F;>T&o)*oZ*IlzBd;9%PD8usG<~70)ch=~&2Ukz|LLu|*pc|nu9!h8 z5mwY_y&~GF6dK4FawJWyO9t$&)FK!3@sI^o>9l|G$jG?T>L}5O*6sH{0_ETU&i)xd2HG z=@uYPbjT&~n(<*k*)9jR5+piu(G*#xQr?%X0+8P_B7c0oe38DV4*(M`N(a|gIA_l3 z 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¨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 ~DKhABLjc81Xe@*ZYqTVk21}vwS~@mV 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 z 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 <*x$nJph`LJ+>C@37J+})M{ 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

ZM2sNz`c7P8S86M$@}4jX5J$oApQ>^KtoDH}Rin z2T(VI#n9XC@mws4qS)cx6v~7b-4p5%B3AVa?Ad3xh-v#FUYdzxd#MV<(JULMRvy4C zWpc#TTx6*Jfmjl?z*kjrHD}29Qvf_jg+gJ1Ffu-{H@dv|dd!pkfcCBM6$zaFXO50B zSod=~6D%c3(EZ968Lm55`{Olf5w`eix3BvcNfDAn0w)cy{zemxi=WpAYsgdkU?JEZ zM1EhMy87^(ajUJ@WDdLGRNqlAgc#++><|Y$+;sX%+P_78R}5THH9oS)pKm#pMN#o( z3kx5hGG4OddXS{MTs?Wdfwp5IN;bxJc< zWL1})KP)jUwa*nS3aS2q{NML_1gK_4a!|?qG-$sU|3BaB|GDe`Z=m|Gn;O1TQ-0Xg-*jI7E2Nkjr znp6x`V*RJA?Ypa~^{jdS_q$ibAb!USw!}rYdWrs5G?q|jwLxlPOdU90Z7zdl_9!W2 zALLbdOr^=j5Nz=(Rexz!{hKnXlCabD?$F+W>~l}h%DP@_>SEqO*uBy`EF=b6~;ynVl^TU!0RX zZ~wyUO(ou%YYDEkgq!SafUETO^s<$|h-B6GTeGb_7B3wBDq>At>nMB`_5p$Y5V+~g zl^pumN;=^0Jf^%$e*BwvTB0Y%rL)DB0?xk3HfEs0AdfainDoF;uVE>r~to9KHJ}Zw$aqTJ=jwNylMdmD}afzHwV9K^}c^6=HZsaSO|-US^0@ns%9N zy7N0MfXSmGKktZlojD6Iw`@VQ%ML{;kj}2R7S$M4i`I=aPEdk0h`nTGd(raIZ(P?N z{O%jw{|)OfNSR~~*W_%OlT~mIfud>i=vt#~rv07v`yO(QNUr%Iwhowtubl}bF&BEk ze_QJyjk+F55QRRE(YZS^-d zmT%fx-|M*WW_=!LQsQV-j^4+5pSS&PI!`~WI!{p&gung$4yF}dND6&+Y$?J^`l$9m z?kIdUD(xRCLwbB-9*A{tDA*NoF5F-6{N@4%3wRuVq5AeMT3h&f)M}3PusLvQ^wgj0 z^A!wbU%2cOg4g)yge?UHXq}itPQy1K5dNtX_8!1RV499P_L5Ahz!4%i#wp`-IuB-> z^$13SuxIL@l~X_FJ(R!}@8Y(VkoH255T5l1yzFmRtc=eIq2Pm(@SQ#f$zj4MNO*UxXhil-#}nWq5`Jp zCDp67i;1&?n%3D`z6Ka5mAAHtihXx&!)j|uO(vvB{_3=xg;?S zm#?EF{S2yiYHu_b=Tq~!s=dl>gms02ac@})0{;+zJE<$#gwr={p>uAWN7=|VONiRz z0J$AIp1LM^9k)HhL<0i`WOJ%aZ&VMrvvY{fq0n3A_scA;+4-B8(>l~Rt*xp>Nh%$i z>LBd$Dmn2Pv`UqE-QDs;s}5R%U0|e-QNSyO(J6C|cynx9n$?sXHN1vfW8V=C0^cz1 z@ELO(8=t1^R;QGc2=4+k#O*K%ND zPGGlutH$nW)774d1Lvc|XF{y6*LC9k+AJW2ROdETI1@Z{dB&AxG4sn%1aeDR`82WI zPm;{%EjHJ7pO(4pijyOnX>3S5AcAD}wN})+4KL^HklLXOebe#GudCILi@++N36P$c zjdmViu*aL7=pvIEvEAz{9bnKGBkkhzba4Om6ZWa>}8uxA$ zN=2rFQ=su(OgHRqt>`Rk(j0N3Q#bR~C$y8XxTu5@#NI&}=NpgzA~=YDW|hpVP+xK9 z{p3jVD|(Cur(wH{q`vGjNwm-7!eBdQ@)xU?;!_W_EpybgO%pKVVvZrg~

nPEh5@M3esT711g=CYbItl4UhE5kxY%dIO>w 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

77^`RbLJ;~eakxN95LFjU+Ht1v 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�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≫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 z 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

!d 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 @`K0**|0B2-pF2A0# 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ϛ{Umy(eLOg9v@h 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 _fY)r;@j-V_&Mqo9@GNHe~J-|ujPVo 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 -# FOO! -# -# BAR! -# -# -# $ ship.py --i in.html --on foo -# -# out.html: -# -# FOO! -# -# -# It has the following limitations: -# -# 1) Only if-else-endif are currently supported. -# 2) All processing comments must be on one line with no other non-whitespace characters. -# 3) Comments cannot be nested. - -import optparse -import os - -inside_if = False -last_if_true = False - -_options_parser = optparse.OptionParser( - usage='%prog --i input.html [--on flag1]', - description=('Rewrites an HTML file based on conditional comments and flags')) -_options_parser.add_option('--i', - action='store', dest='input_html_file', help='Input HTML filename') -_options_parser.add_option('--on', - action='append', type='string', dest='enabled_flags', - help='name of flag to enable') - -def parse_args(args=None): - options, rargs = _options_parser.parse_args(args) - return options, (None, None) - -def parseComment(line, line_num, enabled_flags): - global inside_if - global last_if_true - - start = line.find('{') - end = line.find('}') - statement = line[start+1:end].strip() - if statement.startswith('if '): - if inside_if == True: - print 'Fatal Error: Nested {if} found on line ' + str(line_num) - print line - quit() - - # Evaluate whether the expression is true/false. - # only one variable name allowed for now - variable_name = statement[3:].strip() - if variable_name in enabled_flags: - last_if_true = True - line = '' - else: - last_if_true = False - line = '' - - # invert the logic so the endif clause is closed properly - last_if_true = not last_if_true - - # ensure we don't have two else statements in the same if - inside_if = 'else' - - elif statement == 'endif': - if inside_if == False: - print 'Fatal Error: {endif} found without {if} on line ' + str(line_num) - print line - quit() - - if last_if_true: - line = '' - else: - line = '' - - inside_if = False - - return line - - -def ship(inFileName, enabled_flags): - # read in HTML file - lines = file(inFileName, 'r').readlines() - out_lines = [] - i = 0 - - # loop for each line of markup - for line in lines: - strline = line.strip() - # if we find a comment, process it and print out - if strline.startswith(' -image/svg+xml diff --git a/clipart/moon.svg b/clipart/moon.svg deleted file mode 100644 index 179fa66..0000000 --- a/clipart/moon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Layer 1 - - - - - - - - - diff --git a/clipart/star.svg b/clipart/star.svg deleted file mode 100644 index 62bb89a..0000000 --- a/clipart/star.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/clipart/sun.svg b/clipart/sun.svg deleted file mode 100644 index df2f5b7..0000000 --- a/clipart/sun.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -image/svg+xml diff --git a/docs/.svn/all-wcprops b/docs/.svn/all-wcprops deleted file mode 100644 index 74f5c87..0000000 --- a/docs/.svn/all-wcprops +++ /dev/null @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 29 -/svn/!svn/ver/1621/trunk/docs -END -index.html -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/1621/trunk/docs/index.html -END diff --git a/docs/.svn/entries b/docs/.svn/entries deleted file mode 100644 index 5fb97af..0000000 --- a/docs/.svn/entries +++ /dev/null @@ -1,77 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/docs -http://svg-edit.googlecode.com/svn - - - -2010-07-01T20:14:12.878000Z -1621 -adeveria - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -files -dir - -styles -dir - -search -dir - -javascript -dir - -index -dir - -index.html -file - - - - -2012-03-23T10:42:00.000000Z -878ecacad20d226bdd284cd4fee8827c -2010-07-01T20:14:12.878000Z -1621 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -94 - diff --git a/docs/.svn/prop-base/index.html.svn-base b/docs/.svn/prop-base/index.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/.svn/prop-base/index.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/.svn/text-base/index.html.svn-base b/docs/.svn/text-base/index.html.svn-base deleted file mode 100644 index 635c317..0000000 --- a/docs/.svn/text-base/index.html.svn-base +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/files/.svn/all-wcprops b/docs/files/.svn/all-wcprops deleted file mode 100644 index 3d4cdb5..0000000 --- a/docs/files/.svn/all-wcprops +++ /dev/null @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/1620/trunk/docs/files -END -svgcanvas-js.html -K 25 -svn:wc:ra_dav:version-url -V 53 -/svn/!svn/ver/1620/trunk/docs/files/svgcanvas-js.html -END diff --git a/docs/files/.svn/entries b/docs/files/.svn/entries deleted file mode 100644 index 3123b03..0000000 --- a/docs/files/.svn/entries +++ /dev/null @@ -1,62 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/docs/files -http://svg-edit.googlecode.com/svn - - - -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -svgcanvas-js.html -file - - - - -2012-03-23T10:42:00.000000Z -974cd2f187f619f9c4a74901acc81683 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -284514 - diff --git a/docs/files/.svn/prop-base/svgcanvas-js.html.svn-base b/docs/files/.svn/prop-base/svgcanvas-js.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/files/.svn/prop-base/svgcanvas-js.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/files/.svn/text-base/svgcanvas-js.html.svn-base b/docs/files/.svn/text-base/svgcanvas-js.html.svn-base deleted file mode 100644 index 6f1b0b3..0000000 --- a/docs/files/.svn/text-base/svgcanvas-js.html.svn-base +++ /dev/null @@ -1,426 +0,0 @@ - - -SvgCanvas - - - - - - - - - -

SvgCanvas

The main SvgCanvas class that manages all SVG-related functions

Parameters

containerThe container HTML element that should hold the SVG root element
configAn object that contains configuration data
Summary
SvgCanvasThe main SvgCanvas class that manages all SVG-related functions
Utils.toXmlConverts characters in a string to XML-friendly entities.
Utils.fromXmlConverts XML entities in a string to single characters.
Utils.encode64Converts a string to base64
Utils.decode64Converts a string from base64
Utils.convertToXMLReferencesConverts a string to use XML references
rectsIntersectCheck if two rectangles (BBoxes objects) intersect each other
snapToAngleReturns a 45 degree angle coordinate associated with the two given coordinates
text2xmlCross-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
Unit conversion functions
convertToNumConverts given values to numbers.
setUnitAttrSets an element’s attribute based on the unit in its current value.
isValidUnitCheck if an attribute’s value is in a valid format
Undo/Redo history management
ChangeElementCommandHistory command to make a change to an element.
ChangeElementCommand.applyPerforms the stored change action
ChangeElementCommand.unapplyReverses the stored change action
ChangeElementCommand.elementsReturns array with element associated with this command
InsertElementCommandHistory command for an element that was added to the DOM
InsertElementCommand.applyRe-Inserts the new element
InsertElementCommand.unapplyRemoves the element
InsertElementCommand.elementsReturns array with element associated with this command
RemoveElementCommandHistory command for an element removed from the DOM
RemoveElementCommand.applyRe-removes the new element
RemoveElementCommand.unapplyRe-adds the new element
RemoveElementCommand.elementsReturns array with element associated with this command
MoveElementCommandHistory command for an element that had its DOM position changed
MoveElementCommand.unapplyRe-positions the element
MoveElementCommand.unapplyPositions the element back to its original location
MoveElementCommand.elementsReturns array with element associated with this command
BatchCommandHistory command that can contain/execute multiple other commands
BatchCommand.applyRuns “apply” on all subcommands
BatchCommand.unapplyRuns “unapply” on all subcommands
BatchCommand.elementsIterate through all our subcommands and returns all the elements we are changing
BatchCommand.addSubCommandAdds a given command to the history stack
BatchCommand.isEmptyReturns a boolean indicating whether or not the batch command is empty
resetUndoStackResets the undo stack, effectively clearing the undo/redo history
undoMgr.getUndoStackSizeInteger with the current size of the undo history stack
undoMgr.getRedoStackSizeInteger with the current size of the redo history stack
undoMgr.getNextUndoCommandTextString associated with the next undo command
undoMgr.getNextRedoCommandTextString associated with the next redo command
undoMgr.undoPerforms an undo step
undoMgr.redoPerforms a redo step
addCommandToHistoryAdds a command object to the undo history stack
beginUndoableChangeThis function tells the canvas to remember the old values of the attrName attribute for each element sent in.
finishUndoableChangeThis function returns a BatchCommand object which summarizes the change since beginUndoableChange was called.
SelectorPrivate class for DOM element selection boxes
Functions
Selector.resetUsed to reset the id and element that the selector is attached to
Selector.showGripsShow the resize grips of this selector
Selector.updateGripCursorsUpdates cursors for corner grips on rotation so arrows point the right way
Selector.resizeUpdates the selector to match the element’s size
SelectorManagerPublic class to manage all selector objects (selection boxes)
SelectorManager.initGroupResets the parent selector group element
SelectorManager.requestSelectorReturns the selector based on the given element
SelectorManager.releaseSelectorRemoves the selector of the given element (hides selection box)
SelectorManager.getRubberBandBoxReturns the rubberBandBox DOM element.
Helper functions
walkTreeWalks the tree and executes the callback on each element in a top-down fashion
walkTreePostWalks the tree and executes the callback on each element in a depth-first fashion
assignAttributesAssigns multiple attributes to an element.
cleanupElementRemove unneeded (default) attributes, makes resulting SVG smaller
addSvgElementFromJsonCreate 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
addExtensionAdd an extension to the editor
shortFloatRounds a given value to a float with number of digits defined in save_options
getStrokedBBoxGet the bounding box for one or more stroked and/or transformed elements
getVisibleElementsGet all elements that have a BBox (excludes <defs>, <title>, etc).
copyElemCreate a clone of an element, updating its ID and its children’s IDs when needed
getElemGet a DOM element by ID within the SVG root element.
getIdReturns the last created DOM element ID string
getNextIdCreates and returns a unique ID string for a DOM element
bindAttaches a callback function to an event
setIdPrefixChanges the ID prefix to the given value
sanitizeSvgSanitizes the input node and its children It only keeps what is allowed from our whitelist defined above
getUrlFromAttrExtracts the URL from the url(...)
getBBoxGet the given/selected element’s bounding box object, convert it to be more usable when necessary
ffCloneHack for Firefox bugs where text element features aren’t updated.
getPathBBoxGet 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
Element Transforms
getRotationAngleGet the rotation angle of the given/selected DOM element
setRotationAngleRemoves any old rotations if present, prepends a new rotation at the transformed center
getTransformListReturns an object that behaves like a SVGTransformList for the given DOM element
recalculateAllSelectedDimensionsRuns recalculateDimensions on the selected elements, adding the changes to a single batch command
remapElementApplies coordinate changes to an element based on the given matrix
recalculateDimensionsDecides the course of action based on the element’s transform list
transformPointA (hopefully) quicker function to transform a point by a matrix (this function avoids any DOM calls and just does the math)
isIdentityHelper function to check if the matrix performs no actual transform (i.e.
matrixMultiplyThis function tries to return a SVGMatrix that is the multiplication m1*m2.
transformListToTransformThis 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
hasMatrixTransformSee if the given transformlist includes a non-indentity matrix transform
getMatrixGet the matrix object for a given element
transformBoxTransforms a rectangle based on the given matrix
Selection
clearSelectionClears the selection.
addToSelectionAdds a list of elements to the selection.
removeFromSelectionRemoves elements from the selection.
selectAllInCurrentLayerClears the selection, then adds all elements in the current layer to the selection.
smoothControlPointsTakes three points and creates a smoother line based on them
getMouseTargetGets the desired element from a mouse event
preventClickDefaultPrevents default browser click behaviour on the given element
Text edit functionsFunctions relating to editing text elements
Path edit functionsFunctions relating to editing path elements
Serialization
removeUnusedDefElemsLooks at DOM elements inside the <defs> to see if they are referred to, removes them from the DOM if they are not.
svgCanvasToStringMain function to set up the SVG content for output
svgToStringSub function ran on each SVG element to convert it to a string as desired
embedImageConverts a given image file to a data URL when possible, then runs a given callback
saveSerializes the current drawing into SVG XML text and returns it to the ‘saved’ handler.
rasterExportGenerates a PNG Data URL based on the current image, then calls “exported” with an object including the string and any issues found
getSvgStringReturns the current drawing as raw SVG XML text.
setSvgStringThis function sets the current drawing as the input SVG XML.
importSvgStringThis function imports the input SVG XML into the current layer in the drawing
Layers
identifyLayersUpdates layer system
createLayerCreates 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.
deleteCurrentLayerDeletes the current layer from the drawing and then clears the selection.
getNumLayersReturns the number of layers in the current drawing.
getLayerReturns the name of the ith layer.
getCurrentLayerReturns the name of the currently selected layer.
setCurrentLayerSets the current layer.
renameCurrentLayerRenames the current layer.
setCurrentLayerPositionChanges the position of the current layer to the new value.
getLayerVisibilityReturns whether the layer is visible.
setLayerVisibilitySets the visibility of the layer.
moveSelectedToLayerMoves the selected elements to layername.
getLayerOpacityReturns the opacity of the given layer.
setLayerOpacitySets the opacity of the given layer.
Document functions
clearClears the current document.
linkControlPointsAlias function
getContentElemReturns the content DOM element
getRootElemReturns the root DOM element
getSelectedElemsReturns the array with selected DOM elements
getResolutionReturns the current dimensions and zoom level in an object
getZoomReturns the current zoom level
getVersionReturns a string which describes the revision number of SvgCanvas.
setUiStringsUpdate interface strings with given values
setConfigUpdate configuration options with given values
getDocumentTitleReturns the current document title or an empty string if not found
setDocumentTitleAdds/updates a title element for the document with the given name.
getEditorNSReturns the editor’s namespace URL, optionally adds it to root element
setResolutionChanges the document’s dimensions to the given size
getOffsetReturns an object with x, y values indicating the svgcontent element’s position in the editor’s canvas.
setBBoxZoomSets the zoom level on the canvas-side based on the given value
setZoomSets the zoom to the given level
getModeReturns the current editor mode string
setModeSets the editor’s mode to the given string
Element Styling
getColorReturns the current fill/stroke option
setColorChange the current stroke/fill color/gradient value
findDefsReturn the document’s <defs> element, create it first if necessary
setGradientApply the current gradient to selected element’s fill or stroke
findDuplicateGradientCheck if exact gradient already exists
setPaintSet a color/gradient to a fill/stroke
getStrokeWidthReturns the current stroke-width value
setStrokeWidthSets the stroke width for the current selected elements When attempting to set a line’s width to 0, this changes it to 1 instead
setStrokeAttrSet the given stroke-related attribute the given value for selected elements
getOpacityReturns the current opacity
setOpacitySets the given opacity to the current selected elements
getOpacityReturns the current fill opacity
getStrokeOpacityReturns the current stroke opacity
setPaintOpacitySets the current fill/stroke opacity
getBlurGets the stdDeviation blur value of the given element
setBlurNoUndoSets the stdDeviation blur value on the selected element without being undoable
setBlurOffsetsSets the x, y, with, height values of the filter element in order to make the blur not be clipped.
setBlurAdds/updates the blur filter to the selected element
getBoldCheck whether selected element is bold or not
setBoldMake the selected element bold or normal
getItalicCheck whether selected element is italic or not
setItalicMake the selected element italic or normal
getFontFamilyReturns the current font family
setFontFamilySet the new font family
getFontSizeReturns the current font size
setFontSizeApplies the given font size to the selected element
getTextReturns the current text (textContent) of the selected element
setTextContentUpdates the text element with the given string
setImageURLSets the new image URL for the selected image element.
setRectRadiusSets the rx & ry values to the selected rect element to change its corner radius
Element manipulation
setSegTypeSets the new segment type to the selected segment(s).
convertToPathConvert selected element to a path, or get the BBox of an element-as-path
changeSelectedAttributeNoUndoThis function makes the changes to the elements.
changeSelectedAttributeChange the given/selected element and add the original value to the history stack If you want to change all selectedElements, ignore the elems argument.
deleteSelectedElementsRemoves all selected elements from the DOM and adds the change to the history stack
groupSelectedElementsWraps all the selected elements in a group (g) element
ungroupSelectedElementUnwraps all the elements in a selected group (g) element.
moveToTopSelectedElementRepositions the selected element to the bottom in the DOM to appear on top of other elements
moveToBottomSelectedElementRepositions the selected element to the top in the DOM to appear under other elements
moveSelectedElementsMoves selected elements on the X/Y axis
cloneSelectedElementsCreate deep DOM copies (clones) of all selected elements and move them slightly from their originals
alignSelectedElementsAligns selected elements
Additional editor tools
updateCanvasUpdates the editor canvas width/height/position after a zoom has occurred
setBackgroundSet the background of the editor (NOT the actual document)
cycleElementSelect the next/previous element within the current layer
- -

Utils.toXml

Converts characters in a string to XML-friendly entities.

Example: “&” becomes “&amp;”

Parameters

strThe string to be converted

Returns

The converted string

- -

Utils.fromXml

Converts XML entities in a string to single characters.  Example: “&amp;” becomes “&”

Parameters

strThe string to be converted

Returns

The converted string

- -

Utils.encode64

Converts a string to base64

- -

Utils.decode64

Converts a string from base64

- -

Utils.convertToXMLReferences

Converts a string to use XML references

- -

rectsIntersect

"rectsIntersect": function(r1,
r2)

Check if two rectangles (BBoxes objects) intersect each other

Paramaters

r1The first BBox-like object
r2The second BBox-like object

Returns

Boolean that’s true if rectangles intersect

- -

snapToAngle

"snapToAngle": function(x1,
y1,
x2,
y2)

Returns a 45 degree angle coordinate associated with the two given coordinates

Parameters

x1First coordinate’s x value
x2Second coordinate’s x value
y1First coordinate’s y value
y2Second 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

- -

text2xml

"text2xml": function(sXML)

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

- -

Unit conversion functions

- -

convertToNum

convertToNum = function(attr,
val)

Converts given values to numbers.  Attributes must be supplied in case a percentage is given

Parameters

attrString with the name of the attribute associated with the value
valString with the attribute value to convert
- -

setUnitAttr

setUnitAttr = function(elem,
attr,
val)

Sets an element’s attribute based on the unit in its current value.

Parameters

elemDOM element to be changed
attrString with the name of the attribute associated with the value
valString with the attribute value to convert
- -

isValidUnit

canvas.isValidUnit = function(attr,
val)

Check if an attribute’s value is in a valid format

Parameters

attrString with the name of the attribute associated with the value
valString with the attribute value to check
- -

Undo/Redo history management

- -

ChangeElementCommand

var ChangeElementCommand = this.undoCmd.changeElement = function(elem,
attrs,
text)

History command to make a change to an element.  Usually an attribute change, but can also be textcontent.

Parameters

elemThe DOM element that was changed
attrsAn object with the attributes to be changed and the values they had before the change
textAn optional string visible to user related to this change
- -

ChangeElementCommand.apply

Performs the stored change action

- -

ChangeElementCommand.unapply

Reverses the stored change action

- -

ChangeElementCommand.elements

Returns array with element associated with this command

- -

InsertElementCommand

var InsertElementCommand = this.undoCmd.insertElement = function(elem,
text)

History command for an element that was added to the DOM

Parameters

elemThe newly added DOM element
textAn optional string visible to user related to this change
- -

InsertElementCommand.apply

Re-Inserts the new element

- -

InsertElementCommand.unapply

Removes the element

- -

InsertElementCommand.elements

Returns array with element associated with this command

- -

RemoveElementCommand

var RemoveElementCommand = this.undoCmd.removeElement = function(elem,
parent,
text)

History command for an element removed from the DOM

Parameters

elemThe removed DOM element
parentThe DOM element’s parent
textAn optional string visible to user related to this change
- -

RemoveElementCommand.apply

Re-removes the new element

- -

RemoveElementCommand.unapply

Re-adds the new element

- -

RemoveElementCommand.elements

Returns array with element associated with this command

- -

MoveElementCommand

var MoveElementCommand = this.undoCmd.moveElement = function(elem,
oldNextSibling,
oldParent,
text)

History command for an element that had its DOM position changed

Parameters

elemThe DOM element that was moved
oldNextSiblingThe element’s next sibling before it was moved
oldParentThe element’s parent before it was moved
textAn optional string visible to user related to this change
- -

MoveElementCommand.unapply

Re-positions the element

- -

MoveElementCommand.unapply

Positions the element back to its original location

- -

MoveElementCommand.elements

Returns array with element associated with this command

- -

BatchCommand

var BatchCommand = this.undoCmd.batch = function(text)

History command that can contain/execute multiple other commands

Parameters

textAn optional string visible to user related to this change
- -

BatchCommand.apply

Runs “apply” on all subcommands

- -

BatchCommand.unapply

Runs “unapply” on all subcommands

- -

BatchCommand.elements

Iterate through all our subcommands and returns all the elements we are changing

- -

BatchCommand.addSubCommand

Adds a given command to the history stack

Parameters

cmdThe undo command object to add
- -

BatchCommand.isEmpty

Returns a boolean indicating whether or not the batch command is empty

- -

resetUndoStack

resetUndoStack = function()

Resets the undo stack, effectively clearing the undo/redo history

- -

undoMgr.getUndoStackSize

Returns

Integer with the current size of the undo history stack

- -

undoMgr.getRedoStackSize

Returns

Integer with the current size of the redo history stack

- -

undoMgr.getNextUndoCommandText

Returns

String associated with the next undo command

- -

undoMgr.getNextRedoCommandText

Returns

String associated with the next redo command

- -

undoMgr.undo

Performs an undo step

- -

undoMgr.redo

Performs a redo step

- -

addCommandToHistory

addCommandToHistory = c.undoCmd.add = function(cmd)

Adds a command object to the undo history stack

Parameters

cmdThe command object to add
- -

beginUndoableChange

c.beginUndoableChange = function(attrName,
elems)

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

attrNameThe name of the attribute being changed
elemsArray of DOM elements being changed
- -

finishUndoableChange

c.finishUndoableChange = function()

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

- -

Selector

Private class for DOM element selection boxes

Parameters

idinteger to internally indentify the selector
elemDOM element associated with this selector
Summary
Functions
Selector.resetUsed to reset the id and element that the selector is attached to
Selector.showGripsShow the resize grips of this selector
Selector.updateGripCursorsUpdates cursors for corner grips on rotation so arrows point the right way
Selector.resizeUpdates the selector to match the element’s size
- -

Functions

- -

Selector.reset

Used to reset the id and element that the selector is attached to

Parameters

eDOM element associated with this selector
- -

Selector.showGrips

Show the resize grips of this selector

Parameters

showboolean indicating whether grips should be shown or not
- -

Selector.updateGripCursors

Updates cursors for corner grips on rotation so arrows point the right way

Parameters

angleFloat indicating current rotation angle in degrees
- -

Selector.resize

Updates the selector to match the element’s size

- -

SelectorManager

Public class to manage all selector objects (selection boxes)

Summary
SelectorManager.initGroupResets the parent selector group element
SelectorManager.requestSelectorReturns the selector based on the given element
SelectorManager.releaseSelectorRemoves the selector of the given element (hides selection box)
SelectorManager.getRubberBandBoxReturns the rubberBandBox DOM element.
Helper functions
walkTreeWalks the tree and executes the callback on each element in a top-down fashion
walkTreePostWalks the tree and executes the callback on each element in a depth-first fashion
assignAttributesAssigns multiple attributes to an element.
cleanupElementRemove unneeded (default) attributes, makes resulting SVG smaller
addSvgElementFromJsonCreate 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
addExtensionAdd an extension to the editor
shortFloatRounds a given value to a float with number of digits defined in save_options
getStrokedBBoxGet the bounding box for one or more stroked and/or transformed elements
getVisibleElementsGet all elements that have a BBox (excludes <defs>, <title>, etc).
copyElemCreate a clone of an element, updating its ID and its children’s IDs when needed
getElemGet a DOM element by ID within the SVG root element.
getIdReturns the last created DOM element ID string
getNextIdCreates and returns a unique ID string for a DOM element
bindAttaches a callback function to an event
setIdPrefixChanges the ID prefix to the given value
sanitizeSvgSanitizes the input node and its children It only keeps what is allowed from our whitelist defined above
getUrlFromAttrExtracts the URL from the url(...)
getBBoxGet the given/selected element’s bounding box object, convert it to be more usable when necessary
ffCloneHack for Firefox bugs where text element features aren’t updated.
getPathBBoxGet 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
Element Transforms
getRotationAngleGet the rotation angle of the given/selected DOM element
setRotationAngleRemoves any old rotations if present, prepends a new rotation at the transformed center
getTransformListReturns an object that behaves like a SVGTransformList for the given DOM element
recalculateAllSelectedDimensionsRuns recalculateDimensions on the selected elements, adding the changes to a single batch command
remapElementApplies coordinate changes to an element based on the given matrix
recalculateDimensionsDecides the course of action based on the element’s transform list
transformPointA (hopefully) quicker function to transform a point by a matrix (this function avoids any DOM calls and just does the math)
isIdentityHelper function to check if the matrix performs no actual transform (i.e.
matrixMultiplyThis function tries to return a SVGMatrix that is the multiplication m1*m2.
transformListToTransformThis 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
hasMatrixTransformSee if the given transformlist includes a non-indentity matrix transform
getMatrixGet the matrix object for a given element
transformBoxTransforms a rectangle based on the given matrix
Selection
clearSelectionClears the selection.
addToSelectionAdds a list of elements to the selection.
removeFromSelectionRemoves elements from the selection.
selectAllInCurrentLayerClears the selection, then adds all elements in the current layer to the selection.
smoothControlPointsTakes three points and creates a smoother line based on them
getMouseTargetGets the desired element from a mouse event
preventClickDefaultPrevents default browser click behaviour on the given element
Text edit functionsFunctions relating to editing text elements
Path edit functionsFunctions relating to editing path elements
Serialization
removeUnusedDefElemsLooks at DOM elements inside the <defs> to see if they are referred to, removes them from the DOM if they are not.
svgCanvasToStringMain function to set up the SVG content for output
svgToStringSub function ran on each SVG element to convert it to a string as desired
embedImageConverts a given image file to a data URL when possible, then runs a given callback
saveSerializes the current drawing into SVG XML text and returns it to the ‘saved’ handler.
rasterExportGenerates a PNG Data URL based on the current image, then calls “exported” with an object including the string and any issues found
getSvgStringReturns the current drawing as raw SVG XML text.
setSvgStringThis function sets the current drawing as the input SVG XML.
importSvgStringThis function imports the input SVG XML into the current layer in the drawing
Layers
identifyLayersUpdates layer system
createLayerCreates 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.
deleteCurrentLayerDeletes the current layer from the drawing and then clears the selection.
getNumLayersReturns the number of layers in the current drawing.
getLayerReturns the name of the ith layer.
getCurrentLayerReturns the name of the currently selected layer.
setCurrentLayerSets the current layer.
renameCurrentLayerRenames the current layer.
setCurrentLayerPositionChanges the position of the current layer to the new value.
getLayerVisibilityReturns whether the layer is visible.
setLayerVisibilitySets the visibility of the layer.
moveSelectedToLayerMoves the selected elements to layername.
getLayerOpacityReturns the opacity of the given layer.
setLayerOpacitySets the opacity of the given layer.
Document functions
clearClears the current document.
linkControlPointsAlias function
getContentElemReturns the content DOM element
getRootElemReturns the root DOM element
getSelectedElemsReturns the array with selected DOM elements
getResolutionReturns the current dimensions and zoom level in an object
getZoomReturns the current zoom level
getVersionReturns a string which describes the revision number of SvgCanvas.
setUiStringsUpdate interface strings with given values
setConfigUpdate configuration options with given values
getDocumentTitleReturns the current document title or an empty string if not found
setDocumentTitleAdds/updates a title element for the document with the given name.
getEditorNSReturns the editor’s namespace URL, optionally adds it to root element
setResolutionChanges the document’s dimensions to the given size
getOffsetReturns an object with x, y values indicating the svgcontent element’s position in the editor’s canvas.
setBBoxZoomSets the zoom level on the canvas-side based on the given value
setZoomSets the zoom to the given level
getModeReturns the current editor mode string
setModeSets the editor’s mode to the given string
Element Styling
getColorReturns the current fill/stroke option
setColorChange the current stroke/fill color/gradient value
findDefsReturn the document’s <defs> element, create it first if necessary
setGradientApply the current gradient to selected element’s fill or stroke
findDuplicateGradientCheck if exact gradient already exists
setPaintSet a color/gradient to a fill/stroke
getStrokeWidthReturns the current stroke-width value
setStrokeWidthSets the stroke width for the current selected elements When attempting to set a line’s width to 0, this changes it to 1 instead
setStrokeAttrSet the given stroke-related attribute the given value for selected elements
getOpacityReturns the current opacity
setOpacitySets the given opacity to the current selected elements
getOpacityReturns the current fill opacity
getStrokeOpacityReturns the current stroke opacity
setPaintOpacitySets the current fill/stroke opacity
getBlurGets the stdDeviation blur value of the given element
setBlurNoUndoSets the stdDeviation blur value on the selected element without being undoable
setBlurOffsetsSets the x, y, with, height values of the filter element in order to make the blur not be clipped.
setBlurAdds/updates the blur filter to the selected element
getBoldCheck whether selected element is bold or not
setBoldMake the selected element bold or normal
getItalicCheck whether selected element is italic or not
setItalicMake the selected element italic or normal
getFontFamilyReturns the current font family
setFontFamilySet the new font family
getFontSizeReturns the current font size
setFontSizeApplies the given font size to the selected element
getTextReturns the current text (textContent) of the selected element
setTextContentUpdates the text element with the given string
setImageURLSets the new image URL for the selected image element.
setRectRadiusSets the rx & ry values to the selected rect element to change its corner radius
Element manipulation
setSegTypeSets the new segment type to the selected segment(s).
convertToPathConvert selected element to a path, or get the BBox of an element-as-path
changeSelectedAttributeNoUndoThis function makes the changes to the elements.
changeSelectedAttributeChange the given/selected element and add the original value to the history stack If you want to change all selectedElements, ignore the elems argument.
deleteSelectedElementsRemoves all selected elements from the DOM and adds the change to the history stack
groupSelectedElementsWraps all the selected elements in a group (g) element
ungroupSelectedElementUnwraps all the elements in a selected group (g) element.
moveToTopSelectedElementRepositions the selected element to the bottom in the DOM to appear on top of other elements
moveToBottomSelectedElementRepositions the selected element to the top in the DOM to appear under other elements
moveSelectedElementsMoves selected elements on the X/Y axis
cloneSelectedElementsCreate deep DOM copies (clones) of all selected elements and move them slightly from their originals
alignSelectedElementsAligns selected elements
Additional editor tools
updateCanvasUpdates the editor canvas width/height/position after a zoom has occurred
setBackgroundSet the background of the editor (NOT the actual document)
cycleElementSelect the next/previous element within the current layer
- -

SelectorManager.initGroup

Resets the parent selector group element

- -

SelectorManager.requestSelector

Returns the selector based on the given element

Parameters

elemDOM element to get the selector for
- -

SelectorManager.releaseSelector

Removes the selector of the given element (hides selection box)

Parameters

elemDOM element to remove the selector for
- -

SelectorManager.getRubberBandBox

Returns the rubberBandBox DOM element.  This is the rectangle drawn by the user for selecting/zooming

- -

Helper functions

- -

walkTree

function walkTree(elem,
cbFn)

Walks the tree and executes the callback on each element in a top-down fashion

Parameters

elemDOM element to traverse
cbFnCallback function to run on each element
- -

walkTreePost

function walkTreePost(elem,
cbFn)

Walks the tree and executes the callback on each element in a depth-first fashion

Parameters

elemDOM element to traverse
cbFnCallback function to run on each element
- -

assignAttributes

var assignAttributes = this.assignAttributes = function(node,
attrs,
suspendLength,
unitCheck)

Assigns multiple attributes to an element.

Parameters

nodeDOM element to apply new attribute values to
attrsObject with attribute keys/values
suspendLengthOptional integer of milliseconds to suspend redraw
unitCheckBoolean to indicate the need to use setUnitAttr
- -

cleanupElement

var cleanupElement = this.cleanupElement = function(element)

Remove unneeded (default) attributes, makes resulting SVG smaller

Parameters

elementDOM element to clean up
- -

addSvgElementFromJson

var addSvgElementFromJson = this.addSvgElementFromJson = function(data)

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

dataObject with the following keys/values:
  • element - DOM element to create
  • attr - Object with attributes/values to assign to the new element
  • curStyles - Boolean indicating that current style attributes should be applied first

Returns: The new element

- -

addExtension

this.addExtension = function(name,
ext_func)

Add an extension to the editor

Parameters

nameString with the ID of the extension
ext_funcFunction supplied by the extension with its data
- -

shortFloat

var shortFloat = function(val)

Rounds a given value to a float with number of digits defined in save_options

Parameters

valThe 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

- -

getStrokedBBox

var getStrokedBBox = this.getStrokedBBox = function(elems)

Get the bounding box for one or more stroked and/or transformed elements

Parameters

elemsArray with DOM elements to check

Returns

A single bounding box object

- -

getVisibleElements

var getVisibleElements = this.getVisibleElements = function(parent,
includeBBox)

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

parentThe parent DOM element to search within
includeBBoxBoolean to indicate that an object should return with the element and its bbox

Returns

An array with all “visible” elements, or if includeBBox is true, an array with objects that include:

  • elem - The element
  • bbox - The element’s BBox as retrieved from getStrokedBBox
- -

copyElem

var copyElem = function(el)

Create a clone of an element, updating its ID and its children’s IDs when needed

Parameters

elDOM element to clone

Returns: The cloned element

- -

getElem

function getElem(id)

Get a DOM element by ID within the SVG root element.

Parameters

idString with the element’s new ID
- -

getId

getId = c.getId = function()

Returns the last created DOM element ID string

- -

getNextId

getNextId = c.getNextId = function()

Creates and returns a unique ID string for a DOM element

- -

bind

c.bind = function(event,
f)

Attaches a callback function to an event

Parameters

eventString indicating the name of the event
fThe callback function to bind to the event

Return

The previous event

- -

setIdPrefix

c.setIdPrefix = function(p)

Changes the ID prefix to the given value

Parameters

pString with the new prefix
- -

sanitizeSvg

var sanitizeSvg = this.sanitizeSvg = function(node)

Sanitizes the input node and its children It only keeps what is allowed from our whitelist defined above

Parameters

nodeThe DOM element to be checked, will also check its children
- -

getUrlFromAttr

var getUrlFromAttr = this.getUrlFromAttr = function(attrVal)

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

attrValThe attribute value as a string

Returns

String with just the URL, like someFile.svg#foo

- -

getBBox

var getBBox = this.getBBox = function(elem)

Get the given/selected element’s bounding box object, convert it to be more usable when necessary

Parameters

elemOptional DOM element to get the BBox for
- -

ffClone

var ffClone = function(elem)

Hack for Firefox bugs where text element features aren’t updated.  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

elemThe (text) DOM element to clone
- -

getPathBBox

var getPathBBox = function(path)

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

pathThe path DOM element to get the BBox for

Returns

A BBox-like object

- -

Element Transforms

- -

getRotationAngle

var getRotationAngle = this.getRotationAngle = function(elem,
to_rad)

Get the rotation angle of the given/selected DOM element

Parameters

elemOptional DOM element to get the angle for
to_radBoolean that when true returns the value in radians rather than degrees

Returns

Float with the angle in degrees or radians

- -

setRotationAngle

this.setRotationAngle = function(val,
preventUndo)

Removes any old rotations if present, prepends a new rotation at the transformed center

Parameters

valThe new rotation angle in degrees
preventUndoBoolean indicating whether the action should be undoable or not
- -

getTransformList

var getTransformList = this.getTransformList = function(elem)

Returns an object that behaves like a SVGTransformList for the given DOM element

Parameters

elemDOM element to get a transformlist from
- -

recalculateAllSelectedDimensions

var recalculateAllSelectedDimensions = this.recalculateAllSelectedDimensions = function()

Runs recalculateDimensions on the selected elements, adding the changes to a single batch command

- -

remapElement

var remapElement = this.remapElement = function(selected,
changes,
m)

Applies coordinate changes to an element based on the given matrix

Parameters

selectedDOM element to be changed
changesObject with changes to be remapped
mMatrix object to use for remapping coordinates
- -

recalculateDimensions

var recalculateDimensions = this.recalculateDimensions = function(selected)

Decides the course of action based on the element’s transform list

Parameters

selectedThe DOM element to recalculate

Returns

Undo command object with the resulting change

- -

transformPoint

var transformPoint = function(x,
y,
m)

A (hopefully) quicker function to transform a point by a matrix (this function avoids any DOM calls and just does the math)

Parameters

xFloat representing the x coordinate
yFloat representing the y coordinate
mMatrix object to transform the point with Returns a x,y object representing the transformed point
- -

isIdentity

var isIdentity = function(m)

Helper function to check if the matrix performs no actual transform (i.e. exists for identity purposes)

Parameters

mThe matrix object to check

Returns

Boolean indicating whether or not the matrix is 1,0,0,1,0,0

- -

matrixMultiply

var matrixMultiply = this.matrixMultiply = function()

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

- -

transformListToTransform

var transformListToTransform = this.transformListToTransform = function(tlist,
min,
max)

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

tlistThe transformlist object
minOptional integer indicating start transform position
maxOptional integer indicating end transform position

Returns

A single matrix transform object

- -

hasMatrixTransform

var hasMatrixTransform = this.hasMatrixTransform = function(tlist)

See if the given transformlist includes a non-indentity matrix transform

Parameters

tlistThe transformlist to check

Returns

Boolean on whether or not a matrix transform was found

- -

getMatrix

var getMatrix = function(elem)

Get the matrix object for a given element

Parameters

elemThe DOM element to check

Returns

The matrix object associated with the element’s transformlist

- -

transformBox

var transformBox = this.transformBox = function(l,
t,
w,
h,
m)

Transforms a rectangle based on the given matrix

Parameters

lFloat with the box’s left coordinate
tFloat with the box’s top coordinate
wFloat with the box width
hFloat with the box height
mMatrix 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
- -

Selection

- -

clearSelection

var clearSelection = this.clearSelection = function(noCall)

Clears the selection.  The ‘selected’ handler is then called.  Parameters: noCall - Optional boolean that when true does not call the “selected” handler

- -

addToSelection

var addToSelection = this.addToSelection = function(elemsToAdd,
showGrips)

Adds a list of elements to the selection.  The ‘selected’ handler is then called.

Parameters

elemsToAddan array of DOM elements to add to the selection
showGripsa boolean flag indicating whether the resize grips should be shown
- -

removeFromSelection

var removeFromSelection = this.removeFromSelection = function(elemsToRemove)

Removes elements from the selection.

Parameters

elemsToRemovean array of elements to remove from selection
- -

selectAllInCurrentLayer

this.selectAllInCurrentLayer = function()

Clears the selection, then adds all elements in the current layer to the selection.  This function then fires the selected event.

- -

smoothControlPoints

var smoothControlPoints = this.smoothControlPoints = function(ct1,
ct2,
pt)

Takes three points and creates a smoother line based on them

Parameters

ct1Object with x and y values (first control point)
ct2Object with x and y values (second control point)
ptObject with x and y values (third point)

Returns

Array of two “smoothed” point objects

- -

getMouseTarget

var getMouseTarget = this.getMouseTarget = function(evt)

Gets the desired element from a mouse event

Parameters

evtEvent object from the mouse event

Returns

DOM element we want

- -

preventClickDefault

var preventClickDefault = function(img)

Prevents default browser click behaviour on the given element

Parameters

imgThe DOM element to prevent the cilck on
- -

Text edit functions

Functions relating to editing text elements

- -

Path edit functions

Functions relating to editing path elements

- -

Serialization

- -

removeUnusedDefElems

var removeUnusedDefElems = this.removeUnusedDefElems = function()

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

- -

svgCanvasToString

var svgCanvasToString = this.svgCanvasToString = function()

Main function to set up the SVG content for output

Returns

String containing the SVG image for output

- -

svgToString

var svgToString = this.svgToString = function(elem,
indent)

Sub function ran on each SVG element to convert it to a string as desired

Parameters

elemThe SVG element to convert
indentInteger with the amount of spaces to indent this tag

Returns

String with the given element as an SVG tag

- -

embedImage

this.embedImage = function(val,
callback)

Converts a given image file to a data URL when possible, then runs a given callback

Parameters

valString with the path/URL of the image
callbackOptional function to run when image data is found, supplies the result (data URL or false) as first parameter.
- -

save

this.save = function(opts)

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

- -

rasterExport

this.rasterExport = function()

Generates a PNG Data URL based on the current image, then calls “exported” with an object including the string and any issues found

- -

getSvgString

this.getSvgString = function()

Returns the current drawing as raw SVG XML text.

Returns

The current drawing as raw SVG XML text.

- -

setSvgString

this.setSvgString = function(xmlString)

This function sets the current drawing as the input SVG XML.

Parameters

xmlStringThe SVG as XML text.

Returns

This function returns false if the set was unsuccessful, true otherwise.

- -

importSvgString

this.importSvgString = function(xmlString)

This function imports the input SVG XML into the current layer in the drawing

Parameters

xmlStringThe 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
  • create a new layer for the imported SVG
- -

Layers

- -

identifyLayers

var identifyLayers = function()

Updates layer system

- -

createLayer

this.createLayer = function(name)

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

nameThe given name
- -

deleteCurrentLayer

this.deleteCurrentLayer = function()

Deletes the current layer from the drawing and then clears the selection.  This function then calls the ‘changed’ handler.  This is an undoable action.

- -

getNumLayers

this.getNumLayers = function()

Returns the number of layers in the current drawing.

Returns

The number of layers in the current drawing.

- -

getLayer

this.getLayer = function(i)

Returns the name of the ith layer.  If the index is out of range, an empty string is returned.

Parameters

ithe zero-based index of the layer you are querying.

Returns

The name of the ith layer

- -

getCurrentLayer

this.getCurrentLayer = function()

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.

- -

setCurrentLayer

this.setCurrentLayer = function(name)

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

namethe name of the layer you want to switch to.

Returns

true if the current layer was switched, otherwise false

- -

renameCurrentLayer

this.renameCurrentLayer = function(newname)

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

newnamethe 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.

- -

setCurrentLayerPosition

this.setCurrentLayerPosition = function(newpos)

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

newposThe zero-based index of the new position of the layer.  This should be between
0 and (number of layers1)

Returns

true if the current layer position was changed, false otherwise.

- -

getLayerVisibility

this.getLayerVisibility = function(layername)

Returns whether the layer is visible.  If the layer name is not valid, then this function returns false.

Parameters

layernamethe name of the layer which you want to query.

Returns

The visibility state of the layer, or false if the layer name was invalid.

- -

setLayerVisibility

this.setLayerVisibility = function(layername,
bVisible)

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

layernamethe name of the layer to change the visibility
bVisibletrue/false, whether the layer should be visible

Returns

true if the layer’s visibility was set, false otherwise

- -

moveSelectedToLayer

this.moveSelectedToLayer = function(layername)

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

layernamethe 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.

- -

getLayerOpacity

this.getLayerOpacity = function(layername)

Returns the opacity of the given layer.  If the input name is not a layer, null is returned.

Parameters

layernamename 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

- -

setLayerOpacity

this.setLayerOpacity = function(layername,
opacity)

Sets the opacity of the given layer.  If the input name is not a layer, nothing happens.  This is not an undo-able action.  NOTE: this function exists solely to apply a highlighting/de-emphasis effect to a layer, when it is possible for a user to affect the opacity of a layer, we will need to allow this function to produce an undo-able action.  If opacity is not a value between 0.0 and 1.0, then nothing happens.

Parameters

layernamename of the layer on which to set the opacity
opacitya float value in the range 0.0-1.0
- -

Document functions

- -

clear

this.clear = function()

Clears the current document.  This is not an undoable action.

- -

linkControlPoints

Alias function

- -

getContentElem

this.getContentElem = function()

Returns the content DOM element

- -

getRootElem

this.getRootElem = function()

Returns the root DOM element

- -

getSelectedElems

this.getSelectedElems = function()

Returns the array with selected DOM elements

- -

getResolution

var getResolution = this.getResolution = function()

Returns the current dimensions and zoom level in an object

- -

getZoom

this.getZoom = function()

Returns the current zoom level

- -

getVersion

this.getVersion = function()

Returns a string which describes the revision number of SvgCanvas.

- -

setUiStrings

this.setUiStrings = function(strs)

Update interface strings with given values

Parameters

strsObject with strings (see uiStrings for examples)
- -

setConfig

this.setConfig = function(opts)

Update configuration options with given values

Parameters

optsObject with options (see curConfig for examples)
- -

getDocumentTitle

this.getDocumentTitle = function()

Returns the current document title or an empty string if not found

- -

setDocumentTitle

this.setDocumentTitle = function(newtitle)

Adds/updates a title element for the document with the given name.  This is an undoable action

Parameters

newtitleString with the new title
- -

getEditorNS

this.getEditorNS = function(add)

Returns the editor’s namespace URL, optionally adds it to root element

Parameters

addBoolean to indicate whether or not to add the namespace value
- -

setResolution

this.setResolution = function(x,
y)

Changes the document’s dimensions to the given size

Parameters

xNumber with the width of the new dimensions in user units.  Can also be the string “fit” to indicate “fit to content”
yNumber 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.

- -

getOffset

this.getOffset = function()

Returns an object with x, y values indicating the svgcontent element’s position in the editor’s canvas.

- -

setBBoxZoom

this.setBBoxZoom = function(val,
editor_w,
editor_h)

Sets the zoom level on the canvas-side based on the given value

Parameters

valBounding box object to zoom to or string indicating zoom option
editor_wInteger with the editor’s workarea box’s width
editor_hInteger with the editor’s workarea box’s height
- -

setZoom

this.setZoom = function(zoomlevel)

Sets the zoom to the given level

Parameters

zoomlevelFloat indicating the zoom level to change to
- -

getMode

this.getMode = function()

Returns the current editor mode string

- -

setMode

this.setMode = function(name)

Sets the editor’s mode to the given string

Parameters

nameString with the new mode to change to
- -

Element Styling

- -

getColor

this.getColor = function(type)

Returns the current fill/stroke option

- -

setColor

this.setColor = function(type,
val,
preventUndo)

Change the current stroke/fill color/gradient value

Parameters

typeString indicating fill or stroke
valThe value to set the stroke attribute to
preventUndoBoolean indicating whether or not this should be and undoable option
- -

findDefs

var findDefs = function()

Return the document’s <defs> element, create it first if necessary

- -

setGradient

var setGradient = this.setGradient = function(type)

Apply the current gradient to selected element’s fill or stroke

Parameters type - String indicating “fill” or “stroke” to apply to an element

- -

findDuplicateGradient

var findDuplicateGradient = function(grad)

Check if exact gradient already exists

Parameters

gradThe gradient DOM element to compare to others

Returns

The existing gradient if found, null if not

- -

setPaint

this.setPaint = function(type,
paint)

Set a color/gradient to a fill/stroke

Parameters

typeString with “fill” or “stroke”
paintThe jGraduate paint object to apply
- -

getStrokeWidth

this.getStrokeWidth = function()

Returns the current stroke-width value

- -

setStrokeWidth

this.setStrokeWidth = function(val)

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

valA Float indicating the new stroke width value
- -

setStrokeAttr

this.setStrokeAttr = function(attr,
val)

Set the given stroke-related attribute the given value for selected elements

Parameters

attrString with the attribute name
valString or number with the attribute value
- -

getOpacity

this.getOpacity = function()

Returns the current opacity

- -

setOpacity

this.setOpacity = function(val)

Sets the given opacity to the current selected elements

- -

getOpacity

Returns the current fill opacity

- -

getStrokeOpacity

this.getStrokeOpacity = function()

Returns the current stroke opacity

- -

setPaintOpacity

this.setPaintOpacity = function(type,
val,
preventUndo)

Sets the current fill/stroke opacity

Parameters

typeString with “fill” or “stroke”
valFloat with the new opacity value
preventUndoBoolean indicating whether or not this should be an undoable action
- -

getBlur

this.getBlur = function(elem)

Gets the stdDeviation blur value of the given element

Parameters

elemThe element to check the blur value for
- -

setBlurNoUndo

canvas.setBlurNoUndo = function(val)

Sets the stdDeviation blur value on the selected element without being undoable

Parameters

valThe new stdDeviation value
- -

setBlurOffsets

canvas.setBlurOffsets = function(filter,
stdDev)

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

filterThe filter DOM element to update
stdDevThe standard deviation value on which to base the offset size
- -

setBlur

canvas.setBlur = function(val,
complete)

Adds/updates the blur filter to the selected element

Parameters

valFloat with the new stdDeviation blur value
completeBoolean indicating whether or not the action should be completed (to add to the undo manager)
- -

getBold

this.getBold = function()

Check whether selected element is bold or not

Returns

Boolean indicating whether or not element is bold

- -

setBold

this.setBold = function(b)

Make the selected element bold or normal

Parameters

bBoolean indicating bold (true) or normal (false)
- -

getItalic

this.getItalic = function()

Check whether selected element is italic or not

Returns

Boolean indicating whether or not element is italic

- -

setItalic

this.setItalic = function(i)

Make the selected element italic or normal

Parameters

bBoolean indicating italic (true) or normal (false)
- -

getFontFamily

this.getFontFamily = function()

Returns the current font family

- -

setFontFamily

this.setFontFamily = function(val)

Set the new font family

Parameters

valString with the new font family
- -

getFontSize

this.getFontSize = function()

Returns the current font size

- -

setFontSize

this.setFontSize = function(val)

Applies the given font size to the selected element

Parameters

valFloat with the new font size
- -

getText

this.getText = function()

Returns the current text (textContent) of the selected element

- -

setTextContent

this.setTextContent = function(val)

Updates the text element with the given string

Parameters

valString with the new text
- -

setImageURL

this.setImageURL = function(val)

Sets the new image URL for the selected image element.  Updates its size if a new URL is given

Parameters

valString with the image URL/path
- -

setRectRadius

this.setRectRadius = function(val)

Sets the rx & ry values to the selected rect element to change its corner radius

Parameters

valThe new radius
- -

Element manipulation

- -

setSegType

this.setSegType = function(new_type)

Sets the new segment type to the selected segment(s).

Parameters

new_typeInteger with the new segment type See http://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathSeg for list
- -

convertToPath

this.convertToPath = function(elem,
getBBox)

Convert selected element to a path, or get the BBox of an element-as-path

Parameters

elemThe DOM element to be converted
getBBoxBoolean 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.

- -

changeSelectedAttributeNoUndo

var changeSelectedAttributeNoUndo = function(attr,
newValue,
elems)

This function makes the changes to the elements.  It does not add the change to the history stack.

Parameters

attrString with the attribute name
newValueString or number with the new attribute value
elemsThe DOM elements to apply the change to
- -

changeSelectedAttribute

var changeSelectedAttribute = this.changeSelectedAttribute = function(attr,
val,
elems)

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

attrString with the attribute name
newValueString or number with the new attribute value
elemsThe DOM elements to apply the change to
- -

deleteSelectedElements

this.deleteSelectedElements = function()

Removes all selected elements from the DOM and adds the change to the history stack

- -

groupSelectedElements

this.groupSelectedElements = function()

Wraps all the selected elements in a group (g) element

- -

ungroupSelectedElement

this.ungroupSelectedElement = function()

Unwraps all the elements in a selected group (g) element.  This requires significant recalculations to apply group’s transforms, etc to its children

- -

moveToTopSelectedElement

this.moveToTopSelectedElement = function()

Repositions the selected element to the bottom in the DOM to appear on top of other elements

- -

moveToBottomSelectedElement

this.moveToBottomSelectedElement = function()

Repositions the selected element to the top in the DOM to appear under other elements

- -

moveSelectedElements

this.moveSelectedElements = function(dx,
dy,
undoable)

Moves selected elements on the X/Y axis

Parameters

dxFloat with the distance to move on the x-axis
dyFloat with the distance to move on the y-axis
undoableBoolean indicating whether or not the action should be undoable

Returns

Batch command for the move

- -

cloneSelectedElements

this.cloneSelectedElements = function()

Create deep DOM copies (clones) of all selected elements and move them slightly from their originals

- -

alignSelectedElements

this.alignSelectedElements = function(type,
relative_to)

Aligns selected elements

Parameters

typeString with single character indicating the alignment type
relative_toString that must be one of the following: “selected”, “largest”, “smallest”, “page”
- -

Additional editor tools

- -

updateCanvas

this.updateCanvas = function(w,
h)

Updates the editor canvas width/height/position after a zoom has occurred

Parameters

wFloat with the new width
hFloat 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
- -

setBackground

this.setBackground = function(color,
url)

Set the background of the editor (NOT the actual document)

Parameters

colorString with fill color to apply
urlURL or path to image to use
- -

cycleElement

this.cycleElement = function(next)

Select the next/previous element within the current layer

Parameters

nextBoolean where true = next and false = previous element
- -
- - - - - - - - - - -
"rectsIntersect": function(r1,
r2)
Check if two rectangles (BBoxes objects) intersect each other
"snapToAngle": function(x1,
y1,
x2,
y2)
Returns a 45 degree angle coordinate associated with the two given coordinates
"text2xml": function(sXML)
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
convertToNum = function(attr,
val)
Converts given values to numbers.
setUnitAttr = function(elem,
attr,
val)
Sets an element’s attribute based on the unit in its current value.
canvas.isValidUnit = function(attr,
val)
Check if an attribute’s value is in a valid format
var ChangeElementCommand = this.undoCmd.changeElement = function(elem,
attrs,
text)
History command to make a change to an element.
var InsertElementCommand = this.undoCmd.insertElement = function(elem,
text)
History command for an element that was added to the DOM
var RemoveElementCommand = this.undoCmd.removeElement = function(elem,
parent,
text)
History command for an element removed from the DOM
var MoveElementCommand = this.undoCmd.moveElement = function(elem,
oldNextSibling,
oldParent,
text)
History command for an element that had its DOM position changed
var BatchCommand = this.undoCmd.batch = function(text)
History command that can contain/execute multiple other commands
resetUndoStack = function()
Resets the undo stack, effectively clearing the undo/redo history
addCommandToHistory = c.undoCmd.add = function(cmd)
Adds a command object to the undo history stack
c.beginUndoableChange = function(attrName,
elems)
This function tells the canvas to remember the old values of the attrName attribute for each element sent in.
c.finishUndoableChange = function()
This function returns a BatchCommand object which summarizes the change since beginUndoableChange was called.
function walkTree(elem,
cbFn)
Walks the tree and executes the callback on each element in a top-down fashion
function walkTreePost(elem,
cbFn)
Walks the tree and executes the callback on each element in a depth-first fashion
var assignAttributes = this.assignAttributes = function(node,
attrs,
suspendLength,
unitCheck)
Assigns multiple attributes to an element.
var cleanupElement = this.cleanupElement = function(element)
Remove unneeded (default) attributes, makes resulting SVG smaller
var addSvgElementFromJson = this.addSvgElementFromJson = function(data)
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
this.addExtension = function(name,
ext_func)
Add an extension to the editor
var shortFloat = function(val)
Rounds a given value to a float with number of digits defined in save_options
var getStrokedBBox = this.getStrokedBBox = function(elems)
Get the bounding box for one or more stroked and/or transformed elements
var getVisibleElements = this.getVisibleElements = function(parent,
includeBBox)
Get all elements that have a BBox (excludes defs, title, etc).
var copyElem = function(el)
Create a clone of an element, updating its ID and its children’s IDs when needed
function getElem(id)
Get a DOM element by ID within the SVG root element.
getId = c.getId = function()
Returns the last created DOM element ID string
getNextId = c.getNextId = function()
Creates and returns a unique ID string for a DOM element
c.bind = function(event,
f)
Attaches a callback function to an event
c.setIdPrefix = function(p)
Changes the ID prefix to the given value
var sanitizeSvg = this.sanitizeSvg = function(node)
Sanitizes the input node and its children It only keeps what is allowed from our whitelist defined above
var getUrlFromAttr = this.getUrlFromAttr = function(attrVal)
Extracts the URL from the url(...)
var getBBox = this.getBBox = function(elem)
Get the given/selected element’s bounding box object, convert it to be more usable when necessary
var ffClone = function(elem)
Hack for Firefox bugs where text element features aren’t updated.
var getPathBBox = function(path)
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
var getRotationAngle = this.getRotationAngle = function(elem,
to_rad)
Get the rotation angle of the given/selected DOM element
this.setRotationAngle = function(val,
preventUndo)
Removes any old rotations if present, prepends a new rotation at the transformed center
var getTransformList = this.getTransformList = function(elem)
Returns an object that behaves like a SVGTransformList for the given DOM element
var recalculateAllSelectedDimensions = this.recalculateAllSelectedDimensions = function()
Runs recalculateDimensions on the selected elements, adding the changes to a single batch command
var remapElement = this.remapElement = function(selected,
changes,
m)
Applies coordinate changes to an element based on the given matrix
var recalculateDimensions = this.recalculateDimensions = function(selected)
Decides the course of action based on the element’s transform list
var transformPoint = function(x,
y,
m)
A (hopefully) quicker function to transform a point by a matrix (this function avoids any DOM calls and just does the math)
var isIdentity = function(m)
Helper function to check if the matrix performs no actual transform (i.e.
var matrixMultiply = this.matrixMultiply = function()
This function tries to return a SVGMatrix that is the multiplication m1*m2.
var transformListToTransform = this.transformListToTransform = function(tlist,
min,
max)
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
var hasMatrixTransform = this.hasMatrixTransform = function(tlist)
See if the given transformlist includes a non-indentity matrix transform
var getMatrix = function(elem)
Get the matrix object for a given element
var transformBox = this.transformBox = function(l,
t,
w,
h,
m)
Transforms a rectangle based on the given matrix
var clearSelection = this.clearSelection = function(noCall)
Clears the selection.
var addToSelection = this.addToSelection = function(elemsToAdd,
showGrips)
Adds a list of elements to the selection.
var removeFromSelection = this.removeFromSelection = function(elemsToRemove)
Removes elements from the selection.
this.selectAllInCurrentLayer = function()
Clears the selection, then adds all elements in the current layer to the selection.
var smoothControlPoints = this.smoothControlPoints = function(ct1,
ct2,
pt)
Takes three points and creates a smoother line based on them
var getMouseTarget = this.getMouseTarget = function(evt)
Gets the desired element from a mouse event
var preventClickDefault = function(img)
Prevents default browser click behaviour on the given element
var removeUnusedDefElems = this.removeUnusedDefElems = function()
Looks at DOM elements inside the defs to see if they are referred to, removes them from the DOM if they are not.
var svgCanvasToString = this.svgCanvasToString = function()
Main function to set up the SVG content for output
var svgToString = this.svgToString = function(elem,
indent)
Sub function ran on each SVG element to convert it to a string as desired
this.embedImage = function(val,
callback)
Converts a given image file to a data URL when possible, then runs a given callback
this.save = function(opts)
Serializes the current drawing into SVG XML text and returns it to the ‘saved’ handler.
this.rasterExport = function()
Generates a PNG Data URL based on the current image, then calls “exported” with an object including the string and any issues found
this.getSvgString = function()
Returns the current drawing as raw SVG XML text.
this.setSvgString = function(xmlString)
This function sets the current drawing as the input SVG XML.
this.importSvgString = function(xmlString)
This function imports the input SVG XML into the current layer in the drawing
var identifyLayers = function()
Updates layer system
this.createLayer = function(name)
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.deleteCurrentLayer = function()
Deletes the current layer from the drawing and then clears the selection.
this.getNumLayers = function()
Returns the number of layers in the current drawing.
this.getLayer = function(i)
Returns the name of the ith layer.
this.getCurrentLayer = function()
Returns the name of the currently selected layer.
this.setCurrentLayer = function(name)
Sets the current layer.
this.renameCurrentLayer = function(newname)
Renames the current layer.
this.setCurrentLayerPosition = function(newpos)
Changes the position of the current layer to the new value.
this.getLayerVisibility = function(layername)
Returns whether the layer is visible.
this.setLayerVisibility = function(layername,
bVisible)
Sets the visibility of the layer.
this.moveSelectedToLayer = function(layername)
Moves the selected elements to layername.
this.getLayerOpacity = function(layername)
Returns the opacity of the given layer.
this.setLayerOpacity = function(layername,
opacity)
Sets the opacity of the given layer.
this.clear = function()
Clears the current document.
this.getContentElem = function()
Returns the content DOM element
this.getRootElem = function()
Returns the root DOM element
this.getSelectedElems = function()
Returns the array with selected DOM elements
var getResolution = this.getResolution = function()
Returns the current dimensions and zoom level in an object
this.getZoom = function()
Returns the current zoom level
this.getVersion = function()
Returns a string which describes the revision number of SvgCanvas.
this.setUiStrings = function(strs)
Update interface strings with given values
this.setConfig = function(opts)
Update configuration options with given values
this.getDocumentTitle = function()
Returns the current document title or an empty string if not found
this.setDocumentTitle = function(newtitle)
Adds/updates a title element for the document with the given name.
this.getEditorNS = function(add)
Returns the editor’s namespace URL, optionally adds it to root element
this.setResolution = function(x,
y)
Changes the document’s dimensions to the given size
this.getOffset = function()
Returns an object with x, y values indicating the svgcontent element’s position in the editor’s canvas.
this.setBBoxZoom = function(val,
editor_w,
editor_h)
Sets the zoom level on the canvas-side based on the given value
this.setZoom = function(zoomlevel)
Sets the zoom to the given level
this.getMode = function()
Returns the current editor mode string
this.setMode = function(name)
Sets the editor’s mode to the given string
this.getColor = function(type)
Returns the current fill/stroke option
this.setColor = function(type,
val,
preventUndo)
Change the current stroke/fill color/gradient value
var findDefs = function()
Return the document’s defs element, create it first if necessary
var setGradient = this.setGradient = function(type)
Apply the current gradient to selected element’s fill or stroke
var findDuplicateGradient = function(grad)
Check if exact gradient already exists
this.setPaint = function(type,
paint)
Set a color/gradient to a fill/stroke
this.getStrokeWidth = function()
Returns the current stroke-width value
this.setStrokeWidth = function(val)
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
this.setStrokeAttr = function(attr,
val)
Set the given stroke-related attribute the given value for selected elements
this.getOpacity = function()
Returns the current opacity
this.setOpacity = function(val)
Sets the given opacity to the current selected elements
this.getStrokeOpacity = function()
Returns the current stroke opacity
this.setPaintOpacity = function(type,
val,
preventUndo)
Sets the current fill/stroke opacity
this.getBlur = function(elem)
Gets the stdDeviation blur value of the given element
canvas.setBlurNoUndo = function(val)
Sets the stdDeviation blur value on the selected element without being undoable
canvas.setBlurOffsets = function(filter,
stdDev)
Sets the x, y, with, height values of the filter element in order to make the blur not be clipped.
canvas.setBlur = function(val,
complete)
Adds/updates the blur filter to the selected element
this.getBold = function()
Check whether selected element is bold or not
this.setBold = function(b)
Make the selected element bold or normal
this.getItalic = function()
Check whether selected element is italic or not
this.setItalic = function(i)
Make the selected element italic or normal
this.getFontFamily = function()
Returns the current font family
this.setFontFamily = function(val)
Set the new font family
this.getFontSize = function()
Returns the current font size
this.setFontSize = function(val)
Applies the given font size to the selected element
this.getText = function()
Returns the current text (textContent) of the selected element
this.setTextContent = function(val)
Updates the text element with the given string
this.setImageURL = function(val)
Sets the new image URL for the selected image element.
this.setRectRadius = function(val)
Sets the rx & ry values to the selected rect element to change its corner radius
this.setSegType = function(new_type)
Sets the new segment type to the selected segment(s).
this.convertToPath = function(elem,
getBBox)
Convert selected element to a path, or get the BBox of an element-as-path
var changeSelectedAttributeNoUndo = function(attr,
newValue,
elems)
This function makes the changes to the elements.
var changeSelectedAttribute = this.changeSelectedAttribute = function(attr,
val,
elems)
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.
this.deleteSelectedElements = function()
Removes all selected elements from the DOM and adds the change to the history stack
this.groupSelectedElements = function()
Wraps all the selected elements in a group (g) element
this.ungroupSelectedElement = function()
Unwraps all the elements in a selected group (g) element.
this.moveToTopSelectedElement = function()
Repositions the selected element to the bottom in the DOM to appear on top of other elements
this.moveToBottomSelectedElement = function()
Repositions the selected element to the top in the DOM to appear under other elements
this.moveSelectedElements = function(dx,
dy,
undoable)
Moves selected elements on the X/Y axis
this.cloneSelectedElements = function()
Create deep DOM copies (clones) of all selected elements and move them slightly from their originals
this.alignSelectedElements = function(type,
relative_to)
Aligns selected elements
this.updateCanvas = function(w,
h)
Updates the editor canvas width/height/position after a zoom has occurred
this.setBackground = function(color,
url)
Set the background of the editor (NOT the actual document)
this.cycleElement = function(next)
Select the next/previous element within the current layer
- - - - - - - - \ No newline at end of file diff --git a/docs/index/.svn/all-wcprops b/docs/index/.svn/all-wcprops deleted file mode 100644 index 7821eeb..0000000 --- a/docs/index/.svn/all-wcprops +++ /dev/null @@ -1,23 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/1620/trunk/docs/index -END -General.html -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/1620/trunk/docs/index/General.html -END -Files.html -K 25 -svn:wc:ra_dav:version-url -V 46 -/svn/!svn/ver/1607/trunk/docs/index/Files.html -END -Functions.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/index/Functions.html -END diff --git a/docs/index/.svn/entries b/docs/index/.svn/entries deleted file mode 100644 index e93e96f..0000000 --- a/docs/index/.svn/entries +++ /dev/null @@ -1,130 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/docs/index -http://svg-edit.googlecode.com/svn - - - -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -General.html -file - - - - -2012-03-23T10:42:00.000000Z -1114df08520941319c3d6839987b2f93 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -32026 - -Files.html -file - - - - -2012-03-23T10:42:00.000000Z -8ec3c1d6f6115ad83dd6f54d99fc2e5e -2010-06-18T20:35:47.590209Z -1607 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -8185 - -Functions.html -file - - - - -2012-03-23T10:42:00.000000Z -a03cd6779b63949940317f97c5bb895e -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -30774 - diff --git a/docs/index/.svn/prop-base/Files.html.svn-base b/docs/index/.svn/prop-base/Files.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/index/.svn/prop-base/Files.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/index/.svn/prop-base/Functions.html.svn-base b/docs/index/.svn/prop-base/Functions.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/index/.svn/prop-base/Functions.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/index/.svn/prop-base/General.html.svn-base b/docs/index/.svn/prop-base/General.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/index/.svn/prop-base/General.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/index/.svn/text-base/Files.html.svn-base b/docs/index/.svn/text-base/Files.html.svn-base deleted file mode 100644 index 9ebbb55..0000000 --- a/docs/index/.svn/text-base/Files.html.svn-base +++ /dev/null @@ -1,37 +0,0 @@ - - -File Index - - - - - - - - - -
File Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
M
 my_svgcanvas.js
S
 svgcanvas-latest copy.js
 svgcanvas-mine.js
 svgcanvas-textanchor-experiment.js
 svgcanvas.js
 svgcanvas_subpaths.js
 svgcanvas_temp.js
- - - - - - - -
- - - - - - - - - - - - \ No newline at end of file diff --git a/docs/index/.svn/text-base/Functions.html.svn-base b/docs/index/.svn/text-base/Functions.html.svn-base deleted file mode 100644 index 9c282c2..0000000 --- a/docs/index/.svn/text-base/Functions.html.svn-base +++ /dev/null @@ -1,53 +0,0 @@ - - -Function Index - - - - - - - - - -
Function Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
A
 addCommandToHistory, SvgCanvas
 addExtension, SelectorManager
 addSubCommand, SvgCanvas.BatchCommand
 addSvgElementFromJson, SelectorManager
 addToSelection, SelectorManager
 alignSelectedElements, SelectorManager
 apply
 assignAttributes, SelectorManager
B
 BatchCommand, SvgCanvas
 beginUndoableChange, SvgCanvas
 bind, SelectorManager
C
 ChangeElementCommand, SvgCanvas
 changeSelectedAttribute, SelectorManager
 changeSelectedAttributeNoUndo, SelectorManager
 cleanupElement, SelectorManager
 clear, SelectorManager
 clearSelection, SelectorManager
 cloneSelectedElements, SelectorManager
 convertToNum, SvgCanvas
 convertToPath, SelectorManager
 convertToXMLReferences, SvgCanvas.Utils
 copyElem, SelectorManager
 createLayer, SelectorManager
 cycleElement, SelectorManager
D
 decode64, SvgCanvas.Utils
 deleteCurrentLayer, SelectorManager
 deleteSelectedElements, SelectorManager
E
 elements
 embedImage, SelectorManager
 encode64, SvgCanvas.Utils
F
 ffClone, SelectorManager
 findDefs, SelectorManager
 findDuplicateGradient, SelectorManager
 finishUndoableChange, SvgCanvas
 fromXml, SvgCanvas.Utils
- -
addCommandToHistory = c.undoCmd.add = function(cmd)
Adds a command object to the undo history stack
this.addExtension = function(name,
ext_func)
Add an extension to the editor
Adds a given command to the history stack
var addSvgElementFromJson = this.addSvgElementFromJson = function(data)
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
var addToSelection = this.addToSelection = function(elemsToAdd,
showGrips)
Adds a list of elements to the selection.
this.alignSelectedElements = function(type,
relative_to)
Aligns selected elements
Runs “apply” on all subcommands
Performs the stored change action
Re-Inserts the new element
Re-removes the new element
var assignAttributes = this.assignAttributes = function(node,
attrs,
suspendLength,
unitCheck)
Assigns multiple attributes to an element.
- - - -
var BatchCommand = this.undoCmd.batch = function(text)
History command that can contain/execute multiple other commands
c.beginUndoableChange = function(attrName,
elems)
This function tells the canvas to remember the old values of the attrName attribute for each element sent in.
c.bind = function(event,
f)
Attaches a callback function to an event
- - - -
var ChangeElementCommand = this.undoCmd.changeElement = function(elem,
attrs,
text)
History command to make a change to an element.
var changeSelectedAttribute = this.changeSelectedAttribute = function(attr,
val,
elems)
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.
var changeSelectedAttributeNoUndo = function(attr,
newValue,
elems)
This function makes the changes to the elements.
var cleanupElement = this.cleanupElement = function(element)
Remove unneeded (default) attributes, makes resulting SVG smaller
this.clear = function()
Clears the current document.
var clearSelection = this.clearSelection = function(noCall)
Clears the selection.
this.cloneSelectedElements = function()
Create deep DOM copies (clones) of all selected elements and move them slightly from their originals
convertToNum = function(attr,
val)
Converts given values to numbers.
this.convertToPath = function(elem,
getBBox)
Convert selected element to a path, or get the BBox of an element-as-path
Converts a string to use XML references
var copyElem = function(el)
Create a clone of an element, updating its ID and its children’s IDs when needed
this.createLayer = function(name)
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.cycleElement = function(next)
Select the next/previous element within the current layer
- - - -
Converts a string from base64
this.deleteCurrentLayer = function()
Deletes the current layer from the drawing and then clears the selection.
this.deleteSelectedElements = function()
Removes all selected elements from the DOM and adds the change to the history stack
- - - -
Iterate through all our subcommands and returns all the elements we are changing
Returns array with element associated with this command
Returns array with element associated with this command
Returns array with element associated with this command
Returns array with element associated with this command
this.embedImage = function(val,
callback)
Converts a given image file to a data URL when possible, then runs a given callback
Converts a string to base64
- - - -
var ffClone = function(elem)
Hack for Firefox bugs where text element features aren’t updated.
var findDefs = function()
Return the document’s defs element, create it first if necessary
var findDuplicateGradient = function(grad)
Check if exact gradient already exists
c.finishUndoableChange = function()
This function returns a BatchCommand object which summarizes the change since beginUndoableChange was called.
Converts XML entities in a string to single characters.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/docs/index/.svn/text-base/General.html.svn-base b/docs/index/.svn/text-base/General.html.svn-base deleted file mode 100644 index 69d5a0b..0000000 --- a/docs/index/.svn/text-base/General.html.svn-base +++ /dev/null @@ -1,53 +0,0 @@ - - -Index - - - - - - - - - -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
A
 addCommandToHistory, SvgCanvas
 addExtension, SelectorManager
 Additional editor tools, SelectorManager
 addSubCommand, SvgCanvas.BatchCommand
 addSvgElementFromJson, SelectorManager
 addToSelection, SelectorManager
 alignSelectedElements, SelectorManager
 apply
 assignAttributes, SelectorManager
B
 BatchCommand, SvgCanvas
 beginUndoableChange, SvgCanvas
 bind, SelectorManager
C
 ChangeElementCommand, SvgCanvas
 changeSelectedAttribute, SelectorManager
 changeSelectedAttributeNoUndo, SelectorManager
 cleanupElement, SelectorManager
 clear, SelectorManager
 clearSelection, SelectorManager
 cloneSelectedElements, SelectorManager
 convertToNum, SvgCanvas
 convertToPath, SelectorManager
 convertToXMLReferences, SvgCanvas.Utils
 copyElem, SelectorManager
 createLayer, SelectorManager
 cycleElement, SelectorManager
D
 decode64, SvgCanvas.Utils
 deleteCurrentLayer, SelectorManager
 deleteSelectedElements, SelectorManager
 Document functions, SelectorManager
E
 Element manipulation, SelectorManager
 Element Styling, SelectorManager
 Element Transforms, SelectorManager
 elements
 embedImage, SelectorManager
 encode64, SvgCanvas.Utils
F
 ffClone, SelectorManager
 findDefs, SelectorManager
 findDuplicateGradient, SelectorManager
 finishUndoableChange, SvgCanvas
 fromXml, SvgCanvas.Utils
 Functions, Selector
- -
addCommandToHistory = c.undoCmd.add = function(cmd)
Adds a command object to the undo history stack
this.addExtension = function(name,
ext_func)
Add an extension to the editor
Adds a given command to the history stack
var addSvgElementFromJson = this.addSvgElementFromJson = function(data)
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
var addToSelection = this.addToSelection = function(elemsToAdd,
showGrips)
Adds a list of elements to the selection.
this.alignSelectedElements = function(type,
relative_to)
Aligns selected elements
Runs “apply” on all subcommands
Performs the stored change action
Re-Inserts the new element
Re-removes the new element
var assignAttributes = this.assignAttributes = function(node,
attrs,
suspendLength,
unitCheck)
Assigns multiple attributes to an element.
- - - -
var BatchCommand = this.undoCmd.batch = function(text)
History command that can contain/execute multiple other commands
c.beginUndoableChange = function(attrName,
elems)
This function tells the canvas to remember the old values of the attrName attribute for each element sent in.
c.bind = function(event,
f)
Attaches a callback function to an event
- - - -
var ChangeElementCommand = this.undoCmd.changeElement = function(elem,
attrs,
text)
History command to make a change to an element.
var changeSelectedAttribute = this.changeSelectedAttribute = function(attr,
val,
elems)
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.
var changeSelectedAttributeNoUndo = function(attr,
newValue,
elems)
This function makes the changes to the elements.
var cleanupElement = this.cleanupElement = function(element)
Remove unneeded (default) attributes, makes resulting SVG smaller
this.clear = function()
Clears the current document.
var clearSelection = this.clearSelection = function(noCall)
Clears the selection.
this.cloneSelectedElements = function()
Create deep DOM copies (clones) of all selected elements and move them slightly from their originals
convertToNum = function(attr,
val)
Converts given values to numbers.
this.convertToPath = function(elem,
getBBox)
Convert selected element to a path, or get the BBox of an element-as-path
Converts a string to use XML references
var copyElem = function(el)
Create a clone of an element, updating its ID and its children’s IDs when needed
this.createLayer = function(name)
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.cycleElement = function(next)
Select the next/previous element within the current layer
- - - -
Converts a string from base64
this.deleteCurrentLayer = function()
Deletes the current layer from the drawing and then clears the selection.
this.deleteSelectedElements = function()
Removes all selected elements from the DOM and adds the change to the history stack
- - - -
Iterate through all our subcommands and returns all the elements we are changing
Returns array with element associated with this command
Returns array with element associated with this command
Returns array with element associated with this command
Returns array with element associated with this command
this.embedImage = function(val,
callback)
Converts a given image file to a data URL when possible, then runs a given callback
Converts a string to base64
- - - -
var ffClone = function(elem)
Hack for Firefox bugs where text element features aren’t updated.
var findDefs = function()
Return the document’s defs element, create it first if necessary
var findDuplicateGradient = function(grad)
Check if exact gradient already exists
c.finishUndoableChange = function()
This function returns a BatchCommand object which summarizes the change since beginUndoableChange was called.
Converts XML entities in a string to single characters.
- -
- - - - - - - - - - - - \ No newline at end of file diff --git a/docs/javascript/.svn/all-wcprops b/docs/javascript/.svn/all-wcprops deleted file mode 100644 index 6c302fe..0000000 --- a/docs/javascript/.svn/all-wcprops +++ /dev/null @@ -1,17 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 40 -/svn/!svn/ver/1620/trunk/docs/javascript -END -main.js -K 25 -svn:wc:ra_dav:version-url -V 47 -/svn/!svn/ver/791/trunk/docs/javascript/main.js -END -searchdata.js -K 25 -svn:wc:ra_dav:version-url -V 54 -/svn/!svn/ver/1620/trunk/docs/javascript/searchdata.js -END diff --git a/docs/javascript/.svn/entries b/docs/javascript/.svn/entries deleted file mode 100644 index fb5cfa9..0000000 --- a/docs/javascript/.svn/entries +++ /dev/null @@ -1,96 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/docs/javascript -http://svg-edit.googlecode.com/svn - - - -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -main.js -file - - - - -2012-03-23T10:42:00.000000Z -39bb24d13aa826d1a11285cfa91a0d69 -2009-10-09T19:16:58.262697Z -791 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -25346 - -searchdata.js -file - - - - -2012-03-23T10:42:00.000000Z -5c026a814862059225b0d10f1ef421dc -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -2170 - diff --git a/docs/javascript/.svn/prop-base/main.js.svn-base b/docs/javascript/.svn/prop-base/main.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/docs/javascript/.svn/prop-base/main.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/docs/javascript/.svn/prop-base/searchdata.js.svn-base b/docs/javascript/.svn/prop-base/searchdata.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/docs/javascript/.svn/prop-base/searchdata.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/docs/javascript/.svn/text-base/main.js.svn-base b/docs/javascript/.svn/text-base/main.js.svn-base deleted file mode 100644 index efcdca9..0000000 --- a/docs/javascript/.svn/text-base/main.js.svn-base +++ /dev/null @@ -1,836 +0,0 @@ -// This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL - - -// -// Browser Styles -// ____________________________________________________________________________ - -var agt=navigator.userAgent.toLowerCase(); -var browserType; -var browserVer; - -if (agt.indexOf("opera") != -1) - { - browserType = "Opera"; - - if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1) - { browserVer = "Opera7"; } - else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1) - { browserVer = "Opera8"; } - else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1) - { browserVer = "Opera9"; } - } - -else if (agt.indexOf("applewebkit") != -1) - { - browserType = "Safari"; - - if (agt.indexOf("version/3") != -1) - { browserVer = "Safari3"; } - else if (agt.indexOf("safari/4") != -1) - { browserVer = "Safari2"; } - } - -else if (agt.indexOf("khtml") != -1) - { - browserType = "Konqueror"; - } - -else if (agt.indexOf("msie") != -1) - { - browserType = "IE"; - - if (agt.indexOf("msie 6") != -1) - { browserVer = "IE6"; } - else if (agt.indexOf("msie 7") != -1) - { browserVer = "IE7"; } - } - -else if (agt.indexOf("gecko") != -1) - { - browserType = "Firefox"; - - if (agt.indexOf("rv:1.7") != -1) - { browserVer = "Firefox1"; } - else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1) - { browserVer = "Firefox15"; } - else if (agt.indexOf("rv:1.8.1") != -1) - { browserVer = "Firefox2"; } - } - - -// -// Support Functions -// ____________________________________________________________________________ - - -function GetXPosition(item) - { - var position = 0; - - if (item.offsetWidth != null) - { - while (item != document.body && item != null) - { - position += item.offsetLeft; - item = item.offsetParent; - }; - }; - - return position; - }; - - -function GetYPosition(item) - { - var position = 0; - - if (item.offsetWidth != null) - { - while (item != document.body && item != null) - { - position += item.offsetTop; - item = item.offsetParent; - }; - }; - - return position; - }; - - -function MoveToPosition(item, x, y) - { - // Opera 5 chokes on the px extension, so it can use the Microsoft one instead. - - if (item.style.left != null) - { - item.style.left = x + "px"; - item.style.top = y + "px"; - } - else if (item.style.pixelLeft != null) - { - item.style.pixelLeft = x; - item.style.pixelTop = y; - }; - }; - - -// -// Menu -// ____________________________________________________________________________ - - -function ToggleMenu(id) - { - if (!window.document.getElementById) - { return; }; - - var display = window.document.getElementById(id).style.display; - - if (display == "none") - { display = "block"; } - else - { display = "none"; } - - window.document.getElementById(id).style.display = display; - } - -function HideAllBut(ids, max) - { - if (document.getElementById) - { - ids.sort( function(a,b) { return a - b; } ); - var number = 1; - - while (number < max) - { - if (ids.length > 0 && number == ids[0]) - { ids.shift(); } - else - { - document.getElementById("MGroupContent" + number).style.display = "none"; - }; - - number++; - }; - }; - } - - -// -// Tooltips -// ____________________________________________________________________________ - - -var tooltipTimer = 0; - -function ShowTip(event, tooltipID, linkID) - { - if (tooltipTimer) - { clearTimeout(tooltipTimer); }; - - var docX = event.clientX + window.pageXOffset; - var docY = event.clientY + window.pageYOffset; - - var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")"; - - tooltipTimer = setTimeout(showCommand, 1000); - } - -function ReallyShowTip(tooltipID, linkID, docX, docY) - { - tooltipTimer = 0; - - var tooltip; - var link; - - if (document.getElementById) - { - tooltip = document.getElementById(tooltipID); - link = document.getElementById(linkID); - } -/* else if (document.all) - { - tooltip = eval("document.all['" + tooltipID + "']"); - link = eval("document.all['" + linkID + "']"); - } -*/ - if (tooltip) - { - var left = GetXPosition(link); - var top = GetYPosition(link); - top += link.offsetHeight; - - - // The fallback method is to use the mouse X and Y relative to the document. We use a separate if and test if its a number - // in case some browser snuck through the above if statement but didn't support everything. - - if (!isFinite(top) || top == 0) - { - left = docX; - top = docY; - } - - // Some spacing to get it out from under the cursor. - - top += 10; - - // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the - // page. We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right. - - if (tooltip.offsetWidth != null) - { - var width = tooltip.offsetWidth; - var docWidth = document.body.clientWidth; - - if (left + width > docWidth) - { left = docWidth - width - 1; } - - // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width. - if (left < 0) - { left = 0; }; - } - - MoveToPosition(tooltip, left, top); - tooltip.style.visibility = "visible"; - } - } - -function HideTip(tooltipID) - { - if (tooltipTimer) - { - clearTimeout(tooltipTimer); - tooltipTimer = 0; - } - - var tooltip; - - if (document.getElementById) - { tooltip = document.getElementById(tooltipID); } - else if (document.all) - { tooltip = eval("document.all['" + tooltipID + "']"); } - - if (tooltip) - { tooltip.style.visibility = "hidden"; } - } - - -// -// Blockquote fix for IE -// ____________________________________________________________________________ - - -function NDOnLoad() - { - if (browserVer == "IE6") - { - var scrollboxes = document.getElementsByTagName('blockquote'); - - if (scrollboxes.item(0)) - { - NDDoResize(); - window.onresize=NDOnResize; - }; - }; - }; - - -var resizeTimer = 0; - -function NDOnResize() - { - if (resizeTimer != 0) - { clearTimeout(resizeTimer); }; - - resizeTimer = setTimeout(NDDoResize, 250); - }; - - -function NDDoResize() - { - var scrollboxes = document.getElementsByTagName('blockquote'); - - var i; - var item; - - i = 0; - while (item = scrollboxes.item(i)) - { - item.style.width = 100; - i++; - }; - - i = 0; - while (item = scrollboxes.item(i)) - { - item.style.width = item.parentNode.offsetWidth; - i++; - }; - - clearTimeout(resizeTimer); - resizeTimer = 0; - } - - - -/* ________________________________________________________________________________________________________ - - Class: SearchPanel - ________________________________________________________________________________________________________ - - A class handling everything associated with the search panel. - - Parameters: - - name - The name of the global variable that will be storing this instance. Is needed to be able to set timeouts. - mode - The mode the search is going to work in. Pass CommandLineOption()>, so the - value will be something like "HTML" or "FramedHTML". - - ________________________________________________________________________________________________________ -*/ - - -function SearchPanel(name, mode, resultsPath) - { - if (!name || !mode || !resultsPath) - { alert("Incorrect parameters to SearchPanel."); }; - - - // Group: Variables - // ________________________________________________________________________ - - /* - var: name - The name of the global variable that will be storing this instance of the class. - */ - this.name = name; - - /* - var: mode - The mode the search is going to work in, such as "HTML" or "FramedHTML". - */ - this.mode = mode; - - /* - var: resultsPath - The relative path from the current HTML page to the results page directory. - */ - this.resultsPath = resultsPath; - - /* - var: keyTimeout - The timeout used between a keystroke and when a search is performed. - */ - this.keyTimeout = 0; - - /* - var: keyTimeoutLength - The length of in thousandths of a second. - */ - this.keyTimeoutLength = 500; - - /* - var: lastSearchValue - The last search string executed, or an empty string if none. - */ - this.lastSearchValue = ""; - - /* - var: lastResultsPage - The last results page. The value is only relevant if is set. - */ - this.lastResultsPage = ""; - - /* - var: deactivateTimeout - - The timeout used between when a control is deactivated and when the entire panel is deactivated. Is necessary - because a control may be deactivated in favor of another control in the same panel, in which case it should stay - active. - */ - this.deactivateTimout = 0; - - /* - var: deactivateTimeoutLength - The length of in thousandths of a second. - */ - this.deactivateTimeoutLength = 200; - - - - - // Group: DOM Elements - // ________________________________________________________________________ - - - // Function: DOMSearchField - this.DOMSearchField = function() - { return document.getElementById("MSearchField"); }; - - // Function: DOMSearchType - this.DOMSearchType = function() - { return document.getElementById("MSearchType"); }; - - // Function: DOMPopupSearchResults - this.DOMPopupSearchResults = function() - { return document.getElementById("MSearchResults"); }; - - // Function: DOMPopupSearchResultsWindow - this.DOMPopupSearchResultsWindow = function() - { return document.getElementById("MSearchResultsWindow"); }; - - // Function: DOMSearchPanel - this.DOMSearchPanel = function() - { return document.getElementById("MSearchPanel"); }; - - - - - // Group: Event Handlers - // ________________________________________________________________________ - - - /* - Function: OnSearchFieldFocus - Called when focus is added or removed from the search field. - */ - this.OnSearchFieldFocus = function(isActive) - { - this.Activate(isActive); - }; - - - /* - Function: OnSearchFieldChange - Called when the content of the search field is changed. - */ - this.OnSearchFieldChange = function() - { - if (this.keyTimeout) - { - clearTimeout(this.keyTimeout); - this.keyTimeout = 0; - }; - - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); - - if (searchValue != this.lastSearchValue) - { - if (searchValue != "") - { - this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength); - } - else - { - if (this.mode == "HTML") - { this.DOMPopupSearchResultsWindow().style.display = "none"; }; - this.lastSearchValue = ""; - }; - }; - }; - - - /* - Function: OnSearchTypeFocus - Called when focus is added or removed from the search type. - */ - this.OnSearchTypeFocus = function(isActive) - { - this.Activate(isActive); - }; - - - /* - Function: OnSearchTypeChange - Called when the search type is changed. - */ - this.OnSearchTypeChange = function() - { - var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); - - if (searchValue != "") - { - this.Search(); - }; - }; - - - - // Group: Action Functions - // ________________________________________________________________________ - - - /* - Function: CloseResultsWindow - Closes the results window. - */ - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = "none"; - this.Activate(false, true); - }; - - - /* - Function: Search - Performs a search. - */ - this.Search = function() - { - this.keyTimeout = 0; - - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var searchTopic = this.DOMSearchType().value; - - var pageExtension = searchValue.substr(0,1); - - if (pageExtension.match(/^[a-z]/i)) - { pageExtension = pageExtension.toUpperCase(); } - else if (pageExtension.match(/^[0-9]/)) - { pageExtension = 'Numbers'; } - else - { pageExtension = "Symbols"; }; - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - // indexSectionsWithContent is defined in searchdata.js - if (indexSectionsWithContent[searchTopic][pageExtension] == true) - { - resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else - { - resultsPage = this.resultsPath + '/NoResults.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - }; - - var resultsFrame; - if (this.mode == "HTML") - { resultsFrame = window.frames.MSearchResults; } - else if (this.mode == "FramedHTML") - { resultsFrame = window.top.frames['Content']; }; - - - if (resultsPage != this.lastResultsPage || - - // Bug in IE. If everything becomes hidden in a run, none of them will be able to be reshown in the next for some - // reason. It counts the right number of results, and you can even read the display as "block" after setting it, but it - // just doesn't work in IE 6 or IE 7. So if we're on the right page but the previous search had no results, reload the - // page anyway to get around the bug. - (browserType == "IE" && hasResultsPage && - (!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) ) - - { - resultsFrame.location.href = resultsPageWithSearch; - } - - // So if the results page is right and there's no IE bug, reperform the search on the existing page. We have to check if there - // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even - // if it did. - else if (hasResultsPage) - { - // We need to check if this exists in case the frame is present but didn't finish loading. - if (resultsFrame.searchResults) - { resultsFrame.searchResults.Search(searchValue); } - - // Otherwise just reload instead of waiting. - else - { resultsFrame.location.href = resultsPageWithSearch; }; - }; - - - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block") - { - var domSearchType = this.DOMSearchType(); - - var left = GetXPosition(domSearchType); - var top = GetYPosition(domSearchType) + domSearchType.offsetHeight; - - MoveToPosition(domPopupSearchResultsWindow, left, top); - domPopupSearchResultsWindow.style.display = 'block'; - }; - - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - }; - - - - // Group: Activation Functions - // Functions that handle whether the entire panel is active or not. - // ________________________________________________________________________ - - - /* - Function: Activate - - Activates or deactivates the search panel, resetting things to their default values if necessary. You can call this on every - control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently. - - Parameters: - - isActive - Whether you're activating or deactivating the panel. - ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay. - */ - this.Activate = function(isActive, ignoreDeactivateDelay) - { - // We want to ignore isActive being false while the results window is open. - if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block")) - { - if (this.inactivateTimeout) - { - clearTimeout(this.inactivateTimeout); - this.inactivateTimeout = 0; - }; - - this.DOMSearchPanel().className = 'MSearchPanelActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == 'Search') - { searchField.value = ""; } - } - else if (!ignoreDeactivateDelay) - { - this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength); - } - else - { - this.InactivateAfterTimeout(); - }; - }; - - - /* - Function: InactivateAfterTimeout - - Called by , which is set by . Inactivation occurs on a timeout because a control may - receive OnBlur() when focus is really transferring to another control in the search panel. In this case we don't want to - actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value. - So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation. - */ - this.InactivateAfterTimeout = function() - { - this.inactivateTimeout = 0; - - this.DOMSearchPanel().className = 'MSearchPanelInactive'; - this.DOMSearchField().value = "Search"; - - this.lastSearchValue = ""; - this.lastResultsPage = ""; - }; - }; - - - - -/* ________________________________________________________________________________________________________ - - Class: SearchResults - _________________________________________________________________________________________________________ - - The class that handles everything on the search results page. - _________________________________________________________________________________________________________ -*/ - - -function SearchResults(name, mode) - { - /* - var: mode - The mode the search is going to work in, such as "HTML" or "FramedHTML". - */ - this.mode = mode; - - /* - var: lastMatchCount - The number of matches from the last run of . - */ - this.lastMatchCount = 0; - - - /* - Function: Toggle - Toggles the visibility of the passed element ID. - */ - this.Toggle = function(id) - { - if (this.mode == "FramedHTML") - { return; }; - - var parentElement = document.getElementById(id); - - var element = parentElement.firstChild; - - while (element && element != parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'ISubIndex') - { - if (element.style.display == 'block') - { element.style.display = "none"; } - else - { element.style.display = 'block'; } - }; - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { element = element.firstChild; } - else if (element.nextSibling) - { element = element.nextSibling; } - else - { - do - { - element = element.parentNode; - } - while (element && element != parentElement && !element.nextSibling); - - if (element && element != parentElement) - { element = element.nextSibling; }; - }; - }; - }; - - - /* - Function: Search - - Searches for the passed string. If there is no parameter, it takes it from the URL query. - - Always returns true, since other documents may try to call it and that may or may not be possible. - */ - this.Search = function(search) - { - if (!search) - { - search = window.location.search; - search = search.substring(1); // Remove the leading ? - search = unescape(search); - }; - - search = search.replace(/^ +/, ""); - search = search.replace(/ +$/, ""); - search = search.toLowerCase(); - - if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily. - { - search = search.replace(/\_/g, "_und"); - search = search.replace(/\ +/gi, "_spc"); - search = search.replace(/\~/g, "_til"); - search = search.replace(/\!/g, "_exc"); - search = search.replace(/\@/g, "_att"); - search = search.replace(/\#/g, "_num"); - search = search.replace(/\$/g, "_dol"); - search = search.replace(/\%/g, "_pct"); - search = search.replace(/\^/g, "_car"); - search = search.replace(/\&/g, "_amp"); - search = search.replace(/\*/g, "_ast"); - search = search.replace(/\(/g, "_lpa"); - search = search.replace(/\)/g, "_rpa"); - search = search.replace(/\-/g, "_min"); - search = search.replace(/\+/g, "_plu"); - search = search.replace(/\=/g, "_equ"); - search = search.replace(/\{/g, "_lbc"); - search = search.replace(/\}/g, "_rbc"); - search = search.replace(/\[/g, "_lbk"); - search = search.replace(/\]/g, "_rbk"); - search = search.replace(/\:/g, "_col"); - search = search.replace(/\;/g, "_sco"); - search = search.replace(/\"/g, "_quo"); - search = search.replace(/\'/g, "_apo"); - search = search.replace(/\/g, "_ran"); - search = search.replace(/\,/g, "_com"); - search = search.replace(/\./g, "_per"); - search = search.replace(/\?/g, "_que"); - search = search.replace(/\//g, "_sla"); - search = search.replace(/[^a-z0-9\_]i/gi, "_zzz"); - }; - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); - - if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search) - { - row.style.display = "block"; - matches++; - } - else - { row.style.display = "none"; }; - }; - - i++; - }; - - document.getElementById("Searching").style.display="none"; - - if (matches == 0) - { document.getElementById("NoMatches").style.display="block"; } - else - { document.getElementById("NoMatches").style.display="none"; } - - this.lastMatchCount = matches; - - return true; - }; - }; - diff --git a/docs/javascript/.svn/text-base/searchdata.js.svn-base b/docs/javascript/.svn/text-base/searchdata.js.svn-base deleted file mode 100644 index eac176a..0000000 --- a/docs/javascript/.svn/text-base/searchdata.js.svn-base +++ /dev/null @@ -1,122 +0,0 @@ -var indexSectionsWithContent = { - "General": { - "Symbols": false, - "Numbers": false, - "A": true, - "B": false, - "C": true, - "D": true, - "E": false, - "F": true, - "G": true, - "H": true, - "I": true, - "J": false, - "K": false, - "L": true, - "M": true, - "N": false, - "O": true, - "P": false, - "Q": false, - "R": true, - "S": true, - "T": false, - "U": false, - "V": false, - "W": false, - "X": false, - "Y": false, - "Z": false - }, - "Functions": { - "Symbols": false, - "Numbers": false, - "A": true, - "B": true, - "C": true, - "D": true, - "E": true, - "F": true, - "G": true, - "H": true, - "I": true, - "J": false, - "K": false, - "L": true, - "M": true, - "N": false, - "O": false, - "P": true, - "Q": false, - "R": true, - "S": true, - "T": true, - "U": true, - "V": false, - "W": true, - "X": false, - "Y": false, - "Z": false - }, - "Interfaces": { - "Symbols": false, - "Numbers": false, - "A": false, - "B": false, - "C": false, - "D": false, - "E": false, - "F": false, - "G": false, - "H": false, - "I": false, - "J": false, - "K": false, - "L": false, - "M": false, - "N": false, - "O": false, - "P": false, - "Q": false, - "R": false, - "S": true, - "T": false, - "U": false, - "V": false, - "W": false, - "X": false, - "Y": false, - "Z": false - }, - "Classes": { - "Symbols": false, - "Numbers": false, - "A": false, - "B": false, - "C": false, - "D": false, - "E": false, - "F": false, - "G": false, - "H": false, - "I": false, - "J": false, - "K": false, - "L": false, - "M": false, - "N": false, - "O": false, - "P": false, - "Q": false, - "R": false, - "S": true, - "T": false, - "U": false, - "V": false, - "W": false, - "X": false, - "Y": false, - "Z": false - } - } \ No newline at end of file diff --git a/docs/search/.svn/all-wcprops b/docs/search/.svn/all-wcprops deleted file mode 100644 index 7aa49b2..0000000 --- a/docs/search/.svn/all-wcprops +++ /dev/null @@ -1,125 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 36 -/svn/!svn/ver/1620/trunk/docs/search -END -FunctionsD.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1620/trunk/docs/search/FunctionsD.html -END -GeneralA.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralA.html -END -FunctionsG.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1620/trunk/docs/search/FunctionsG.html -END -GeneralC.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralC.html -END -GeneralD.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralD.html -END -GeneralF.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralF.html -END -GeneralG.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralG.html -END -FilesS.html -K 25 -svn:wc:ra_dav:version-url -V 48 -/svn/!svn/ver/1607/trunk/docs/search/FilesS.html -END -FunctionsM.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1619/trunk/docs/search/FunctionsM.html -END -FunctionsO.html -K 25 -svn:wc:ra_dav:version-url -V 51 -/svn/!svn/ver/820/trunk/docs/search/FunctionsO.html -END -GeneralL.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1619/trunk/docs/search/GeneralL.html -END -FunctionsR.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1620/trunk/docs/search/FunctionsR.html -END -GeneralM.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1619/trunk/docs/search/GeneralM.html -END -FunctionsS.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1620/trunk/docs/search/FunctionsS.html -END -GeneralO.html -K 25 -svn:wc:ra_dav:version-url -V 49 -/svn/!svn/ver/820/trunk/docs/search/GeneralO.html -END -NoResults.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/791/trunk/docs/search/NoResults.html -END -GeneralR.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralR.html -END -GeneralS.html -K 25 -svn:wc:ra_dav:version-url -V 50 -/svn/!svn/ver/1620/trunk/docs/search/GeneralS.html -END -FunctionsA.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1620/trunk/docs/search/FunctionsA.html -END -FunctionsC.html -K 25 -svn:wc:ra_dav:version-url -V 52 -/svn/!svn/ver/1620/trunk/docs/search/FunctionsC.html -END diff --git a/docs/search/.svn/entries b/docs/search/.svn/entries deleted file mode 100644 index 9420309..0000000 --- a/docs/search/.svn/entries +++ /dev/null @@ -1,708 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/docs/search -http://svg-edit.googlecode.com/svn - - - -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -FunctionsD.html -file - - - - -2012-03-23T10:42:00.000000Z -96a3b3f9d03b1e9483c2cf7298ff422a -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -1972 - -GeneralA.html -file - - - - -2012-03-23T10:42:00.000000Z -2a22cbc6cd60a4c32d57e96432a29015 -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - - - - - - - - -3911 - -FunctionsG.html -file - - - - -2012-03-23T10:42:00.000000Z -f08dd46f073c1c86e10d55e3a0f63d02 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -11251 - -GeneralC.html -file - - - - -2012-03-23T10:42:00.000000Z -2d80d7688cf59e3a611797fc8c61e2d8 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -4296 - -GeneralD.html -file - - - - -2012-03-23T10:42:00.000000Z -1e9e5113f43416280f7069d7f5a90ead -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -2217 - -GeneralF.html -file - - - - -2012-03-23T10:42:00.000000Z -ca1d5c1ad22f05f2be17834d8366065b -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -2582 - -GeneralG.html -file - - - - -2012-03-23T10:42:00.000000Z -f08dd46f073c1c86e10d55e3a0f63d02 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -11251 - -FunctionsM.html -file - - - - -2012-03-23T10:42:00.000000Z -47c3445c7304d556d0ae30b4debb5f17 -2010-06-29T20:43:44.997466Z -1619 -adeveria - - - - - - - - - - - - - - - - - - - - - -2741 - -FilesS.html -file - - - - -2012-03-23T10:42:00.000000Z -14fdc973925cc4fadd6dd9bdd1d57f44 -2010-06-18T20:35:47.590209Z -1607 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -4328 - -FunctionsO.html -file - - - - -2012-03-23T10:42:00.000000Z -0870505c26889be0fdca5e9f484324d5 -2009-10-14T02:50:07.046639Z -820 -codedread - - - - - - - - - - - - - - - - - - - - - -1399 - -GeneralL.html -file - - - - -2012-03-23T10:42:00.000000Z -6935dd2f610df26893b81cc216d20823 -2010-06-29T20:43:44.997466Z -1619 -adeveria - - - - - - - - - - - - - - - - - - - - - -1704 - -GeneralM.html -file - - - - -2012-03-23T10:42:00.000000Z -47c3445c7304d556d0ae30b4debb5f17 -2010-06-29T20:43:44.997466Z -1619 -adeveria - - - - - - - - - - - - - - - - - - - - - -2741 - -FunctionsR.html -file - - - - -2012-03-23T10:42:00.000000Z -e436dcd5ed72a036dc63345d72b39090 -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - - - - - - - - -4825 - -FunctionsS.html -file - - - - -2012-03-23T10:42:00.000000Z -efc4f65c00aee8ef9a53d532f181f847 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -11152 - -GeneralO.html -file - - - - -2012-03-23T10:42:00.000000Z -0870505c26889be0fdca5e9f484324d5 -2009-10-14T02:50:07.046639Z -820 -codedread - - - - - - - - - - - - - - - - - - - - - -1399 - -NoResults.html -file - - - - -2012-03-23T10:42:00.000000Z -a17ce9c877c33f155c3c31a5155f15bd -2009-10-09T19:16:58.262697Z -791 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -857 - -GeneralR.html -file - - - - -2012-03-23T10:42:00.000000Z -e436dcd5ed72a036dc63345d72b39090 -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - - - - - - - - -4825 - -GeneralS.html -file - - - - -2012-03-23T10:42:00.000000Z -acbf07fdab02ffc5e730edda9e4468fb -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -12074 - -FunctionsA.html -file - - - - -2012-03-23T10:42:00.000000Z -9725a0addc914ae609d4d523bd5f3b8f -2010-06-30T18:27:36.402448Z -1620 -adeveria - - - - - - - - - - - - - - - - - - - - - -3648 - -FunctionsC.html -file - - - - -2012-03-23T10:42:00.000000Z -2d80d7688cf59e3a611797fc8c61e2d8 -2010-06-30T18:27:36.402448Z -1620 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -4296 - diff --git a/docs/search/.svn/prop-base/FilesS.html.svn-base b/docs/search/.svn/prop-base/FilesS.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/FilesS.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/FunctionsC.html.svn-base b/docs/search/.svn/prop-base/FunctionsC.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/FunctionsC.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/FunctionsD.html.svn-base b/docs/search/.svn/prop-base/FunctionsD.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/FunctionsD.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/FunctionsG.html.svn-base b/docs/search/.svn/prop-base/FunctionsG.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/FunctionsG.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/FunctionsS.html.svn-base b/docs/search/.svn/prop-base/FunctionsS.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/FunctionsS.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/GeneralC.html.svn-base b/docs/search/.svn/prop-base/GeneralC.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/GeneralC.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/GeneralD.html.svn-base b/docs/search/.svn/prop-base/GeneralD.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/GeneralD.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/GeneralF.html.svn-base b/docs/search/.svn/prop-base/GeneralF.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/GeneralF.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/GeneralG.html.svn-base b/docs/search/.svn/prop-base/GeneralG.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/GeneralG.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/GeneralS.html.svn-base b/docs/search/.svn/prop-base/GeneralS.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/GeneralS.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/prop-base/NoResults.html.svn-base b/docs/search/.svn/prop-base/NoResults.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/docs/search/.svn/prop-base/NoResults.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/docs/search/.svn/text-base/FilesS.html.svn-base b/docs/search/.svn/text-base/FilesS.html.svn-base deleted file mode 100644 index 690d961..0000000 --- a/docs/search/.svn/text-base/FilesS.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsA.html.svn-base b/docs/search/.svn/text-base/FunctionsA.html.svn-base deleted file mode 100644 index de24e1f..0000000 --- a/docs/search/.svn/text-base/FunctionsA.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
addExtension, SelectorManager
addSubCommand, SvgCanvas.BatchCommand
addSvgElementFromJson, SelectorManager
addToSelection, SelectorManager
alignSelectedElements, SelectorManager
assignAttributes, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsC.html.svn-base b/docs/search/.svn/text-base/FunctionsC.html.svn-base deleted file mode 100644 index eb4b747..0000000 --- a/docs/search/.svn/text-base/FunctionsC.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
changeSelectedAttribute, SelectorManager
cleanupElement, SelectorManager
clear, SelectorManager
clearSelection, SelectorManager
cloneSelectedElements, SelectorManager
convertToNum, SvgCanvas
convertToPath, SelectorManager
convertToXMLReferences, SvgCanvas.Utils
copyElem, SelectorManager
createLayer, SelectorManager
cycleElement, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsD.html.svn-base b/docs/search/.svn/text-base/FunctionsD.html.svn-base deleted file mode 100644 index 1c28ffc..0000000 --- a/docs/search/.svn/text-base/FunctionsD.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
decode64, SvgCanvas.Utils
deleteCurrentLayer, SelectorManager
deleteSelectedElements, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsG.html.svn-base b/docs/search/.svn/text-base/FunctionsG.html.svn-base deleted file mode 100644 index c7e504e..0000000 --- a/docs/search/.svn/text-base/FunctionsG.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
getBBox, SelectorManager
getBlur, SelectorManager
getBold, SelectorManager
getColor, SelectorManager
getContentElem, SelectorManager
getCurrentLayer, SelectorManager
getDocumentTitle, SelectorManager
getEditorNS, SelectorManager
getElem, SelectorManager
getFontFamily, SelectorManager
getFontSize, SelectorManager
getId, SelectorManager
getItalic, SelectorManager
getLayer, SelectorManager
getLayerOpacity, SelectorManager
getLayerVisibility, SelectorManager
getMatrix, SelectorManager
getMode, SelectorManager
getMouseTarget, SelectorManager
getNextId, SelectorManager
getNextRedoCommandText, SvgCanvas.undoMgr
getNextUndoCommandText, SvgCanvas.undoMgr
getNumLayers, SelectorManager
getOffset, SelectorManager
getOpacity, SelectorManager
getPathBBox, SelectorManager
getRedoStackSize, SvgCanvas.undoMgr
getResolution, SelectorManager
getRootElem, SelectorManager
getRotationAngle, SelectorManager
getRubberBandBox, SelectorManager.SelectorManager
getSelectedElems, SelectorManager
getStrokedBBox, SelectorManager
getStrokeOpacity, SelectorManager
getStrokeWidth, SelectorManager
getSvgString, SelectorManager
getText, SelectorManager
getTransformList, SelectorManager
getUndoStackSize, SvgCanvas.undoMgr
getUrlFromAttr, SelectorManager
getVersion, SelectorManager
getVisibleElements, SelectorManager
getZoom, SelectorManager
groupSelectedElements, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsM.html.svn-base b/docs/search/.svn/text-base/FunctionsM.html.svn-base deleted file mode 100644 index fbb3112..0000000 --- a/docs/search/.svn/text-base/FunctionsM.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
matrixMultiply, SelectorManager
moveSelectedElements, SelectorManager
moveSelectedToLayer, SelectorManager
moveToTopSelectedElement, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsO.html.svn-base b/docs/search/.svn/text-base/FunctionsO.html.svn-base deleted file mode 100644 index 76f92f6..0000000 --- a/docs/search/.svn/text-base/FunctionsO.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsR.html.svn-base b/docs/search/.svn/text-base/FunctionsR.html.svn-base deleted file mode 100644 index 3153d9d..0000000 --- a/docs/search/.svn/text-base/FunctionsR.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
rasterExport, SelectorManager
recalculateDimensions, SelectorManager
rectsIntersect, SvgCanvas
redo, SvgCanvas.undoMgr
releaseSelector, SelectorManager.SelectorManager
remapElement, SelectorManager
removeFromSelection, SelectorManager
removeUnusedDefElems, SelectorManager
renameCurrentLayer, SelectorManager
requestSelector, SelectorManager.SelectorManager
reset, Selector.Selector
resetUndoStack, SvgCanvas
resize, Selector.Selector
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/FunctionsS.html.svn-base b/docs/search/.svn/text-base/FunctionsS.html.svn-base deleted file mode 100644 index 13e3338..0000000 --- a/docs/search/.svn/text-base/FunctionsS.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
sanitizeSvg, SelectorManager
save, SelectorManager
selectAllInCurrentLayer, SelectorManager
setBackground, SelectorManager
setBBoxZoom, SelectorManager
setBlur, SelectorManager
setBlurNoUndo, SelectorManager
setBlurOffsets, SelectorManager
setBold, SelectorManager
setColor, SelectorManager
setConfig, SelectorManager
setCurrentLayer, SelectorManager
setCurrentLayerPosition, SelectorManager
setDocumentTitle, SelectorManager
setFontFamily, SelectorManager
setFontSize, SelectorManager
setGradient, SelectorManager
setIdPrefix, SelectorManager
setImageURL, SelectorManager
setItalic, SelectorManager
setLayerOpacity, SelectorManager
setLayerVisibility, SelectorManager
setMode, SelectorManager
setOpacity, SelectorManager
setPaint, SelectorManager
setPaintOpacity, SelectorManager
setRectRadius, SelectorManager
setResolution, SelectorManager
setRotationAngle, SelectorManager
setSegType, SelectorManager
setStrokeAttr, SelectorManager
setStrokeWidth, SelectorManager
setSvgString, SelectorManager
setTextContent, SelectorManager
setUiStrings, SelectorManager
setUnitAttr, SvgCanvas
setZoom, SelectorManager
shortFloat, SelectorManager
showGrips, Selector.Selector
smoothControlPoints, SelectorManager
snapToAngle, SvgCanvas
svgCanvasToString, SelectorManager
svgToString, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralA.html.svn-base b/docs/search/.svn/text-base/GeneralA.html.svn-base deleted file mode 100644 index f3ee0f6..0000000 --- a/docs/search/.svn/text-base/GeneralA.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
addExtension, SelectorManager
Additional editor tools, SelectorManager
addSubCommand, SvgCanvas.BatchCommand
addSvgElementFromJson, SelectorManager
addToSelection, SelectorManager
alignSelectedElements, SelectorManager
assignAttributes, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralC.html.svn-base b/docs/search/.svn/text-base/GeneralC.html.svn-base deleted file mode 100644 index eb4b747..0000000 --- a/docs/search/.svn/text-base/GeneralC.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
changeSelectedAttribute, SelectorManager
cleanupElement, SelectorManager
clear, SelectorManager
clearSelection, SelectorManager
cloneSelectedElements, SelectorManager
convertToNum, SvgCanvas
convertToPath, SelectorManager
convertToXMLReferences, SvgCanvas.Utils
copyElem, SelectorManager
createLayer, SelectorManager
cycleElement, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralD.html.svn-base b/docs/search/.svn/text-base/GeneralD.html.svn-base deleted file mode 100644 index 6735300..0000000 --- a/docs/search/.svn/text-base/GeneralD.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
decode64, SvgCanvas.Utils
deleteCurrentLayer, SelectorManager
deleteSelectedElements, SelectorManager
Document functions, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralF.html.svn-base b/docs/search/.svn/text-base/GeneralF.html.svn-base deleted file mode 100644 index 55c21a8..0000000 --- a/docs/search/.svn/text-base/GeneralF.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
ffClone, SelectorManager
findDefs, SelectorManager
findDuplicateGradient, SelectorManager
fromXml, SvgCanvas.Utils
Functions, Selector
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralG.html.svn-base b/docs/search/.svn/text-base/GeneralG.html.svn-base deleted file mode 100644 index c7e504e..0000000 --- a/docs/search/.svn/text-base/GeneralG.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
getBBox, SelectorManager
getBlur, SelectorManager
getBold, SelectorManager
getColor, SelectorManager
getContentElem, SelectorManager
getCurrentLayer, SelectorManager
getDocumentTitle, SelectorManager
getEditorNS, SelectorManager
getElem, SelectorManager
getFontFamily, SelectorManager
getFontSize, SelectorManager
getId, SelectorManager
getItalic, SelectorManager
getLayer, SelectorManager
getLayerOpacity, SelectorManager
getLayerVisibility, SelectorManager
getMatrix, SelectorManager
getMode, SelectorManager
getMouseTarget, SelectorManager
getNextId, SelectorManager
getNextRedoCommandText, SvgCanvas.undoMgr
getNextUndoCommandText, SvgCanvas.undoMgr
getNumLayers, SelectorManager
getOffset, SelectorManager
getOpacity, SelectorManager
getPathBBox, SelectorManager
getRedoStackSize, SvgCanvas.undoMgr
getResolution, SelectorManager
getRootElem, SelectorManager
getRotationAngle, SelectorManager
getRubberBandBox, SelectorManager.SelectorManager
getSelectedElems, SelectorManager
getStrokedBBox, SelectorManager
getStrokeOpacity, SelectorManager
getStrokeWidth, SelectorManager
getSvgString, SelectorManager
getText, SelectorManager
getTransformList, SelectorManager
getUndoStackSize, SvgCanvas.undoMgr
getUrlFromAttr, SelectorManager
getVersion, SelectorManager
getVisibleElements, SelectorManager
getZoom, SelectorManager
groupSelectedElements, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralL.html.svn-base b/docs/search/.svn/text-base/GeneralL.html.svn-base deleted file mode 100644 index 09038de..0000000 --- a/docs/search/.svn/text-base/GeneralL.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Layers, SelectorManager
linkControlPoints, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralM.html.svn-base b/docs/search/.svn/text-base/GeneralM.html.svn-base deleted file mode 100644 index fbb3112..0000000 --- a/docs/search/.svn/text-base/GeneralM.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
matrixMultiply, SelectorManager
moveSelectedElements, SelectorManager
moveSelectedToLayer, SelectorManager
moveToTopSelectedElement, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralO.html.svn-base b/docs/search/.svn/text-base/GeneralO.html.svn-base deleted file mode 100644 index 76f92f6..0000000 --- a/docs/search/.svn/text-base/GeneralO.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralR.html.svn-base b/docs/search/.svn/text-base/GeneralR.html.svn-base deleted file mode 100644 index 3153d9d..0000000 --- a/docs/search/.svn/text-base/GeneralR.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
rasterExport, SelectorManager
recalculateDimensions, SelectorManager
rectsIntersect, SvgCanvas
redo, SvgCanvas.undoMgr
releaseSelector, SelectorManager.SelectorManager
remapElement, SelectorManager
removeFromSelection, SelectorManager
removeUnusedDefElems, SelectorManager
renameCurrentLayer, SelectorManager
requestSelector, SelectorManager.SelectorManager
reset, Selector.Selector
resetUndoStack, SvgCanvas
resize, Selector.Selector
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/GeneralS.html.svn-base b/docs/search/.svn/text-base/GeneralS.html.svn-base deleted file mode 100644 index 1176986..0000000 --- a/docs/search/.svn/text-base/GeneralS.html.svn-base +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - -
Loading...
sanitizeSvg, SelectorManager
save, SelectorManager
selectAllInCurrentLayer, SelectorManager
Selection, SelectorManager
Serialization, SelectorManager
setBackground, SelectorManager
setBBoxZoom, SelectorManager
setBlur, SelectorManager
setBlurNoUndo, SelectorManager
setBlurOffsets, SelectorManager
setBold, SelectorManager
setColor, SelectorManager
setConfig, SelectorManager
setCurrentLayer, SelectorManager
setCurrentLayerPosition, SelectorManager
setDocumentTitle, SelectorManager
setFontFamily, SelectorManager
setFontSize, SelectorManager
setGradient, SelectorManager
setIdPrefix, SelectorManager
setImageURL, SelectorManager
setItalic, SelectorManager
setLayerOpacity, SelectorManager
setLayerVisibility, SelectorManager
setMode, SelectorManager
setOpacity, SelectorManager
setPaint, SelectorManager
setPaintOpacity, SelectorManager
setRectRadius, SelectorManager
setResolution, SelectorManager
setRotationAngle, SelectorManager
setSegType, SelectorManager
setStrokeAttr, SelectorManager
setStrokeWidth, SelectorManager
setSvgString, SelectorManager
setTextContent, SelectorManager
setUiStrings, SelectorManager
setUnitAttr, SvgCanvas
setZoom, SelectorManager
shortFloat, SelectorManager
showGrips, Selector.Selector
smoothControlPoints, SelectorManager
snapToAngle, SvgCanvas
svgCanvasToString, SelectorManager
svgToString, SelectorManager
Searching...
No Matches
\ No newline at end of file diff --git a/docs/search/.svn/text-base/NoResults.html.svn-base b/docs/search/.svn/text-base/NoResults.html.svn-base deleted file mode 100644 index 02ce888..0000000 --- a/docs/search/.svn/text-base/NoResults.html.svn-base +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - -
No Matches
\ No newline at end of file diff --git a/docs/styles/.svn/all-wcprops b/docs/styles/.svn/all-wcprops deleted file mode 100644 index 8f13f65..0000000 --- a/docs/styles/.svn/all-wcprops +++ /dev/null @@ -1,11 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 35 -/svn/!svn/ver/789/trunk/docs/styles -END -main.css -K 25 -svn:wc:ra_dav:version-url -V 44 -/svn/!svn/ver/789/trunk/docs/styles/main.css -END diff --git a/docs/styles/.svn/entries b/docs/styles/.svn/entries deleted file mode 100644 index 742428d..0000000 --- a/docs/styles/.svn/entries +++ /dev/null @@ -1,62 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/docs/styles -http://svg-edit.googlecode.com/svn - - - -2009-10-09T19:08:59.341200Z -789 -codedread - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -main.css -file - - - - -2012-03-23T10:42:00.000000Z -35741f8545e92d4526798a79ef6f7829 -2009-10-09T19:08:59.341200Z -789 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -19459 - diff --git a/docs/styles/.svn/prop-base/main.css.svn-base b/docs/styles/.svn/prop-base/main.css.svn-base deleted file mode 100644 index 69cd899..0000000 --- a/docs/styles/.svn/prop-base/main.css.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 8 -text/css -END diff --git a/docs/styles/.svn/text-base/main.css.svn-base b/docs/styles/.svn/text-base/main.css.svn-base deleted file mode 100644 index 17e9cbc..0000000 --- a/docs/styles/.svn/text-base/main.css.svn-base +++ /dev/null @@ -1,767 +0,0 @@ -/* - IMPORTANT: If you're editing this file in the output directory of one of - your projects, your changes will be overwritten the next time you run - Natural Docs. Instead, copy this file to your project directory, make your - changes, and you can use it with -s. Even better would be to make a CSS - file in your project directory with only your changes, which you can then - use with -s [original style] [your changes]. - - On the other hand, if you're editing this file in the Natural Docs styles - directory, the changes will automatically be applied to all your projects - that use this style the next time Natural Docs is run on them. - - This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure - Natural Docs is licensed under the GPL -*/ - -body { - font: 10pt Verdana, Arial, sans-serif; - color: #000000; - margin: 0; padding: 0; - } - -.ContentPage, -.IndexPage, -.FramedMenuPage { - background-color: #E8E8E8; - } -.FramedContentPage, -.FramedIndexPage, -.FramedSearchResultsPage, -.PopupSearchResultsPage { - background-color: #FFFFFF; - } - - -a:link, -a:visited { color: #900000; text-decoration: none } -a:hover { color: #900000; text-decoration: underline } -a:active { color: #FF0000; text-decoration: underline } - -td { - vertical-align: top } - -img { border: 0; } - - -/* - Comment out this line to use web-style paragraphs (blank line between - paragraphs, no indent) instead of print-style paragraphs (no blank line, - indented.) -*/ -p { - text-indent: 5ex; margin: 0 } - - -/* Opera doesn't break with just wbr, but will if you add this. */ -.Opera wbr:after { - content: "\00200B"; - } - - -/* Blockquotes are used as containers for things that may need to scroll. */ -blockquote { - padding: 0; - margin: 0; - overflow: auto; - } - - -.Firefox1 blockquote { - padding-bottom: .5em; - } - -/* Turn off scrolling when printing. */ -@media print { - blockquote { - overflow: visible; - } - .IE blockquote { - width: auto; - } - } - - - -#Menu { - font-size: 9pt; - padding: 10px 0 0 0; - } -.ContentPage #Menu, -.IndexPage #Menu { - position: absolute; - top: 0; - left: 0; - width: 31ex; - overflow: hidden; - } -.ContentPage .Firefox #Menu, -.IndexPage .Firefox #Menu { - width: 27ex; - } - - - .MTitle { - font-size: 16pt; font-weight: bold; font-variant: small-caps; - text-align: center; - padding: 5px 10px 15px 10px; - border-bottom: 1px dotted #000000; - margin-bottom: 15px } - - .MSubTitle { - font-size: 9pt; font-weight: normal; font-variant: normal; - margin-top: 1ex; margin-bottom: 5px } - - - .MEntry a:link, - .MEntry a:hover, - .MEntry a:visited { color: #606060; margin-right: 0 } - .MEntry a:active { color: #A00000; margin-right: 0 } - - - .MGroup { - font-variant: small-caps; font-weight: bold; - margin: 1em 0 1em 10px; - } - - .MGroupContent { - font-variant: normal; font-weight: normal } - - .MGroup a:link, - .MGroup a:hover, - .MGroup a:visited { color: #545454; margin-right: 10px } - .MGroup a:active { color: #A00000; margin-right: 10px } - - - .MFile, - .MText, - .MLink, - .MIndex { - padding: 1px 17px 2px 10px; - margin: .25em 0 .25em 0; - } - - .MText { - font-size: 8pt; font-style: italic } - - .MLink { - font-style: italic } - - #MSelected { - color: #000000; background-color: #FFFFFF; - /* Replace padding with border. */ - padding: 0 10px 0 10px; - border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000; - margin-right: 5px; - } - - /* Close off the left side when its in a group. */ - .MGroup #MSelected { - padding-left: 9px; border-left-width: 1px } - - /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ - .Firefox #MSelected { - -moz-border-radius-topright: 10px; - -moz-border-radius-bottomright: 10px } - .Firefox .MGroup #MSelected { - -moz-border-radius-topleft: 10px; - -moz-border-radius-bottomleft: 10px } - - - #MSearchPanel { - padding: 0px 6px; - margin: .25em 0; - } - - - #MSearchField { - font: italic 9pt Verdana, sans-serif; - color: #606060; - background-color: #E8E8E8; - border: none; - padding: 2px 4px; - width: 100%; - } - /* Only Opera gets it right. */ - .Firefox #MSearchField, - .IE #MSearchField, - .Safari #MSearchField { - width: 94%; - } - .Opera9 #MSearchField, - .Konqueror #MSearchField { - width: 97%; - } - .FramedMenuPage .Firefox #MSearchField, - .FramedMenuPage .Safari #MSearchField, - .FramedMenuPage .Konqueror #MSearchField { - width: 98%; - } - - /* Firefox doesn't do this right in frames without #MSearchPanel added on. - It's presence doesn't hurt anything other browsers. */ - #MSearchPanel.MSearchPanelInactive:hover #MSearchField { - background-color: #FFFFFF; - border: 1px solid #C0C0C0; - padding: 1px 3px; - } - .MSearchPanelActive #MSearchField { - background-color: #FFFFFF; - border: 1px solid #C0C0C0; - font-style: normal; - padding: 1px 3px; - } - - #MSearchType { - visibility: hidden; - font: 8pt Verdana, sans-serif; - width: 98%; - padding: 0; - border: 1px solid #C0C0C0; - } - .MSearchPanelActive #MSearchType, - /* As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */ - #MSearchPanel.MSearchPanelInactive:hover #MSearchType, - #MSearchType:focus { - visibility: visible; - color: #606060; - } - #MSearchType option#MSearchEverything { - font-weight: bold; - } - - .Opera8 .MSearchPanelInactive:hover, - .Opera8 .MSearchPanelActive { - margin-left: -1px; - } - - - iframe#MSearchResults { - width: 60ex; - height: 15em; - } - #MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000000; - background-color: #E8E8E8; - } - #MSearchResultsWindowClose { - font-weight: bold; - font-size: 8pt; - display: block; - padding: 2px 5px; - } - #MSearchResultsWindowClose:link, - #MSearchResultsWindowClose:visited { - color: #000000; - text-decoration: none; - } - #MSearchResultsWindowClose:active, - #MSearchResultsWindowClose:hover { - color: #800000; - text-decoration: none; - background-color: #F4F4F4; - } - - - - -#Content { - padding-bottom: 15px; - } - -.ContentPage #Content { - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #000000; - background-color: #FFFFFF; - font-size: 9pt; /* To make 31ex match the menu's 31ex. */ - margin-left: 31ex; - } -.ContentPage .Firefox #Content { - margin-left: 27ex; - } - - - - .CTopic { - font-size: 10pt; - margin-bottom: 3em; - } - - - .CTitle { - font-size: 12pt; font-weight: bold; - border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0; - margin: 0 15px .5em 15px } - - .CGroup .CTitle { - font-size: 16pt; font-variant: small-caps; - padding-left: 15px; padding-right: 15px; - border-width: 0 0 2px 0; border-color: #000000; - margin-left: 0; margin-right: 0 } - - .CClass .CTitle, - .CInterface .CTitle, - .CDatabase .CTitle, - .CDatabaseTable .CTitle, - .CSection .CTitle { - font-size: 18pt; - color: #FFFFFF; background-color: #A0A0A0; - padding: 10px 15px 10px 15px; - border-width: 2px 0; border-color: #000000; - margin-left: 0; margin-right: 0 } - - #MainTopic .CTitle { - font-size: 20pt; - color: #FFFFFF; background-color: #7070C0; - padding: 10px 15px 10px 15px; - border-width: 0 0 3px 0; border-color: #000000; - margin-left: 0; margin-right: 0 } - - .CBody { - margin-left: 15px; margin-right: 15px } - - - .CToolTip { - position: absolute; visibility: hidden; - left: 0; top: 0; - background-color: #FFFFE0; - padding: 5px; - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000; - font-size: 8pt; - } - - .Opera .CToolTip { - max-width: 98%; - } - - /* Scrollbars would be useless. */ - .CToolTip blockquote { - overflow: hidden; - } - .IE6 .CToolTip blockquote { - overflow: visible; - } - - .CHeading { - font-weight: bold; font-size: 10pt; - margin: 1.5em 0 .5em 0; - } - - .CBody pre { - font: 10pt "Courier New", Courier, monospace; - margin: 1em 0; - } - - .CBody ul { - /* I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever. - Reapply it here as padding. */ - padding-left: 15px; padding-right: 15px; - margin: .5em 5ex .5em 5ex; - } - - .CDescriptionList { - margin: .5em 5ex 0 5ex } - - .CDLEntry { - font: 10pt "Courier New", Courier, monospace; color: #808080; - padding-bottom: .25em; - white-space: nowrap } - - .CDLDescription { - font-size: 10pt; /* For browsers that don't inherit correctly, like Opera 5. */ - padding-bottom: .5em; padding-left: 5ex } - - - .CTopic img { - text-align: center; - display: block; - margin: 1em auto; - } - .CImageCaption { - font-variant: small-caps; - font-size: 8pt; - color: #808080; - text-align: center; - position: relative; - top: 1em; - } - - .CImageLink { - color: #808080; - font-style: italic; - } - a.CImageLink:link, - a.CImageLink:visited, - a.CImageLink:hover { color: #808080 } - - - - - -.Prototype { - font: 10pt "Courier New", Courier, monospace; - padding: 5px 3ex; - border-width: 1px; border-style: solid; - margin: 0 5ex 1.5em 5ex; - } - - .Prototype td { - font-size: 10pt; - } - - .PDefaultValue, - .PDefaultValuePrefix, - .PTypePrefix { - color: #8F8F8F; - } - .PTypePrefix { - text-align: right; - } - .PAfterParameters { - vertical-align: bottom; - } - - .IE .Prototype table { - padding: 0; - } - - .CFunction .Prototype { - background-color: #F4F4F4; border-color: #D0D0D0 } - .CProperty .Prototype { - background-color: #F4F4FF; border-color: #C0C0E8 } - .CVariable .Prototype { - background-color: #FFFFF0; border-color: #E0E0A0 } - - .CClass .Prototype { - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; - background-color: #F4F4F4; - } - .CInterface .Prototype { - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0D0; - background-color: #F4F4FF; - } - - .CDatabaseIndex .Prototype, - .CConstant .Prototype { - background-color: #D0D0D0; border-color: #000000 } - .CType .Prototype, - .CEnumeration .Prototype { - background-color: #FAF0F0; border-color: #E0B0B0; - } - .CDatabaseTrigger .Prototype, - .CEvent .Prototype, - .CDelegate .Prototype { - background-color: #F0FCF0; border-color: #B8E4B8 } - - .CToolTip .Prototype { - margin: 0 0 .5em 0; - white-space: nowrap; - } - - - - - -.Summary { - margin: 1.5em 5ex 0 5ex } - - .STitle { - font-size: 12pt; font-weight: bold; - margin-bottom: .5em } - - - .SBorder { - background-color: #FFFFF0; - padding: 15px; - border: 1px solid #C0C060 } - - /* In a frame IE 6 will make them too long unless you set the width to 100%. Without frames it will be correct without a width - or slightly too long (but not enough to scroll) with a width. This arbitrary weirdness simply astounds me. IE 7 has the same - problem with frames, haven't tested it without. */ - .FramedContentPage .IE .SBorder { - width: 100% } - - /* A treat for Mozilla users. Blatantly non-standard. Will be replaced with CSS 3 attributes when finalized/supported. */ - .Firefox .SBorder { - -moz-border-radius: 20px } - - - .STable { - font-size: 9pt; width: 100% } - - .SEntry { - width: 30% } - .SDescription { - width: 70% } - - - .SMarked { - background-color: #F8F8D8 } - - .SDescription { padding-left: 2ex } - .SIndent1 .SEntry { padding-left: 1.5ex } .SIndent1 .SDescription { padding-left: 3.5ex } - .SIndent2 .SEntry { padding-left: 3.0ex } .SIndent2 .SDescription { padding-left: 5.0ex } - .SIndent3 .SEntry { padding-left: 4.5ex } .SIndent3 .SDescription { padding-left: 6.5ex } - .SIndent4 .SEntry { padding-left: 6.0ex } .SIndent4 .SDescription { padding-left: 8.0ex } - .SIndent5 .SEntry { padding-left: 7.5ex } .SIndent5 .SDescription { padding-left: 9.5ex } - - .SDescription a { color: #800000} - .SDescription a:active { color: #A00000 } - - .SGroup td { - padding-top: .5em; padding-bottom: .25em } - - .SGroup .SEntry { - font-weight: bold; font-variant: small-caps } - - .SGroup .SEntry a { color: #800000 } - .SGroup .SEntry a:active { color: #F00000 } - - - .SMain td, - .SClass td, - .SDatabase td, - .SDatabaseTable td, - .SSection td { - font-size: 10pt; - padding-bottom: .25em } - - .SClass td, - .SDatabase td, - .SDatabaseTable td, - .SSection td { - padding-top: 1em } - - .SMain .SEntry, - .SClass .SEntry, - .SDatabase .SEntry, - .SDatabaseTable .SEntry, - .SSection .SEntry { - font-weight: bold; - } - - .SMain .SEntry a, - .SClass .SEntry a, - .SDatabase .SEntry a, - .SDatabaseTable .SEntry a, - .SSection .SEntry a { color: #000000 } - - .SMain .SEntry a:active, - .SClass .SEntry a:active, - .SDatabase .SEntry a:active, - .SDatabaseTable .SEntry a:active, - .SSection .SEntry a:active { color: #A00000 } - - - - - -.ClassHierarchy { - margin: 0 15px 1em 15px } - - .CHEntry { - border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0; - margin-bottom: 3px; - padding: 2px 2ex; - font-size: 10pt; - background-color: #F4F4F4; color: #606060; - } - - .Firefox .CHEntry { - -moz-border-radius: 4px; - } - - .CHCurrent .CHEntry { - font-weight: bold; - border-color: #000000; - color: #000000; - } - - .CHChildNote .CHEntry { - font-style: italic; - font-size: 8pt; - } - - .CHIndent { - margin-left: 3ex; - } - - .CHEntry a:link, - .CHEntry a:visited, - .CHEntry a:hover { - color: #606060; - } - .CHEntry a:active { - color: #800000; - } - - - - - -#Index { - background-color: #FFFFFF; - } - -/* As opposed to .PopupSearchResultsPage #Index */ -.IndexPage #Index, -.FramedIndexPage #Index, -.FramedSearchResultsPage #Index { - padding: 15px; - } - -.IndexPage #Index { - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #000000; - font-size: 9pt; /* To make 27ex match the menu's 27ex. */ - margin-left: 27ex; - } - - - .IPageTitle { - font-size: 20pt; font-weight: bold; - color: #FFFFFF; background-color: #7070C0; - padding: 10px 15px 10px 15px; - border-width: 0 0 3px 0; border-color: #000000; border-style: solid; - margin: -15px -15px 0 -15px } - - .FramedSearchResultsPage .IPageTitle { - margin-bottom: 15px; - } - - .INavigationBar { - font-size: 10pt; - text-align: center; - background-color: #FFFFF0; - padding: 5px; - border-bottom: solid 1px black; - margin: 0 -15px 15px -15px; - } - - .INavigationBar a { - font-weight: bold } - - .IHeading { - font-size: 16pt; font-weight: bold; - padding: 2.5em 0 .5em 0; - text-align: center; - width: 3.5ex; - } - #IFirstHeading { - padding-top: 0; - } - - .IEntry { - font-size: 10pt; - padding-left: 1ex; - } - .PopupSearchResultsPage .IEntry { - font-size: 8pt; - padding: 1px 5px; - } - .PopupSearchResultsPage .Opera9 .IEntry, - .FramedSearchResultsPage .Opera9 .IEntry { - text-align: left; - } - .FramedSearchResultsPage .IEntry { - padding: 0; - } - - .ISubIndex { - padding-left: 3ex; padding-bottom: .5em } - .PopupSearchResultsPage .ISubIndex { - display: none; - } - - /* While it may cause some entries to look like links when they aren't, I found it's much easier to read the - index if everything's the same color. */ - .ISymbol { - font-weight: bold; color: #900000 } - - .IndexPage .ISymbolPrefix, - .FramedIndexPage .ISymbolPrefix { - font-size: 10pt; - text-align: right; - color: #C47C7C; - background-color: #F8F8F8; - border-right: 3px solid #E0E0E0; - border-left: 1px solid #E0E0E0; - padding: 0 1px 0 2px; - } - .PopupSearchResultsPage .ISymbolPrefix, - .FramedSearchResultsPage .ISymbolPrefix { - color: #900000; - } - .PopupSearchResultsPage .ISymbolPrefix { - font-size: 8pt; - } - - .IndexPage #IFirstSymbolPrefix, - .FramedIndexPage #IFirstSymbolPrefix { - border-top: 1px solid #E0E0E0; - } - .IndexPage #ILastSymbolPrefix, - .FramedIndexPage #ILastSymbolPrefix { - border-bottom: 1px solid #E0E0E0; - } - .IndexPage #IOnlySymbolPrefix, - .FramedIndexPage #IOnlySymbolPrefix { - border-top: 1px solid #E0E0E0; - border-bottom: 1px solid #E0E0E0; - } - - a.IParent, - a.IFile { - display: block; - } - - .PopupSearchResultsPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; - } - .FramedSearchResultsPage .SRStatus { - font-size: 10pt; - font-style: italic; - } - - .SRResult { - display: none; - } - - - -#Footer { - font-size: 8pt; - color: #989898; - text-align: right; - } - -#Footer p { - text-indent: 0; - margin-bottom: .5em; - } - -.ContentPage #Footer, -.IndexPage #Footer { - text-align: right; - margin: 2px; - } - -.FramedMenuPage #Footer { - text-align: center; - margin: 5em 10px 10px 10px; - padding-top: 1em; - border-top: 1px solid #C8C8C8; - } - - #Footer a:link, - #Footer a:hover, - #Footer a:visited { color: #989898 } - #Footer a:active { color: #A00000 } - diff --git a/editor/.svn/all-wcprops b/editor/.svn/all-wcprops deleted file mode 100644 index 893a09f..0000000 --- a/editor/.svn/all-wcprops +++ /dev/null @@ -1,125 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 31 -/svn/!svn/ver/2083/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/2076/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 -select.js -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/1984/trunk/editor/select.js -END -jquery.js -K 25 -svn:wc:ra_dav:version-url -V 41 -/svn/!svn/ver/2052/trunk/editor/jquery.js -END -svgutils.js -K 25 -svn:wc:ra_dav:version-url -V 43 -/svn/!svn/ver/2081/trunk/editor/svgutils.js -END -svg-editor.js -K 25 -svn:wc:ra_dav:version-url -V 45 -/svn/!svn/ver/2083/trunk/editor/svg-editor.js -END -browser.js -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/2065/trunk/editor/browser.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/2082/trunk/editor/svgcanvas.js -END -path.js -K 25 -svn:wc:ra_dav:version-url -V 39 -/svn/!svn/ver/2025/trunk/editor/path.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 -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/2076/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/2083/trunk/editor/units.js -END diff --git a/editor/.svn/entries b/editor/.svn/entries deleted file mode 100644 index d4e2bee..0000000 --- a/editor/.svn/entries +++ /dev/null @@ -1,678 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/editor -http://svg-edit.googlecode.com/svn - - - -2012-05-25T04:04:22.765892Z -2083 -asyazwan@gmail.com - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -embedapi.js -file - - - - -2012-03-23T10:42:00.000000Z -5616d0cf42836b152bc7f8e6b6c4205f -2011-02-09T06:14:47.166399Z -1984 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -7329 - -contextmenu.js -file - - - - -2012-03-23T10:42:00.000000Z -958c8c4ac1d6e460f2bb1c37b1e1260d -2012-02-25T02:13:18.242841Z -2055 -codedread - - - - - - - - - - - - - - - - - - - - - -2587 - -jquery.js -file - - - - -2012-03-23T10:42:00.000000Z -ddb84c1587287b2df08966081ef063bf -2012-02-23T02:48:21.539764Z -2052 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -93868 - -select.js -file - - - - -2012-03-23T10:42:00.000000Z -eebadb50afe7a0f10f1d9a381742a083 -2011-02-09T06:14:47.166399Z -1984 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -15322 - -svgicons -dir - -browser.js -file - - - - -2012-03-23T10:42:00.000000Z -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-23T10:42:00.000000Z -aa0d3a29eb7e4f973705e8a5f3d1ffb8 -2011-02-09T06:14:47.166399Z -1984 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -7935 - -math.js -file - - - - -2012-03-23T10:42:00.000000Z -9c30d37ef11fc244809dbfbf995bc37e -2011-02-09T06:14:47.166399Z -1984 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -7455 - -images -dir - -svgcanvas.js -file - - - - - -0414c4f06064d6d0a967e675ec440d44 -2012-05-23T10:33:22.545732Z -2082 -asyazwan@gmail.com -has-props - -jgraduate -dir - -path.js -file - - - - -2012-03-23T10:42:00.000000Z -04e2bd9f48097a7599da80350e4d924b -2011-03-07T18:26:12.602539Z -2025 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -25391 - -browser-not-supported.html -file - - - - -2012-03-23T10:42:00.000000Z -6e008f38ba0ddb2442d32a7d0c9ce0b4 -2011-01-16T20:40:17.194658Z -1923 -adrianbjones@gmail.com -has-props - - - - - - - - - - - - - - - - - - - - -1543 - -draw.js -file - - - - -2012-03-23T10:42:00.000000Z -9b61fc3cb8df9b2696bc9ceb561fe4df -2011-02-10T19:09:35.759706Z -1993 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -16020 - -units.js -file - - - - - -a326921895bfd624634d4ca137a004a4 -2012-05-25T04:04:22.765892Z -2083 -asyazwan@gmail.com -has-props - -svg-editor.html -file - - - - -2012-05-16T23:42:07.000000Z -5981341ae4bb764270aebc941bf482be -2012-03-31T18:02:08.849195Z -2076 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -29017 - -svg-editor.manifest -file - - - - -2012-03-23T10:42:00.000000Z -79f3195254ea0c5660b429b22a222c61 -2010-01-12T20:39:03.457662Z -1201 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -2316 - -jquery-ui -dir - -svgutils.js -file - - - - -2012-05-27T20:16:58.000000Z -edf6c41ed20e7310ccde9d719384fbec -2012-05-22T12:05:25.193077Z -2081 -jacques.distler -has-props - - - - - - - - - - - - - - - - - - - - -17487 - -canvg -dir - -svg-editor.js -file - - - - - -ebc8049b42936dd4db3a9eb6684cc63e -2012-05-25T04:04:22.765892Z -2083 -asyazwan@gmail.com -has-props - -sanitize.js -file - - - - -2012-03-23T10:42:00.000000Z -47af7f26c9338f5199edc30e2e36a878 -2012-02-26T18:08:34.679053Z -2057 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -14407 - -jquerybbq -dir - -contextmenu -dir - -embedapi.html -file - - - - -2012-03-23T10:42:00.000000Z -e1814119a6d8e5c220c2bec48b2caba3 -2010-09-20T18:55:10.937330Z -1734 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -1875 - -svg-editor.css -file - - - - -2012-05-16T23:42:07.000000Z -f6b582f9b1e0d9f92a13ae04f929f1d2 -2012-03-31T18:02:08.849195Z -2076 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -24142 - -history.js -file - - - - -2012-03-23T10:42:00.000000Z -921cd902514fbf0228660fb473ac201b -2011-02-10T19:09:35.759706Z -1993 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -20219 - -spinbtn -dir - diff --git a/editor/.svn/prop-base/browser-not-supported.html.svn-base b/editor/.svn/prop-base/browser-not-supported.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/editor/.svn/prop-base/browser-not-supported.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/editor/.svn/prop-base/browser.js.svn-base b/editor/.svn/prop-base/browser.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/browser.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/draw.js.svn-base b/editor/.svn/prop-base/draw.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/draw.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/embedapi.html.svn-base b/editor/.svn/prop-base/embedapi.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/editor/.svn/prop-base/embedapi.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/editor/.svn/prop-base/embedapi.js.svn-base b/editor/.svn/prop-base/embedapi.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/embedapi.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/history.js.svn-base b/editor/.svn/prop-base/history.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/history.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/jquery.js.svn-base b/editor/.svn/prop-base/jquery.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/jquery.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/math.js.svn-base b/editor/.svn/prop-base/math.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/math.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/path.js.svn-base b/editor/.svn/prop-base/path.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/path.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/sanitize.js.svn-base b/editor/.svn/prop-base/sanitize.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/sanitize.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/select.js.svn-base b/editor/.svn/prop-base/select.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/select.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/svg-editor.css.svn-base b/editor/.svn/prop-base/svg-editor.css.svn-base deleted file mode 100644 index 69cd899..0000000 --- a/editor/.svn/prop-base/svg-editor.css.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 8 -text/css -END diff --git a/editor/.svn/prop-base/svg-editor.html.svn-base b/editor/.svn/prop-base/svg-editor.html.svn-base deleted file mode 100644 index d356868..0000000 --- a/editor/.svn/prop-base/svg-editor.html.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -text/html -END diff --git a/editor/.svn/prop-base/svg-editor.js.svn-base b/editor/.svn/prop-base/svg-editor.js.svn-base deleted file mode 100644 index 2f297d1..0000000 --- a/editor/.svn/prop-base/svg-editor.js.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 12 -svn:keywords -V 3 -Rev -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/svg-editor.manifest.svn-base b/editor/.svn/prop-base/svg-editor.manifest.svn-base deleted file mode 100644 index e5b8705..0000000 --- a/editor/.svn/prop-base/svg-editor.manifest.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 19 -text/cache-manifest -END diff --git a/editor/.svn/prop-base/svgcanvas.js.svn-base b/editor/.svn/prop-base/svgcanvas.js.svn-base deleted file mode 100644 index 2f297d1..0000000 --- a/editor/.svn/prop-base/svgcanvas.js.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 12 -svn:keywords -V 3 -Rev -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/svgtransformlist.js.svn-base b/editor/.svn/prop-base/svgtransformlist.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/svgtransformlist.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/svgutils.js.svn-base b/editor/.svn/prop-base/svgutils.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/svgutils.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/prop-base/units.js.svn-base b/editor/.svn/prop-base/units.js.svn-base deleted file mode 100644 index 530636b..0000000 --- a/editor/.svn/prop-base/units.js.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/.svn/text-base/browser-not-supported.html.svn-base b/editor/.svn/text-base/browser-not-supported.html.svn-base deleted file mode 100644 index 3010fcf..0000000 --- a/editor/.svn/text-base/browser-not-supported.html.svn-base +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -Browser does not support SVG | SVG-edit - - - -
-SVG-edit logo
-

Sorry, but your browser does not support SVG. Below is a list of alternate browsers and versions that support SVG and SVG-edit (from caniuse.com).

-

Try the latest version of Firefox, Google Chrome, Safari, Opera or Internet Explorer.

-

If you are unable to install one of these and must use an old version of Internet Explorer, you can install the Google Chrome Frame plugin.

- - - -
- - - diff --git a/editor/.svn/text-base/browser.js.svn-base b/editor/.svn/text-base/browser.js.svn-base deleted file mode 100644 index ff9441a..0000000 --- a/editor/.svn/text-base/browser.js.svn-base +++ /dev/null @@ -1,178 +0,0 @@ -/** - * Package: svgedit.browser - * - * Licensed under the Apache License, Version 2 - * - * Copyright(c) 2010 Jeff Schiller - * Copyright(c) 2010 Alexis Deveria - */ - -// Dependencies: -// 1) jQuery (for $.alert()) - -var svgedit = svgedit || {}; - -(function() { - -if (!svgedit.browser) { - svgedit.browser = {}; -} -var supportsSvg_ = (function() { - return !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect; -})(); -svgedit.browser.supportsSvg = function() { return supportsSvg_; } -if(!svgedit.browser.supportsSvg()) { - window.location = "browser-not-supported.html"; -} -else{ - -var svgns = 'http://www.w3.org/2000/svg'; -var userAgent = navigator.userAgent; -var svg = document.createElementNS(svgns, 'svg'); - -// Note: Browser sniffing should only be used if no other detection method is possible -var isOpera_ = !!window.opera; -var isWebkit_ = userAgent.indexOf("AppleWebKit") >= 0; -var isGecko_ = userAgent.indexOf('Gecko/') >= 0; -var isIE_ = userAgent.indexOf('MSIE') >= 0; -var isChrome_ = userAgent.indexOf('Chrome/') >= 0; -var isWindows_ = userAgent.indexOf('Windows') >= 0; -var isMac_ = userAgent.indexOf('Macintosh') >= 0; - -var supportsSelectors_ = (function() { - return !!svg.querySelector; -})(); - -var supportsXpath_ = (function() { - return !!document.evaluate; -})(); - -// segList functions (for FF1.5 and 2.0) -var supportsPathReplaceItem_ = (function() { - var path = document.createElementNS(svgns, 'path'); - path.setAttribute('d','M0,0 10,10'); - var seglist = path.pathSegList; - var seg = path.createSVGPathSegLinetoAbs(5,5); - try { - seglist.replaceItem(seg, 0); - return true; - } catch(err) {} - return false; -})(); - -var supportsPathInsertItemBefore_ = (function() { - var path = document.createElementNS(svgns,'path'); - path.setAttribute('d','M0,0 10,10'); - var seglist = path.pathSegList; - var seg = path.createSVGPathSegLinetoAbs(5,5); - try { - seglist.insertItemBefore(seg, 0); - return true; - } catch(err) {} - return false; -})(); - -// text character positioning (for IE9) -var supportsGoodTextCharPos_ = (function() { - var retValue = false; - var svgroot = document.createElementNS(svgns, 'svg'); - var svgcontent = document.createElementNS(svgns, 'svg'); - document.documentElement.appendChild(svgroot); - svgcontent.setAttribute('x', 5); - svgroot.appendChild(svgcontent); - var text = document.createElementNS(svgns,'text'); - text.textContent = 'a'; - svgcontent.appendChild(text); - var pos = text.getStartPositionOfChar(0).x; - document.documentElement.removeChild(svgroot); - return (pos === 0); -})(); - -var supportsPathBBox_ = (function() { - var svgcontent = document.createElementNS(svgns, 'svg'); - document.documentElement.appendChild(svgcontent); - var path = document.createElementNS(svgns, 'path'); - path.setAttribute('d','M0,0 C0,0 10,10 10,0'); - svgcontent.appendChild(path); - var bbox = path.getBBox(); - document.documentElement.removeChild(svgcontent); - return (bbox.height > 4 && bbox.height < 5); -})(); - -// Support for correct bbox sizing on groups with horizontal/vertical lines -var supportsHVLineContainerBBox_ = (function() { - var svgcontent = document.createElementNS(svgns, 'svg'); - document.documentElement.appendChild(svgcontent); - var path = document.createElementNS(svgns, 'path'); - path.setAttribute('d','M0,0 10,0'); - var path2 = document.createElementNS(svgns, 'path'); - path2.setAttribute('d','M5,0 15,0'); - var g = document.createElementNS(svgns, 'g'); - g.appendChild(path); - g.appendChild(path2); - svgcontent.appendChild(g); - var bbox = g.getBBox(); - document.documentElement.removeChild(svgcontent); - // Webkit gives 0, FF gives 10, Opera (correctly) gives 15 - return (bbox.width == 15); -})(); - -var supportsEditableText_ = (function() { - // TODO: Find better way to check support for this - return isOpera_; -})(); - -var supportsGoodDecimals_ = (function() { - // Correct decimals on clone attributes (Opera < 10.5/win/non-en) - var rect = document.createElementNS(svgns, 'rect'); - rect.setAttribute('x',.1); - var crect = rect.cloneNode(false); - var retValue = (crect.getAttribute('x').indexOf(',') == -1); - if(!retValue) { - $.alert("NOTE: This version of Opera is known to contain bugs in SVG-edit.\n\ - Please upgrade to the latest version in which the problems have been fixed."); - } - return retValue; -})(); - -var supportsNonScalingStroke_ = (function() { - var rect = document.createElementNS(svgns, 'rect'); - rect.setAttribute('style','vector-effect:non-scaling-stroke'); - return rect.style.vectorEffect === 'non-scaling-stroke'; -})(); - -var supportsNativeSVGTransformLists_ = (function() { - var rect = document.createElementNS(svgns, 'rect'); - var rxform = rect.transform.baseVal; - - var t1 = svg.createSVGTransform(); - rxform.appendItem(t1); - return rxform.getItem(0) == t1; -})(); - -// Public API - -svgedit.browser.isOpera = function() { return isOpera_; } -svgedit.browser.isWebkit = function() { return isWebkit_; } -svgedit.browser.isGecko = function() { return isGecko_; } -svgedit.browser.isIE = function() { return isIE_; } -svgedit.browser.isChrome = function() { return isChrome_; } -svgedit.browser.isWindows = function() { return isWindows_; } -svgedit.browser.isMac = function() { return isMac_; } - -svgedit.browser.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/editor/.svn/text-base/contextmenu.js.svn-base b/editor/.svn/text-base/contextmenu.js.svn-base deleted file mode 100644 index 0d5dd34..0000000 --- a/editor/.svn/text-base/contextmenu.js.svn-base +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Package: svgedit.contextmenu - * - * Licensed under the Apache License, Version 2 - * - * Author: Adam Bender - */ -// Dependencies: -// 1) jQuery (for dom injection of context menus) -var svgedit = svgedit || {}; -(function() { - var self = this; - if (!svgedit.contextmenu) { - svgedit.contextmenu = {}; - } - self.contextMenuExtensions = {} - var addContextMenuItem = function(menuItem) { - // menuItem: {id, label, shortcut, action} - if (!menuItemIsValid(menuItem)) { - console - .error("Menu items must be defined and have at least properties: id, label, action, where action must be a function"); - return; - } - if (menuItem.id in self.contextMenuExtensions) { - console.error('Cannot add extension "' + menuItem.id - + '", an extension by that name already exists"'); - return; - } - // Register menuItem action, see below for deferred menu dom injection - console.log("Registed contextmenu item: {id:"+ menuItem.id+", label:"+menuItem.label+"}"); - self.contextMenuExtensions[menuItem.id] = menuItem; - //TODO: Need to consider how to handle custom enable/disable behavior - } - var hasCustomHandler = function(handlerKey) { - return self.contextMenuExtensions[handlerKey] && true; - } - var getCustomHandler = function(handlerKey) { - return self.contextMenuExtensions[handlerKey].action; - } - var injectExtendedContextMenuItemIntoDom = function(menuItem) { - if (Object.keys(self.contextMenuExtensions).length == 0) { - // all menuItems appear at the bottom of the menu in their own container. - // if this is the first extension menu we need to add the separator. - $("#cmenu_canvas").append("
  • "); - } - var shortcut = menuItem.shortcut || ""; - $("#cmenu_canvas").append("
  • " - + menuItem.label + "" - + shortcut + "
  • "); - } - - var menuItemIsValid = function(menuItem) { - return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action == 'function'; - } - - // Defer injection to wait out initial menu processing. This probably goes away once all context - // menu behavior is brought here. - svgEditor.ready(function() { - for (menuItem in contextMenuExtensions) { - injectExtendedContextMenuItemIntoDom(contextMenuExtensions[menuItem]); - } - }); - svgedit.contextmenu.resetCustomMenus = function(){self.contextMenuExtensions = {}} - svgedit.contextmenu.add = addContextMenuItem; - svgedit.contextmenu.hasCustomHandler = hasCustomHandler; - svgedit.contextmenu.getCustomHandler = getCustomHandler; -})(); diff --git a/editor/.svn/text-base/draw.js.svn-base b/editor/.svn/text-base/draw.js.svn-base deleted file mode 100644 index 8db3138..0000000 --- a/editor/.svn/text-base/draw.js.svn-base +++ /dev/null @@ -1,528 +0,0 @@ -/** - * Package: svgedit.draw - * - * Licensed under the Apache License, Version 2 - * - * Copyright(c) 2011 Jeff Schiller - */ - -// Dependencies: -// 1) jQuery -// 2) browser.js -// 3) svgutils.js - -var svgedit = svgedit || {}; - -(function() { - -if (!svgedit.draw) { - svgedit.draw = {}; -} - -var svg_ns = "http://www.w3.org/2000/svg"; -var se_ns = "http://svg-edit.googlecode.com"; -var xmlns_ns = "http://www.w3.org/2000/xmlns/"; - -var visElems = 'a,circle,ellipse,foreignObject,g,image,line,path,polygon,polyline,rect,svg,text,tspan,use'; -var visElems_arr = visElems.split(','); - -var RandomizeModes = { - LET_DOCUMENT_DECIDE: 0, - ALWAYS_RANDOMIZE: 1, - NEVER_RANDOMIZE: 2 -}; -var randomize_ids = RandomizeModes.LET_DOCUMENT_DECIDE; - -/** - * This class encapsulates the concept of a layer in the drawing - * @param name {String} Layer name - * @param child {SVGGElement} Layer SVG group. - */ -svgedit.draw.Layer = function(name, group) { - this.name_ = name; - this.group_ = group; -}; - -svgedit.draw.Layer.prototype.getName = function() { - return this.name_; -}; - -svgedit.draw.Layer.prototype.getGroup = function() { - return this.group_; -}; - - -// Called to ensure that drawings will or will not have randomized ids. -// The current_drawing will have its nonce set if it doesn't already. -// -// Params: -// enableRandomization - flag indicating if documents should have randomized ids -svgedit.draw.randomizeIds = function(enableRandomization, current_drawing) { - randomize_ids = enableRandomization == false ? - RandomizeModes.NEVER_RANDOMIZE : - RandomizeModes.ALWAYS_RANDOMIZE; - - if (randomize_ids == RandomizeModes.ALWAYS_RANDOMIZE && !current_drawing.getNonce()) { - current_drawing.setNonce(Math.floor(Math.random() * 100001)); - } else if (randomize_ids == RandomizeModes.NEVER_RANDOMIZE && current_drawing.getNonce()) { - current_drawing.clearNonce(); - } -}; - -/** - * This class encapsulates the concept of a SVG-edit drawing - * - * @param svgElem {SVGSVGElement} The SVG DOM Element that this JS object - * encapsulates. If the svgElem has a se:nonce attribute on it, then - * IDs will use the nonce as they are generated. - * @param opt_idPrefix {String} The ID prefix to use. Defaults to "svg_" - * if not specified. - */ -svgedit.draw.Drawing = function(svgElem, opt_idPrefix) { - if (!svgElem || !svgElem.tagName || !svgElem.namespaceURI || - svgElem.tagName != 'svg' || svgElem.namespaceURI != svg_ns) { - throw "Error: svgedit.draw.Drawing instance initialized without a 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.} - */ - this.releasedNums = []; - - /** - * The z-ordered array of tuples containing layer names and elements. - * The first layer is the one at the bottom of the rendering. - * TODO: Turn this into an Array. - * @type {Array.>} - */ - 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 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 or 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/editor/.svn/text-base/embedapi.html.svn-base b/editor/.svn/text-base/embedapi.html.svn-base deleted file mode 100644 index 3db0364..0000000 --- a/editor/.svn/text-base/embedapi.html.svn-base +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - -
    - - - - diff --git a/editor/.svn/text-base/embedapi.js.svn-base b/editor/.svn/text-base/embedapi.js.svn-base deleted file mode 100644 index 8debfd6..0000000 --- a/editor/.svn/text-base/embedapi.js.svn-base +++ /dev/null @@ -1,173 +0,0 @@ -/* -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= 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/editor/.svn/text-base/jquery.js.svn-base b/editor/.svn/text-base/jquery.js.svn-base deleted file mode 100644 index 198b3ff..0000000 --- a/editor/.svn/text-base/jquery.js.svn-base +++ /dev/null @@ -1,4 +0,0 @@ -/*! 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"?"":"")+""),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;g0){if(c!=="border")for(;g=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)[^>]*$|#([\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(;j0)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(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?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
    a",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>",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="
    "+""+"
    ",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="
    t
    ",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="
    ",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-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=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=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=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;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?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;h0){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+~,(\[\\]+)+|[>+~])(\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;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=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 bc[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=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.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.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="

    ";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="
    ";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;h0)for(h=g;h=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-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:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_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
    ","
    "]),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>");try{for(var c=0,d=this.length;c1&&l0?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>");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]===""&&!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=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>/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("
    ").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=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-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/editor/.svn/text-base/math.js.svn-base b/editor/.svn/text-base/math.js.svn-base deleted file mode 100644 index 86ee4cf..0000000 --- a/editor/.svn/text-base/math.js.svn-base +++ /dev/null @@ -1,246 +0,0 @@ -/** - * 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/editor/.svn/text-base/path.js.svn-base b/editor/.svn/text-base/path.js.svn-base deleted file mode 100644 index e490182..0000000 --- a/editor/.svn/text-base/path.js.svn-base +++ /dev/null @@ -1,980 +0,0 @@ -/** - * 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 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 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/editor/.svn/text-base/sanitize.js.svn-base b/editor/.svn/text-base/sanitize.js.svn-base deleted file mode 100644 index 5924a59..0000000 --- a/editor/.svn/text-base/sanitize.js.svn-base +++ /dev/null @@ -1,273 +0,0 @@ -/** - * 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 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/editor/.svn/text-base/select.js.svn-base b/editor/.svn/text-base/select.js.svn-base deleted file mode 100644 index c13f291..0000000 --- a/editor/.svn/text-base/select.js.svn-base +++ /dev/null @@ -1,529 +0,0 @@ -/** - * 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 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 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/editor/.svn/text-base/svg-editor.css.svn-base b/editor/.svn/text-base/svg-editor.css.svn-base deleted file mode 100644 index a56e603..0000000 --- a/editor/.svn/text-base/svg-editor.css.svn-base +++ /dev/null @@ -1,1419 +0,0 @@ -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/editor/.svn/text-base/svg-editor.html.svn-base b/editor/.svn/text-base/svg-editor.html.svn-base deleted file mode 100644 index 8dce445..0000000 --- a/editor/.svn/text-base/svg-editor.html.svn-base +++ /dev/null @@ -1,790 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SVG-edit - - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    - -
    - -
    -
    - -
    -
    -

    Layers

    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - - - - -
    Layer 1
    - Move elements to: - - -
    L a y e r s
    - - -
    -
    - - - -
    - - -
    - - - -
    - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    - - - -
    - - -
    - - - -
    - - -
    -
    - - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    - -
    -
    - -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    - - -
    -
    - -
    -
    -
    B
    -
    i
    -
    - -
    - - -
    - - - - - -
    - - -
    -
    - - - - -
    - -
    - -
    - -
    -
    -
    - - -
    - -
    - -
    -
    - -
    - - - - -
    -
    -
    -
    -
    -
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - - -
    - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - -
    - >> -
    - -
    -
    - -
    - - -
    - -
    - -
    -
    -
    - -
    - - - - - -
    - - - -
    -
    -
    -
    - - -
    -
    -

    Copy the contents of this box into a text editor, then save the file with a .svg extension.

    - -
    -
    - -
    -
    -
    - - -
    -
    -
    -
    - - -
    - - -
    - Image Properties - - -
    - Canvas Dimensions - - - - - - -
    - -
    - Included Images - - -
    -
    - -
    -
    - -
    -
    -
    -
    - - -
    - -
    - Editor Preferences - - - - - -
    - Editor Background -
    - -

    Note: Background will not be saved with image.

    -
    - -
    - Grid - - -
    - -
    - Units & Rulers - - - - -
    - -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/editor/.svn/text-base/svg-editor.js.svn-base b/editor/.svn/text-base/svg-editor.js.svn-base deleted file mode 100644 index 54f5a66..0000000 --- a/editor/.svn/text-base/svg-editor.js.svn-base +++ /dev/null @@ -1,4882 +0,0 @@ -/* - * 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('

    '+msg.replace(/\n/g,'

    ')+'

    ') - .toggleClass('prompt',(type=='prompt')); - btn_holder.empty(); - - var ok = $('').appendTo(btn_holder); - - if(type != 'alert') { - $('') - .appendTo(btn_holder) - .click(function() { box.hide();callback(false)}); - } - - if(type == 'prompt') { - var input = $('').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 = '\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 - if(ua.indexOf('Gecko/') !== -1) { - if(svg.indexOf('', {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 = '' + svgCanvas.getCurrentDrawing().getCurrentLayerName() + ''; - - $(context).parentsUntil('#svgcontent > g').andSelf().each(function() { - if(this.id) { - str += ' > ' + this.id; - if(this !== context) { - link_str += ' > ' + this.id + ''; - } 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 = $('
    ',{ - '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 = $('
    ', {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 = '
    ' + tool.id + '
    '; - var div = $(html).appendTo(panel); - if (tool.events) { - $.each(tool.events, function(evt, func) { - $(div).bind(evt, func); - }); - } - break; - case 'select': - var html = '' - + '"; - // 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 = ''; - - var list = $('
      ').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 = '' - + '' - + tool.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 = $(''); - } 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) - $('
      ', {id: btn.panel}).appendTo("#tools_top"); - break; - case 'app_menu': - cls = ''; - parent = '#main_menu ul'; - break; - } - - var button = $((btn.list || btn.type == 'app_menu')?'
    • ':'
      ') - .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($('
      ',{'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('
      ').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($('
      ',{'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 = '
      ' - $.each(palette, function(i,item){ - str += '
      '; - }); - $('#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 += '
      '; - }); - $('#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; - $('

      ').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, selectedElement); - - 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); - } - this.blur(); - }); - - // Prevent selection of elements when shift-clicking - $('#palette').mouseover(function() { - var inp = $(''); - $(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," + 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/editor/.svn/text-base/svg-editor.manifest.svn-base b/editor/.svn/text-base/svg-editor.manifest.svn-base deleted file mode 100644 index b156374..0000000 --- a/editor/.svn/text-base/svg-editor.manifest.svn-base +++ /dev/null @@ -1,121 +0,0 @@ -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/editor/.svn/text-base/svgcanvas.js.svn-base b/editor/.svn/text-base/svgcanvas.js.svn-base deleted file mode 100644 index f8ac21e..0000000 --- a/editor/.svn/text-base/svgcanvas.js.svn-base +++ /dev/null @@ -1,8771 +0,0 @@ -/* - * 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 == 'none' ? '' : '#') + 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: https://code.google.com/p/svg-edit/issues/detail?id=904 - //Chromium issue: https://code.google.com/p/chromium/issues/detail?id=114625 - // TODO: Remove this workaround (all isChrome blocks) once vendor fixes the issue - var isChrome = svgedit.browser.isChrome(); - if(isChrome) { - 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(isChrome) 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(isChrome) 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 = $(defs).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/editor/.svn/text-base/svgtransformlist.js.svn-base b/editor/.svn/text-base/svgtransformlist.js.svn-base deleted file mode 100644 index 5c291ca..0000000 --- a/editor/.svn/text-base/svgtransformlist.js.svn-base +++ /dev/null @@ -1,291 +0,0 @@ -/** - * 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/editor/.svn/text-base/svgutils.js.svn-base b/editor/.svn/text-base/svgutils.js.svn-base deleted file mode 100644 index a3a6b49..0000000 --- a/editor/.svn/text-base/svgutils.js.svn-base +++ /dev/null @@ -1,648 +0,0 @@ -/** - * 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 "&" -// -// 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: "&" 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(typeof seg.x == 'undefined') 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') { - 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); -}; - - -})(); diff --git a/editor/.svn/text-base/units.js.svn-base b/editor/.svn/text-base/units.js.svn-base deleted file mode 100644 index f2b30e7..0000000 --- a/editor/.svn/text-base/units.js.svn-base +++ /dev/null @@ -1,281 +0,0 @@ -/** - * 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, selectedElement) { - 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 || elem === selectedElement); - } catch(e) {} - return result; - } else { - valid = true; - } - - return valid; -}; - - -})(); \ No newline at end of file diff --git a/editor/.svn/tmp/svg-editor.js.tmp b/editor/.svn/tmp/svg-editor.js.tmp deleted file mode 100644 index 2590eb6..0000000 --- a/editor/.svn/tmp/svg-editor.js.tmp +++ /dev/null @@ -1,4889 +0,0 @@ -/* - * 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'; - if(btn.class) { - cls += " " + btn.class; - } - 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, selectedElement); - if(!valid) { - $.alert(uiStrings.notification.invalidAttrValGiven); - this.value = selectedElement.getAttribute(attr); - return false; - } - else{ - this.blur() - } - - 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); - } - this.blur(); - }); - - // 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/editor/.svn/tmp/svgcanvas.js.2.tmp b/editor/.svn/tmp/svgcanvas.js.2.tmp deleted file mode 100644 index 04cef36..0000000 --- a/editor/.svn/tmp/svgcanvas.js.2.tmp +++ /dev/null @@ -1,8802 +0,0 @@ -/* - * 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 == 'none' ? '' : '#') + 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": - var tspan = selected.querySelectorAll('tspan'); - var i = tspan.length - while(i--) { - var selX = convertToNum("x", selected.getAttribute('x')); - var tx = convertToNum("x", tspan[i].getAttribute('x')); - var selY = convertToNum("y", selected.getAttribute('y')); - var ty = convertToNum("y", tspan[i].getAttribute('y')); - var offset = new Object(); - if (!isNaN(selX) && !isNaN(tx) && selX!=0 && tx!=0 && changes.x) - offset.x = changes.x - (selX - tx); - if (!isNaN(selY) && !isNaN(ty) && selY!=0 && ty!=0 && changes.y) - offset.y = changes.y - (selY - ty); - if (offset.x || offset.y) - assignAttributes(tspan[i], offset, 1000, true); - } - finishUp(); - break; - 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": - case "tspan": - 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: https://code.google.com/p/svg-edit/issues/detail?id=904 - //Chromium issue: https://code.google.com/p/chromium/issues/detail?id=114625 - // TODO: Remove this workaround (all isChrome blocks) once vendor fixes the issue - var isChrome = svgedit.browser.isChrome(); - if(isChrome) { - 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(isChrome) 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(isChrome) 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(evt, 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(evt, 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)); - - if (!evt.altKey) { - pointGrip2.setAttribute('cx', alt_x * current_zoom); - pointGrip2.setAttribute('cy', alt_y * current_zoom); - pointGrip2.setAttribute('display', 'inline'); - } - - var ctrlLine = svgedit.path.getCtrlLine(1); - var ctrlLine2 = svgedit.path.getCtrlLine(2); - assignAttributes(ctrlLine, { - x1: mouse_x, - y1: mouse_y, - x2: pt_x, - y2: pt_y, - display: 'inline' - }); - - if (!evt.altKey) { - assignAttributes(ctrlLine2, { - x1: alt_x * current_zoom, - y1: alt_y * current_zoom, - x2: pt_x, - y2: pt_y, - 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 = $(defs).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/editor/.svn/tmp/svgcanvas.js.tmp b/editor/.svn/tmp/svgcanvas.js.tmp deleted file mode 100644 index f616f1c..0000000 --- a/editor/.svn/tmp/svgcanvas.js.tmp +++ /dev/null @@ -1,8789 +0,0 @@ -/* - * 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 == 'none' ? '' : '#') + 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": - var tspan = selected.querySelectorAll('tspan'); - var i = tspan.length - while(i--) { - var selX = convertToNum("x", selected.getAttribute('x')); - var tx = convertToNum("x", tspan[i].getAttribute('x')); - var selY = convertToNum("y", selected.getAttribute('y')); - var ty = convertToNum("y", tspan[i].getAttribute('y')); - var offset = new Object(); - if (!isNaN(selX) && !isNaN(tx) && selX!=0 && tx!=0 && changes.x) - offset.x = changes.x - (selX - tx); - if (!isNaN(selY) && !isNaN(ty) && selY!=0 && ty!=0 && changes.y) - offset.y = changes.y - (selY - ty); - if (offset.x || offset.y) - assignAttributes(tspan[i], offset, 1000, true); - } - finishUp(); - break; - 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": - case "tspan": - 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: https://code.google.com/p/svg-edit/issues/detail?id=904 - //Chromium issue: https://code.google.com/p/chromium/issues/detail?id=114625 - // TODO: Remove this workaround (all isChrome blocks) once vendor fixes the issue - var isChrome = svgedit.browser.isChrome(); - if(isChrome) { - 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(isChrome) 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(isChrome) 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 = $(defs).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/editor/.svn/tmp/svn-5Pzou7 b/editor/.svn/tmp/svn-5Pzou7 deleted file mode 100644 index eb80348..0000000 --- a/editor/.svn/tmp/svn-5Pzou7 +++ /dev/null @@ -1,4888 +0,0 @@ -/* - * 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'; - if(btn.class) { - cls += " " + btn.class; - } - 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; - } - else{ - this.blur() - } - - 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/editor/.svn/tmp/svn-B2AVSt b/editor/.svn/tmp/svn-B2AVSt deleted file mode 100644 index 348bd79..0000000 --- a/editor/.svn/tmp/svn-B2AVSt +++ /dev/null @@ -1,8788 +0,0 @@ -/* - * 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": - var tspan = selected.querySelectorAll('tspan'); - var i = tspan.length - while(i--) { - var selX = convertToNum("x", selected.getAttribute('x')); - var tx = convertToNum("x", tspan[i].getAttribute('x')); - var selY = convertToNum("y", selected.getAttribute('y')); - var ty = convertToNum("y", tspan[i].getAttribute('y')); - var offset = new Object(); - if (!isNaN(selX) && !isNaN(tx) && selX!=0 && tx!=0 && changes.x) - offset.x = changes.x - (selX - tx); - if (!isNaN(selY) && !isNaN(ty) && selY!=0 && ty!=0 && changes.y) - offset.y = changes.y - (selY - ty); - if (offset.x || offset.y) - assignAttributes(tspan[i], offset, 1000, true); - } - finishUp(); - break; - 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": - case "tspan": - 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/editor/.svn/tmp/svn-cIIsFs b/editor/.svn/tmp/svn-cIIsFs deleted file mode 100644 index 1d807e0..0000000 --- a/editor/.svn/tmp/svn-cIIsFs +++ /dev/null @@ -1,8802 +0,0 @@ -/* - * 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 == 'none' ? '' : '#') + 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": - var tspan = selected.querySelectorAll('tspan'); - var i = tspan.length - while(i--) { - var selX = convertToNum("x", selected.getAttribute('x')); - var tx = convertToNum("x", tspan[i].getAttribute('x')); - var selY = convertToNum("y", selected.getAttribute('y')); - var ty = convertToNum("y", tspan[i].getAttribute('y')); - var offset = new Object(); - if (!isNaN(selX) && !isNaN(tx) && selX!=0 && tx!=0 && changes.x) - offset.x = changes.x - (selX - tx); - if (!isNaN(selY) && !isNaN(ty) && selY!=0 && ty!=0 && changes.y) - offset.y = changes.y - (selY - ty); - if (offset.x || offset.y) - assignAttributes(tspan[i], offset, 1000, true); - } - finishUp(); - break; - 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": - case "tspan": - 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: https://code.google.com/p/svg-edit/issues/detail?id=904 - //Chromium issue: https://code.google.com/p/chromium/issues/detail?id=114625 - // TODO: Remove this workaround (all isChrome blocks) once vendor fixes the issue - var isChrome = svgedit.browser.isChrome(); - if(isChrome) { - 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(isChrome) 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(isChrome) 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(evt, 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(evt, 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)); - - if (!evt.altKey) { - pointGrip2.setAttribute('cx', alt_x * current_zoom); - pointGrip2.setAttribute('cy', alt_y * current_zoom); - pointGrip2.setAttribute('display', 'inline'); - } - - var ctrlLine = svgedit.path.getCtrlLine(1); - var ctrlLine2 = svgedit.path.getCtrlLine(2); - assignAttributes(ctrlLine, { - x1: mouse_x, - y1: mouse_y, - x2: pt_x, - y2: pt_y, - display: 'inline' - }); - - if (!evt.altKey) { - assignAttributes(ctrlLine2, { - x1: alt_x * current_zoom, - y1: alt_y * current_zoom, - x2: pt_x, - y2: pt_y, - 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 = $(defs).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/editor/.svn/tmp/svn-y17CBr b/editor/.svn/tmp/svn-y17CBr deleted file mode 100644 index f2b30e7..0000000 --- a/editor/.svn/tmp/svn-y17CBr +++ /dev/null @@ -1,281 +0,0 @@ -/** - * 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, selectedElement) { - 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 || elem === selectedElement); - } catch(e) {} - return result; - } else { - valid = true; - } - - return valid; -}; - - -})(); \ No newline at end of file diff --git a/editor/.svn/tmp/units.js.tmp b/editor/.svn/tmp/units.js.tmp deleted file mode 100644 index 1e22a7f..0000000 --- a/editor/.svn/tmp/units.js.tmp +++ /dev/null @@ -1,285 +0,0 @@ -/** - * 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, selectedElement) { - 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); -<<<<<<< .mine - result = (elem == null || svgCanvas.getSelectedElems()[0].id == val); -======= - result = (elem == null || elem === selectedElement); ->>>>>>> .r2083 - } catch(e) {} - return result; - } else { - valid = true; - } - - return valid; -}; - - -})(); \ No newline at end of file diff --git a/editor/canvg/.svn/all-wcprops b/editor/canvg/.svn/all-wcprops deleted file mode 100644 index 14054cd..0000000 --- a/editor/canvg/.svn/all-wcprops +++ /dev/null @@ -1,17 +0,0 @@ -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/editor/canvg/.svn/entries b/editor/canvg/.svn/entries deleted file mode 100644 index 9706749..0000000 --- a/editor/canvg/.svn/entries +++ /dev/null @@ -1,96 +0,0 @@ -10 - -dir -2083 -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-23T10:41:56.000000Z -cf0b2072b7361395d5537e266b8333c0 -2010-05-03T23:29:13.086772Z -1563 -rusnakp - - - - - - - - - - - - - - - - - - - - - -8753 - -canvg.js -file - - - - -2012-03-23T10:41:56.000000Z -feff6e5b21c3177f5a0291b4593229d1 -2012-03-20T04:57:23.167453Z -2064 -asyazwan@gmail.com - - - - - - - - - - - - - - - - - - - - - -88319 - diff --git a/editor/canvg/.svn/text-base/canvg.js.svn-base b/editor/canvg/.svn/text-base/canvg.js.svn-base deleted file mode 100644 index 7b24a38..0000000 --- a/editor/canvg/.svn/text-base/canvg.js.svn-base +++ /dev/null @@ -1,2620 +0,0 @@ -/* - * canvg.js - Javascript SVG parser and renderer on Canvas - * MIT Licensed - * Gabe Lerner (gabelerner@gmail.com) - * http://code.google.com/p/canvg/ - * - * Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/ - */ -if(!window.console) { - window.console = {}; - window.console.log = function(str) {}; - window.console.dir = function(str) {}; -} - -if(!Array.prototype.indexOf){ - Array.prototype.indexOf = function(obj){ - for(var i=0; i<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/editor/canvg/.svn/text-base/rgbcolor.js.svn-base b/editor/canvg/.svn/text-base/rgbcolor.js.svn-base deleted file mode 100644 index 108bbae..0000000 --- a/editor/canvg/.svn/text-base/rgbcolor.js.svn-base +++ /dev/null @@ -1,287 +0,0 @@ -/** - * 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/editor/contextmenu/.svn/all-wcprops b/editor/contextmenu/.svn/all-wcprops deleted file mode 100644 index ba58a6a..0000000 --- a/editor/contextmenu/.svn/all-wcprops +++ /dev/null @@ -1,11 +0,0 @@ -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/editor/contextmenu/.svn/entries b/editor/contextmenu/.svn/entries deleted file mode 100644 index c948f05..0000000 --- a/editor/contextmenu/.svn/entries +++ /dev/null @@ -1,62 +0,0 @@ -10 - -dir -2083 -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-23T10:42:00.000000Z -9dd37a7d16d1fbec5f7687de54f697ed -2012-03-20T08:58:24.542557Z -2065 -asyazwan@gmail.com -has-props - - - - - - - - - - - - - - - - - - - - -6314 - diff --git a/editor/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base b/editor/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base deleted file mode 100644 index 931becf..0000000 --- a/editor/contextmenu/.svn/prop-base/jquery.contextMenu.js.svn-base +++ /dev/null @@ -1,9 +0,0 @@ -K 14 -svn:executable -V 1 -* -K 13 -svn:mime-type -V 15 -text/javascript -END diff --git a/editor/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base b/editor/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base deleted file mode 100644 index 7612601..0000000 --- a/editor/contextmenu/.svn/text-base/jquery.contextMenu.js.svn-base +++ /dev/null @@ -1,203 +0,0 @@ -// jQuery Context Menu Plugin -// -// Version 1.01 -// -// Cory S.N. LaViska -// A Beautiful Site (http://abeautifulsite.net/) -// Modified by Alexis Deveria -// -// More info: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/ -// -// Terms of Use -// -// This plugin is dual-licensed under the GNU General Public License -// and the MIT License and is copyright A Beautiful Site, LLC. -// -if(jQuery)( function() { - var win = $(window); - var doc = $(document); - - $.extend($.fn, { - - contextMenu: function(o, callback) { - // Defaults - if( o.menu == undefined ) return false; - if( o.inSpeed == undefined ) o.inSpeed = 150; - if( o.outSpeed == undefined ) o.outSpeed = 75; - // 0 needs to be -1 for expected results (no fade) - if( o.inSpeed == 0 ) o.inSpeed = -1; - if( o.outSpeed == 0 ) o.outSpeed = -1; - // Loop each context menu - $(this).each( function() { - var el = $(this); - var offset = $(el).offset(); - - var menu = $('#' + o.menu); - - // Add contextMenu class - menu.addClass('contextMenu'); - // Simulate a true right click - $(this).bind( "mousedown", function(e) { - var evt = e; - $(this).mouseup( function(e) { - var srcElement = $(this); - srcElement.unbind('mouseup'); - 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/editor/extensions/.svn/all-wcprops b/editor/extensions/.svn/all-wcprops deleted file mode 100644 index 9f720e7..0000000 --- a/editor/extensions/.svn/all-wcprops +++ /dev/null @@ -1,143 +0,0 @@ -K 25 -svn:wc:ra_dav:version-url -V 42 -/svn/!svn/ver/2080/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-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-shapes.xml -K 25 -svn:wc:ra_dav:version-url -V 57 -/svn/!svn/ver/1627/trunk/editor/extensions/ext-shapes.xml -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 -filesave.php -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/1625/trunk/editor/extensions/filesave.php -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 -ext-arrows.js -K 25 -svn:wc:ra_dav:version-url -V 56 -/svn/!svn/ver/1962/trunk/editor/extensions/ext-arrows.js -END -fileopen.php -K 25 -svn:wc:ra_dav:version-url -V 55 -/svn/!svn/ver/2080/trunk/editor/extensions/fileopen.php -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 -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/editor/extensions/.svn/entries b/editor/extensions/.svn/entries deleted file mode 100644 index 6f21320..0000000 --- a/editor/extensions/.svn/entries +++ /dev/null @@ -1,816 +0,0 @@ -10 - -dir -2083 -http://svg-edit.googlecode.com/svn/trunk/editor/extensions -http://svg-edit.googlecode.com/svn - - - -2012-05-08T20:09:38.998857Z -2080 -rusnakp - - - - - - - - - - - - - - -eee81c28-f429-11dd-99c0-75d572ba1ddd - -ext-server_opensave.js -file - - - - -2012-03-23T10:41:57.000000Z -e69dd55aaab1e5af99c5c99d665a2757 -2010-08-31T20:31:58.323788Z -1695 -adeveria - - - - - - - - - - - - - - - - - - - - - -4797 - -ext-server_moinsave.js -file - - - - -2012-03-23T10:41:57.000000Z -4789dec74e5fcd6444d8611995d9481a -2011-07-27T15:39:43.344436Z -2038 -rusnakp - - - - - - - - - - - - - - - - - - - - - -1904 - -ext-shapes.xml -file - - - - -2012-03-23T10:41:57.000000Z -c8e9db99c7ae79c87a598e70bf09e958 -2010-07-09T19:12:30.540956Z -1627 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -1309 - -ext-imagelib.js -file - - - - -2012-03-23T10:41:57.000000Z -ebe71921273a1ff964b9227416e76201 -2011-01-04T21:12:00.201364Z -1897 -adeveria - - - - - - - - - - - - - - - - - - - - - -10859 - -filesave.php -file - - - - -2012-03-23T10:41:57.000000Z -825e8078b607c05589a894363462a15a -2010-07-06T13:57:05.603104Z -1625 -adeveria - - - - - - - - - - - - - - - - - - - - - -994 - -ext-helloworld.js -file - - - - -2012-03-23T10:41:57.000000Z -56c4292130f2faa311462f934dfa4281 -2010-03-12T16:42:15.633913Z -1458 -jacques.distler - - - - - - - - - - - - - - - - - - - - - -2173 - -ext-arrows.js -file - - - - -2012-03-23T10:41:57.000000Z -c1787399306899c2d7c18a2ee0aa3870 -2011-02-01T07:22:18.410641Z -1962 -codedread - - - - - - - - - - - - - - - - - - - - - -7012 - -shapelib -dir - -fileopen.php -file - - - - -2012-05-16T23:42:07.000000Z -0df24bf6697a4f1784513adfa2599edb -2012-05-08T20:09:38.998857Z -2080 -rusnakp - - - - - - - - - - - - - - - - - - - - - -736 - -ext-eyedropper.js -file - - - - -2012-03-23T10:41:57.000000Z -87dfbb341a3bb3e00764977f17bb9349 -2011-01-30T20:03:09.804905Z -1955 -adrianbjones@gmail.com - - - - - - - - - - - - - - - - - - - - - -3843 - -foreignobject-icons.xml -file - - - - -2012-03-23T10:41:57.000000Z -e388f2f9bfe836cdf3ca883435e4ca54 -2010-02-16T21:07:13.931777Z -1395 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -8310 - -ext-foreignobject.js -file - - - - -2012-03-23T10:41:57.000000Z -d344273f989aa9fec4ee3526b06f0b42 -2010-03-12T16:42:15.633913Z -1458 -jacques.distler - - - - - - - - - - - - - - - - - - - - - -7242 - -ext-closepath.js -file - - - - -2012-03-23T10:41:57.000000Z -29a6df6f9b83a5fe00c3a9766c38ae73 -2010-03-12T16:42:15.633913Z -1458 -jacques.distler - - - - - - - - - - - - - - - - - - - - - -2106 - -ext-shapes.js -file - - - - -2012-03-23T10:41:57.000000Z -a76a151f4ad1ffcb175040dc93232212 -2011-01-31T19:15:24.407588Z -1959 -adeveria - - - - - - - - - - - - - - - - - - - - - -17402 - -ext-grid.js -file - - - - -2012-03-23T10:41:57.000000Z -e0cd9e78b7b5ee5d5b239e85b6fad806 -2011-01-30T20:03:09.804905Z -1955 -adrianbjones@gmail.com - - - - - - - - - - - - - - - - - - - - - -5183 - -helloworld-icon.xml -file - - - - -2012-03-23T10:41:57.000000Z -29c6ce270b601a6e8f6cd8c0c5b7b486 -2010-03-30T15:28:57.570101Z -1489 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -1175 - -eyedropper.png -file - - - - -2012-03-23T10:41:57.000000Z -363cccac8ec7c7643155071b121f74be -2010-03-29T03:22:42.888655Z -1486 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -718 - -eyedropper-icon.xml -file - - - - -2012-03-23T10:41:57.000000Z -2eaae1095de257f84f89f55fa1c572aa -2010-03-29T03:22:42.888655Z -1486 -codedread -has-props - - - - - - - - - - - - - - - - - - - - -2374 - -ext-connector.js -file - - - - -2012-03-23T10:41:57.000000Z -87ec7e8fe4725526da90a599f96a600f -2011-01-30T20:03:09.804905Z -1955 -adrianbjones@gmail.com - - - - - - - - - - - - - - - - - - - - - -15865 - -ext-imagelib.xml -file - - - - -2012-03-23T10:41:57.000000Z -2ccb5de1a1633ff722367053e31b1641 -2010-08-31T20:31:58.323788Z -1695 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -1669 - -imagelib -dir - -grid-icon.xml -file - - - - -2012-03-23T10:41:57.000000Z -ca861b3ee775245ba733d003e50ec8be -2010-09-09T12:46:02.410793Z -1700 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -2045 - -closepath_icons.svg -file - - - - -2012-03-23T10:41:57.000000Z -09120b11642af2a7673340f21c10a4d3 -2010-02-20T16:43:52.567537Z -1418 -jacques.distler -has-props - - - - - - - - - - - - - - - - - - - - -1507 - -markers-icons.xml -file - - - - -2012-03-23T10:41:57.000000Z -40150c1095334bca44b22c5a86199332 -2010-06-08T18:40:13.061681Z -1590 -adeveria -has-props - - - - - - - - - - - - - - - - - - - - -5441 - -ext-markers.js -file - - - - -2012-03-23T10:41:57.000000Z -6fed1d40c72d96b7442b659d2e0d34cb -2010-06-17T17:57:24.714677Z -1602 -adeveria - - - - - - - - - - - - - - - - - - - - - -16220 - diff --git a/editor/extensions/.svn/prop-base/closepath_icons.svg.svn-base b/editor/extensions/.svn/prop-base/closepath_icons.svg.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/closepath_icons.svg.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/ext-imagelib.xml.svn-base b/editor/extensions/.svn/prop-base/ext-imagelib.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/ext-imagelib.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/ext-shapes.xml.svn-base b/editor/extensions/.svn/prop-base/ext-shapes.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/ext-shapes.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base b/editor/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/eyedropper-icon.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/eyedropper.png.svn-base b/editor/extensions/.svn/prop-base/eyedropper.png.svn-base deleted file mode 100644 index 6f145ce..0000000 --- a/editor/extensions/.svn/prop-base/eyedropper.png.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 9 -image/png -END diff --git a/editor/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base b/editor/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/foreignobject-icons.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/grid-icon.xml.svn-base b/editor/extensions/.svn/prop-base/grid-icon.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/grid-icon.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/helloworld-icon.xml.svn-base b/editor/extensions/.svn/prop-base/helloworld-icon.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/helloworld-icon.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/prop-base/markers-icons.xml.svn-base b/editor/extensions/.svn/prop-base/markers-icons.xml.svn-base deleted file mode 100644 index 91ca244..0000000 --- a/editor/extensions/.svn/prop-base/markers-icons.xml.svn-base +++ /dev/null @@ -1,5 +0,0 @@ -K 13 -svn:mime-type -V 13 -image/svg+xml -END diff --git a/editor/extensions/.svn/text-base/closepath_icons.svg.svn-base b/editor/extensions/.svn/text-base/closepath_icons.svg.svn-base deleted file mode 100644 index 7294f5e..0000000 --- a/editor/extensions/.svn/text-base/closepath_icons.svg.svn-base +++ /dev/null @@ -1,41 +0,0 @@ -<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 - - - - - - - - - - - - - - - - - Layer 1 - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/editor/extensions/.svn/text-base/ext-arrows.js.svn-base b/editor/extensions/.svn/text-base/ext-arrows.js.svn-base deleted file mode 100644 index 4bb5cd2..0000000 --- a/editor/extensions/.svn/text-base/ext-arrows.js.svn-base +++ /dev/null @@ -1,298 +0,0 @@ -/* - * 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: "---->", - start: "<----", - both: "<--->", - mid: "-->--", - mid_bk: "--<--" - }, - 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/editor/extensions/.svn/text-base/ext-closepath.js.svn-base b/editor/extensions/.svn/text-base/ext-closepath.js.svn-base deleted file mode 100644 index bf8e72c..0000000 --- a/editor/extensions/.svn/text-base/ext-closepath.js.svn-base +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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/editor/extensions/.svn/text-base/ext-connector.js.svn-base b/editor/extensions/.svn/text-base/ext-connector.js.svn-base deleted file mode 100644 index 3498c7f..0000000 --- a/editor/extensions/.svn/text-base/ext-connector.js.svn-base +++ /dev/null @@ -1,587 +0,0 @@ -/* - * 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 = $(' -

      -
      - -
      -
      -

      Layers

      -
      -
      -
      -
      -
      -
      -
      - - - - - - -
      Layer 1
      - Move elements to: - -
      -
      L a y e r s
      -
      - - - -
      - - -
      -
      - -
      -
      -
      -
      -
      - - -
      -
      -
      -
      -
      - - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - - - -
      -
      - - -
      -
      - - - - -
      -
      - - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - relative to: - -
      - -
      - -
      -
      -
      -
      - -
      -
      - - - - -
      -
      - - -
      -
      - -
      -
      - - - - -
      -
      - - - -
      -
      -
      - -
      -
      - - - - -
      -
      - - -
      -
      - -
      -
      - - - - -
      -
      - - - - -
      -
      - -
      -
      - - - - -
      -
      - - - - -
      -
      - -
      -
      B
      -
      i
      - -
      - - -
      - -
      - - -
      - -
      - -
      -
      - -
      - - - - - -
      -
      -
      - -
      - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - -
      - - -
      - zoom: - - -
      -
      - -
      - - - - - - - - - - - - -
      fill:
      100%
      stroke:
      100 %
      - - - -
      -
      - -
      -
      -
      - -
      - - -
      - -
      -
      -
      -
      -
      - -
      -
      -
      -
      -
      - -
      - -
      -
      -
      -
      - - -
      -
      - -
      -
      -
      - -
      -
      -
      -
      - - -
      - - -
      - Image Properties - - -
      - Canvas Dimensions - - - - - - -
      - -
      - Included Images - - -
      - - -
      - -
      - Editor Preferences - - - - - -
      - Editor Background -
      - -

      Note: Background will not be saved with image.

      -
      - -
      - -
      -
      - -
      -
      -
      -
      - Test message -
      -
      -
      -
      - - ]]> - - diff --git a/wave/.svn/text-base/wave.js.svn-base b/wave/.svn/text-base/wave.js.svn-base deleted file mode 100644 index c3723f7..0000000 --- a/wave/.svn/text-base/wave.js.svn-base +++ /dev/null @@ -1,147 +0,0 @@ -var shapetime = {}; -var nodelete = false; - -function stateUpdated() { - - // 'state' is an object of key-value pairs that map ids to JSON serialization of SVG elements - // 'keys' is an array of all the keys in the state - var state = wave.getState(); - var keys = state.getKeys(); - svgCanvas.each(function(e) { - // 'this' is the SVG DOM element node (ellipse, rect, etc) - // 'e' is an integer describing the position within the document - var k = this.id; - var v = state.get(k); - if(k == "selectorParentGroup" || k == "svgcontent"){ - //meh - }else if (v) { - var ob = JSON.parse(v); - if (ob) { - // do nothing - } else { - //var node = document.getElementById(k); - //if (node) node.parentNode.removeChild(node); - } - //keys.remove(k); - - } else if(!nodelete){ - - this.parentNode.removeChild(this); - } - }); - - // New nodes - for (var k in keys) { - var v = state.get(keys[k]); - var ob = JSON.parse(v); - if (ob){ - if(!shapetime[k] || ob.time > shapetime[k]){ - var a; - if(a = document.getElementById(k)){ - var attrs = get_attrs(a); - if(JSON.stringify(attrs) != JSON.stringify(ob.attr)){ - shapetime[k] = ob.time - svgCanvas.updateElementFromJson(ob) - } - }else{ - shapetime[k] = ob.time - svgCanvas.updateElementFromJson(ob) - } - - } - } - } -} - - -function getId(canvas, objnum) { - var id = wave.getViewer().getId().split("@")[0]; - var extra = SHA256(wave.getViewer().getId()); //in case the next step kills all the characters - for(var i = 0, l = id.length, n = ""; i < l; i++){ - if("abcdefghijklmnopqrstuvwxyz0123456789".indexOf(id[i]) != -1){ - n+=id[i]; - } - } - return "svg_"+n+"_"+extra.substr(0,5)+"_"+objnum; -} - -function get_attrs(a){ - var attrs = {}; - for(var i = a.length; i--;){ - var attr = a.item(i).nodeName; - if(",style,".indexOf(","+attr+",") == -1){ - attrs[attr] = a.item(i).nodeValue; - } - } - return attrs -} - -function main() { - $(document).ready(function(){ - if (wave && wave.isInWaveContainer()) { - wave.setStateCallback(function(){setTimeout(stateUpdated,10)}); - } - - var oldchanged = svgCanvas.bind("changed", function(canvas, elem){ - if(oldchanged)oldchanged.apply(this, [canvas,elem]); - - var delta = {} - $.each(elem, function(){ - - var attrs = {}; - var a = this.attributes; - if(a){ - var attrs = get_attrs(a) - var ob = {element: this.nodeName, attr: attrs}; - - ob.time = shapetime[this.id] = (new Date).getTime() - delta[this.id] = JSON.stringify(ob); - } - }) - - wave.getState().submitDelta(delta) - //sendDelta(canvas, elem) - - }); - //* - - var oldselected = svgCanvas.bind("selected", function(canvas, elem){ - - if(oldselected)oldselected.apply(this, [canvas,elem]); - - - var delta = {} - var deletions = 0; - $.each(elem, function(){ - if(!this.parentNode && this != window){ - delta[this.id] = null; - deletions ++ - } - }); - if(deletions > 0){ - wave.getState().submitDelta(delta) - } - }); - /// - svgCanvas.bind("cleared", function(){ - //alert("cleared") - var state = {}, keys = wave.getState().getKeys() - for(var i = 0; i < keys.length; i++){ - state[keys[i]] = null; - } - wave.getState().submitDelta(state) - }); - //*/ - svgCanvas.bind("getid", getId); - }) -} - - - -if(window.gadgets) gadgets.util.registerOnLoadHandler(main); - -//$(main) - -//and why not use my stuff? -function SHA256(b){function h(j,k){return(j>>e)+(k>>e)+((p=(j&o)+(k&o))>>e)<>>k|j<<32-k}var g=[],d,c=3,l=[2],p,i,q,a,m=[],n=[];i=b.length*8;for(var e=16,o=65535,r="";c<312;c++){for(d=l.length;d--&&c%l[d]!=0;);d<0&&l.push(c)}b+="\u0080";for(c=0;c<=i;c+=8)n[c>>5]|=(b.charCodeAt(c/8)&255)<<24-c%32;n[(i+64>>9<<4)+15]=i;for(c=8;c--;)m[c]=parseInt(Math.pow(l[c],0.5).toString(e).substr(2,8),e);for(c=0;c>>10,g[b-7]),f(g[b-15],7)^f(g[b-15],18)^g[b-15]>>>3),g[b-e]);i=h(h(h(h(a[7],f(a[4],6)^f(a[4],11)^f(a[4],25)),a[4]&a[5]^~a[4]&a[6]),parseInt(Math.pow(l[b],1/3).toString(e).substr(2,8),e)),g[b]);q=(f(a[0],2)^f(a[0],13)^f(a[0],22))+(a[0]&a[1]^a[0]&a[2]^a[1]&a[2]);for(d=8;--d;)a[d]=d==4?h(a[3],i):a[d-1];a[0]=h(i,q)}for(d=8;d--;)m[d]+=a[d]}for(c=0;c<8;c++)for(b=8;b--;)r+=(m[c]>>>b*4&15).toString(e);return r} - diff --git a/wave/json2.js b/wave/json2.js deleted file mode 100644 index 8a7793b..0000000 --- a/wave/json2.js +++ /dev/null @@ -1,481 +0,0 @@ -/* - http://www.JSON.org/json2.js - 2009-08-17 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. -*/ - -/*jslint evil: true */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - -"use strict"; - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -if (!this.JSON) { - this.JSON = {}; -} - -(function () { - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? - '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : - '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : - gap ? '[\n' + gap + - partial.join(',\n' + gap) + '\n' + - mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + - mind + '}' : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/. -test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). -replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). -replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); - diff --git a/wave/manifest.xml b/wave/manifest.xml deleted file mode 100644 index e85a2b9..0000000 --- a/wave/manifest.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/wave/svg-edit.xml b/wave/svg-edit.xml deleted file mode 100644 index e16ea7b..0000000 --- a/wave/svg-edit.xml +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      - -
      - -
      -
      - -
      -
      -

      Layers

      -
      -
      -
      -
      -
      -
      -
      - - - - - - -
      Layer 1
      - Move elements to: - -
      -
      L a y e r s
      -
      - - - -
      - - -
      -
      - -
      -
      -
      -
      -
      - - -
      -
      -
      -
      -
      - - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - - - -
      -
      - - -
      -
      - - - - -
      -
      - - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - relative to: - -
      - -
      - -
      -
      -
      -
      - -
      -
      - - - - -
      -
      - - -
      -
      - -
      -
      - - - - -
      -
      - - - -
      -
      -
      - -
      -
      - - - - -
      -
      - - -
      -
      - -
      -
      - - - - -
      -
      - - - - -
      -
      - -
      -
      - - - - -
      -
      - - - - -
      -
      - -
      -
      B
      -
      i
      - -
      - - -
      - -
      - - -
      - -
      - -
      -
      - -
      - - - - - -
      -
      -
      - -
      - -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      -
      - -
      - - -
      - zoom: - - -
      -
      - -
      - - - - - - - - - - - - -
      fill:
      100%
      stroke:
      100 %
      - - - -
      -
      - -
      -
      -
      - -
      - - -
      - -
      -
      -
      -
      -
      - -
      -
      -
      -
      -
      - -
      - -
      -
      -
      -
      - - -
      -
      - -
      -
      -
      - -
      -
      -
      -
      - - -
      - - -
      - Image Properties - - -
      - Canvas Dimensions - - - - - - -
      - -
      - Included Images - - -
      - - -
      - -
      - Editor Preferences - - - - - -
      - Editor Background -
      - -

      Note: Background will not be saved with image.

      -
      - -
      - -
      -
      - -
      -
      -
      -
      - Test message -
      -
      -
      -
      - - ]]> -
      -
      diff --git a/wave/wave.js b/wave/wave.js deleted file mode 100644 index c3723f7..0000000 --- a/wave/wave.js +++ /dev/null @@ -1,147 +0,0 @@ -var shapetime = {}; -var nodelete = false; - -function stateUpdated() { - - // 'state' is an object of key-value pairs that map ids to JSON serialization of SVG elements - // 'keys' is an array of all the keys in the state - var state = wave.getState(); - var keys = state.getKeys(); - svgCanvas.each(function(e) { - // 'this' is the SVG DOM element node (ellipse, rect, etc) - // 'e' is an integer describing the position within the document - var k = this.id; - var v = state.get(k); - if(k == "selectorParentGroup" || k == "svgcontent"){ - //meh - }else if (v) { - var ob = JSON.parse(v); - if (ob) { - // do nothing - } else { - //var node = document.getElementById(k); - //if (node) node.parentNode.removeChild(node); - } - //keys.remove(k); - - } else if(!nodelete){ - - this.parentNode.removeChild(this); - } - }); - - // New nodes - for (var k in keys) { - var v = state.get(keys[k]); - var ob = JSON.parse(v); - if (ob){ - if(!shapetime[k] || ob.time > shapetime[k]){ - var a; - if(a = document.getElementById(k)){ - var attrs = get_attrs(a); - if(JSON.stringify(attrs) != JSON.stringify(ob.attr)){ - shapetime[k] = ob.time - svgCanvas.updateElementFromJson(ob) - } - }else{ - shapetime[k] = ob.time - svgCanvas.updateElementFromJson(ob) - } - - } - } - } -} - - -function getId(canvas, objnum) { - var id = wave.getViewer().getId().split("@")[0]; - var extra = SHA256(wave.getViewer().getId()); //in case the next step kills all the characters - for(var i = 0, l = id.length, n = ""; i < l; i++){ - if("abcdefghijklmnopqrstuvwxyz0123456789".indexOf(id[i]) != -1){ - n+=id[i]; - } - } - return "svg_"+n+"_"+extra.substr(0,5)+"_"+objnum; -} - -function get_attrs(a){ - var attrs = {}; - for(var i = a.length; i--;){ - var attr = a.item(i).nodeName; - if(",style,".indexOf(","+attr+",") == -1){ - attrs[attr] = a.item(i).nodeValue; - } - } - return attrs -} - -function main() { - $(document).ready(function(){ - if (wave && wave.isInWaveContainer()) { - wave.setStateCallback(function(){setTimeout(stateUpdated,10)}); - } - - var oldchanged = svgCanvas.bind("changed", function(canvas, elem){ - if(oldchanged)oldchanged.apply(this, [canvas,elem]); - - var delta = {} - $.each(elem, function(){ - - var attrs = {}; - var a = this.attributes; - if(a){ - var attrs = get_attrs(a) - var ob = {element: this.nodeName, attr: attrs}; - - ob.time = shapetime[this.id] = (new Date).getTime() - delta[this.id] = JSON.stringify(ob); - } - }) - - wave.getState().submitDelta(delta) - //sendDelta(canvas, elem) - - }); - //* - - var oldselected = svgCanvas.bind("selected", function(canvas, elem){ - - if(oldselected)oldselected.apply(this, [canvas,elem]); - - - var delta = {} - var deletions = 0; - $.each(elem, function(){ - if(!this.parentNode && this != window){ - delta[this.id] = null; - deletions ++ - } - }); - if(deletions > 0){ - wave.getState().submitDelta(delta) - } - }); - /// - svgCanvas.bind("cleared", function(){ - //alert("cleared") - var state = {}, keys = wave.getState().getKeys() - for(var i = 0; i < keys.length; i++){ - state[keys[i]] = null; - } - wave.getState().submitDelta(state) - }); - //*/ - svgCanvas.bind("getid", getId); - }) -} - - - -if(window.gadgets) gadgets.util.registerOnLoadHandler(main); - -//$(main) - -//and why not use my stuff? -function SHA256(b){function h(j,k){return(j>>e)+(k>>e)+((p=(j&o)+(k&o))>>e)<>>k|j<<32-k}var g=[],d,c=3,l=[2],p,i,q,a,m=[],n=[];i=b.length*8;for(var e=16,o=65535,r="";c<312;c++){for(d=l.length;d--&&c%l[d]!=0;);d<0&&l.push(c)}b+="\u0080";for(c=0;c<=i;c+=8)n[c>>5]|=(b.charCodeAt(c/8)&255)<<24-c%32;n[(i+64>>9<<4)+15]=i;for(c=8;c--;)m[c]=parseInt(Math.pow(l[c],0.5).toString(e).substr(2,8),e);for(c=0;c>>10,g[b-7]),f(g[b-15],7)^f(g[b-15],18)^g[b-15]>>>3),g[b-e]);i=h(h(h(h(a[7],f(a[4],6)^f(a[4],11)^f(a[4],25)),a[4]&a[5]^~a[4]&a[6]),parseInt(Math.pow(l[b],1/3).toString(e).substr(2,8),e)),g[b]);q=(f(a[0],2)^f(a[0],13)^f(a[0],22))+(a[0]&a[1]^a[0]&a[2]^a[1]&a[2]);for(d=8;--d;)a[d]=d==4?h(a[3],i):a[d-1];a[0]=h(i,q)}for(d=8;d--;)m[d]+=a[d]}for(c=0;c<8;c++)for(b=8;b--;)r+=(m[c]>>>b*4&15).toString(e);return r} -
    • PYlw4wP=Ip&$ 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

      $ z>xIw#SXr4|ftO%BB&k|oH()_KH{(d#ak@!aa!?d=9E;&B)6;aDZ&Cj4u5P@xVL2No z_tgOsu!`8q#$aY^bo3rd@JE3DcP8gA;i>nWRC~s^go`EmN9V||g5KCvT}h%{)v$=) zidU==->@_zBEJ_4miQ%@{yP5hl{X8UhKE?$Hx1mTF%>Rihv_5(e@>ZWI;fOw9i_lE zT}Z}n(QzZ#FQ`{UcAGqP;~lH~Q7wN+U^*7ifNWB|-X}@L?UYp<$hg+aIh$z;+Uj9; zVu#2bd*ku1@R;aZcu#@gDFQY2|KoC!{qM7|>dOB(ABwHQp%H67nwqWAYZ^U^;uhwNlhbN}(trg%opzi$M8rR{Y<`7@dPTn-( zj;k5WCi3#N_c%+8ES*@IQD}cRK{^b5Y%nmgm2WGu@v&lVG|qGk46U}TN%}detb#;| zC1Ro#A0M55hSJ5BgHSe-reh?nx!EA8T$hxe9ll?7I`?Rdy@HD82EFtrv&pXpfr9MQ zlKhXhVf!+fkH5b z+y-v^qhL38!~6Zquo9Sp08>woV3Te7$gV#s=lp{4_Yxz+xgJPJJ;34!Qe|L7Qdfu+ zXlmNTV~?+297>V;dwXO|F6#ufAF5Uh5)Xi6>kH0JIbo~Qgh`n0a1!Kj+AK<|*s(|$ zM$lIuP`B?6f=DZiQKFGtG~tY`(E{d8N#pGs=~AjxcELO<=_WCG~?+?GsvG zHl44=uo8>T;&Tg?`G)k2O=qQD=$6YR8W8R%3|Oj@?I>lLVD-&4yeef`lYU$)#zSJ8yV(<%6X+M_rjj_iRGEIGwQY-W zAZ(fQg!Py^p;RB`EVshjKN(XCo;yYPSMYw{^vm#r!0Z2S(iz9!=}bMqW=;ghzj`#2 zD;B6@k&~ryXnl?X)T|=2oe+)^C4E+slMp98jk}{zppZd)uE0oUg%N^=8oe$rvBrnFbCnLhrYck&z+#Pe%d2>1L3vEY`wMr>ZFI zd(RWEHmFGL{?rH|hb#hm)@^A{7Jc5s#L#~4qSDpPs4Z@ z_?};ZkXA=9Y%H8-xauS*NCKis4*_lG%$yW|SjD_}1^VYcfHeJ+XzDPGTP8#yjfndJ zh^~o_c2m4X(;KvyI&CYrhIEt4z6aNqStoNj{2pFo=O;U&){MZP(Hxb6XEPcKGgW47 z*#eYNXm{p@({^p5DoM|5MN21}z1GyyzOk%2&s6Y``;3~jsh*;w;hpOJeAQ^ObUex? zp~mO<@E}LP&}|HBh()CzofQj8-(E$*D6tkOwY|bSZ-lUz z%PiTsnkD8G3d!t;&KcKAH3zva3}XuwGG&5&Rqs}ZkT@j*=yK?+whs67i+OQMuF5J`Qi zPnPo-pJB4o*=d;-&zKoN*$QWSuXaTQPpne7^nbi-JM{m!xa>9v06W`JK!zEE!KyRc z!llDwfW&Rm7T3_>By{7{;uKh_tuhMl?W{G^5f`ZSNn~eenL0!4AhnyaBcQa5ChcGb z(a7>c_ZDseJ#3<2lRD5>&+~QHaeDW&2ZN67OB|!pnMk=Cgn6MFD%)2Ao*Mxo0$F|l zFKJ5iE(%`tWk(|S2*DGPf~qrhyAU%2_b9dC1K$l~80L3AcN-jd-cnS>Y<;QLTtXyB zK4&{7tL{}hLYk(LOYy)f{jpw5R%GWGv?3vJ|C5{qu`1rS)>(GGcNWJd*n&b}`-894 zc|JqeBf)Vvh3`a>T6ax>(GIk`!dh=)q(CO#7dq2;RiX3o)q-z+MCqOpQdD2IIS1S9 zc?}3gUo^t1^eDd-un;1rSaT7D{n9&PWf(YQpFiLpd2N=}t8}sF`&x;yK_UQr{Nd+6 z*(KE9%&9lFazce`r_#4zR!|B>kD<N3dSOEa^9!X2I`QA)-%mv>a9?@5fD-hQbN&d`;Z~bp}cgX~vUyM(Vc%Ngg3I zipSh+dCYbBdy*q@`Iv5ak|PTAT2#q$kM~`H*ZOxt{X=T%@-P6FOrFLSt__aVy(;$(jx)${4>FJ_b6Yw0LGdMS%}^1n~+v|L_dErW{uHBgcNpGLEPW>hsGX!Hz25K^uM z*sN^>UE;4+42)R_5l4p;_@p3R$!vG!rA@WUI+tPUG3LM~WK{_6cLn=Y6yx#y8H%gG zDQTV8<+AN?BS-Kb);(W#bl?$NiSxh0MuUFT;6%HT@tnj+VK?wvNLCVKRWj^hx`*V# z+jfI)vqFyBhyY9pkmL6XcD^xSf733^?|##aNf&!Q=@K`f&xnSy{Eh1ybyV z;k}!gD+obGP*oD`HJ+*PQMRte?3UC+6ta!*$T6i7w5Y4M{yHYn=5&g~=GyknLncU7 z>Lz%DpsI9C+=XAh!b~u&aqiUa60Ly?^Mk~$+oGK-h0ka?%PPC`cZK6LXFms)Ly6CM z$!+GLJqBMjH=iaI`8&VS%fa%ncSPAT+;$O8VMuAbW(1x6p9p>PBqP64bYsuA?jrUd zzm#RGBVyy)%pz`p36~{*N*mF}$ zHVYKKW$qJ(gq7gEh(OXmGoG$}{qG@#YZ|%u1RVt|rxi1^VyLWN(N3gC`}=!h$rMv_ zs>>u53}}V76jY^T6X75(j&Y6Dy)2z$lnOLPYIUm=Zt!eS|TaYc4t^DV@(7czm1PKw2**mpqdMP&lsQ<~u3nvPolebE>PdAHW7ARg7kvn#_Af$IyCONP zDI+o_n_5m-73@jMYbiLSd~CdMa{`%Eguhd{!OZ-6^rw}wCQ;mV&+#(MBT7+-XV75C zY=@+%xEm7f4j!K$A1@Xxb;~p@*x-TvUXw?z@ey(Nf}@?!3pw|=sT{MO9#|NHnLaGC zBt?T>DlvPOazflA)Nf2ec@Lkq@rHWz5-L(+m2bmpjVG&Z}#sJmCcz#NB{^ZmHz@Lu73ih_m^APJB%jQkuKAsZj+`>#lEqeA1j`; z0UjrXC5PdQfSD9d!$kUe0m?g_f^DY&$b%GrsM|=Ofy4@f%!!--@Qi!2Z8F0_xZ4-n z5#FYZcwLo`0MAZA;|KaQD^DzW%RL2_&Xv>vR3y2B-ccC&kE3WT;Su7Ny`tvwm47`k^zV{nl-4lQyQNEPqu` z@=_0&+(q9+FD5BCr;O}yGt667dGgbAZ~52iID)G$(v>TP`lCb9vd#E~)tif?jFbdY zn>okTn0-=}82yU91LH>e)r??%d#GG1OZ*bU!$r|y@Vatb8mtZ<*LJJ3XgLKnqnZ-8 zdp|S>YMZ{&YFvfA{JhG$ot7qVGA{pxTfDNH&aetk|K9a@33U`f8%VvcbNhMwK(AX} z?0j77dRmdOR!M8T*oR)r`y}+#eiz*`$%4>M+jkoQiVP2`w$Rc`H3#3W$ zj<8b@RY-}*T#o2z()4JlL4LF9t1#7k#|HmeBDK|Ylc9m2s`)RV;{GR8tM;HMC8(Hc zn`rMso-9`&k~K@gxPAkrQF)^rs7^~#9CCAJyB3?!AlZ@Sk1egPPxJ&P1bZEWb4Udh zjptT!A2Vzb7caPb+5OWW@(Rv}*VJ(e@OWEW_cH`({$_aq5?_z&1Q5zzZC$jbUa1{Y zIHhdYy>GFmA#k;B5_O%6#u#Q6>>~wte67v$12nAf>R07QsqY-l=jbDVcJUoIERhYC z?b|hJzrSGQy>ZkKe6U;bOQTU8BjmL+$5~{pO+7B1-MN!npP1FbTs|g>=>QnaArG9m zXR#*+DA!S*9axowU{7I6Gz}N?(f{IDB<+{&Vnr2-D#`4jQB2pDdIpb|BDHJFgyTDM z*9#B%F*&k1;yJyL!;>61b>&LRE7Qil<0};}sw9whupH_&S)CxdbkA^=90&IyIsm!e zGUGTs(EQJkWjH(}2D?;iY_i1A0mwoGqW33_pI9twlcZ!?%q9WO$GMc8smo4FzteqG z0~un*Wcy(5i*vQbr#_AiV8zzc%61iV)r{kbsufUpHRv+x!A&cisX+0{%=#9>>xDxp ziIJ;isyCDWP?}Si^vwvsFq}W^WNUb&DLQTSqIUkHTwIW22E<qfDP1U72jtoP6^`>@H>_5X|ndB)`suzA{sQ+u^~>h{o`c>OS19}GjxEAS*5c^1z> zu<{&$1vE{*YzbJ7iiB2)ML|<1w&2!dSqNo2g^ghj1OkRkbSKZ?DJO)2FRAwp#w`h0 zd0@RoTub7VU(Zcl`-*a*+12^miARb^(AKTx=OM9?P!w#v zN5~FIbbixV|VjZG|>%Tr7xO8w{yPwtxn zmOcZE`QqLv;3;fBJeobMi(z*-7LT*R`R_LLy#p$oSGb@_%`-NP90GtRj1>@+u_8)9b1rL%bWtXkSS2;tq#Rh(IynA?(_n0T zz$eV=Pa5Xp9>xepm#xCl)Jq@=5v=m5gBvBZ#B}!}>+6RPQDyT{ zmFbweD&&g3l?{7l4fe=al2$LEO!4Ff(+E8M=T?+x*k100=^_kNX3+*iOlO?g=7=T0dickYS zFVMwL<2~Tq8f2uk7oR;2WUa{_*I6zYKAtmCz>Kcu0@I<3kDeypqPo8!^Xm93HgRxG z_2TJ)V$)BOH!CQH>2y*O)fyFo5>{9Vc+A#e5lX7$BCA9C@1AAx8a%gZdvZ0jdOjve%4=h?rBh`dUeDZN04HzCmBP3S+I zu#ow?DWzrQYN_s^=IU%^Z}CsQ#ufWO7k*;Vp}OFx*Kg9U;7qn_xUwuEhN7ab;Jt3W zGPtU`YEhAS#;@=|EBz;M|K#hS)GOUjSV=C2dy~9}ie;O^c?Muij>V!wsZn-kG|L*b zWrlf1l*|O%*f_=V&AlXPYd({oY7oLV?>ZDN7Jii~$k(4V%Xb)g8`pkNn{_jK11h4X zy1-qiU)|TM{^U9`z*OzOzm~=&1B=PuX`JYis@x}})LImVXQd8iGHVIuE`9d2CemC?1Y3R~^Wui; zSjWJxK}t0pJal1oV+Dg77bPDCqvL7j)9_5!#)*ZEo0XYJ%S#o;^JGPCn}Q>T$(v7# z3}v4t#*@y7nZV6`N1Q42vcxW^lpcZWx41NPP?wHC#*awOEl{m`<21x%?R$bsA~AJk z9K~%z3HegC_XR64sg_kfqwnC;oHn_7g;e2(coO-)-L4>8#OWntfPtBP{{POO{+wSKac9+M=GgJ2l@VDor zwuZ-CpUDq_3(&z`#^CL6ZVI9Y;vmP=Rl7gF zA;XkWIP=K~S$Oh3A7#nwO2F29==9G_A0$4;nl_xv6*_`FU5K^*Ku#5c{li!6L$51e zTa&tT1pnD!!q(6L+xsnO&w?OqFGEr*X~9*D&SgkBPf^Ba%(J^5HUQ1?e&GI^HIa7U zI>LjeA*HSurbzIeh{INIgYzy{U{0NF%+dc2?QcniyQ_!o5v1tfBFRzf7UHlppy#I9H#K8C6|$%U&~O4%tCjJ|7L(?t z5=VsWz8j{493n@2ieZ}cK7FfI*9ikT(@hUav&c6rULaWdU4sl53(NGR@04|R;|Hst zh_(%$2eFna(60^4jbhKJ=_C-Xx^#Iax7i`$TqEpq3w-_f_H*tt+h|eaV11gJ4H=|E z@ZVGdY9t#p!}}9j^HvfI=1Lw5$evqb+-S|lGXs_6PNvK^_fR|}ytQB#E2NBLot`AW#zN5XL^gH1rge9S!}iQuK7* zX@n$`$N3!h?UegT$u*m20p2(V?!uYB!*pKBWzurgi&xKWJ#*L))1U-F51cMeSD!IjfJ4=yq!Ji1y@AmP{_MUPprEtVB$K-S(m}nbfg`udK?4m=7JQ1U9 z-^#gx2{pc9G_{PoG1ILep#Tmd4u&&*^FOmtW1%MNkA%27c7|BdF}A+Mc6z!?lIR9s zJXpl%Xhsz8ShjvdQloP5*fb^<5$k=<>qU&!SrndpV#b3sb@(kx4%vy|^l%sIfmb$_ zEM^fL3_Ss9`C~hKeCH?2{o{-Sq~nERkt@UE{uIiP@3!_DF|u;nD)Gf3^%5WNdM}HY z>AKXGoz5-rs;+H`#tOc!*`|M#K--V_upluVd!Xpu@drOzN$`f32?Q;=T_%tEpF7J9 zZ{AHwPF$ba@HudRtR)oWm5Pc$?$KVfc zh17tI;iwk4T&0mBYsXBh`>RAWODwqYOFw1Ms zdB5zu4dslUp?Xloaq+q_XyJ#&@zxRc3h6=_?W*$5R(=Rv7OhZ*YPJ;^I(++8)Kc|4 zcnZbmIe^yH>loj5mt5Yg7Cm%iXD{i;7~Ntek7v<<_A_C;H<|;n+@a?-?|l$n6!=?BKC_Ro{YVOVrCXBEm+$@P&pE^F}z! zdSlYu8&@C4Dp8(u$1nK{t!*yfuf!;owegz|+re=ARDe@Iavge3z^6*dRcG~9;)wJ0 zr*Baa2I|*Fol1jJS1On&Tc0tBgUb=(x6{-;3A%suf%%6LhhzBa57z7~VGt-^!~3d+ z_CF;f4CC%Nz4G-<+@%8Z;0A+P8LM}=uUPtcimWk&2iH*cDZ^ z$&CC&=oYMu~bLa;E#eJVb$y5r_w0l-WCjBy}`VlDfMjRy;dEatAe5s zKkfo=N_?=~JW8idf;DwwUG{TMFHaG# zo!ExlOx+ZkG3(IeT=6>etzxINY-;kK;&_Yy6dlCM=u#>qIk0x0E=y*f^L}T=SA}=? zYDRX+%r;8Me2<)|2hE#trlRb`dECS{O0on2ez!rM`La|AUbP!$8L>+nyp8`#u z#_lR~lUp53QIi8x@$(6(a?P8bhH7;q+$Fuq9krc=WUL*a^0@o40l@rXJ9#RRhOCd9 zL1rP0DcsnEEtMS7vbzVWoio#5lP@H*OH)e(^f@{fqYqHZ$%{-@@+Az43@~RIQ*7tcQqM)cK21$`~=RMBuyw zKeS+(gj66zWBfUl<-#RK?uo#CgTCm0DznJlSb>Az3NBUzm&LVDIO*{t2UXOF260gS~hWDabn_LL(inq?ooPDPOrK9sbYV8Ulj82st+DAQw$= zbYve&QUQ8tP^p-{d^0UM(^5YYhfDqYgO#`1C>3{~h3m^NRD`Qli*1);i0`V^f16DZL$+=aA^Z=6qE4VIEwB#8T%((?IeKr1??qY1=~3p;g!(A9U=$W1R1u z=Xt2QdLh)`<%}o8EcHaj;aP^%OM%TWRgsm*4wVEPD6rMtCpWE7&Minss+^G;(=`DN7Qs z)<_hxe?`I3ug2z0oiIj_(rNj7`?IICRt2#9H0T!oqW`(jn(_iAiG%AiX4BAw)cypd zbE#EK@Lu6CT&Ph@bZB%`DE7cjo;ga42^Ka6x_>|PVDTU(Ez?$=ptEg!vUfzW5V8TL zYL+<64aJ0zJtoX1DWeLM3>YPSugNcCn7?eEG% zX8`_N18sl?&73@`uOQ_w9Fvay<)T^TO`HsKIDZWHWwa_X~} z7|R?q6^;q`8?3}!Kq9q&S?~>>3uXBzhg(GPo@y>9n+fawa+#5~c(P1@`m8YdabC*Z zaKr}K2SI@#@+O9*LqV#_MEM-MiW4EVKXYKN#Pya!*l%0*d0E%MOSPyEV&@^)9pIZy8m>6fFM?k)IHoXiQx)t**3`WxOv|n|{a# zpBmc$*F5U@@Qso(c*^-uh=vH>`9vCWJPawR2G%QXG39!h zXfri&fS{$>RJbops3*3R5V;U-JTCH-eX$g~tD-|I#;E&AG0&gVEux(T=K6Svzm$Ee zb3Vv5Nxb!dd&9p1wh8VZ4VBN&+;UClz5pgJ9ewopolkUO3yeM~HVv{?AAS(Scsd3T zW~N+~)|yjR9nCWgm`LrXA3wLa(rjWYKcHg7O|?-ad;9O{T)FNo#`hG5(|!?8Z$>SR zHWGL?OGo35w5jeHbeNjUk_)T&?4}O-|J9`;$9kS22~Sa=HR&Mk2WJfX`QnMAkQ}8p zI#KguuVT=Sa027dkD!uw6y=O9zxCi#T)}{6Z~BWnEDlVQXjp!ukm;|j-GyVYen_mqsv!=e zB)pf};_%TIg!|(O7InoM{XvELLhs7DOPleLD2|m75m5IhzQUifVk1HQQugDG{_UOf zRT2y_s&w@ib+v8`E@a8=J#GcgNR`j-2mn0eesUyk*_dgG(IP z)7=+PhUuAVSJ82zsJit+apj=SRE*v_RBf~?gYfzl>OJQq5fJFtOr&XZZsf)kniAh< z4V2Y>s{zoHujps6Jt*-$7@>jFs`MCiKn0aaBs9rN8D`hEM$lGF$FoB&ig`%X8`@e6 z!^sYkWScBUZcK8{Oj08CHib^xLoc|2JFURX0sSj~^BMi52Se1yV{p13N#>1aNEXnp zNyGw%+Gmhx69=DA%2297A50rh4GK8<)JHOm9T!`lbg}s1_!9Ql#YYb%LD* zoe~|uLY5pQIUU_C+M-A`Cd`n0m~|)-lV|nh&G*utaWbbMjo9UgqdTgb6|X{*JN46n z{lepSdLbb#f%w9kOh>l^?4TR$A0Oi6wu>OyC4W980kEcO*wI6jgl^(G^_~6a0*vFY z-}9q(U4c`L^J!EI;4&H%6{^Tu#o9NH_kj_6ROF`Ac#q;@)4fsqi%2-naVCCCORMuH zd}@NK{?QeA{s0f8Z~jW4SE9d?iac>aI#F@@LEk$LM{92IVD;|wk@sh!ehu8Eh9hj7 zvqFC{6L*oMJI|zjSBptsnMnZ>3#`$Mj{OOMg)mA$1(v_CQu5nw*U-9{Vp?5~-Jf$z zxz~8?G+0nRC-_G10I|{?Vhz>*juPqYnNY`efyya5y7;-Z$Js?}a6Xg}Q(Xbb!2(#l z`@L<9KA;{1UhQEy+KGq`><+7_-kdIcWrUvfVf$)6jXKCe4WA^bAA+ui7WUaqL^T7x zh{LQ7!!SeLNNQ}mPrX-(4j@*B%w;$}ZqK~eerj0QA++z95TX&e-z-|jMxHLC9^Fnj zWd-zAoU=XTc%(}dYW}{a?v>;uo9SZ2J$_m@UetN9kx4d1L@q(g%9diPzQsXmQdGVs z7aPh2wVL2A^)i@76nQbupeie6sgY?sC`&g`Hjcl`FF{q#ReZIxF)3rn)&+IH?>G96 z5}+jPKF!8siuyw;?*&VFtwpr%g{$0k6S-l{qle&8NG{ZXF-I?!{Vw$Tw5E!Ll(|i1 zH5RqAiEZhRQ>it`4yV-W{xj3IaF?UaHAZbDzj-HK#&#A=gaiVUqAm7dtwuzN4)Mlu z@ech)dhrg`MvLeN(HVPmyE4lT@m0IVkAK??VsYYRn+EDvAA&AG{)1T(R|n_+y@V}A z1t>?riXoUmnB%4|Y;Cvj9GI_~vNQkFUFTCrP%V&H6WVWla%e@GDj`GuTI#+;Nfhzi zCqVr;$Ca*-1W)?n*C_8J`Qu~Wr7-xJG35Xp7DOlfc8WV|4_d#anzfZ4py^kY8ce_@ z0IFYI%6f)z_UA~PmjNo<9B7EBOdx5$3&M{-nHLfVFI+d;*5FzIJEZe`fGQTv1dWo+ zS*>W4hSC_HP&dKJrry`@kz9;r&r3^RPpgMFbpC>^qivyW&%m>|Rk5(>osu?Ea4{+J zpm~JmPnnc+_R&0GFZBC;z|VvJuZ#$|5Aq3vJ0ht_3L980YKh0>zd^G^X?%Ye&ZYqn z4BRYHUyT+d=zplIEZs$UE^Cru{%)=@aWX5J0pKe=LxtrWa`x3eg!Fi#ms=~a(Ja`Y zXA1|q-1-j`Bma25e+!UPRR1A2LN9Yl%4}3fN`Cxazylwv2CrGwULjJ6F;)n2EQn+0 zQCndjaVJ|Q!|G|N1%nSU{D?D-&50Kn(ysYk1Y6ZLW`><=I zICL^Pxd{i;K{y&7$?VB!(d#S4J9~Q$L$OV=_Be`Eo2BOCB%$N%yC~OG=!( zgjol3m&l;#Gm00Rsu(&WqTO0uZA4)xTC=<>!w=9t!LW8{SUo_N#dl1x!w&&=+w9L7 zMhj|eMB#hSTIM$X;S-ni?L5{wW1uCN&ZsC0Aa_DSTUGXk6igtZD2yK^!|?{GD>kop zq*aq}V3QE}V_+e{-J=J=+vqvp&-A&-m43gP%RhCBO=Q* z%`2K&BI^v%+=8?M=&*;E`FbpRo6{kiaKA1r zo82{}U7Y+7*OifzahbKU(q_=zO$??j$_tHnYek_l{hRSkr`C}_mInbV3QHCMZ!luN zY+~r9OC)9;{sK(|^@`a)e>=prxs91OZohBkqt|MbLNcCv*M}LFvBUbV8r`d}LDMPc^=5XCJ_mVIJ@Y(nZ4sZv`qW*aHW%*=E%cZ|iw&l>t$0c_SF_E2eM$BYKp{ z5Bm|niX}+KeNpC~1gPYXz;@SB3)j+*(3sScsjO!VO8r6u#OK;YErK7i4iGD^-_wXA z9L~tEZ@Z0!NlbhPeq0|*$Mw++r_i`#9Y}XX*(7wv@g`E)Z&6JqrBWqhHnINsw_GM{ zWk6{FLQ&wqLGf=LK#J=6U)uJM^`@d9^ReJ~81u9dKukKEJQ9kq{ECcpxWuo_sTcP2 z#}}M-Qdb7oGuQ^c(*rVvkv~o3Io^ebT*mc1NnkRwYkVgEnVxO)230`V&B=eTs z-vl>feP>+r&dzQ~fTlRw2omW`>@lmk9-`uINuLc8+$NPPLxXDEe)9`#TzQar<5rCJ z#B;szsJmaPDCrsXfx(QU2MyCFD?fG9C2i_@$;6ckEo z_N5O>jPkTSDJ-FbYKi}|4d;#>)9k|A*KT<+S{!r57J{(02BaYtHw4qL-msWUV&ItA zONiK2=LxP>d-_|K!f&O(IGpK7OUji}gEKjj4oEFhNE%(^- zyL~T0_A0UEZy^P5qB1XjfbQA;?!>__CB5;D2-Rjce5Li6in}mF4Nk`w1wVWL?LHY@ zYHpku1nTC0Cgc1^QvO>$kfH{(nN!B`pG@SmNvmEzn}6nQ;hRIo3Xj6Z@5sP}Y3i_K zJOXACt;XCD$S4lIN4NRiZw_|jTQ0$W z7*R$8s`m|zRBYt1=y=n$8y(mC*n(G*g4k<^0V{&cKc;0ya&6AMeRA==3okERJ=$s( zaoO+#;pVCOJ8v)Dn#4@?>ZN)^B}qKlaoxSkVcPU#=EwC@iP?Rc)MzcrR zC8aA?WO~`GWmxD2yzst%s_eeUyO1rbdUHwYF>-&RPh_mefZ=&&0m)YGys>aJ4B5qP zAlWb5DJXryYwd#@ZL1RU3>J{2*qU(%IG7~PE~&l+xFjyeN`}GHCv?)Jp`N zy6PTjY@F!Y)Sy!acdYs`lf{j6qGLlRGwO6YfRl$*tG=3OMERB@n)W&Q^!}xI^;M}> zj4-1>fGP1E-7~AxeWb?Su%71=v)Pxi2`^n6FKz43Qm|tbs^LClptr@AA!}Yu1jbsy zYP50*z}ijlYD**;?ORi_{{S)r!}jS()S!o{E?zqj*X3aSeudd#HWZv&Dh?EVnE^b? zGw{iZiEQ|Ty()Z%OaMV>gpx802z zz-%TMcN9OTIi{6|`n1MN8Y!Jdy=J}t+dLe39bEMh2%5jP$NtAhhQIX%v8w+Npv*A= zf7@GCK)*_sY&A=3q4@<}iCT-QUIm81ZkC$O{soPD*#Pl=Fcn@A$~#y<^0lHB9^*@o zz5BuBy3b_x%k|6DlmXbo46QMI7A3~jkC;Qx?Nml$1>#j9cbp)b>de`w5WOT84sWg3 zOeu7F4Og~XA{GqflGKL?Bk~CZOCXEq@PR6ex{qpfgN(o@nLHE>uMx`%-pfCNjeTwN$qoPEjNb~2b+1ZxVX73hn;L>LC$6x*W+el`AK?N85Js!(zt*z z@Yd)QQcNd0-u<9Brf)IUbnu?WTey{s3Icm-U)qIVMtVYZ`Q&kQsg3YSsTnj&x&AhL zB!(bNCUU$cpIG2Y4V0yK@gjsJ^8*U1Q>A#j(w!~qKYQYmh|~A5MS;s&zAPhMA;g0D zXj?3|>74+YBys>Y8KSt&7d@lO+s6UrU1wYtTDyk2o_K-Jc7R|dAYW0K@)XeED)XRD z#P6}!no|oNZ%)9EGI^cj+dT}g_vqZl8_eQ++!{9DzH-3=>9$6#sQZ>}pN2|!RmxHMawA-^mJmUzu#M?aVmWSeFau%(pQu5q68KinoR->iGFe2zME}NPg9#9{cq=> zcgUwHvCfDs-VTgj4|m=H*$9m=LoI8oM;tu-tZ=~lPhKp5N4skDmkcCv{~p+=Z=uyP zt$cfJu7{{cs|5@=J<}(aj5mIR(W0MjDznlV6k}ylB1V73P!%Oh+pg7-9WL$-K2Q3D zIgUi<@-%3G8_*V4BS+(Bt)u&onGCw&1>j|WOI-fU#O5NKVe!JYu$IdE=dv_IOWLZW za_(HQ;ep0@p4%)p0%i7|U2CcNe8d&SE{8@#Tw-7-$>M-xkQgwY>9v8lUpQ&1}b z{de;e+V#3@5pHTVx_kM3^7o(nnlY?jHjYwp4yfhIyyQJbYTbi9J%hh)K#3(0MJPr8 zE|_DyF|OxOnCSco)j={W7X6S9A-v0VUPTXa;D~L1f!NB8<`6sZW!G2Ki>36=dY|kf zKAAtHJ>XZ~)ldDxYah`7j#7ukXIQrt6Ysn`_M~TrkC_)w?K+}uC$qdQt5BgLzueSl z!XCe00soq9PQiQke}OQl`7bc|XH}!B;PBT5f~;1j-AuGukpkbjlPw1+CF5>wLCF-~Z3(_T-aPKMqsBGHLSh=3aYGJ?qpSbZQe`$b# z2(;;I8v^uKljgQ+yUmzgDYc%+(yQ7lj7=XC-=Y)kYgSr1oUEH#+R8AVbM-qbV}2rH z<>5D{z^Q&L!Fu^)N;3;iOn1}xLUnKwQC82RloLld9s@3JsAQ9HL6d71Byjq+EMGW~ zE*=>%5jj(wj8>PkFy77_nZ$pv@{^|ta8Kf^^sQaMHRvj)aEC8)11X+1sW1zcZD#F& z7BdgAulK8O4Rg6$Ikh>3aB}v?!g}EkyRlnj`P?C6Ei7)G?7H7HW2&$lN7@*AHb6#0KS&Vc&#_Qp|$pxj7~klWBO*>hHT_2 zsh0p2fwC^!>8N_m??*^Fprw#kmW)^<-l2G1UzdCykbXQ8HZi+a_EN9p<7|;vC)~-c z_LJFTSW4JffbxmKCH*qWJg!iVm^3}AB@>25;1-LoQ1~}3k~KP$)NT3yMcO+CR|2hR zqe(ipZL4G3wr$%sc5Jg_+qTV)JGSl4%{g=CyEEs5~GSgpkS#t z7)`lz`=EYMFjj>i;gz~XpK-`awB&7=sgOv;X|8wxE(XFXrm;X(?n zaM6)8HVzhEn1dEjrVWb_Mu9r7J$aFwc*?8f^KQ(l?`cdD;fU*O!-+%X{Pu#+;0$6T z$H2^Uop>B}Y3HC1T7x#RlHzJ%H;1T6G%iL*-$Vw^?kl>EGMH+VChO1qRF0)Rx>Gvh zP1v_peCzVabr`TBD*iK=oupSMy|^bQVbR3IjXDj(d-#kgoaFOFIyxGv_!mq?ye;A5l%-VUU42 z=!rsQ!&VQ$%Qce1ASm&5l%2|KTFP)0QE)SO%N?r$t$Uhvq9EA4Dvfz#n#p~ZvXC!R zSx_yLsfm|xL=H%h)T9p8!otIl(HSa=_^gBU{;KQ^IrtT`n^biTn}5uI)Al)|E6)0} z^Y2F$|6G=cBURUX))^te<@Q?5t7!YqpU9Fba8lJ-@sqm0LTlP_{Pt-gS5}0$r}S-S zv~9S9RFKC{G8SP-tJ7~(6H|uq*Di?^U2riU{5!(OzTDT?b)mg@%}z|^W+Bhmy}GL- zsh3^c(=Fh78x6jdc^Bd=Cj9x1XzNm_Ey2A2r#x?qg7?+&hVgvd0NoQnhaQg^<0|Wu zN=xpAw}thpfJcl;Dwx)w7)YTSoPFiZPil8Bpd|c)DEwuG2Nfz0$~A38oj9tFMuNOv zv3m?sJ0Fon_Thr+figrEls~FaN);wvusOMTDY*qnxy$h`qogTpm&SOr4mz_sGO1=N z``j*w0ptPg=2HW8O0&M?Tx+!nSp(vv2nqy*e;YpS2G+|?bx@d(s-NNsI z5hW6424H&P0F1f0a)e8igMJn8??fSFh6jbCw)5&0#Udt~rq~(8#Q1+s}+WZzJLzVU@9H z8_(lhCfxBGoBOsJ(rblTo_mCDBtp1Q0Nsa;0Bb$jFl60K!-;sHr#!x^MQA;s{5Q5ct>Fu&ku_vPBc)K5EQmaWJ- znP%C`uEA+qr{W_$+rH$dCCcCCo3|#G&z@|0H9XqxvKJI1#c0Hgpt)(7%uev++>@Jhz_LF0KeL)31p+n zJYk#*^E0}nBn)n^&BlOHEoHg9WoqW>-o0s_L+c5IH^Bt>7$P6*4a0^~VbwX2r|dW+ zS-_JdH7#|tIANE-ZVomD!qj2D#jyed9t=}4z2cChT(}3^ZJcITwoBfuHwPxIcPD+B z#4Jm`!n`lihAZA_*V}(czQu}Ft)l69pgK@nEvJwwg?1?K%|wOH!CRK({JxtH9s6mR zo@J+ai--OMXsPklU9Ve&VzVmwik1&3%_tQ*QneeGL^Wi(nOW(myD1TWFAc z=~+=DwWq_ypf|z5-yzc^Scq&D%SD)vU_G5Kw$h?P~ zh0!NWjKSW`KgX{VA|=tc4$owb4jc`=-}SfBh=b(%wDSp>0C{V&4e|?APD5Glhd4{G z*c}YAJip)<`TUYBsr4h`NhfbvG^vncK2?l`DvJx%G(^XF#IDsr4h7z&>E@vlteMj9 z0|bjRoH95pW0;>x^)aZnXe4vbVReZX%3ATNN+)Vs2nHF9sn~^w@o_W2I?+wRm;-AT z@DHg({?q?1pv}{aEI0dx-4OWy{EhpUfHp-{`yX*`f7yP5EM-r;T zfJ!4pO_j+L4Ixv=a!H<*&Hjb*b@I6#hR8vxE$n$Gc%eC4V-clG37lc+e9v+2`J5SF zo37pdwjtq&D;8tfNA}k_ilad;Xv6Mjg_Uf=MRwE;3a=yvaB>juf{T$w8}bA}$vFL@ zLSh#+!8{nPShMx$DD-L>M4aSPBB(rVFi*E669~h?ZcDS~S;R^oAiOh`)Gc221-u~* zGIc2eo=mDO4*j;7ggqwoicgNJ3{Tsg97Wwzm(Y^pQ>&`Wj~dRt_w50O_R|hn0&l33 z3prHEuDUt#f2zzd7Qr^?(!DZEL^lfhSzM<#Hs>#Ugc65Ym#0tVc>oFxaVmhH{_}|! z8^lc3ZTPRh%VP`qOf7sB>N6@-CFrYoh}GY%QM9{;I|Ws zi+2^FEv9h5q#q~XUx(bOD!hg(QZK#Cp33@lD=liV5q$BMy`q>zdhnk|XrY1O|(Xpz-$1MhtupB9gk4#+hlJfVr%{aOB zfB$AG(OddSe=o8qoolGA(w`$aelidcuFcetj**a5AFx4;Zn`O$izCncaB)7&42xgI z0bBYkIOR}Q#Fg9sNHd%`&hXx=$Gro2rtmi^L)RESr2)t-vzD4Uw0S zIZ9COKZac5k1KxK*1Bke8WcCA^m%SjKExHW6yX}8^b65XzAeD`p^CyDa-T!aIb$}0 zF;ICY4V=}e&ox5KE=h@?uO}~d_Yxj3{u6eA{6{mcry~F^#D`VujO0w8_zrHbTi)VD zGGxG=#Y~tT+2;*ACri6aK-<5dArbR#7VPP0R_x1Mgim+|37;67|KwZj$Q}+Gf~@aA z8RFh0(bL3iL28K=KERS0syPG(b~%6x9-@s|;3%Wf7hQKEEw6e2wy^IK(lNhZ$}i5t zC}j+=>6Sot*N?XXlSEp$PTRL}2_opvvpCJOa7}hv?Bu1^!?3}Iw*aR~jypcV8J>q} z3s3UXJ!J#_V*U8HrD(jK93bL*{(AL4Q~dpN{`!BU$(M5faM)=4No$)HM2W^P$Y;_C zhW;TG5|6nQQWOL=hJaGIcsWP6HpAAbOf0{{`~v!SScK(e5aI^S2jg)DJsce5+m-n$ z$9uN>`C@8~ptr{tf+08*wu7N0Z9~(9AvZXtKrb6tDt%1JXkjQBDvhXjI(R;H^Wg^> zv7%|4%AdWBOKpkdr^&fE2SMnQQ81C+y&LUQdJW+8dCMWlt4m{)5)ztuz1fO0?@^Zt5H~k zy3}ISd8NL64F!{r5KBEw&;e!f=)HMOqntvU#^Rw!kJ1yK3!^OWKGSL4Y8yr1KpCWP zK)lo<2a)be+J@YHyuOuh&O!!jFL}F_DC%ill%&nk_X(t_k8CT2kDyZ+CSEpK8BjZj zFz>O;;eU&!nhuY>D1QiIcrv|gS9q+mGFm70+^mlmoe2uHgYn#Cb(|gW<*8$c0!Bgj zIklS*>IusbopU~inSJkUj>##mj4ZF61pD}fHcJKZro=W-(VMY3qfafrrse26IyxV^ z;<>2?8mN~rXVQSh6$P%#V9yqe2k?7uQ*tSdj$dA$rqFSeS**>-_g_7^Ty_VIFScGl z^144E(tS>37k@`x!!K=uIFh;OcjzI0qypByR^(cFhzL(z@oFOU{ z*GpkRd`$>mxx4O0fMBuPfuXQj^V?pOhlz1Ce*5_Es#{*BbpoVE5eT6FjBfi_j^@ti zc(tR?U^L<9saS3zEQzW*YYspOPM@QQEyd-G2X)2@S%_*YD)*s)3?M}Wcdrw&M=tE9 zX$uATTR}1GRjG*~7_;Kr0IQNR`6-L<@y5+)R)|M$0yM9iqy#$2hafDNI-YD)^PROP zMiDYl51qi~?$Ji~M+7!Q=oU?I;>Ea5!DhSvxM8=e>RO3h)ZF!&B?EPP&JqCOJxa^m ztm<^k)&)3Fq#=}6&)29tjRh+xe-hQnqSL<$k+nP^E~Zm#XwKIPq*3G5ExbNZTjUDn zY9rRw56!jdLY$9XXS!V-LE&khhuIh*dssUeEsHsCGu$V)%P3n-A7#dQW}IN~%LiW& z%PE%GIz5rAoxhN69)OQSZ(LPV+ z3AdihlD(HSIFhjXrTPZs7D79?!3??mSFlbF(V`8t7)dXQMMBS(#D!5sl6gY>gzY94 zHv@BOL2$%fVxSO zzB=@yO%OZaRzuE!sRdnuRE{fl9`<4J{@-@DF=B-{KHmrUe<_1G8 z{+4vsxoBE|sh}!05ncwNen2HS5E*2u@Fd3@811=XZ4h-bn{|>6eTl^Bb$QGUNiB(7 z|5Y4epDaN<36ypFlf}OM{>R7u&$d6m{|}7;C-h*4M<(;Z{;sDhI3q|HHcuGz2{ziP z^RWWGRNBqfo4x^I0H1!d=~Ul0zYIc;0WVx(i1qfH4&y~{gzs4&i8)g7{wGk~Zj_i( zec?nI@K=>cv}=Sxuj)Z4*$s2bwOKr*y&~SH67RQX)8+Dy$Y_<6YcOs-(g!}cOh@G= zOab;XiSfe6KI>)4-%Xmph)1w6dk^eFxVN!8C;dD zrI*+JoJn?w(r!ocXSYX$Bq7)xC;RbGG0o_f$N(Rjk`MUDtc<91ed00F8Mz96*67Y>`G>#uiPK}`*!FxI>j+x_OFzX?p-O$MaUXp^*feGwDS55vFziSGuzC< zl}({7Gs;2zvy2{w$^oVg*v15n>#!8Mb>jn&39JWHY}}^I$~~4-q)&8aNft~$Fz)HXZNJ$lA);@|75g7%?(aj8>-+Q77jE=m5Z;c7$QF z*Q2L}v8QmsRA&n)A+c{Xi7cqo0krAcoT&+VH#-yF(V>Z!rRUR`YXCa?<`T+(i?~Gv z(ywQ8ToRvT=9DO((%+eSrODj5^Glz%P2Em`bQua3`y?L64hPl8o!)sAq?socdT zR#@-honnleNUGX-X0^z)WM;d@Ql`jq)lQrEn&K%o#f7T>R83|!^hnaqtfbX1gZ&I! z21|=d{lQlc*LiU;+(4w-j-o`6q)u}(t9LClys}kZ6}mo>Unb_+@Iap+!6058mQuKa|5}74KmZ zm~ZG&qX;D{yKs2GX1wR87Td(@L-d2+mw3v9xm+Knx(0DN4 z34hXC9Dc!l`h27u%brbg1Px59J6?+v>W!1wV$Ey>S#=qoI%#pod82^yTOFDfiB+p$sJ3X`^;Oegw2ie- z9=A1%VOh0{y1iFqxAi<&_KomaFt&>UI~==yn6(ORvaT`k#akmbA1IO=sa4}ay^Be4 ztoOCC0JzrtI9<9FhfcT(M>L!#<{@CHV79X1_>k}K!ATp;5lC;mW<%H&ja_oF7U6*$ zHjU`c)vPUKJ-cBV%n@F-k07+#rhcVOo8ijUjmkCCTD0eS&lL^F-jJ2`JgC~FnUIN|Yv3ki0-emdDVU40l3E*+mgdwPE~P*8_;&ntLv3jHD97MR0{2{jFA z)|9iiXJes z5;UeU4zU)5lL2!Jk3i6(tYSuQusQ~B5>{l~t9&FDz9v8tSLM9y8M3&kB;V^?S%^WQ z(?A)Qxi4VO#-!qKUmVk_9uIiBx|__cCA`_ z!q5%aft>!3xR=EDtQs0zSkZn7!{}z>byL?>&$X`R=g~9saJ>z3>W_T9J8FKi z%5|2Yn|jvBJ4>jUKP6MP@L?d3qCyQ4;ua(XW_m^(Daoa)a#tiME)?9dL2`@(K@ZrB z>4Wi_XePOSA;lv?F;7+a_98Xb2$Q}&diE+ulLv4k{)siCxdRP*8X_^x1CpJMF#wsg zqrO2VXF0oN(!n~#RI*`(MN>xlgtk#8A7U>HN9D3yUF>jK9+D;NT+1%LABALKsLYxy zO;p$=F-cA7#KvSz#R`e&#kuLT+Z17{6boH?)m>V-LVPo;7SjX3oE=0b+gqpz%k{Tq zz|njYbe}yAAtf2ayiLamvWVzrId3mbrWt1FB$Q8l?b|r_;@sVTF<-AU)`aq+f`lRg zYN3OFwy<_~Luc;Jeu{a}Dz1|wlE)I4s{0WrYb2OGqGKC!u0rN&hbWZ$mA`;16lhcO z{YeakMf6QhumEs;hO3b&!46Qu%bXg#evP>@x=k*u?SXOLX&=Y5*@TIl5^45e&lk zTL}ScuBgX?t= z089Kw8}|k>u{C)N0Ea!vVu0{6!%5#;s0Kt;?6B+**O;?&l&CBtok%CQxlQw4>ZiS3 z?<|3->t)OB6a8A0Z4?+n&^V$%?Nc9;K370+nf~n6+DF>EpoL4!b-5UpgE^YG-6!7y5Opf(a zsS&tu^z2}12HEgU-QKD#H9Qc93UJ=k!;JcSBo=G*JQXnAC4a9jll%Y1j4*4)eQdxa z6>asLp^}=}5zF(%L z$tgKvgv5n-FxVf@;D>CVH<1zu4NuF&zyV4 z#J;pmU}%_qo)-LL-WGM4X`_IxSTKi|WH}azDPKQU>9K6x(RSIq;OYrAfIl=9W}GUM zGJBPBRvo|E+44^`gndtyuBTFDC=zw__7LOSNNkW|<49#3h&`z!-iSV3g>q!#8H~Od zk~QIbh~VwK`eU)GroXGTyj~EQc0IK<3-ikdr}X_{h8g{go19L171t8ubQy}YtaD7a z->v3q3l%EN^Taft+k|?VP}b;bg5_vUz>3AWekE@BYdQKk^ADhPL4Y5(4k*S(K7SdMEe}k?jxOtXpfTSW1qHWA5)pHG+Oy5m z7+PmGCGuLwnJo6WNDw9M;u3PgogaE%6*mIWvWn6mfKP5W4$x=m7hP^YggA+pGCcTw zMQ;2-Z|0=|p_ZxVwFiRLT~eOl9n4E8Wc=2BDBRQ=Ms5+qIe7X(ZDc;XQ6!(B7*M8z zmNED*@GrYjiraEnb6T^P+?n_n88IKF0rLwF=wHo)oj185vy7!4e1mAIb!d8Zg&}Go z8Ca-h2fMdIi<-k1pTq+VR_280MEetRy|@t^g&SRh9b&{ioyWf|)wpo9{;k zTh-*#DnzLs2n zi7KsW#S79vwoLf>vALASY^v{gEd4%BhMc8=vR^jUBZ$~%l1zE~*B6WOndnlJd4>n` zlAABU1@0gfYff>pK>ltCyvWY6{O0mL!WgR4!mZ$fA4-B55Sk>&oV2IUR3@3&;z?qA zS3~(lpKoVHAM_#an6k^&&h+juJrfg;ic! zu)=`^mb2jw&9?>^-PonQiKW(-rs8+>U(lQvJ6&#o-r_>k_1fu4Qgfvr5Iv(7z=nml zS-pNx`UpeNlfqt4>jgr0zeHABx_oGI)J3^GWdMzWwPrL(tiaOaxk>V(b4P*JD` z>vSQf9&epcAFw$WC&Nk9S*h3^pxu;5C3YBxko21A9nO_J_;DJGNk$ch z6_-n&SvpEI>rjt#aN1???ENNc!9NDbKGHBs>YQ{ww;=9MrHZ*?VCN+8w#uIXxGPY7 z;+*4b9Y=Tl#XCRL(wsrsP+Jyx5k3$JsoC0tdV%Y3!4{EzgIXN5Kmi2ngdoAiXBp1T zUxuP5!^JU)jl^)$UpItS7&O@81mrM?rcIrveQIJ(0yqv3<3QJiDuTUF@ujiX1l>bN z<@V}f++gs7Mf%k;jO<)^!I1|9DGMMfxY)17ak)MPUky|AsT@JtGEbg`_%41x=m=By zrry)3sv&h{P|=0aSX_caKiS1a?!koYNwr0)nNiy1BeC`Ne-g_??xz>-c-%gSrw-mS zhG}E*zLvv6z>#+FNm%)Y=i&p1JwQta4b$PafiZA*9dah#ZbX4w!QuNJLqv!x==;+m{AJK0 z6)zRbdkVb%!iBtwDM^;3Um6?nNv8kGFI5hC)g1W1&G*b@_+kJ%%G$BEWVlu+@2N5B z$za${%*nl$h+^EI%L)A;<5h9GNDdufXw!vx%z@!sRnw=-OQYmOzlxM<(_Q zB5^M+r%XfMQgq#iV08CW6xFQQJka-6+;*KF6)m$%FS*LA8iC zt`ss=jCQ0E148+XFf(c)n3*B`k`Y~YjG8P^Ee5a-Y}9U+gS`?^tvvM3JLD%(o4#ON zQUprl1TdJCv`#p#yAI$t_U#TO*^nKGG~%gcqvxT@DdJN3t7Nfsq733SyYiC{tDJSE zql{4@YwY+18;GectB40k2~YLJAAu9#**vIWg%GkG!YbuDSZoLAsu8EQ^eZO0P(rz2 zOfEwNwTc!!iO!uL$qpHz2$0hfCb#ytOKhPn1@=j?O?*BAHqg+^@mA*$?JfAo5$)nO z2=JroTq^jlC_w?AQzEp7G{k}886*8h+aI79YKbb@Y+igP;CJDN8Xhs z8&LmD&34CJ-ltwxRCOl_xrOpjTD_=KP$TL0Mw-}9%__AkeV0ARyrv*l?kv7@zg9hI zfOiXqY89Z9nf-`Zk3C2gkg}5bLyq3dXk^G}Q16mWYjd%qUl*Pz%@9_#lS$nxuA(z2 zfa7hOR@t=&I<+`lWJz|AJ`)sC(#UG3pMO`2__4OgZFScYh4eG=i_ma8^cfVncMNG5 z3WFf9gD&kIbZUiURS1%<$jQA@?8oqpc3_@H@_K!dJNJ@%1jsu-XV4dNmRK6)*`3Z% zw;v|<1N3&WVOnX!B#O5+?dcZ&;}&De*89!®xNMhF6lO5aic^>WEU{A$yY!|uMf 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 z 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